学习ZYNQ——HLS

文章目录

  • 前言
  • 一、HLS是什么?
  • 二、HLS开发流程
  • 三、HLS工程创建
  • 四、代码编写
    • 1.led.h
    • 2.led.cpp
    • 3.test_led.cpp
  • 五、C仿真与C综合
  • 六、联合仿真
  • 七、添加ap_int.h
  • 八、再次进行C仿真的Cosimulation
  • 九、导出IP核的时候出现报错:


前言

本文主要记录自己学习HLS的过程,如有不足,敬请批评指正。


一、HLS是什么?

1.Vivado HLS(High Level Synthesis)是赛灵思提供给开发者的一款高层次综合工具,使用 HLS 能够加快我们开发的效率。开发者通过使用 HLS 能够将 C/C++ 或者 system C 等高级语言转化为 RTL 电路,这在处理某些较为复杂的算法的时候,能够为开发者提供极大的便利。
2.HLS可以用于创建IP的工具,通过HLS创建的IP可以应用到Vivado中。通过例化或者使用 BlockDesign 的方式,将通过 HLS 创建的 IP 应用到自己的项目中去。

二、HLS开发流程

在这里插入图片描述

三、HLS工程创建

1创建新的工程
在这里插入图片描述
2新的工程路径
在这里插入图片描述
3不添加,直接Next
在这里插入图片描述
4不添加,直接Next
在这里插入图片描述
5选择芯片型号——这里我的开发板为7010系列
在这里插入图片描述
6窗口说明
在这里插入图片描述
7添加工程源码
在这里插入图片描述
右键选择Source,选择New file 在弹出的窗口中,选中我们源码的存放路径,名字取为led.cpp;再重复步骤添加一个led.h文件。
在这里插入图片描述

四、代码编写

在这里插入图片描述

1.led.h

添加代码如下:

#ifndef _SHIFT_LED_H_
#define _SHIFT_LED_H_
#define CNT_MAX 100000000
//#define CNT_MAX 100
#define FLASH_FLAG CNT_MAX-2
typedef int led_t;
typedef int cnt_t;
void flash_led(led_t *led_o , led_t led_i);
#endif

2.led.cpp

添加代码如下:

#include "led.h"void flash_led(led_t *led_o, led_t led_i){cnt_t i;for(i=0;i<CNT_MAX;i++){if(i==FLASH_FLAG){*led_o=~led_i;}}
}

3.test_led.cpp

右键选择Test Bench,选择New file 在弹出的窗口中,选中我们源码的存放路径,名字取为test_led.cpp。

添加代码如下:

#include "led.h"
#include <stdio.h>int main(){led_t led_i=0x01;led_t led_o;const int SHIFT_TIME = 4;int i;for(i=0;i<SHIFT_TIME;i++){flash_led(&led_o , led_i);led_i = led_o;printf("shift_out is %d \n",(int)(led_o&0x01));}
}

五、C仿真与C综合

点击工具栏的 project 选择project seethings选择 synthesis》Browser》选择 flash_led 作为顶层函数》点击OK。
在这里插入图片描述

点击 project 》 Run C simulation 出现此界面可以先直接点击OK
在这里插入图片描述

运行结果如下:
在这里插入图片描述

点击 Solution 》Run C Synthesis 》Active Solution,等待一段时间
在这里插入图片描述
在 C 综合后的结果中,我们可以查看所占用的资源,设计所需的 Latency,和接口的类型等等。

六、联合仿真

点击Solution 》Run C/RTL Cosimulation
在这里插入图片描述
联合仿真的输出结果
在这里插入图片描述

七、添加ap_int.h

在led.h源码中
在这里插入图片描述
在led.cpp源码中,在Directive窗口中,右键选中led_o,进入insert Directive
在这里插入图片描述

在这里插入图片描述

八、再次进行C仿真的Cosimulation

1.点击Project》Run C simulation
在这里插入图片描述
2.点击Solution》Run C/RTL Cosimulation
等待时间有点长,等完全仿真结束,没有报错的情况即可。

九、导出IP核的时候出现报错:

