当前位置: 首页 > news >正文

用 HLS 实现 UART

用 HLS 实现 UART

b77ae55d56d1488b65c49e31135b9b25.png

介绍

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

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

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

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

b993bb07d6951968fe5842af169f73cb.png

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

d43c741a402843c097ba7acc3769eaf3.png

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

9bba272b0516fee47e0ddb1768acd4b4.png

首先需要根据开发板上的时钟(本例是100MHz),进行分频,生成串口发送所需的时钟。

bool delay(long long int n) {static bool dummy = 0;for (long long int j = 0; j < n; j++) {
#pragma HLS pipelinedummy = !dummy;}return dummy;
}
void uart_baudrate_clock(bool &baudrate_clk) {static bool s = 0;s=!s;baudrate_clk = s;delay(5208);
}

生成速率时钟后,简单的状态机可以将数据发送出去。

void uart_data_transfer(bool &uart_tx, ap_uint<8> data, bool baud_rate_clock, bool start) {static bool send_bit = 1;static bool start_state = 0;static bool transfer = 0;static unsigned int count = 0;static int state = 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 比特流,并验证。

cb2dc6bf914980274c8aedc92ece0e79.png

总结

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

http://www.lryc.cn/news/240510.html

相关文章:

  • 华清远见嵌入式学习——网络编程——作业4
  • 【OpenCV实现图像:制作酷炫的动画效果】
  • CSS鼠标属性篇
  • 交直流一体化电源系统测试步骤详解
  • 多数据库使用django-apscheduler时,migrate后并不能生成django_apscheduler_djangojob表的问题
  • SPS简单对应分析
  • 智能井盖传感器建设信息化时代智慧城市
  • 安装向量数据库milvus及其Attu
  • 量子计算概述
  • 校园圈子论坛,交友,帖子内短视频,二手市场,APP小程序H5三端交付,源码交付,支持二开
  • Request 爬虫的 SSL 连接问题深度解析
  • gin相关操作--一起学习921190764
  • Linux查看开机启动的服务
  • 微信小程序如何使用scss,less
  • 2024东北师范大学计算机考研分析
  • MFC中窗口居中显示
  • Ajax基础(应用场景|jquery实现Ajax|注意事项|Ajax发送json数据|Ajax携带文件数据)
  • Kubernetes(k8s)之Pod详解
  • redis非关系型数据库(缓存型数据库)——中间件
  • Android 9.0 隐藏设置显示中自动调节亮度
  • 2020年计网408
  • 手把手教你编写LoadRunner脚本
  • 2311rust,到74版本更新
  • Web项目从Tomcat迁移到TongWeb
  • Polygon Miden VM架构总览
  • ultralytics yolov8 实例分割 训练自有数据集
  • linux之进程地址空间
  • Cloud微服务
  • BLIP-2:冻结现有视觉模型和大语言模型的预训练模型
  • PyQt(学习笔记)