Verilog篇(三)模擬原理

來源:互聯網
上載者:User

標籤:

首先引入一個例子:

`timescale  1ns/100ps

module   TB;                                                                                       module  INV_DFF(Clock, Reset_n, DataIn, DataOut);

reg Ck, Rst_n, Din;                                                                                  input Clock; 

wire Dout;                                                                                               input Reset_n;

//Clock  generation                                                                                  input DataIn;

initial   begin                                                                                           output reg Data_Out

               Ck = 0;                                                                                   wire DataInv; 

               forever   #10 Ck = ~Ck;                                                           always @(posedge Clock or negedge Reset_n)

           end                                                                                                           begin if(~Reset_n)

//Reset  generation                                                                                                            Data_Out <= 1‘b0;

initial   begin                                                                                                                  else Data_Out <= Data_Inv;

               Rst_n = 1;                                                                                             end

               #5 Rst_n = 0;                                                                          assign #3 DataInv = ~ DataIn;

               #55 Rst = 1;                                                                        endmodule

           end

//Data input generation

initial   begin

               Din = 0;

               #80 Din = 1;

               #40 Din = 0;

           end

INV_DFF     u_INV_DFF(                 //DUV

                      .Clock(Ck),

                      .Reset_n(Rst_n),

                      .DataIn(Din),

                      .DataOut(Dout),

                                 );

0模擬時刻:3個initial進程和1個DUV同時執行。同時執行的進程其順序不是固定的,和所用的模擬器有關,假設此處的同時執行,按代碼中的順序來執行。

                執行Clock Generation 中的語句Ck = 0; ~Ck。 執行forever #10 進程掛起。

                執行Reset Generation 中的語句Rst_n = 1; #5 進程掛起。

                執行Data Input Generation中的語句Din = 0; #80 進程掛起。

                執行DUV中的語句~DataIn; #3進程掛起。always @進程掛起。 至此0模擬時刻的語句全部執行完畢,模擬時間軸向前推進。

3模擬時刻:只有一個計算事件 DataInv = #3 ~DataIn;更新DataInv的值。無觸發更多計算事件,所以模擬時間軸向前推進。

5模擬時刻:執行Reset Generation 中的語句 Rst_n = 0; #55 進程掛起。

                由於Rst_n的更新時間,DUV中的always @進程執行,DataOut值更新。無觸發更多計算事件,模擬時間軸向前推進。

10模擬時刻: 執行Clock Gneration 中的計算事件CK。更新事件觸發。#10進程掛起。

                   執行DUV中的always進程,計算事件Data_Out = 0。無觸發更多事件,模擬時間軸向前推進。

60模擬時刻: 執行Clock Gneration 中的計算事件CK。更新事件觸發。#10進程掛起。

                   執行Reset Generation 中的語句 Rst_n = 1; 進程結束。

                   執行DUV中的always進程,計算事件Data_Out = 1(Rst_n的值已經為1)。無觸發更多事件,模擬時間軸向前推進。

80模擬時刻: 執行Clock Gneration 中的計算事件CK。更新事件觸發。#10進程掛起。

                   執行Data Input Generation中的語句Din = 1; #40 進程掛起。

                   執行DUV中的always進程,計算事件Data_Out = Data_Inv。

                   執行DUV中的語句~DataIn; #3進程掛起。always @進程掛起。 至此0模擬時刻的語句全部執行完畢,模擬時間軸向前推進。

 

模擬時間:是模擬時間維護的時間值,用來對模擬電路的真即時間進行建模(模擬時間和軟體的執行時間沒有任何聯絡),當模擬時間推進到某一個時間點時,該時間點就被稱為當前模擬時間,而以後的任何時間都被稱為將來模擬時間。

 

事件:模型中數值的變化,功能模擬是一種事件驅動的模擬,整個模擬過程都是圍繞事件來組織的。

更新事件:在被模擬的電路中,線網或寄存器的值在任何進程中的任何改變都被認為是一個更新事件。

計算事件:由於更新事件產生的,進程的計算,計算事件。

計算事件和更新事件之間迴圈往複的互相觸發,推動模擬時間的前進。

 

進程是Verilog中的獨立執行單元,包括:原語(Primitives), 模組(Moules), initial過程塊, always過程塊, 連續指派陳述式(assign), 非同步任務(task)。在模擬時,所有的進程都是模擬器按Verilog的語義來順序執行的,效果是各個進程並存執行的效果,在未執行完當前所有的進程時,模擬時間不會向前推進。

initial   begin

                Ck = 0;  forever Ck = ~Ck;

           end

例子會hang在模擬時刻0,因為更新時間一直觸發計算事件,計算事件一直觸發更新時間。

 

Verilog中的時序控制:事件語句(@),延時語句(#),等待語句(wait)。

Verilog模擬時的不確定性:在同一個模擬時間內,幾個同一調度模組中事件執行順序的任意性,進程之間語句的任意交織。

 

Verilog的事件調度:

 

注意:1,阻塞賦值和非阻塞賦值同處一個優先順序,執行順序隨機或隨模擬器。2,系統任務處於最低優先順序,在該時刻的最後執行。

Verilog篇(三)模擬原理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.