在这里插入图片描述
解决办法:https://blog.csdn.net/qq_41873311/article/details/122596244
官方办法:https://support.xilinx.com/s/article/76960?language=en_US
在这里插入图片描述
安装上诉补丁之后,点击Solution》Export RTL
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/27019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript-DOM

DOM 全称&#xff1a;DOM(Document Object Model--文档对象类型) 作用&#xff1a;用来操控网页类容的功能&#xff0c;开发网页特效和实现用户交互 DOM 结构 将HTML文档以树形结构表现出来称之为DOM树 获取DOM 语法&#xff1a;document.querySelector(css选择器) 参数&…

AIGC实践|用AI制作视频短片创作全流程

前言&#xff1a; 在深入探讨了AI在动态有声绘本和小游戏开发的应用之后&#xff0c;本次我们将聚焦于视频创作领域。本篇文章将详细展示如何使用AI工具从概念构思到画面生成再到最终成片的全过程&#xff0c;涵盖剧本创作、分镜头设计、视觉效果生成及音乐配制等各个阶段。让…

B+索引的分裂及选择率和索引基数

1、B树索引的分裂 B树索引页的分裂并不总是从页的中间记录开始&#xff0c;这样可能会导致页空间的浪费。 例子 比如下面这个记录&#xff1a; 1、2、3、4、5、6、7、8、9 由于插入是以自增的顺序进行的&#xff0c;若这时插入第10条记录然后进行页的分裂操作&#xff0c;那…

鹧鸪云光伏业务管理系统,助力企业数智化发展

在当今数字化浪潮席卷全球的背景下&#xff0c;光伏行业作为绿色能源的重要组成部分&#xff0c;其业务管理的数智化转型显得尤为重要。鹧鸪云光伏业务管理系统&#xff0c;以其强大的功能和卓越的性能&#xff0c;正成为企业实现数智化转型的重要助力。 作为光伏行业的领军软…

Spring Boot:Java 应用开发高效之道

Spring Boot 是一种革命性的框架&#xff0c;旨在简化 Java 应用的创建和部署过程。通过自动化配置和简化项目搭建流程&#xff0c;Spring Boot 大大加速了开发周期&#xff0c;让 Java 应用开发变得更加高效和便捷。 核心优势&#xff1a; 快速启动和简化配置&#xff1a;Spr…

redis 笔记2之哨兵

文章目录 一、哨兵1.1 简介1.2 实操1.2.1 sentinel.conf1.2.2 问题1.2.3 哨兵执行流程和选举原理1.2.4 使用建议 一、哨兵 1.1 简介 上篇说了复制&#xff0c;有个缺点就是主机宕机之后&#xff0c;从机只会原地待命&#xff0c;并不能升级为主机&#xff0c;这就不能保证对外…

【python】docker-selenium 分布式selenium模拟浏览器 |可视化 或 后台运行selenium 部署与使用

一、分布式selenium 1、部署 docker-selenium Github官方地址如下&#xff1a; https://github.com/SeleniumHQ/docker-selenium?tabreadme-ov-file 执行安装指令&#xff1a; 1、这里可以将dashboard映射接口改为 14444&#xff08;记得开放安全组&#xff09; docker run …

macOS Sequoia 将 Mac 生产力与智能化提升至全新高度 (macOS 15 ISO、IPSW、PKG 下载)

macOS Sequoia 将 Mac 生产力与智能化提升至全新高度 (macOS 15 ISO、IPSW、PKG 下载) iPhone 镜像、Safari 浏览器重大更新、备受瞩目的游戏和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接&#xff1a;https://sysin.org/blog/macOS-Sequoia/&a…

细说ARM MCU的串口发送数据的实现过程

目录 1、条件及工程配置 2、实现串口发送的库函数 3、修改whlie(1)中的代码 4、修改回调函数 5、下载运行 前面的文章介绍了用串口的接收中断来接收数据&#xff0c;本文介绍通过串口从MCU向外发送数据。 1、条件及工程配置 文章依赖的硬件及工程配置同本文作者的其他文…

【Unity】Inspector排版扩展学习初探

