




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实现功能,FPGA里实现从PC串口接收数据,接着把接收到的数据发回去。波特率可选9600bps,可调 1bit起始位,8bit数据,1bit停止位,无校验位。 参考VHDL硬件描述语言与和数字逻辑电路设计模块介绍如下一、串口数据接收模块:特别注意一个数据位占4个clk_bps_4时钟周期。串口数据接收控制当数据接收端rxd出现起始位低电平,启动接收控制计数器rx_cnt,置位为8b0111_00(28),即rx_cnt5:2= 4b0111(7),rx_cnt1:0 = 2'b00(0);一个计数周期开始,伴随clk_bps_4, rx_cnt加1(每一个数据位加4)串口接收数据移位控
2、制(关键采样点的选取)每当rx_cnt1:0 = 2'b01,为了保证在rxd一位数据靠近中间位置采样;每4个clk_bps_4, rx_cnt5:2加1当rx_cnt5:2 = 8,9,10.15,完成8位的数据采样,串并变换置位标志位rxdF数据接收标志 rxd出现起始位低电平, rxdF置1,表示数据接收开始;当rx_cnt计数到8b1111_11(63),数据接收完成, rxdF置0置位标志位rdFULL;/接收锁存器满标志空闲时rdFULL置0,当数据接收完成,数据锁存到do_latch,同时 rdFULL置1,向上层模块表示数据以准备OK,可以来读取;rd置0,表示上层模块
3、开始读取数据,rdFULL置0,表示数据已读走二、串口数据发送模块:数据发送依赖于wr(低电平有效)空闲时wr置1,数据发送时wr产生低电平脉冲,wr上升沿将数据锁存到din_latch;串口数据发送控制:wr由0跳变为1后,启动发送控制计数器tx_cnt,置位为8b0111_00(28),即tx_cnt5:2= 4b0111(7), tx_cnt1:0 = 2'b00(0);一个计数周期开始,伴随clk_bps_4, tx_cnt加1(每一个数据位加4)串口发送数据移位控制 每4个clk_bps_4, tx_cnt5:2加1当tx_cnt5:2 =7,8,9,10.15,完成一位起始
4、位,8位的数据位发送,随后txd置1(停止位),完成并串转换置位标志位txdF,tdEMPTY /发送完成标志当写数据到发送寄存器din_latch时,txdF,tdEMPTY置0; 当tx_cnt计数到8b1111_11(63),数据发送完成,txdF,tdEMPTY置1;三、串口数据自收发控制模块 当rdFULL = 1&& tdEMPTY = 1(rdFULL = 1表示数据准备OK,tdEMPTY = 1表示上次发送已完成) ,rd,wr产生低脉冲,rd置0,数据读取到DATA,wr置0使能发送数据控制,低脉冲将DATA锁存到din_latch四、波特率发生模块:针对9
5、600bps,生成4倍于波特率38.4KHz的时钟信号,用于采样代码如下:串口数据自收发控制模块module UART(clk, rst_n, rxd, txd, LED1 );input clk; /时钟周期50MHzinput rst_n; /低电平复位 input rxd; /串口引脚输入<-接收<-PCoutput txd; /串口引脚输出->发送->PCoutput reg LED1;/lED测试用/*/wire tdEMPTY;/发送寄存器空标志reg wr;/发送使能信号reg 7:0DATA;wire clk_bps_4;/4倍于波特率时钟信号reg1:
6、0 wr_cnt;/wr低电平计数reg rd;/读接收锁存器信号wire7:0 do_latch;/接收数据锁存wire rdFULL;/接收锁存器满标志reg1:0 rd_cnt;/rd低电平计数/*当rdFULL = 1&& tdEMPTY = 1(rdFULL = 1表示接收锁锁存器数据准备OK,tdEMPTY = 1表示上次发送已完成),rd,wr产生低脉冲,rd置0,do_latch数据读取到DATA,wr置0用于使能发送数据控制,低脉冲将DATA锁存到din_latch*/always(posedge clk_bps_4 or negedge rst_n)begi
7、n if(!rst_n) beginrd <= 1;wr <= 1;wr_cnt <= 0;rd_cnt <= 0;endelse beginif(rdFULL = 1)begin rd <= 0;wr <= 0;wr_cnt <= 0;rd_cnt <= 0;DATA <= do_latch;end if(rd = 0)/产生rd低电平 2个clk_bps_4周期begin rd_cnt <= rd_cnt + 1;if(rd_cnt = 3)rd <= 1;endif(wr = 0)/产生wr低电平 2个clk_bps_4周
8、期begin wr_cnt <= wr_cnt + 3;if(wr_cnt = 1)wr <= 1;endendend/*发送*/Uart_TX tx( .rst_n(rst_n), .clk_bps_4(clk_bps_4),.wr(wr),.tdEMPTY(tdEMPTY), .DATA(DATA), .txd(txd) );/output to tx_m /*接收*/ Uart_RX rx( .rst_n(rst_n), .clk_bps_4(clk_bps_4),.rd(rd), .rdFULL(rdFULL),.do_latch(do_latch), .rxd(rxd)
9、);/*针对9600bps,生成38.4KHz的时钟信号,用于接收数据采样与数据发送*/Baudrate baud(.clk(clk), .rst_n(rst_n), .clk_bps_4(clk_bps_4); Endmodule串口数据接收模块:module Uart_RX(rst_n, clk_bps_4, rd, rdFULL, do_latch, rxd);input rst_n; /低电平复位 input clk_bps_4; /4倍于波特率时钟信号即一个数据位占4个时钟周期input rd;/接收使能,低电平有效output reg7:0 do_latch;/接收数据锁存outp
10、ut reg rdFULL;/接收锁存器满标志input rxd;/串口引脚输入reg7:0 data_r = 8'bx; /接收数据寄存器reg5:0 rx_cnt;reg rxdF;/数据接收标志,RX模块内部信号/*当数据接收端rxd出现起始位低电平,启动接收控制计数器rx_cnt,置位为8b0111_00(28),即rx_cnt5:2= 4b0111(7),rx_cnt1:0 = 2'b00(0);一个计数周期开始,伴随clk_bps_4, rx_cnt加1(每一个数据位加4)*/always(posedge clk_bps_4 or negedge rst_n)beg
11、inif(!rst_n) begin rx_cnt <= 0; endelse if(rx_cnt <= 27 && rxd = 0) begin rx_cnt <= 28; end else if(rx_cnt <= 27 && rxd = 1)/串口无数据时,rx_cnt保持0 begin rx_cnt <= 0; end else begin rx_cnt <= rx_cnt + 1;endend/*空闲时rdFULL置0,当数据接收完成,数据锁存到do_latch,同时 rdFULL置1,向上层模块表示数据以准备OK,
12、可以来读取;rd置0,表示上层模块开始读取数据,rdFULL置0,表示数据已读走*/always(posedge clk_bps_4 or negedge rst_n)/置位标志位 rdFULLbegin if(!rst_n) begin rdFULL <= 0; endelse if(rd = 0) begin rdFULL <= 0; end else if(rxdF = 1 && rx_cnt = 63) begindo_latch <= data_r;/数据锁存rdFULL <= 1;/锁存器数据准备OK endend/*rxd出现起始位低电平,
13、 rxdF置1,表示数据接收开始;当rx_cnt计数到8b1111_11(63),数据接收完成, rxdF置0*/always(posedge clk_bps_4 or negedge rst_n)/置位标志位 rxdFbegin if(!rst_n)begin rxdF <= 0; end else if(rxd = 0)/拉低表示有数据来begin rxdF <= 1;end else if(rxdF = 1 && rx_cnt = 63)begin rxdF <= 0;endend/*每当rx_cnt1:0 = 2'b01,为了保证在rxd一位数
14、据靠近中间位置采样;每4个clk_bps_4, rx_cnt5:2加1当rx_cnt5:2 = 8,9,1015,完成8位的数据采样,串并变换*/always(posedge clk_bps_4)/数据接收 begin if( rx_cnt1:0 = 2'b01 )case(rx_cnt5:2) /4'd7:rxd=0;起始位4'd8:data_r0 <= rxd;/ 低第1位4'd9:data_r1 <= rxd;/ 第2位4'd10:data_r2 <= rxd;/ 第3位4'd11:data_r3 <= rxd;/
15、第4位4'd12:data_r4 <= rxd;/ 第5位4'd13:data_r5 <= rxd;/ 第6位4'd14:data_r6 <= rxd;/ 第7位4'd15:data_r7 <= rxd;/高第8位 endcaseendendmodule串口数据发送模块:module Uart_TX(rst_n, clk_bps_4,wr,tdEMPTY, DATA, txd);input rst_n; /低电平复位 input clk_bps_4; /4倍于波特率时钟信号input 7:0DATA;input wr;/发送使能信号out
16、put reg tdEMPTY;/发送寄存器空标志 对外输出output txd;/串口引脚输出reg txdF;/发送完成标志 模块内部信号reg txd_r; /发送寄存器reg7:0 din_latch;/发送数据锁存reg5:0 tx_cnt;/发送计数器/*空闲时wr置1,数据发送时wr产生低电平脉冲,wr上升沿将数据锁存到din_latch;*/always(posedge wr)begin /din_latch <= 8'hAB; din_latch <= DATA; end/*wr由0跳变为1后,启动发送控制计数器tx_cnt,置位为8b0111_00(28
17、),即tx_cnt5:2= 4b0111(7), tx_cnt1:0 = 2'b00(0);一个计数周期开始,伴随clk_bps_4, tx_cnt加1(每一个数据位加4)*/always(posedge clk_bps_4 or negedge rst_n)beginif(!rst_n) begin tx_cnt <= 0; endelse if(tx_cnt <= 27) beginif(tdEMPTY = 0 && wr = 1) begintx_cnt <= 28;endelse begin tx_cnt <= 0; endend els
18、e begin tx_cnt <= tx_cnt + 1;endend/*当写数据到发送寄存器din_latch时,txdF,tdEMPTY置0; 当tx_cnt计数到8b1111_11(63),数据发送完成,txdF,tdEMPTY置1;*/ always(posedge clk_bps_4 or negedge rst_n)begin if(!rst_n) begin txdF <= 1;tdEMPTY <= 1;endelse if(wr = 0) begintxdF <= 0;tdEMPTY <= 0;end else if(txdF = 0 &&
19、amp; tx_cnt = 63) begintxdF <= 1;tdEMPTY <= 1; end end/*每4个clk_bps_4, tx_cnt5:2加1当tx_cnt5:2 =7,8,9,1015,完成一位起始位,8位的数据位发送,随后txd置1(停止位),完成并串转换*/always(posedge clk_bps_4 or negedge rst_n)if(!rst_n) begin txd_r <= 1;endelse begincase(tx_cnt5:2)4'd7:txd_r <= 1'b0; /起始位04'd8:txd_r <= din_latch0; /低第1位4'd9:txd_r <= din_latch1; / 第2位4'd10:txd_r <= din_latch2;/ 第3位4'd11:txd_r <= din_latch3;/ 第4位4'd12:txd_r <= din_latch4;/ 第5位4'd13:txd_r <= din_latch5;/ 第6位4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 妇幼保健员考试心理辅导试题及答案
- 健康管理师绩效考核试题及答案解析
- 二零二五年度企业员工社保权益放弃合同范本
- 2025年度电子商务平台融资合作协议书
- 2025年度银行开户后客户权益保护与两件事服务合同
- 2025年度酒吧整体承包与社区关系维护合同
- 二零二五年度新能源项目合作协议解除通知期限与收益分成
- 2025年度设备拆除安全责任与保险合同
- 二零二五年度企业虚拟股权激励方案实施及管理合同
- 2025年度诚意金协议模板:新能源汽车电池研发合作预付款协议
- 《空气动力学基础》绪论课件
- 卡通插画幼儿园国防教育主题班会课程PPT实施课件
- 第一届全国中学生地球科学竞赛初赛试题试题含答案
- 图形设计A试卷
- 医院弱电智能化建设设计方案
- A4线缆标签数据模板
- 加油站电器火灾应急预案演练记录
- 隧道电缆沟整体式模板
- 仿写现代诗(课堂PPT)
- 电熔旁通鞍型
- 2022八年级下册道德与法治全册知识点梳理
评论
0/150
提交评论