Verilog仿真時鍾


一、變量初始化

變量初始化的基本原則為:可綜合代碼中完成內部變量的初始化,Testbench中完成可綜合代碼所需的各類接口信號的初始化。

初始化的方法有兩種:一種是通過initial語句塊初始化;另一種是在定義時直接初始化。

當initial語句塊中有多條語句時,需要用begin…end或者fork…join語句。

直接初始化,如:reg [7:0] cnt = 8'b00000000;

二、時鍾信號的產生

1、普通時鍾信號:

a. 基於initial語句的方法:

  1. parameter clk_period = 10;  
  2. reg clk;  
  3. initial begin  
  4.     clk = 0;  
  5.     forever  
  6.         #(clk_period/2) clk = ~clk;  
  7. end  

b. 基於always語句的方法:

  1. parameter clk_period = 10;  
  2. reg clk;  
  3. initial  
  4.     clk = 0;  
  5. always #(clk_period/2) clk = ~clk;  

2、自定義占空比的時鍾信號:

  1. parameter High_time = 5,Low_time = 20;  
  2. // 占空比為High_time/(High_time+Low_time)  
  3. reg clk;  
  4. always begin  
  5.     clk = 1;  
  6.     #High_time;  
  7.     clk = 0;  
  8.     #Low_time;  
  9. end  

3、相位偏移的時鍾信號:

  1. parameter High_time = 5,Low_time = 20,pshift_time = 2;  
  2. // 相位偏移為360*pshift_time/(High_time+Low_time)  
  3. reg clk_a;  
  4. wire clk_b;  
  5. always begin  
  6.     clk_a = 1;  
  7.     #High_time;  
  8.     clk_a = 0;  
  9.     #Low_time;  
  10. end  
  11. assign #pshift_time clk_b = clk_a;  

4、固定數目的時鍾信號:

  1. parameter clk_cnt = 5, clk_period = 2;  
  2. reg clk;  
  3. initial begin  
  4.     clk = 0;  
  5.     repeat(clk_cnt)  
  6.         #(clk_period/2) clk = ~clk;  
  7. end  

三、復位信號的產生

1、異步復位信號:

  1. parameter rst_repiod = 100;  
  2. reg rst_n;  
  3. initial begin  
  4.     rst_n = 0;  
  5.     #rst_repiod;  
  6.     rst_n = 1;  
  7. end  

2、同步復位信號:

  1. parameter rst_repiod = 100;  
  2. reg rst_n;  
  3. initial begin  
  4.     rst_n = 1;  
  5.     @(posedge clk)  
  6.     rst_n = 0;  
  7.     #rst_repiod;  
  8.     rst_n = 1;  
  9. end 


免責聲明!

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



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