资料介绍
描述
目标:该项目的主要目标是展示高级综合设计流程在实现数字系统中的能力和能力。
由于这是我在 hackster 中的第一个项目,因此我尝试逐步解释所有细节。如果您有兴趣学习高级合成技术来设计数字系统,请参阅此处。
项目描述:在这个项目中,我将设计一个带有初始化信号的 0-9 加/减计数器。图 1 显示了该项目的概览。
为了实现这个项目,我使用了 Vivado Design Suite – HLx Editions 提供的 Xilinx HLS 平台。此外,我将使用 Basys 3 评估板作为目标 FPGA 平台。图 2 显示了板上最终递增/递减计数器的布局。右侧的 7 段显示计数器。UP 按钮用于向上计数,DOWN 按钮用于向下计数。INIT 按钮初始化计数器。用“INIT value”表示的四个滑动开关用于输入初始化编号。此外,四个 LED 显示该值。
我们分三个阶段来实施这个项目:C/C++ 描述、逻辑综合和电路板编程。
第 1 阶段:C/C++ 描述(Vivado-HLS 项目)
1- 运行 Vivado-HLS IDE 并创建一个新项目。
2- 在创建新项目向导的第一页中,插入“counter-vhls”作为项目名称,并为项目文件选择适当的位置。
3-选择“计数器”作为顶级功能名称。
4- 在“解决方案配置”页面中,单击省略号按钮选择 FPGA 平台。
5- 设备选择对话框将打开。点击Boards,找到digilent vendor,选择Basys3 board,点击OK。
6- 在 Source 文件夹下创建两个名为“counter.cpp”和“counter.h”的新文件。
7- 在 Test Bench 文件夹下创建两个名为“counter-tb.cpp”和“counter-tb.h”的新文件。
8-让我们编写设计头文件如下。如下图所示,该文件中的代码分为三个部分:
1- 首先,由于我们要使用 HLS 任意精度数据类型,我们应该包含“ap_int.h”头文件。2- 其次,我们定义了一些稍后在设计中使用的数据类型 3- 最后,我们定义了一个常量数组,用于保存对应于从 0 到 9 的数字的 7 段代码。
9- 设计源文件包含顶层功能描述。它由八个部分组成。
1-顶级函数参数:该函数包含三个输入和两个输出参数。
init_value变量包含计数器初始值。
reset_counter变量确定何时应该初始化计数器。当它为 1 时,计数器获取init_value参数中的值。
push_buttons变量确定向上或向下计数。
Seven_segments_data变量包含对应于计数器状态的 7 段代码
Seven_segments_enable变量启用目标 7 段。
2-端口接口:本节定义与顶级函数参数对应的端口接口。这些接口定义了实现参数数据事务的硬件结构。由于我们有一个简单的设计,并且我们希望简单的电线实现参数,我选择了ap_none作为接口模式。
3-声明变量:在这里,我声明了一些要在设计中使用的变量。如果按下 UP 按钮,up_count 变量将为1 。如果按下 DOWN 按钮,则 down_count 将为1 。up_pressed和down_pressed被声明为静态变量以保存按钮的历史记录。number变量保持计数器状态,因此定义为静态变量。
4-设置输出:此部分将 INIT 值发送到 LED 并启用右侧 7 段。
5-初始化:如果reset_counter信号被激活,这个if 语句初始化计数器状态。
6-向上计数:这部分由两个if 语句组成。第一个检查是否按下了向上按钮。第二个if检查 UP 按钮是否已被释放。
7-向下计数:这部分与向上计数部分非常相似。
8- 7 段码:最后一段发出计数器状态对应的 7 段码。
10- 现在,我们需要一个 C/C++ 测试平台来测试设计。可以在此处找到测试台文件。测试台分为三个步骤:
— 生成测试向量, — 将测试向量应用于设计, — 最后,将硬件输出与黄金模型的输出进行比较并报告任何差异
11- 现在我们可以通过单击工具栏中的图标来运行 C 模拟。
12-成功完成C-Simulation后,我们可以运行高级综合。
图 13 显示了综合报告的部分内容。它有三个主要部分:
1- 时序信息 2- 资源利用 3- 端口接口
13- 最后,我们应该通过单击其图标来生成和导出设计 RTL-IP。
第 2 阶段:逻辑综合(Vivado 项目)
现在,我们已准备好进行逻辑综合和生成 FPGA 比特流。
1-创建一个名为counter-vivado的新Vivado项目。请注意,该项目没有任何源文件。
2- 不要忘记选择 Basys-3 板作为目标 FPGA。
3-创建一个新的块设计
4-右键单击图表区域内的某处并选择“IP设置...”选项
5-然后单击设置对话框中IP下的存储库选项。然后点击右侧的加号,浏览到counter HLS项目文件夹。Vivado 在文件夹中搜索任何可能的 IP 并将其添加到其存储库中。
6- 右键单击图表区域内的某处并选择“添加..”选项。然后搜索计数器 IP 并将其添加到 vivado 项目中。
17- 单击图表区域顶部的“运行连接自动化”。
18- 再次单击图表区域顶部的“运行连接自动化”。
9- 在我们的计数器 IP 上选择未连接的端口并将它们设为外部(右键单击端口名称,您将在下拉菜单中看到“设为外部”选项)。
10-您可以通过选择端口并使用“外部端口属性”窗口来重命名端口。
init_counter_V_0 -----------> init_counter
push_buttons_V_0------------> push_buttons
init_value_V_0--------------> init_value
init_counter----------------> init_counter
leds_V_0--------------------> leds
seven_segments_data_V_0 ----> seven_segments_data
seven_segments_enable_V_0---> seven_segments_enable
11- 现在创建一个约束文件,并添加以下约束以将 IP 端口连接到具有适当 I/O 标准的 FPGA 引脚。
## Switches
set_property PACKAGE_PIN V17 [get_ports {init_value[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {init_value[0]}]
set_property PACKAGE_PIN V16 [get_ports {init_value[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {init_value[1]}]
set_property PACKAGE_PIN W16 [get_ports {init_value[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {init_value[2]}]
set_property PACKAGE_PIN W17 [get_ports {init_value[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {init_value[3]}]
# LEDs
set_property PACKAGE_PIN U16 [get_ports {leds[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {leds[0]}]
set_property PACKAGE_PIN E19 [get_ports {leds[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {leds[1]}]
set_property PACKAGE_PIN U19 [get_ports {leds[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {leds[2]}]
set_property PACKAGE_PIN V19 [get_ports {leds[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {leds[3]}]
#7 segment display
set_property PACKAGE_PIN W7 [get_ports {seven_segments_data[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segments_data[0]}]
set_property PACKAGE_PIN W6 [get_ports {seven_segments_data[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segments_data[1]}]
set_property PACKAGE_PIN U8 [get_ports {seven_segments_data[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segments_data[2]}]
set_property PACKAGE_PIN V8 [get_ports {seven_segments_data[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segments_data[3]}]
set_property PACKAGE_PIN U5 [get_ports {seven_segments_data[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segments_data[4]}]
set_property PACKAGE_PIN V5 [get_ports {seven_segments_data[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segments_data[5]}]
set_property PACKAGE_PIN U7 [get_ports {seven_segments_data[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segments_data[6]}]
set_property PACKAGE_PIN V7 [get_ports seven_segments_data[7]]
set_property IOSTANDARD LVCMOS33 [get_ports seven_segments_data[7]]
set_property PACKAGE_PIN U2 [get_ports {seven_segments_enable[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segments_enable[0]}]
set_property PACKAGE_PIN U4 [get_ports {seven_segments_enable[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segments_enable[1]}]
set_property PACKAGE_PIN V4 [get_ports {seven_segments_enable[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segments_enable[2]}]
set_property PACKAGE_PIN W4 [get_ports {seven_segments_enable[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segments_enable[3]}]
#Buttons
set_property PACKAGE_PIN T18 [get_ports push_buttons[0]]
set_property IOSTANDARD LVCMOS33 [get_ports push_buttons[0]]
set_property PACKAGE_PIN W19 [get_ports init_counter[0]]
set_property IOSTANDARD LVCMOS33 [get_ports init_counter[0]]
set_property PACKAGE_PIN U17 [get_ports push_buttons[1]]
set_property IOSTANDARD LVCMOS33 [get_ports push_buttons[1]]
12- 现在右键单击图表区域内的某处并选择“验证设计”选项。
13-成功验证设计后,右键单击“Design Sources”文件夹下的“ design_1 ”并选择“Generate Output Products...”
14- 然后,再次右键单击“Design Sources”文件夹下的“design_1”并选择“Create HDL Wrapper...”
15- 现在单击左侧 Flow Navigator 中 PROGRAM and DEBUG 下的“Generate Bitstream”选项。
第 3 阶段:电路板编程
1- 最后,对电路板进行编程并检查设计。
如果您对使用 HLS 进行设计感兴趣,请查看具有FPGA 高级合成的数字系统设计:组合电路
- 1路编码器脉冲计数器或2路DI高速计数器,Modbus RTU模块 YL150
- 单片机 -定时/计数器的初始化编程及应用 10次下载
- 51单片机定时/计数器的工作原理 14次下载
- 计数器与分频电路实验课件下载 7次下载
- 高速计数器C235测试例程源码下载 27次下载
- 西威变频器siei artdrive密码及初始化 5次下载
- 如何实现红外线自动计数器的设计 62次下载
- C51单片机中的定时器和计数器的详细介绍 1次下载
- 在51平台下初始化文件的引入导致全局变量无法初始化的问题如何解决 0次下载
- 单片机计数器的应用资料说明 0次下载
- 使用单片机设计0到9999计数器并带有暂停清零功能的程序资料免费下载 7次下载
- 计数器逻辑功能测试实验报告 15次下载
- SEED-DEC2812初始化函数说明 11次下载
- 定时计数器初始化 16次下载
- 光电计数器及应用 77次下载
- 字符型、指针型等变量等该如何初始化 104次阅读
- MCU单片机GPIO初始化该按什么顺序配置?为什么初始化时有电平跳变? 198次阅读
- 计数器怎么用 计数器的作用有哪些 616次阅读
- 三菱PLC普通计数器实例说明 794次阅读
- SCL语言之加计数-计数器函数S_CU 933次阅读
- RT-Thread自动初始化机制 1809次阅读
- 鸿蒙内核源码:内核空间是怎么初始化的? 1486次阅读
- 计数器函数S_CU的操作步骤 7339次阅读
- 电子计数器的使用_电子计数器功能 1.3w次阅读
- 电子计数器电路图_电子计数器接线方法 4.3w次阅读
- 计数器和接近开关两线怎么接,计数器接近开关接线图 5.1w次阅读
- PCIe总线必须要先完成Flow Control初始化 7527次阅读
- 8253初始化程序分享_8253应用案例 2w次阅读
- 8259a初始化的步骤及代码介绍 2.8w次阅读
- 机械计数器结构及原理图 4.5w次阅读
下载排行
本周
- 15V精密CMOS运算放大器PC6100数据手册
- 0.97 MB | 3次下载 | 免费
- 2舵机控制程序案例
- 12.46 MB | 2次下载 | 1 积分
- 3轻触三功能+常按 SOS 功能手筒LED驱动ICSD3302数据手册
- 0.60 MB | 2次下载 | 2 积分
- 4采用QFN封装且具有2.95V-6V 输入的LMZ30604 4A电源模块数据表
- 1.86MB | 2次下载 | 免费
- 56位固定方向低偏斜低抖动电压转换器或缓冲器TXV0106数据表
- 2.19MB | 2次下载 | 免费
- 642V、5A SIMPLE SWITCHER® 特性降压稳压器LM22677/-Q1数据表
- 1.54MB | 1次下载 | 免费
- 73.5V 至 36V 输入、1V 至 20V 输出、6A 电源模块LMZM33606数据表
- 1.97MB | 1次下载 | 免费
- 830VP沟道MOSFET AO3407A数据手册
- 0.18 MB | 1次下载 | 免费
本月
- 1STM32国内外发展现状
- 1.15 MB | 18次下载 | 免费
- 2传感芯片选型指南
- 3.60 MB | 13次下载 | 免费
- 3储能电源市场分析
- 7.99 MB | 11次下载 | 免费
- 4TDK电容器产品指南
- 11.88 MB | 9次下载 | 1 积分
- 5ATmega8芯片中文手册
- 2.45 MB | 8次下载 | 1 积分
- 62A多电池高效开关充电器AN_SY6912A中文资料规格书
- 1.43 MB | 7次下载 | 免费
- 7储能电源市场分析报告
- 2.61 MB | 7次下载 | 免费
- 816A 输出电流,高可靠、高效率 同步降压转换器PCD3201产品手册
- 0.47 MB | 6次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935093次下载 | 免费
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420050次下载 | 免费
- 3Altium DXP2002下载入口
- 未知 | 233068次下载 | 免费
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191317次下载 | 免费
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183317次下载 | 免费
- 6labview8.5下载
- 未知 | 81567次下载 | 免费
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73789次下载 | 免费
- 8NI LabVIEW中实现3D视觉的工具和技术
- 未知 | 70088次下载 | 免费
评论
查看更多