FPGA模拟串口自收发-Verilog

FPGA模拟串口自收发-Verilog

ID:38980602

大小:359.35 KB

页数:7页

时间:2019-06-22

FPGA模拟串口自收发-Verilog_第1页
FPGA模拟串口自收发-Verilog_第2页
FPGA模拟串口自收发-Verilog_第3页
FPGA模拟串口自收发-Verilog_第4页
FPGA模拟串口自收发-Verilog_第5页
资源描述:

《FPGA模拟串口自收发-Verilog》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实现功能,FPGA里实现从PC串口接收数据,接着把接收到的数据发回去。波特率可选9600bps,可调1bit起始位,8bit数据,1bit停止位,无校验位。参考《VHDL硬件描述语言与和数字逻辑电路设计》模块介绍如下一、串口数据接收模块:特别注意一个数据位占4个clk_bps_4时钟周期。串口数据接收控制当数据接收端rxd出现起始位低电平,启动接收控制计数器rx_cnt,置位为8’b0111_00(28),即rx_cnt[5:2]==4’b0111(7),rx_cnt[1:0]==2'b00(0);一个计数周期开始

2、,伴随clk_bps_4,rx_cnt加1(每一个数据位加4)串口接收数据移位控制(关键采样点的选取)每当rx_cnt[1:0]==2'b01,为了保证在rxd一位数据靠近中间位置采样;每4个clk_bps_4,rx_cnt[5:2]加1当rx_cnt[5:2]==8,9,10….15,完成8位的数据采样,串并变换置位标志位rxdF数据接收标志rxd出现起始位低电平,rxdF置1,表示数据接收开始;当rx_cnt计数到8’b1111_11(63),数据接收完成,rxdF置0置位标志位rdFULL;//接收锁存器满标

3、志空闲时rdFULL置0,当数据接收完成,数据锁存到do_latch,同时rdFULL置1,向上层模块表示数据以准备OK,可以来读取;rd置0,表示上层模块开始读取数据,rdFULL置0,表示数据已读走二、串口数据发送模块:数据发送依赖于wr(低电平有效)空闲时wr置1,数据发送时wr产生低电平脉冲,wr上升沿将数据锁存到din_latch;串口数据发送控制:wr由0跳变为1后,启动发送控制计数器tx_cnt,置位为8’b0111_00(28),即tx_cnt[5:2]==4’b0111(7),tx_cnt[1:0

4、]==2'b00(0);一个计数周期开始,伴随clk_bps_4,tx_cnt加1(每一个数据位加4)串口发送数据移位控制每4个clk_bps_4,tx_cnt[5:2]加1当tx_cnt[5:2]==7,8,9,10….15,完成一位起始位,8位的数据位发送,随后txd置1(停止位),完成并串转换置位标志位txdF,tdEMPTY//发送完成标志当写数据到发送寄存器din_latch时,txdF,tdEMPTY置0;当tx_cnt计数到8’b1111_11(63),数据发送完成,txdF,tdEMPTY置1;三、

5、串口数据自收发控制模块当rdFULL==1&&tdEMPTY==1(rdFULL==1表示数据准备OK,tdEMPTY==1表示上次发送已完成),rd,wr产生低脉冲,rd置0,数据读取到DATA,wr置0使能发送数据控制,低脉冲将DATA锁存到din_latch四、波特率发生模块:针对9600bps,生成4倍于波特率38.4KHz的时钟信号,用于采样代码如下:串口数据自收发控制模块moduleUART(clk,rst_n,rxd,txd,LED1);inputclk;//时钟周期50MHzinputrst_n;/

6、/低电平复位inputrxd;//串口引脚输入<--接收<--PCoutputtxd;//串口引脚输出-->发送-->PCoutputregLED1;//lED测试用/****************************************/wiretdEMPTY;//发送寄存器空标志regwr;//发送使能信号reg[7:0]DATA;wireclk_bps_4;//4倍于波特率时钟信号reg[1:0]wr_cnt;//wr低电平计数regrd;//读接收锁存器信号wire[7:0]do_latch;//

7、接收数据锁存wirerdFULL;//接收锁存器满标志reg[1: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@(posedgeclk_bps_4ornegedgerst_n)beginif(!rst_n)beginrd<=1;wr<

8、=1;wr_cnt<=0;rd_cnt<=0;endelsebeginif(rdFULL==1)beginrd<=0;wr<=0;wr_cnt<=0;rd_cnt<=0;DATA<=do_latch;endif(rd==0)//产生rd低电平2个clk_bps_4周期beginrd_cnt<=rd_cnt+1;if(rd_cnt==3)rd<=1;endif

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。