Verilog篇(四)时序模型

时序模型:仿真器的时间推进模型,它反映了推进仿真时间和调度事件的方式。

1)门级时序模型:适用于分析所有的连续赋值语句,过程连续赋值语句,门级原语,用户自定义原语。

   特点:任意时刻,任意输入变化都将重新计算其输出。假设已经存在一个门级时序模型,同时该模型产生的一个事件已被调度但还未执行,如果事件的结果将导致

            一个新事件产生,仿真器会撤销对先前事件的调度,转而调度新事件。

   适用于模拟电路中的惯性延时。适用于组合逻辑建模。

   惯性延时:例如在一个与非门电路中,门延时5ns,那么任何小于这个延时值的输入变化都不会对输出产生影响。

   写法:always @(a or b)  begin  #5 sum = a + b;  end    起始时刻为T,T+5时刻再将此时刻的a+b计算赋值。(right)

           always @(a or b)  begin sum = #5 (a+b); end   起始时刻为T,T+5时刻再将T时刻a+b的值赋值给sum。

            assign #5 B = ~ A;    //B是A延时5单位后的值。更新A和B都发生在5单位后。(right)

            assign B = #5 ~ A;    //B是A延时5单位后,5单位前的值。更新A发生在刚开始,更新B发生在5单位后。

 

假设Clk时钟为200ns,则 assign #800 Clk_delay = Clk; 语句执行。 Clk_delay将一直保持未初始化的值,因为Clk的周期200ns的变化会一直刷新事件,使得#800的事件一直执行不了。

 

2)过程时序模型:适用于initial, always, 。

   特点:敏感表只是输入的一个子集。假设寄存器的一个更新事件已经被调度,如果再调度同一个寄存器的另一个更新事件,即使在同一时刻,前一个事件也不会被

            取消。

   适用于模拟电路中的传导延时。适用于时序逻辑建模。

   传导延时:金属线上的传输延时,D触发器中clk-to-Q延时。

   写法:always @(posedge clk or negedge rst_n)  begin

               if(~rst_n)     A <= 0;

               else  A <= #2B;

           end                   //B的值在延时2个单位后,将0时刻时的值赋值给A,期间B的变化不会影响A。(right)

           always @(posedge clk or negedge rst_n)  begin

               if(~rst_n)     A <= 0;

               else  #2 A <= B;

           end                   //B的值在延时2个单位后,将2时刻时的值赋值给A,期间B的变化不会影响A。

 

posted @ 2015-04-06 15:32  _9_8  阅读(2185)  评论(0编辑  收藏  举报