




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
顶层文件uart_receive.v ,实现串口接收功能,里面例化四个子文件,分别是 detect.v, baud.v, rx_receive.v, odd_even_detect.v,各个模块功能如下:Detect.v功能简介:实现串行输入数据(i_rxdata)电平检测(在i_rxdata由高电平向低电平转换时产生检测脉冲o_h2l),为后面检测起始位做准备 (此文件可综合)综合软件:quartus ii 11.0 代码如下:/=/Author :wsc/Time:2013/12/02/File Name:detect.v/=module detect (i_clk,i_rst_n,i_rxdata,o_h2l);input i_clk;input i_rst_n;input i_rxdata;outputo_h2l;parameter YES=1b1;parameter NO=1b0;reg h2l_r1;regh2l_r2;always (posedge i_clk or negedge i_rst_n)if(!i_rst_n)begin h2l_r1=YES;h2l_r2=YES;endelsebegin h2l_r1=i_rxdata;h2l_r2=h2l_r1;endwire o_h2l;assign o_h2l=h2l_r2&(!h2l_r1); /*在i_rxdata由高电平向低电平换时产生检测脉冲o_h2*/endmodule Baud.v 模块简介:根据波特率,产生传输1bit所需的固定时间周期,并在合适的时间输出采样脉冲(此文件可综合)综合软件:quartus ii 11.0 代码如下:/=/Author :wsc/Time:2013/12/02/File Name:baud.v/=modulebaud(i_clk,i_rst_n,i_baud_en,o_baud_clk);inputi_clk;input i_rst_n;input i_baud_en;output o_baud_clk;parameter baud_count_data2=16d1000; /*待定,可根据实际baud,来确定计数长度*/parameter baud_count_data=16d500; /*待定,可根据实际baud,确定采样时间*/-reg 15:0 baud_count; /定义16位计数器always (posedge i_clk,negedge i_rst_n)if(!i_rst_n)baud_count=16d0;else if(baud_count=baud_count_data2)baud_count=16d0;else if(i_baud_en)baud_count=baud_count+16d1;elsebaud_count=16d0;/-wire o_baud_clk;assign o_baud_clk=(baud_count=baud_count_data)?1b1:1b0; /*采样脉冲输*/endmodule rx_receive.v 功能简介: 此模块主要有一个状态机组成,采集串口输入数据(i_rxdata),并 储存数据位与校验位到ov_rx_data_r寄存器,然后输出(此文件可综合)综合软件:quartus ii 11.0代码:/=/Author :wsc/Time:2013/12/02/File Name:rx_receive.v/=modulerx_receive(i_clk,i_rst_n,i_h2l,i_en,i_rxdata,i_baud_clk,iv_oe,/*odd_even*/o_baud_en,o_rx_done,ov_oe,ov_rx_data_r);input i_clk;input i_rst_n;inputi_h2l;input i_en;input i_rxdata;input i_baud_clk;input 1:0 iv_oe;output o_baud_en;outputo_rx_done;output 1:0 ov_oe;output 8:0 ov_rx_data_r;parameter YES=1b1;parameter NO=1b0;reg o_baud_en;rego_rx_done;reg 1:0 oe_r;reg3:0i;/*state*/reg 8:0rx_data;reg 8:0 ov_rx_data_r;reg 1:0 ov_oe;always (posedge i_clk,negedge i_rst_n)if(!i_rst_n)begino_baud_en=NO;o_rx_done=NO;i=4d0;oe_r=2d0;rx_data=9d0;ov_rx_data_r=9d0;ov_oe=2d0;endelse if(i_en)case(i)4d0: if(i_h2l=YES) /*下降沿,由Detect.提供v*/begin i=i+4d1;o_baud_en=YES;end4d1: if(i_baud_clk=YES) /*start_bit*/i=i+4d1;4d2,4d3,4d4,4d5,4d6,4d7,4d8,4d9: /*data_bit*/if(i_baud_clk=YES)begin i=i+4d1;rx_datai-4d2=i_rxdata;oe_r=iv_oe;end4d10:/*根据奇偶校验输入使能进行输出设置,00无校验,01,11奇校验,10偶校验*/ if(iv_oe=2b00) i=4d12;else if(iv_oe=2b10) /*odd*/i=4d11;else/*even*/i=4d11;4d11:if(i_baud_clk=YES) /*odd_evev_bit*/begin i=i+4d1;rx_data8=i_rxdata;end4d12: if(i_baud_clk=YES) /*end_bit*/i=i+4d1;4d13: begin /*输出done信号,为奇偶校验做准备*/o_baud_en=NO;o_rx_done=YES;i=i+4d1;ov_oe=oe_r;ov_rx_data_r=rx_data; /*储存数据到ov_rx_data_r*/end4d14: begino_baud_en=NO;o_rx_done=NO;i=4d0;enddefault :begino_baud_en=NO;o_rx_done=NO;i=4d0;oe_r=2d0;rx_data=9d0;endendcase endmodule odd_even_detect.v 简介: 奇偶校验检测模块,对收到的数据进行奇偶校验,奇偶校验出错输出为8d0,否则原数据输出 (此文件可综合)综合软件:quartus ii 11.0 代码:/=/Author :wsc/Time:2013/12/02/File Name:odd_even_detect.v/=module odd_even_detect(i_clk,i_rst_n,i_rx_receive_done,iv_rx_receive_oe,iv_rx_receive_data,o_oe_done,ov_rxdata);input i_clk;inputi_rst_n;inputi_rx_receive_done;input 1:0iv_rx_receive_oe;input8:0iv_rx_receive_data;outputo_oe_done;output7:0ov_rxdata;rego_oe_done;reg 7:0ov_rxdata;reg2:0 i;always (posedge i_clk,negedge i_rst_n)if(!i_rst_n)begin o_oe_done=1b0;ov_rxdata=8d0;i=3d0;endelse case(i)3d0:if(i_rx_receive_done=1b1) i=i+3d1;3d1:case (iv_rx_receive_oe) 2b00: begin /*无校验,原数据输出*/ov_rxdata=iv_rx_receive_data7:0;i=i+3d1; end2b10: if(iv_rx_receive_data=1b0) /*odd校验,iv_rx_receive_data缩位异或为0,则正确,原数据输出,产生done信号,否则输出为0,不产生done信号*/begin ov_rxdata=iv_rx_receive_data7:0;i=i+3d1;end elsebegin ov_rxdata=8d0;i=3d3;end2b01,2b11: /*even校验,iv_rx_receive_data缩位异或为1,则正确,原数据输出,产生done信号,否则输出为0,不产生done信号*/if(iv_rx_receive_data=1b1)begin ov_rxdata=iv_rx_receive_data7:0;i=i+3d1;endelsebegin ov_rxdata=8d0;i=3d3;enddefault :ov_rxdata=8d0;endcase3d2:begin o_oe_done=1b1;i=i+3d1; end3d3:begin o_oe_done=1b0;i=3d0; end default :i=3d0;endcase endmodule 顶层文件uart_receive.v: 顶层文件,实现串口接收功能,串行数据输入,并行输出 (此文件可综合)综合软件:quartus ii 11.0 代码:/=/Author :wsc/Time:2013/12/02/File Name:uart_receive.v/=module uart_receive(i_clk,i_rst_n,i_en,iv_oe,/*odd_even*/i_rxdata,o_done,ov_data);input i_clk;inputi_rst_n;inputi_en;input 1:0iv_oe;input i_rxdata;outputo_done;output7:0 ov_data;wire o_h2l;detect u1 (.i_clk(i_clk),.i_rst_n(i_rst_n),.i_rxdata(i_rxdata),.o_h2l(o_h2l);wire i_baud_en,o_baud_clk;baud u2(.i_clk(i_clk),.i_rst_n(i_rst_n),.i_baud_en(i_baud_en),.o_baud_clk(o_baud_clk);wire o_rx_done;wire 1:0 ov_oe;wire 8:0 ov_rx_data_r;rx_receiveu3(.i_clk(i_clk),.i_rst_n(i_rst_n),.i_h2l(o_h2l),.i_en(i_en),.i_rxdata(i_rxdata),.i_baud_clk(o_baud_clk),.iv_oe(iv_oe),/*odd_even*/.o_baud_en(i_baud_en),.o_rx_done(o_rx_done),.ov_oe(ov_oe),.ov_rx_data_r(ov_rx_data_r);odd_even_detectu4(.i_clk(i_clk),.i_rst_n(i_rst_n),.i_rx_receive_done(o_rx_done),.iv_rx_receive_oe(ov_oe),.iv_rx_receive_data(ov_rx_data_r),.o_oe_done(o_done),.ov_rxdata(ov_data);endmodule 测试文件uart_receive_tb.v简介:对uart_receive.v做简单测试,以确保uart_receive.v逻辑功 能设计无误 (此文件不可综合)仿真软件: modelsim 6.5代码:/=/Author :wsc/Time:2013/12/03/File Name:uart_receive_tb.v/=timescale 1ns/1nsmoduleuart_receive_tb;reg i_clk;regi_rst_n;regi_en;reg 1:0iv_oe;reg i_rxdata;wireo_done;wire7:0 ov_data;initialbegin i_clk=1b0;i_rst_n=1b1;i_en=1b0;#23 i_rst_n=1b0;#45 i_rst_n=1b1;endalways #10 i_clk=!i_clk;/*以上实现功能为产生时钟周期为20ns的时钟信号i_clk,及复位信号i_rst_n(低电平有效)*/initial /*产生i_rxdata数据,(由于波特率未定,暂时假设传输一位需要时间为20000ns)*/begin iv_oe=2b00; i_rxdata=1b1; #200 i_en=1b1; iv_oe=2b00; /*无校验位*/ i_rxdata=1b0; #20000 i_rxdata=1b0; /*传输数据为0011 1010*/#20000 i_rxdata=1b1;#20000 i_rxdata=1b0;#20000 i_rxdata=1b1;#20000 i_rxdata=1b1;#20000 i_rxdata=1b1;#20000 i_rxdata=1b0;#20000 i_rxdata=1b0;#20000 i_rxdata=1b1;#20000 i_en=1b0;#200 ;/- i_en=1b1; iv_oe=2b01; /*奇校验,传输数据为1100 1000*/ i_rxdata=1b0; #20000 i_rxdata=1b0;#20000 i_rxdata=1b0;#20000 i_rxdata=1b0;#20000 i_rxdata=1b1;#20000 i_rxdata=1b0;#20000 i_rxdata=1b0;#20000 i_rxdata=1b1;#20000 i_rxdata=1b1;#20000 i_rxdata=1b0;#20000 i_rxdata=1b1;#20000 i_en=1b0;#200 ;/- i_en=1b1; iv_oe=2b10; /*偶校验,传输数据为1100 1000*/ i_rxdata=1b0; #20000 i_rxdata=1b0;#20000 i_rxdata=1b0;#20000 i_rxdata=1b0;#20000 i_rxdata=1b1;#20000 i_rxdata=1b0;#20000 i_rxdata=1b0;#20000 i_rxdata=1b1;#20000 i_rxdata=1b1;#20000 i_rxdata=1b1;#20000 i_rxdata=1b1;#20000 i_en=1b0;#200 ;/-i_en=1b1; iv_oe=2b11; /*奇校验,传输数据为1100
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国华能越南公司招聘面试高频词汇与模拟题解析
- 2025年初级体育场馆管理面试指南与常见问题解答
- 2025年制香师考试高频考点梳理与模拟试题详解
- 护理课件进修汇报材料
- 2025年比特币投资项目合作计划书
- 吉林省松原市前郭县王府镇蒙古族学校、洪泉乡中学2025-2026学年上学期九年级期初考试暨第一次联考试卷 数学试卷 (含简单答案a)
- (新)高中数学高考一轮复习正弦定理和余弦定理复习课教学设计
- 抗生素的使用原则课件
- 小车考试新题及答案
- 2025年分步重复光刻机合作协议书
- 2023年考研政治真题(含答案及解析)
- 叉车考试题库模拟试题大全及答案
- 2024电工(三级)职业技能等级认定理论考试复习题库(含答案)
- 锅炉安全培训教材(大全)
- 义齿工厂开设策划方案
- (完整版)中医适宜技术课件
- 开学第一课自信与勇敢
- 《财政与金融》教学教案
- 时空大数据与云平台解决方案-
- 自媒体运营计划
- 健康照护师(初级)理论知识考核试题
评论
0/150
提交评论