|
本帖最后由 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
复制代码 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|