0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用HLS实现UART呢?

OpenFPGA 来源:OpenFPGA 2023-11-20 09:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

介绍

UART 是一种旧的串行通信机制,但仍在很多平台中使用。它在 HDL 语言中的实现并不棘手,可以被视为本科生的作业。在这里,我将通过这个例子来展示在 HLS 中实现它是多么容易和有趣。

因此,从概念上讲,这是一个微不足道的项目;然而,它对于对 HLS 感兴趣的人来说是有启发性的。

现在项目定义: 下图显示了项目的简单结构。

我们在 FPGA 中的设计UART发送,每当按下按钮时就会将其发送到计算机上的串口调试助手。

8ec3f6f4-8745-11ee-939d-92fbcf53809c.png

FPGA 板上的八个滑动开关用于输入数据字节(例如字母或符号的 ASCII 代码)。此外,UP 按钮用作发送控制键。

8ed85b3a-8745-11ee-939d-92fbcf53809c.png

设计很简单,程序本身能接受开发板上拨码开关的数据,然后添加一个“0”起始位和一个“1”停止位,最后以9600 bit/s的波特率发送出去。

8f06e5b8-8745-11ee-939d-92fbcf53809c.png

首先需要根据开发板上的时钟(本例是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 比特流,并验证。

8f0e4bfa-8745-11ee-939d-92fbcf53809c.png

总结

很简单的一个实例,大家可以自行和HDL实现的方式进行对比。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1655

    文章

    22287

    浏览量

    630301
  • uart
    +关注

    关注

    22

    文章

    1304

    浏览量

    106116
  • HDL语言
    +关注

    关注

    0

    文章

    48

    浏览量

    9314
  • HLS
    HLS
    +关注

    关注

    1

    文章

    133

    浏览量

    25598
  • 串口调试助手

    关注

    3

    文章

    29

    浏览量

    7146

原文标题:用 HLS 实现 UART

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    探索Vivado HLS设计流,Vivado HLS高层次综合设计

    设计来满足各种约束 用不用的指令来探索多个HLS解决方案 2.实验内容 实验中文件中包含一个矩阵乘法器的实现实现两个矩阵inA和inB相乘得出结果,并且提供了一个包含了计算结果的testbench
    的头像 发表于 12-21 16:27 4319次阅读

    何用HLS实现UART

    UART 是一种旧的串行通信机制,但仍在很多平台中使用。它在 HDL 语言中的实现并不棘手,可以被视为本科生的作业。在这里,我将通过这个例子来展示在 HLS实现它是多么容易和有趣。
    的头像 发表于 11-20 09:48 1169次阅读
    如<b class='flag-5'>何用</b><b class='flag-5'>HLS</b><b class='flag-5'>实现</b><b class='flag-5'>UART</b>

    新手求助,HLS实现opencv算法加速的IP在vivado的使用

    我照着xapp1167文档,用HLS实现fast_corners的opencv算法,并生成IP。然后想把这个算法塞到第三季的CH05_AXI_DMA_OV5640_HDMI上,这个demo里
    发表于 01-16 09:22

    请问Vivado HLS出现这种情况是什么原因

    请问Vivado HLS出现这种情况是什么原因
    发表于 06-23 06:13

    何用c语言去实现秒表的计数功能

    何用c语言去实现秒表的计数功能?其实现代码是怎样的?
    发表于 10-18 07:29

    Vivado HLS设计流的相关资料分享

    多个HLS解决方案2.实验内容实验中文件中包含一个矩阵乘法器的实现实现两个矩阵inA和inB相乘得出结果,并且提供了一个包含了计算结果的testbench文件来与所得结果进行对比验证。...
    发表于 11-11 07:09

    如何去实现Stm32 Uart用DMA的方式接收数据

    DMA有何用途?如何去实现Stm32 Uart用DMA的方式接收数据
    发表于 12-14 07:37

    何用rk3288来实现Qt的交叉编译

    何用rk3288来实现Qt的交叉编译
    发表于 03-03 08:41

    IO模拟UART实现

    IO模拟UART实现 本应用用于扩展UART端口,在单片机自带的UART口不够用的情况下,使用GPIO和定时器实现模拟
    发表于 03-26 09:20 69次下载

    TI配置Hercules ARM安全MCU SCI和LIN 模块如何用UART通信

    TI配置Hercules ARM安全MCU SCI和LIN 模块如何用UART通信
    发表于 05-28 08:33 10次下载

    使用HLS封装的缩放IP来实现视频图像缩放功能

    这里向大家介绍使用HLS封装的缩放IP来实现视频图像缩放功能。将HLS封装的缩放IP加入到OV5640图像传输系统,验证图像放大和缩小功能。
    的头像 发表于 10-11 14:21 3395次阅读

    FPGA——HLS简介

    是Vitis HLS。在Vivado 2020版本中替代原先的Vivado HLS, 功能略有差异。 HLS 的机理    简单地讲,HLS采样类似C语言来设计FPGA 逻辑。但是要
    的头像 发表于 01-15 12:10 6378次阅读

    HLS协议实现

    HLS,Http Live Streaming 是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件。
    的头像 发表于 04-06 09:29 1279次阅读

    调用HLS的FFT库实现N点FFT(hls:fft)

    HLS中用C语言实现8192点FFT,经过测试,实验结果正确,但是时序约束不到100M的时钟,应该是设计上的延时之类的比较大,暂时放弃这个方案
    的头像 发表于 07-07 09:08 4273次阅读
    调用<b class='flag-5'>HLS</b>的FFT库<b class='flag-5'>实现</b>N点FFT(<b class='flag-5'>hls</b>:fft)

    调用HLS的FFT库实现N点FFT

    HLS中用C语言实现8192点FFT,经过测试,实验结果正确,但是时序约束不到100M的时钟,应该是设计上的延时之类的比较大,暂时放弃这个方案,调用HLS中自带的FFT库(hls:f
    的头像 发表于 07-11 10:05 1897次阅读
    调用<b class='flag-5'>HLS</b>的FFT库<b class='flag-5'>实现</b>N点FFT