而触发器状态的变化仅仅发生在时钟脉冲的上升沿或下降沿。 而触发器状态的变化仅仅发生在时钟脉冲的上升沿或下降沿。 Verilog中分别用关键词 中分别用关键词posedge(上升沿 和negedge(下降沿 进行 上升沿)和 下降沿)进行 中分别用关键词 上升沿 下降沿 说明,这就是边沿敏感事件。 说明,这就是边沿敏感事件。 如 : always @(posedge CP or negedge CR)
非阻塞型语句执行过程是: 非阻塞型语句执行过程是:首先计算语句块内部所有右边表达 的值,然后完成对左边寄存器变量的赋值操作, 的值,然后完成对左边寄存器变量的赋值操作,这些操作是并 行执行的。 行执行的。 begin B<=A; C<=B+1; end 阻塞型赋值语句和非阻塞型赋值语句的主要区别是完成赋值操 作的时间不同,前者的赋值操作是立即执行的, 作的时间不同,前者的赋值操作是立即执行的,即执行后一名 前一名的赋值已经完成; 时,前一名的赋值已经完成;而后者的赋值操作要到顺序块内 部的多条非阻塞型赋值语句运算结束时, 部的多条非阻塞型赋值语句运算结束时,才同时并行完成赋值 操作,一旦赋值操作完成,语句块的执行也就结束了。 操作,一旦赋值操作完 flip-flop module DFF(Q, D, CP); output Q; input D, CP; reg Q; //define register variable always @(posedge CP) Q<=D; endmodule
// D flip-flop with asynchronous set and reset module async_set_rst_DFF(Q, QN,D, CP, Sd, Rd ); output Q, QN; input D, CP, Sd, Rd ; reg Q, QN; //define register variable always @(posedge CP or negedge Sd or negedge Rd) if (~Sd||~Rd) if (~Sd ) begin Q<=1’b1; QN <=1’b0; end else begin Q<=1’b0; QN <=1’b1; end else begin Q<=D; QN <=~D; end endmodule