欢迎来到天天文库
浏览记录
ID:58658638
大小:19.90 KB
页数:3页
时间:2020-10-16
《带fifo的串口发送器FPGA实现.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、带fifo的Uart发送器的FPGA实现FPGA使用Altera公司EP4C15F17C8N芯片,它的性能优越,支持大部分IP核使用。常用它来学习NIOSII。使用它实现带FIFO的串口。首先,对uart的实现进行设计。Uart的时序如下图所示:一般使用Uart时,配置为无校验,一个停止位,一个起始位,8位数据。其中尤其重要的为波特率的设置。波特率对应了Uart通信的位宽,用FPGA实现Uart其实就是对通信位宽的调制。位宽通过基础时钟分频得到。Uart波特率计算及实现以9600波特率为例计算:9600的意思为每秒传输的bit数为9600,所以位宽为:1/9600s,换算为n
2、s为:ns。那么,如果时钟频率为25MHz,位宽系数为:/40=2604。综合上述分析,可以得到一个公式,即:分频系数=时钟频率/波特率。例如:波特率,50MHz时钟其对应位宽为:/=434。那么以波特率,50MHz时钟为例实现Uart的发送。计时器对时钟计数,经过434个周期之后,对计数器加1操作,对相应的信号进行操作,即可实现,它的源代码如下:always@(posedgeclkornegedgerst)if(rst==1'd0)count<=17'd0;elseif(count==17'd434)count<=17'd0;elsecount<=count+1'd1;wi
3、resendclk=(count==17'd434);根据sendclk对Uart进行实现,代码如下:always@(posedgeclkornegedgerst)if(rst==1'b0)TX<=1'b1;elseif(FIFOempty==1'b1)beginTX<=1'b1;endelsecase(txcount)4'd0:TX<=1'b0;//startbitislow4'd1:TX<=fifodata[0];4'd2:TX<=fifodata[1];4'd3:TX<=fifodata[2];4'd4:TX<=fifodata[3];4'd5:TX<=fifodata
4、[4];4'd6:TX<=fifodata[5];4'd7:TX<=fifodata[6];4'd8:TX<=fifodata[7];4'd9:TX<=1'b1;//stopbitsdefault:TX<=1'b1;endcase它包含了一个有限状态机。需要注意的地方:为了使串口通信准确无误,要使TX信号在Uart的空闲时期全部置1才行,否则发送数据会出错。作者因为TX在rst时,将其初始化为0,导致发送的数据移位。这个要避免。调试工具:U口转串口,串口调试助手。FIFO的设计和实现:FIFO使用同步时钟,即SCFIFO。需要注意满、空、读请求、写请求的操作,时钟一般使用基础
5、时钟。在空的时候不能读。在满的时候不能写。需要注意的问题是:当输入的数据速度大于输出的数据速度时,会丢数!举一个例子:波特率的串口:11520字符/s,将此速度作为输出速度。输入的数据速度:(时钟为50MHz)4096个时钟周期发送10个字符,即:10*10^9/20=,这样输入的数据速度大于输出的速度,导致最终FIFO写满,所以会丢数。所以数据输入的速度小于输出的速度才行。
此文档下载收益归作者所有