微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog中这段代码为什么不可综合?

verilog中这段代码为什么不可综合?

时间:10-02 整理:3721RD 点击:
always @(A or B)      case (A)
          1'b0: F = B;
          1'b1: G = B;
    endcase
为什么是不能综合或与预先设想的不一致呢?
难道要这样写?
always @(A or B)
   if(!A)
      F = B;
  else
     G = B;

很明显,两种写法都是错的,A=0时没有给G赋值,A=1时没有给F赋值,生成了latch。
always @(A or B)
   if(!A) begin
      F = B;
      G = ?
   end
  else begin
    F = ?
    G = B;
  end
第一种写法使用CASE时,也犯了同样的错误。如果你的代码风格是同一个always里只给一个变量赋值,你就很容易发现这个错误了。

2楼很正确

2樓正解
加個clock 就可以了

2楼怎么对了?综合出latch不算可综合吗?


我有说过latch是不可综合的吗?看清楚小编下面的疑问“与预先设想的不一致”。如果小编的本意就是为了综合得到latch,他就不会在这里问大家了。

是的,要符合相应的Verilog语法和对应的逻辑思维流程才可以的!


你是对的。也许小编只是想搞个组合逻辑出来,我想多啦

兄弟们, 如果把 = 或者 <= 叫“赋值”,  可以转行了

写法错了



   请问那应该叫做什么呢?


Software Coder...  当然,“assign” 被中文翻译成“赋值”,谭浩强的感脚

你想让 tool怎么综合~ mux 后边出两条线? ~写之前 想想 写出来的东西 tool能看懂吗~

因为没有时钟,所以tool没法给你补个latch;组合逻辑 还少了 else,可能综合吗?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top