差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

deassign  [2018/09/14 09:17] (当前版本)
group001 创建
行 1: 行 1:
 +assign过程连续赋值的使用规则如下。 
 +  - 对变量的assign过程连续赋值优先于(override)所有的其他过程赋值。 
 +  - deassign过程语句用于终止对此变量的assign过程连续赋值。 
 +  - 对变量做assign过程连续赋值时,变量的值就保持不变,直到通过过程赋值或过程连续赋值对这个变量赋一个新值。 
 +例子:assign和deassign可以用来模拟D触发器的异步复位/​置位(clear/​preset)。 
 +<code verilog>​ 
 +module dff (q, d, claer, preset, clock); 
 +  output q; 
 +  input d, clear, preset, clock; 
 +  reg q; 
 +  always @(clear or preset) 
 +   if (!clear) ​     assign q = 0; 
 +   else if (!preset)assign q = 1; 
 +   ​else ​           deassign q; 
 +    
 +  always @(posedge clock) q = d; 
 +endmodule 
 +</​code>​ 
 +如果clear或preset为0,那么输出q就保持为常数0或1(使用assign),posedge clock对q没有任何影响。当clear和preset都为1时,那么就取消assign过程连续赋值(使用deassign),然后posedge clock对q就有影响。\\  
 +assign相当于连线,一般是将一个变量的值不间断地赋值给另一个变量,就像把这两个变量连在一起,所以习惯性的当做连线用,比如把一个模块的输出给另一个模块当输入。\\ 
 +assign的功能属于组合逻辑的范畴,应用范围可概括为以下三点: 
 +  - 持续赋值; 
 +  - 连线; 
 +  - 对wire型变量赋值,wire是线网,相当于实际的连接线,如果要用assign直接连接,就用wire型变量。wire型变量的值随时变化。其实以上三点是相通的。 
 +要更好的把握assign的使用,Verilog中有几个要点需要深入理解和掌握: 
 +  - 在Verilog module中的所有过程块(如initial块和always块)、连续赋值语句(如assign语句)和实例引用都是并行的。在同一module中这三者出现的先后顺序没有关系。 
 +  - 只有连续赋值语句assign和实例引用语句可以独立于过程块而存在于module的功能定义部分。 
 +  - 连续赋值assign语句独立于过程块,所以不能在always过程块中使用assign语句。