assign过程连续赋值的使用规则如下。
例子:assign和deassign可以用来模拟D触发器的异步复位/置位(clear/preset)。
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
如果clear或preset为0,那么输出q就保持为常数0或1(使用assign),posedge clock对q没有任何影响。当clear和preset都为1时,那么就取消assign过程连续赋值(使用deassign),然后posedge clock对q就有影响。
assign相当于连线,一般是将一个变量的值不间断地赋值给另一个变量,就像把这两个变量连在一起,所以习惯性的当做连线用,比如把一个模块的输出给另一个模块当输入。
assign的功能属于组合逻辑的范畴,应用范围可概括为以下三点:
要更好的把握assign的使用,Verilog中有几个要点需要深入理解和掌握: