(原创)uart传输发送模块联合在一起进行测试

本文介绍了一个完整的UART发送与接收模块的设计过程,并详细说明了如何使用16倍波特率采样进行数据传输测试。文中提供了模块代码及测试bench实例。

      完整uart发送与接收模块以后,为了便于测试我把发送模块连接在了一起进行测试,接收到的数据SRX_I是以16倍波特率的方式即(CLK_1)传入uart_rx,我用16倍的频率CLK_16进行采样,然后每8位data输出到到uart_tx,然后通过tuart_tx把data中的数据依次输出即STX_O,但是我们STX_O的输出是以CLK_16为时钟的这样只是为了便于简单,不用再考虑这两个module(uart_tx,uart_rx)之间不同时钟信号的同步化。在我们分开用的时候,我们的输出STX_O应该是以CLK_1

为时钟周期。

注:其实本人已经做了两个module(uart_tx,uart_rx)之间不同信号的同步化,但发觉如果这样,会增加很多代码,还有很多同步化后信号延迟的问题,所以没有给出STX_O以CLK_1的时钟形式输出,有兴趣的同学可以给我留言,我可以给出相关同步化的代码。

仿真波形如下:

模块代码如下:

ContractedBlock.gifExpandedBlockStart.gifCode
 1module uart_top(CLK_16, RST, SRX_I, STX_O);
 2    input CLK_16;
 3    input RST;
 4    input SRX_I;
 5    output STX_O;
 6    
 7    wire [7:0] data;
 8    wire ready_rx;
 9    wire ready_tx;
10    wire syn_ready;
11    wire error_bit;
12    wire overrun;
13    wire [3:0] state_tx;
14    wire [3:0] state_rx;
15//u1,u3 is for the synchronization of the clk_16 and clk_1,which need a lot of code so I omit it. 
16ExpandedBlockStart.gifContractedBlock.gif /**//*  div_clk    #(4,16)
17            u1(
18               .clk(CLK_16),
19               .rst(RST),
20               .o_clk(CLK_1)
21);*/

22     uart_rx u2(
23                .clk_16(CLK_16),
24                .rst(RST),
25                .rxd(SRX_I),
26                .dout(data),
27                .error_bit(error_bit),
28                .overrun(overrun),
29                .ready(ready_rx),
30                .busy(busy),
31                .c_state(state_rx)
32);
33ExpandedBlockStart.gifContractedBlock.gif /**//*   syn_16to1 u3(
34                 .clk_1(CLK_1),
35                 .rst(RST),
36                 .asyn_data(ready_rx),
37                 .syn_data(syn_ready)
38);*/

39     uart_tx u4(
40                .din(data),
41                .load(ready_rx),
42                .clk(CLK_16),
43                .rst(RST),
44                .txd(STX_O),
45                .ready(ready_tx),
46                .c_state(state_tx)
47);
48endmodule
49

 

testbench代码如下:

 

ContractedBlock.gifExpandedBlockStart.gifCode
 1module uart_testbench;
 2parameter p=160;
 3reg CLK_16;
 4reg RST;
 5reg SRX_I;
 6wire STX_O;
 7uart_top inst(
 8              .CLK_16(CLK_16),
 9              .RST(RST), 
10              .SRX_I(SRX_I),
11              .STX_O(STX_O)
12);
13initial
14begin
15    
16    RST=0;
17    CLK_16=1;
18    SRX_I=1;
19    #1 RST=1;
20    #1 RST=0;
21    #p SRX_I=1;
22    #p SRX_I=1;
23    //1byte
24    #p SRX_I=0;
25    #p SRX_I=0;
26    #p SRX_I=0;
27    #p SRX_I=0;
28    #p SRX_I=0;
29    #p SRX_I=1;
30    #p SRX_I=1;
31    #p SRX_I=1;
32    #p SRX_I=1;
33    #p SRX_I=1;
34    //1byte
35    #p SRX_I=0;
36    #p SRX_I=1;
37    #p SRX_I=0;
38    #p SRX_I=1;
39    #p SRX_I=0;
40    #p SRX_I=1;
41    #p SRX_I=0;
42    #p SRX_I=1;
43    #p SRX_I=0;
44    #p SRX_I=1;
45    //1byte
46    #p SRX_I=0;
47    #p SRX_I=1;
48    #p SRX_I=1;
49    #p SRX_I=1;
50    #p SRX_I=1;
51    #p SRX_I=0;
52    #p SRX_I=0;
53    #p SRX_I=0;
54    #p SRX_I=0;
55    #p SRX_I=1;
56    //1byte
57    #p SRX_I=0;
58    #p SRX_I=1;
59    #p SRX_I=1;
60    #p SRX_I=0;
61    #p SRX_I=1;
62    #p SRX_I=1;
63    #p SRX_I=0;
64    #p SRX_I=1;
65    #p SRX_I=1;
66    #p SRX_I=1;
67    //1byte
68    #p SRX_I=0;
69    #p SRX_I=1;
70    #p SRX_I=1;
71    #p SRX_I=1;
72    #p SRX_I=1;
73    #p SRX_I=1;
74    #p SRX_I=1;
75    #p SRX_I=0;
76    #p SRX_I=1;
77    #p SRX_I=1;
78    #20000 $finish; 
79end
80always #5 CLK_16=~CLK_16;
81endmodule
82

转载于:https://www.cnblogs.com/changlong/archive/2009/01/05/1369821.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值