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

    关注

    1602

    文章

    21324

    浏览量

    593215
  • uart
    +关注

    关注

    22

    文章

    1159

    浏览量

    99968
  • HDL语言
    +关注

    关注

    0

    文章

    46

    浏览量

    8869
  • HLS
    HLS
    +关注

    关注

    1

    文章

    126

    浏览量

    23683
  • 串口调试助手

    关注

    3

    文章

    29

    浏览量

    6688

原文标题:用 HLS 实现 UART

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

收藏 人收藏

    评论

    相关推荐

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

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

    何用HLS实现UART

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

    Vivado HLS实现OpenCV图像处理的设计流程与分析

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

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

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

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

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

    何用Matlab去实现FFT函数和IFFT函数

    Matlab的FFT函数和IFFT函数有什么用法吗?如何用Matlab去实现FFT函数和IFFT函数
    发表于 11-18 07:05

    如何去实现UART阻塞方式收发数据

    如何去实现UART阻塞方式收发数据?如何去实现UART中断方式收发数据
    发表于 12-08 06:50

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

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

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

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

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

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

    HLS协议实现

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

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

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