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

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

3天内不再提示

如何用HLS实现UART

OpenFPGA 来源:OpenFPGA 2023-11-20 09:48 次阅读

用 HLS 实现 UART

介绍

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
    +关注

    关注

    1602

    文章

    21323

    浏览量

    593213
  • 计算机
    +关注

    关注

    19

    文章

    6651

    浏览量

    84544
  • uart
    +关注

    关注

    22

    文章

    1159

    浏览量

    99962
  • 串行通信
    +关注

    关注

    4

    文章

    535

    浏览量

    35023
  • HLS
    HLS
    +关注

    关注

    1

    文章

    126

    浏览量

    23683
收藏 人收藏

    评论

    相关推荐

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

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

    何用HLS实现UART呢?

    UART 是一种旧的串行通信机制,但仍在很多平台中使用。它在 HDL 语言中的实现并不棘手,可以被视为本科生的作业。在这里,我将通过这个例子来展示在 HLS实现它是多么容易和有趣。
    的头像 发表于 11-20 09:50 355次阅读
    如<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实现OpenCV图像处理的设计流程与分析

    《》数据类型,这种类型用于模型化视频像素流处理,实质等同于hls::steam《》流的类型,而不是OpenCV中在外部memory中存储的matrix矩阵类型。因此,在HLS实现OpenCV的设计中
    发表于 07-08 08:30

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

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

    何用示波器查看串口UART的波形?

    何用示波器查看串口UART的波形?
    发表于 12-16 08:04

    IO模拟UART实现

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

    HLS系列 – High Level Synthesis(HLS) 的一些基本概念1

    相信通过前面5篇fir滤波器的实现和优化过程,大家对HLS已经有了基本的认识。是时候提炼一些HLS的基本概念了。 HLS支持C,C++,和SystemC作为输入,输出为Verilog(
    发表于 02-08 05:23 690次阅读
    <b class='flag-5'>HLS</b>系列 – High Level Synthesis(<b class='flag-5'>HLS</b>) 的一些基本概念1

    用Vivado-HLS实现低latency 除法器

    1 Vivado HLS简介 2创建一个Vivado-HLS工程 2.1打开Vivado HLS GUI 2.2创建新工程 在 Welcome Page, 选择Create New Project
    发表于 12-04 10:07 0次下载
    用Vivado-<b class='flag-5'>HLS</b><b class='flag-5'>实现</b>低latency 除法器

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

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

    hls之xfopencv

    vivado本身集成了opencv库以及hls视频库了,opencv不能被综合导出为RTL电路,hls视频库的功能有所欠缺,因此引入xfopencv作为既可以被综合导出为RTL电路,也能够实现opencv丰富的功能。
    的头像 发表于 09-09 15:07 1068次阅读

    FPGA——HLS简介

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

    HLS协议实现

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

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

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