一、简单的Unity Inspector扩展 [SerializeField] [SerializeField] 作用&#xff1a;让private属性也可以显示在面板上 [Range(x , y)] [Range(x , y)] 作用&#xff1a; 让参数从输入框变为范围滑条 [Header(" 标题 ")] [Header(" 标题 ")]作用&am…

如何选择合适的 AWS 区域对网站性能和成本?

选择合适的 AWS 区域对网站性能和成本都有很大影响,我们结合九河云的分析来总结一些主要考虑因素: 1. 地理位置和用户分布 最好选择靠近目标用户的区域,可以减少网络延迟,提高响应速度。如果用户分散在世界各地,可以考虑使用 AWS 的全球加速器或内容分发网络(CDN)服务。 2. …

docker 容器 network host 模式启动

docker 默认启动容器 network 是 bridge 模式&#xff0c;需使用 -p 映射端口实现容器与宿主机网络通信&#xff0c;较安全&#xff1b; 当使用 network host 模式&#xff0c;直接走宿主机网络通信&#xff0c;较不安全。 下面来一个 docker 容器 network host 模式启动 的 实…

SpringBoot:CORS是什么?SpringBoot如何解决跨域问题?

一、简介 跨域资源共享&#xff08;CORS, Cross-Origin Resource Sharing&#xff09;是一个W3C规范&#xff0c;它定义了一种浏览器和服务器交互的方式来确定是否允许跨源请求。当一个资源&#xff08;如HTML页面、JavaScript文件、图片等&#xff09;从一个源&#xff08;ori…

GPT-4o更容易越狱?北航南洋理工上万次测试给出详细分析

卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践&#xff0c;基于大语言模型和RAG技术&#xff0c;集合海量工业领域生态资源方优质产品和知识服务&#xff0c;旨在通过智能搜索、连续交互&#xff0c;实时生成个性化的内容…

CentOS7下快速升级至OpenSSH9.7p2安全版本

一、CentOS7服务器上编译生成OpenSSH9.3p2的RPM包 1、编译打包的shell脚本来源于该项目 https://github.com/boypt/openssh-rpms解压zip项目包 unzip openssh-rpms-main.zip -d /opt cd /opt/openssh-rpms-main/ vim pullsrc.sh 修改第23行为source ./version.env 2、sh pull…

知识图谱存在的挑战---商业模式相关和人才相关

文章目录 商业模式相关人才相关 商业模式相关 商业模式是通过协调关系&#xff0c;利用资源&#xff0c;获得价值和利益&#xff0c;将这些内容连接起来&#xff0c;从而形成一种企业满足消费者需求的动态系统。一种商业模式包含的要素很多导致商业模式的种类也很多&#xff0c…

比较市场上14款最佳的看板工具软件

文章对比了14款看板工具软件&#xff1a;PingCode、Worktile、Trello、Asana、Teambition、Monday、ClickUp、Wrike、Jira、Kanban Tool、MeisterTask、Teamhood、Leankit by Planview、ZenHub。 看板工具以其直观的设计和灵活性&#xff0c;成为团队协作和项目跟踪的首选。通过…

Java Collections集合的工具类使用方法

import java.util.*; public class test1 {public static void main(String[] args){// Collections集合的工具类使用方法/*1.Collections.addAll(list,l1,l2,l3...) 可变参数添加对象2.Collections.shuffle(list) 打乱集合中的元素顺序3.Collection.sort(list, new Comparator…

python3的基本语法说明二

一. 简介 前一篇文章简单学习了 python3 的一些基本语法&#xff0c;文章如下&#xff1a;python3的基本语法说明一-CSDN博客 本文继续学习 python3 的基本语法。 二. python3 的基本语法 1. 多行语句 Python 通常是一行写完一条语句&#xff0c;但如果语句很长&#xff0…

【阅读论文】-- LiveRAC:系统管理时序数据的交互式可视化探索

LiveRAC&#xff1a;系统管理时序数据的交互式可视化探索 摘要引言相关工作系统管理角色和活动当前工具的局限性 迭代设计方法参加者设计阶段 设计要求可视化解决方案设计原则LiveRAC 接口执行 纵向评价非正式纵向研究方法对设计的影响使用场景 结论致谢参考文献 摘要 我们介绍…