久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    3.4 UART串口仿真實例

     NQ的圖書館 2017-04-28

    3.4   UART串口仿真實例

    下面將對串口的RTL設計進行仿真測試。在前面的例子中,可以看出仿真的行為主要在testbench文件中定義。下面我們將為串口收發模塊rxtx.v寫一個testbench文件。如下所示:

    1. `timescale 1 ns/1 ns  
    2. module tb;  
    3.  
    4. reg clk = 1'b0;  
    5. always clk = #20 ~clk;  
    6.  
    7. reg rst = 1'b1;  
    8. initial #40 rst = 1'b0;  
    9.  
    10. reg RxD = 1'b1;  
    11. reg tx_vld = 1'b0;  
    12. reg [7:0] tx_data = 8'h0;  
    13.  
    14. wire  rx_vld ;  
    15. wire [7:0] rx_data ;  
    16. wire TxD;  
    17. wire txrdy;  
    18.  
    19.  rxtx u_rxtx (  
    20.                       .clk         (         clk             ),  
    21.                       .rst         (         rst             ),  
    22.                       .rx          (         RxD             ),  
    23.                       .tx_vld      (         tx_vld          ),  
    24.                       .tx_data     (         tx_data         ),  
    25.               
    26.                       .rx_vld      (         rx_vld          ),  
    27.                       .rx_data     (         rx_data         ),  
    28.                       .tx          (         TxD             ),  
    29.                       .txrdy       (         txrdy           )  
    30.                       ); 

    在這里,我們采用同樣的方式例化rxtx。將rxtx的3個輸入信號RxD、tx_vld、tx_data定義為reg類型,并賦給初值。而對輸出rx_vld、rx_data、TxD、txrdy采用wire類型,表示把輸出信號引出來,共testbench使用。

    接下來,定義一個task以傳送串行數據給RxD。task是在Verilog描述testbench經常用到的一種手段。它和function不同,它不需要返回數據。通過定義一個輸入input [7:0] b; 可以讓調用這個task時,賦給一個變量到b。然后RxD在發送串行數據時,采用b作為發送字節。這個task按照串口的格式把字節b送給RxD。它的周期是:104 167 ns(1/9600秒)。

    1. task rx_send;  
    2. input [7:0] b;  
    3. integer i;  
    4. begin  
    5.     RxD = 1'b0;  
    6.      for (i=0;i<8;ii=i+1)  
    7.         #104167 RxD = b[i];  
    8.      #104167 RxD = ^b;  
    9.     #104167 RxD = 1'b1;  
    10.     #104167 RxD = 1'b1;   
    11. end  
    12. endtask 

    在這里,外面定義的reg類型RxD可以通過task內部直接調用,于是我們通過這個rx_send的task,可以把一個字節通過RxD串行發送出去。

    另外一個task是采用同樣的方式給tx_vld和tx_data賦值。觸發rxtx模塊發送數據。在最開始,它必須等待txrdy為高電平。然后為tx_vld賦值一個周期的高電平。

    1. task tx_byte;  
    2. input [7:0] b;  
    3. begin  
    4.     while (~txrdy)  
    5.         @(posedge clk);  
    6.      @(posedge clk);  
    7.      #3 tx_vld = 1'b1;  
    8.         tx_data = b;  
    9.      @(posedge clk);  
    10.      #3 tx_vld = 1'b0;  
    11.         tx_data = 8'b0;  
    12. end  
    13. endtask  

    前面這兩個task是用來給rxtx產生激勵的。那么還需要對rxtx的輸出進行檢測。對于rx_vld和rx_data的檢測如下:
    1. always @ (posedge clk )  
    2. if (rx_vld)  
    3.     $display("--A byte: %2h received...",rx_data);  
    4. else; 

    我們希望一旦rx_vld為高電平,即把接收的字節數據打印出來。 接下來,檢測TxD,確認它是否發送的是tx_data。我們通過TxD的下降沿觸發檢測流程。一旦探測到TxD的下降沿,即延時到半個周期,檢測起始0 bit是否有效。然后,對TxD傳送的數據和奇偶校驗位進行保存。在檢測完結束1 bit后,對檢測結果進行打印。
    1. integer i;  
    2. reg [7:0] rec_byte;  
    3. reg  oddeven;  
    4. always @ (negedge TxD) begin  
    5.     #52080 if (TxD!=1'b0) $display("--Start bit error.");  
    6.     for (i=0;i<8;ii=i+1)  
    7.         #104167 rec_byte[i] = TxD;  
    8.     #104167 oddeven = TxD;  
    9.     #104167 if (TxD!=1'b1) $display("--End bit error.");      
    10.     #52080 $display("--A byte : %2h transmitted...",rec_byte);  
    11.             if (oddeven!=^rec_byte) $display("--Odd even error.");  
    12. end 

    好了,如果我們再加上調用這兩個task的initial語句,則會顯示出檢測結果。
    1. initial begin  
    2. #100 tb.rx_send(8'h5a);  
    3.      tb.tx_byte(8'ha5);  
    4. #2000000 $stop;  
    5. end   
    6. 在Transcript窗口中,顯示檢測結果如下:  
    7. # --A byte: 5a received...  
    8. # --A byte: a5 transmitted... 

    【責任編輯:book TEL:(010)68476606】

    回書目   上一節   下一節

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 亚洲成人av在线高清| 国产精品成人中文字幕| 日韩av片无码一区二区不卡| XXXXXHD亚洲日本HD| 国产免费1卡2卡| 欧美野外伦姧在线观看| 国产成人AV在线免播放观看新| 色窝窝无码一区二区三区成人网站| 美女把尿囗扒开让男人添| 国产在线欧美日韩精品一区 | 亚洲AVAV天堂AV在线网阿V| 免费AV手机在线观看片| 亚洲精品日韩久久精品| 国产无套乱子伦精彩是白视频| 国产精品女视频一区二区| 四虎影视一区二区精品| 国产国拍亚洲精品永久软件| 国产精品专区第1页| gogogo高清在线观看视频中文| 久久亚洲精品中文字幕波多野结衣 | 亚洲AV中文无码乱人伦在线视色| 2019久久久高清日本道| 亚洲国产精品久久一线不卡| 国产按头口爆吞精在线视频| 丰满少妇被猛烈进入高清播放| 国内永久福利在线视频图片| 男人的天堂av社区在线| 不卡高清AV手机在线观看| 欧洲亚洲精品免费二区| 天天做天天爱天天爽综合网| 成人做受120秒试看试看视频| 亚洲AV综合色区在线观看| 精品国产AV最大网站| 福利一区二区不卡国产| 日韩夜夜高潮夜夜爽无码| 亚洲旡码欧美大片| 四虎永久免费精品视频| 无码日韩精品一区二区人妻| 国语自产拍精品香蕉在线播放| 精品不卡一区二区三区| 国产色秀视频在线播放|