<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        關于verilog阻塞賦值與非阻塞賦值的一些淺見

        作者:未知   來源:傲嬌的放牛娃   點擊數:  更新時間:2014年06月08日   【字體:

        最近學到了關于verilog的阻塞賦值與非阻塞賦值的一些區別,經過網上查閱與仿真實驗,有了一些理解。希望能夠記下來。

         

        說到verilog的阻塞與非阻塞賦值,不得不說的就是verilog的事件表,如下:

        阻塞賦值,屬于活躍事件,計算完RHS(Right Hand Side)立即更新左值。期間同一塊內其他語句不能執行,即阻塞其他語句執行。

        而非阻塞右值計算屬于活躍事件,非阻塞左值更新屬于非活躍事件,即計算完RHS,不能立即更新左值,而要等所有活躍事件完成,才能完成左值更新,出事件隊列。


        然后說說$display$strobe

        顯示任務($display)在執行到該語句時立即執行顯示

        選通任務($strobe)要推遲到事件列表當前時階結束時進行。

         

        $strobe
        當該時刻的所有事件處理完后,在這個時間步的結尾打印一行格式化的文本,
        規則
        這些系統任務的變量的語法幾乎和$display 任務一樣

        但是$strobe 被調用時,在該塊中所有活動都完成了,$strobe 才打印文本,這包括所有阻塞性和非阻塞性賦值的作用

        提示
        在寫仿真結果時請盡量使用$strobe 少用$display $write
        舉例
        initial
        begin
        x = 1'b0;
        $display("x1=%d",x);        
        $strobe("x2=%d",x);           
        x = 1'b1;                   

        end

        最后顯示 x1=0;x2=1;


        (1)

        (若無延時,計算完所有RHS,同步更新到RLS,加了延時,

        并且此時延時在最前邊,表示計算右值與賦值都被延時)

        #50延時,clk上升沿,

        #100延時,RHS_a ->a

        #50 RHS_b -> b 

        #50 RHS_c ,$display, RHS_c -> c;


        打印結果:

         

        波形結果:

         

        (2)

        (此時延時,指的是輸入與輸出間的延時)

        #50延時,clk上升沿RHS_a,RHS_b,RHS_c, $display

        #50延時,RHS_b->b,RHS_c->c

         

        #50延時,(另一個clk上升沿)$display  RHS_a->a


        打印結果:

         

        波形結果:

         

        (3)

        #50延時,clk上升沿

        #100延時,RHS_a->a

        #50延時,RHS_b->b

        #50延時,RHS_c->c,$display


        打印結果:

         

        波形結果:

         

        (4)

        #50 lk上升沿

        RHS_a  #100延時  RHS_a->a

        RHS_b  #50延時  RHS_b->b

        RHS_c  #50延時  RHS_c->c,$display


        打印結果:

         

        波形結果:

         

        因此,將begin-end改為fork-join,系統運行結果如下;


        (1)

        打印結果:

         

        波形結果:


        (2)

        打印結果:


        波形結果:

         

        (3)

        打印結果:


        波形結果:

         

        (4)

        打印結果:


        波形結果:

         

        其實$display的執行時間與仿真器有關,硬件上,$display的運行時間與并行的程序的相對時間是不確定的,而仿真器則設置了固定的開始時間。


        本文只是個人的一點薄見,希望能夠拋磚引玉,愿各位高手不吝賜教。轉載請說明。

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