總結Verilog中always語句的使用


always語句包括的所有行為語句構成了一個always語句塊。該always語句塊從仿真0時刻開始執行其中的行為語句;最后一條執行完成后,再開始執行其中的第一條語句,如此往復循環,直到整個仿真結束。因此,always語句塊常用於對數字電路中一組反復執行的活動進行建模。比如大家熟知的時間信號發生,每半個時鍾周期時鍾信號翻轉一次。

 
module clock(output reg clock)  
//在零時刻把clock變量初始化  
initial  
    clock = 1'b0;  
//每半個周期把clock信號翻轉一次  
always  
     #10 clock=~clock;  
initial   
     #1000 $finish;//1000個時間單位后,停止仿真  
  
endmodule 

warning:在這個例子中,clock是在initial語句中被初始化的,如果放在always語句中,always每次執行都將初始化clock!(而不是只執行一次)所以,從C語言的角度看,always像一個無限循環語句

 

看下面一個例子:

always @(posedge clock)  
begin  
  ......
end

這就是條件循環語句了。

 

下面是今天做個一個小例子,4-2線編碼器:

module enc4to2 (  
   
  input [3:0] a,  
   output [1:0] y  
);  
   assign y[1] = ~a[1] & ~a[0];  
   assign y[0] = ~a[2] & ~a[0];  
  
endmodule  

 

給出激勵文件:

`timescale 100ns/1ns  
module testbench  ;   
   
  wire  [1:0]  y   ;   
  reg  [3:0]  a   ;   
  enc4to2    
   DUT  (   
       .y (y ) ,  
      .a (a ) );   
  
     initial  
     begin  
        a[0]=0;  
        a[1]=0;  
        a[2]=0;  
        a[3]=1;     
      end  
        always #2    
          begin  
        a[0]=~a[0];  
      end  
        always #4   
          begin  
        a[1]=~a[1];  
        end  
          always #6    
          begin  
        a[2]=~a[2];  
        end  
          always #8   
          begin  
        a[3]=~a[3];   
      end  
  
endmodule  

 

激勵文件是用modesim自動生成的,自己寫個initial之類就好

 

轉自:總結Verilog中always語句的使用

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM