用 HLS 实现 UART
介绍
UART 是一种旧的串行通信机制,但仍在很多平台中使用。它在 HDL 语言中的实现并不棘手,可以被视为本科生的作业。在这里,我将通过这个例子来展示在 HLS 中实现它是多么容易和有趣。
因此,从概念上讲,这是一个微不足道的项目;然而,它对于对 HLS 感兴趣的人来说是有启发性的。
现在项目定义: 下图显示了项目的简单结构。
我们在 FPGA 中的设计UART发送,每当按下按钮时就会将其发送到计算机上的串口调试助手。
FPGA 板上的八个滑动开关用于输入数据字节(例如字母或符号的 ASCII 代码)。此外,UP 按钮用作发送控制键。
设计很简单,程序本身能接受开发板上拨码开关的数据,然后添加一个“0”起始位和一个“1”停止位,最后以9600 bit/s的波特率发送出去。
首先需要根据开发板上的时钟(本例是100MHz),进行分频,生成串口发送所需的时钟。
booldelay(longlongintn){ staticbooldummy=0; for(longlongintj=0;j< n; j++) { #pragma HLS pipeline dummy = !dummy; } return dummy; } void uart_baudrate_clock(bool &baudrate_clk) { static bool s = 0; s=!s; baudrate_clk = s; delay(5208); }
生成速率时钟后,简单的状态机可以将数据发送出去。
voiduart_data_transfer(bool&uart_tx,ap_uint<8>data,boolbaud_rate_clock,boolstart){ staticboolsend_bit=1; staticboolstart_state=0; staticbooltransfer=0; staticunsignedintcount=0; staticintstate=0; ap_uint<10>d=((bool)0b1,(ap_int<8>)data,(bool)0b0); if(start==1&&start_state==0){ transfer=1; start_state=1; count=0; } if(start==0&&start_state==1){ start_state=0; } if(baud_rate_clock==1&&state==0&&transfer==1){ send_bit=d[count++]; if(count==10){ transfer=0; } state=1; } if(baud_rate_clock==0&&state==1){ state=0; } uart_tx=send_bit; }
将这些代码综合到 RTL 模块后,我们可以创建 Vivado 项目并生成 FPGA 比特流,并验证。
总结
很简单的一个实例,大家可以自行和HDL实现的方式进行对比。
审核编辑:汤梓红
-
FPGA
+关注
关注
1634文章
21822浏览量
607670 -
计算机
+关注
关注
19文章
7571浏览量
88980 -
uart
+关注
关注
22文章
1245浏览量
102032 -
串行通信
+关注
关注
4文章
580浏览量
35674 -
HLS
+关注
关注
1文章
130浏览量
24284
发布评论请先 登录
相关推荐
探索Vivado HLS设计流,Vivado HLS高层次综合设计
如何用HLS实现UART呢?

新手求助,HLS实现opencv算法加速的IP在vivado的使用
Vivado HLS实现OpenCV图像处理的设计流程与分析
Vivado HLS设计流的相关资料分享
TI配置Hercules ARM安全MCU SCI和LIN 模块如何用于UART通信
XIlinx利用HLS进行加速设计进度

使用HLS封装的缩放IP来实现视频图像缩放功能
FPGA——HLS简介
HLS协议实现
调用HLS的FFT库实现N点FFT

评论