fpga_feixiang 发表于 2021-1-14 10:55:51

uart仿真调试

1 `timescale 1ns/1ps//时间精度
2 `define    Clock 20 //时钟周期
3
4 module uart_top_tb;
5
6 //========================< 端口 >==========================================
7 reg                         clk               ; //时钟,50Mhz
8 reg                         rst_n               ; //复位,低电平有效
9 reg                         uart_rx             ;
10 wire                        uart_tx             ;
11
12 //==========================================================================
13 //==    模块例化
14 //==========================================================================
15 uart_top u_uart_top
16 (
17   .clk                  (clk                ),
18   .rst_n                  (rst_n            ),
19   .uart_rx                (uart_rx            ),
20   .uart_tx                (uart_tx            )
21 );
22
23 //==========================================================================
24 //==    时钟信号和复位信号
25 //==========================================================================
26 initial begin
27   clk = 1;
28   forever
29         #(`Clock/2) clk = ~clk;
30 end
31
32 initial begin
33   rst_n = 0; #(`Clock*20+1);
34   rst_n = 1;
35 end
36
37 //==========================================================================
38 //==    task任务
39 //==========================================================================
40 reg            mem         ; //位宽为8,深度为16个数据
41 integer               i                   ;
42 integer               j                   ;
43
44 //读取外部数据
45 initial $readmemh("./data.txt",mem);
46
47 //位赋值
48 task rx_bit
49 (
50   input          data
51 );
52   begin
53         for(i=0;i<=9;i=i+1) begin   //10个bit为
54             case(i)
55                  0: uart_rx = 1'b0;
56                  1: uart_rx = data;
57                  2: uart_rx = data;
58                  3: uart_rx = data;
59                  4: uart_rx = data;
60                  5: uart_rx = data;
61                  6: uart_rx = data;
62                  7: uart_rx = data;
63                  8: uart_rx = data;
64                  9: uart_rx = 1'b1;
65             endcase
66             #1040; //一个完整波特延时:52*20=1040
67         end      //考虑到空闲位,也可以设置得1040稍大一些
68   end
69 endtask
70
71 //字节赋值
72 task rx_byte;
73   begin
74         for(j=0;j<=15;j=j+1) //16个byte数据
75             rx_bit(mem);
76   end
77 endtask
78
79 //==========================================================================
80 //==    调用task
81 //==========================================================================
82 initial begin
83   #(`Clock*20+1);
84   rx_byte();
85 end
86
87 initial begin
88   #180000;
89   $stop;
90 end
91
92 endmodule

大鹏 发表于 2021-1-17 16:11:59

uart仿真调试
页: [1]
查看完整版本: uart仿真调试