版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、module serial(clk,rst,rxd,txd,en,seg_data,key_input,lowbit);input clk,rst;input rxd;/ 串行数据接收端 input key_input;/ 按键输入output 7:0en;output7:0 seg_data;reg7:0 seg_data;output txd;/串行数据发送端output lowbit;/inner reg/reg15:0 div_reg;/ 分频计数器,分频值由波特率决定。分频后得到频率 8 倍波特率的时 钟reg2:0div8_tras_reg;/该寄存器的计数值对应发送时当前位于的时
2、隙数reg2:0div8_rec_reg;/ 该寄存器的计数值对应接收时当前位于的时隙数reg3:0 state_tras;/发送状态寄存器reg3:0 state_rec;/接受状态寄存器reg clkbaud_tras;/以波特率为频率的发送使能信号reg clkbaud_rec;/以波特率为频率的接受使能信号reg clkbaud8x;/ 以 8 倍波特率为频率的时钟, 它的作用是将发送或接受一个 bit 的时钟周期分为 8 个时隙reg recstart;/开始发送标志reg recstart_tmp;reg trasstart;/ 开始接受标志reg rxd_reg1;/ 接收寄存器
3、 1reg rxd_reg2;/ 接收寄存器 2,因为接收数据为异步信号,故用两级缓存reg txd_reg;/ 发送寄存器reg7:0 rxd_buf;/接受数据缓存reg7:0 txd_buf;/发送数据缓存reg2:0 send_state;/每次按键给PC发送Welcome字符串,这是发送状态寄存器reg19:0 cnt_delay;/延时去抖计数器reg start_delaycnt;/开始延时计数标志reg key_entry1,key_entry2;/确定有键按下标志/parameter div_par=16h104;/ 分频参数,其值由对应的波特率计算而得,按此参数分频的 时钟
4、频率是波倍特率的 8/ 倍,此处值对应 9600 的波特率,即分频出的时钟频率是9600*8/assign txd=txd_reg;assign lowbit=0;assign en=8b11111110;/7 段数码管使能信号赋值always(posedge clk )beginif(!rst) begincnt_delay=0;start_delaycnt=0;endelse if(start_delaycnt) begin if(cnt_delay!=20d800000) begincnt_delay=cnt_delay+1;endelse begin cnt_delay=0; star
5、t_delaycnt=0; endendelse beginif(!key_input&cnt_delay=0)start_delaycnt=1;endalways(posedge clk)beginif(!rst) key_entry1=0;else begin if(key_entry2) key_entry1=0;else if(cnt_delay=20d800000) begin if(!key_input)key_entry1=1;endendendalways(posedge clk )beginif(!rst)div_reg=0;else begin if(div_reg=div
6、_par-1) div_reg=0;else div_reg=div_reg+1;endendalways(posedge clk)/ 分频得到 8 倍波特率的时钟beginif(!rst) clkbaud8x=0;else if(div_reg=div_par-1)clkbaud8x=clkbaud8x;endalways(posedge clkbaud8x or negedge rst)beginif(!rst)div8_rec_reg=0;else if(recstart)/接收开始标志div8_rec_reg=div8_rec_reg+1;/ 接收开始后,时隙数在 8 倍 波特率的时钟
7、下加 1 循环endalways(posedge clkbaud8x or negedge rst)beginif(!rst)div8_tras_reg=0;else if(trasstart)div8_tras_reg=div8_tras_reg+1;/ 发送开始后,时隙数在 8倍波特率的时钟下加 1 循环endalways(div8_rec_reg)beginif(div8_rec_reg=7)clkbaud_rec=1;/ 在第 7 个时隙, 接收使能信号有效, 将数据打 入 elseclkbaud_rec=0;endalways(div8_tras_reg)beginif(div8_t
8、ras_reg=7)clkbaud_tras=1;/ 在第 7 个时隙,发送使能信号有效,将数据 发出elseclkbaud_tras=0;always(posedge clkbaud8x or negedge rst)beginif(!rst) begintxd_reg=1;trasstart=0;txd_buf=0;state_tras=0;send_state=0;key_entry2=0;endelse beginif(!key_entry2) beginif(key_entry1) beginkey_entry2=1;txd_buf=8d119; /wendendelse begin
9、case(state_tras)4b0000: begin / 发送起始位if(!trasstart&send_state7)trassta rt=1;else if(send_state7) beginif(clkb aud_tras) begintxd_reg=0;state_tras=state_tras+1;end end else beginkey_entry2=0;ras=0;begin=txd_buf0;6:0=txd_buf7:1;ras=state_tras+1;begin=txd_buf0;6:0=txd_buf7:1;ras=state_tras+1;begin=txd_
10、buf0;6:0=txd_buf7:1;state_tendend4b0001: begin /发送第 1 位if(clkbaud_tras)txd_regtxd_bufstate_t endend4b0010: begin /发送第 2 位if(clkbaud_tras)txd_regtxd_bufstate_t endend4b0011: begin /发送第 3 位if(clkbaud_tras)txd_reg txd_bufstate_tras=state_tras+1;begin=txd_buf0;6:0=txd_buf7:1;ras=state_tras+1;begin=txd_b
11、uf0;6:0=txd_buf7:1;ras=state_tras+1;begin=txd_buf0;6:0=txd_buf7:1;end end 4b0100: begin /发送第 4 位if(clkbaud_tras)txd_regtxd_bufstate_tendend4b0101: begin /发送第 5 位if(clkbaud_tras)txd_regtxd_bufstate_tendend4b0110: begin /发送第 6 位if(clkbaud_tras)txd_regtxd_bufstate_tras=state_tras+1;endend4b0111: begin
12、/发送第 7 位begin=txd_buf0;6:0=txd_buf7:1;ras=state_tras+1;begin=txd_buf0;6:0=txd_buf7:1;ras=state_tras+1;begin=1;=8h55;ras=state_tras+1;if(clkbaud_tras)txd_regtxd_buf state_t endend4b1000: begin / 发送第 8 位if(clkbaud_tras)txd_regtxd_buf state_t endend4b1001: begin / 发送停止位if(clkbaud_tras)txd_regtxd_buf st
13、ate_t endend4b1111:beginif(clkbaud_tras)beginstate_tras=state_tras+1;send_state=send_state+1;trasstart=0;case(send_state)3b000:txd_buf=8d101;/e3b001:txd_buf=8d108;/l3b010:txd_buf=8d99;/c3b011:txd_buf=8d111;/o3b100:txd_buf=8d109;/m3b101:txd_buf=8d101;/e default:txd_buf=0;endcaseendenddefault: beginif
14、(clkbaud_tras)beginstate_t ras=state_tras+1;trassta rt=1;end end endcase endendendalways(posedge clkbaud8x or negedge rst)接受 PC机的数据beginif(!rst) begin rxd_reg1=0; rxd_reg2=0; rxd_buf=0;state_rec=0;recstart=0;recstart_tmp=0;endelse begin rxd_reg1=rxd; rxd_reg2=rxd_reg1;if(state_rec=0) begin if(recstart_tmp=1) begin recstart=1; recstart_tmp=0;检测到state_rec=state_rec+1; end else if(!rxd_reg1&rxd_reg2) / 起始位的下降沿,进入接受状态recstart_tmp=1&state_rec=8) begin if(clkbaud_rec) begin rxd_buf7=rxd_reg2; rxd_buf6:0=rxd_buf7:1;state_rec=state_rec+1; end end else if(state_rec=9) begin if(clkbaud_r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车辆销售合同范本(15篇)
- 车辆维修、保养服务方案
- 附件1 团体标准申请书
- 广告策划考试题库及答案
- 小学生酒店考试题及答案
- 学校心理健康教育服务工作制度
- 2025年临床执业医师《内科》测试
- 药物相互作用试题及答案
- 医疗机构廉洁从业行动计划培训试题及答案
- 普惠金融大学试题及答案
- 2026年中学新团员入团测试题及答案
- (一模)东北三省三校2026年高三第一次联合模拟考试语文试卷(含答案详解)
- 2026河南郑州建设集团所属公司社会招聘工作人员44名笔试备考题库及答案解析
- 2026辽宁大连理工大学后勤处自聘管理岗位招聘2人笔试备考题库及答案解析
- 2026年吉安职业技术学院单招综合素质考试题库含答案详解
- 2026年春五年级下册数学教学计划(附教学进度表)
- 薄抹灰施工方案
- 2025年青岛农商银行春招笔试及答案
- 绍兴2025年浙江绍兴市政务服务办公室招聘政务服务专员6人笔试历年参考题库附带答案详解
- 雨课堂学堂在线学堂云《船》单元测试考核答案
- 大学生创新创业基础(创新创业课程)完整全套教学课件
评论
0/150
提交评论