本帖最后由 skyxjh 于 2013-6-6 00:37 编辑
- // 帧格式 |---------- frame ----------|
- // rxdin -------\___x=x=x=x=x=x=x=x=x=/------x===
- // idle start N_bits_data [P]stop idle/start
- // 起始位总是为低电平,数据位可变长度,校验位[P]可设置无(奇或偶)校验,结束位总是为高电平
- // 位采样 |----------- 1 bit -------------|
- // rxdin ==x===============================x==
- // | | | | | | | | | | | | | | | | | |
- // time 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1
- // sample O O O
- module uart(rst,clk,rxd,txd); //UART串口收发顶层模块
- input rst,clk,rxd; //复位,系统时钟,接收数据线
- output txd; //发送数据线
- parameter odd = 2'b01, even = 2'b10, none = 2'b00; //奇校验、偶校验、无校验
- parameter low = 1'b0, hi = 1'b1, true = low, false = hi; //常量定义
- wire txclk, rxclk, txbusy, rxbusy, txen, rxen, rdclk, dready, dovf, ferr; //发送时钟,接收时钟,发送忙,接收忙,发送使能,接收使能,读数据,数据准备好,数据被覆盖,帧错误
- wire [7:0]txdin; //并行数据
- reg [1:0]parityset = none; //校验设置
- wire [1:0]parity;
- assign parity = parityset; //奇偶校验设置
- //接收转发控制模块实例化
- controll ctrl(.rst(rst),.rxen(rxen),.dready(dready),.rdclk(rdclk),.txen(txen),.txbusy(txbusy),.rxclk(rxclk));
- //波特率设置模块实例化
- baudset #(.fsysclk(50_000_000),.baud(115_200)) baudset(.rst(rst),.sysclk(clk),.txclk(txclk),.rxclk(rxclk));
- //发送模块实例化
- transeiver tx(.rst(rst),.txclk(txclk),.txen(txen),.txdin(txdin),.parity(parity),.txdout(txd),.txbusy(txbusy));
- //接收模块实例化
- receiver rx(.rst(rst),.clk16x(rxclk),.rxen(rxen),.rxdin(rxd),.rdclk(rdclk),.parity(parity),.rxdout(txdin),.dready(dready),.dovf(dovf),.ferr(ferr),.rxbusy(rxbusy));
- endmodule
复制代码 |