




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实现功能,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 = 2b00(0);一个计数周期开始,伴随clk_bps_4, rx_cnt加1(每一个数据位加4)串口接收数据移位控制(关键采样点的选取)每当rx_cnt1:0 = 2b01,为了保证在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,表示上层模块开始读取数据,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 = 2b00(0);一个计数周期开始,伴随clk_bps_4, tx_cnt加1(每一个数据位加4)串口发送数据移位控制 每4个clk_bps_4, tx_cnt5:2加1当tx_cnt5:2 =7,8,9,10.15,完成一位起始位,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四、波特率发生模块:针对9600bps,生成4倍于波特率38.4KHz的时钟信号,用于采样代码如下:串口数据自收发控制模块module UART(clk, rst_n, rxd, txd, LED1 );input clk; /时钟周期50MHzinput rst_n; /低电平复位 input rxd; /串口引脚输入-接收发送-PCoutput reg LED1;/lED测试用/*/wire tdEMPTY;/发送寄存器空标志reg wr;/发送使能信号reg 7:0DATA;wire clk_bps_4;/4倍于波特率时钟信号reg1: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)begin 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周期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) );/*针对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;/接收数据锁存output reg rdFULL;/接收锁存器满标志input rxd;/串口引脚输入reg7:0 data_r = 8bx; /接收数据寄存器reg5:0 rx_cnt;reg rxdF;/数据接收标志,RX模块内部信号/*当数据接收端rxd出现起始位低电平,启动接收控制计数器rx_cnt,置位为8b0111_00(28),即rx_cnt5:2= 4b0111(7),rx_cnt1:0 = 2b00(0);一个计数周期开始,伴随clk_bps_4, rx_cnt加1(每一个数据位加4)*/always(posedge clk_bps_4 or negedge rst_n)beginif(!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,可以来读取;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出现起始位低电平, 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 = 2b01,为了保证在rxd一位数据靠近中间位置采样;每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 = 2b01 )case(rx_cnt5:2) /4d7:rxd=0;起始位4d8:data_r0 = rxd;/ 低第1位4d9:data_r1 = rxd;/ 第2位4d10:data_r2 = rxd;/ 第3位4d11:data_r3 = rxd;/ 第4位4d12:data_r4 = rxd;/ 第5位4d13:data_r5 = rxd;/ 第6位4d14:data_r6 = rxd;/ 第7位4d15: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;/发送使能信号output 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 = 8hAB; din_latch = DATA; end/*wr由0跳变为1后,启动发送控制计数器tx_cnt,置位为8b0111_00(28),即tx_cnt5:2= 4b0111(7), tx_cnt1:0 = 2b00(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 else 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 & 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)4d7:txd_r = 1b0; /起始位04d8:txd_r = din_latch0; /低第1位4d9:txd_r = din_latch1; / 第2位4d10:txd_r = din_latch2;/ 第3位4d11:txd_r = din_latch3;/ 第4位4d12:txd_r = din_latch4;/ 第5位4d13:txd_r = din_latch5;/ 第6位4d14:txd_r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中级健身教练专业资格认证考试模拟题及答案
- 2025年人力资源师考试模拟题及备考指南
- 2025年精密温控节能设备项目合作计划书
- 2025年脚踏自行车及其零件合作协议书
- 2025年智能计量终端项目建议书
- 2025年电容器用钽粉合作协议书
- 抛物线课件教学课件
- 2025年建筑材料及制品专用生产机械合作协议书
- 抗菌药物教学课件
- 2025年安徽省蚌埠市龙子湖区中考数学三模试卷(含答案)
- 2025年市级科技馆招聘笔试重点
- 2025年度房屋拆迁补偿安置房买卖协议
- 2025西电考试题及答案
- 2025年部编版新教材语文九年级上册教学计划(含进度表)
- 食堂工作人员食品安全培训
- (高清版)DB11∕T 2440-2025 学校食堂病媒生物防制规范
- 战场急救知识
- GB/T 7324-2010通用锂基润滑脂
- 箱梁施工质量通病及预防措施
- 道路工程质量保证措施
- 吨焊接滚轮架主动滚轮架设计机械CAD图纸
评论
0/150
提交评论