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 uart仿真调试
页:
[1]