电子发烧友App

硬声App

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

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

3天内不再提示
电子发烧友网>电子资料下载>电子资料>带有初始化信号的0-9加/减计数器

带有初始化信号的0-9加/减计数器

2023-06-16 | zip | 0.00 MB | 次下载 | 免费

资料介绍

描述

目标:该项目的主要目标是展示高级综合设计流程在实现数字系统中的能力和能力。

由于这是我在 hackster 中的第一个项目,因此我尝试逐步解释所有细节。如果您有兴趣学习高级合成技术来设计数字系统,请参阅此处

项目描述:在这个项目中,我将设计一个带有初始化信号的 0-9 加/减计数器。图 1 显示了该项目的概览。

 
poYBAGN6wVCAOB5iAABrgwsi9yE138.png
图1
 

为了实现这个项目,我使用了 Vivado Design Suite – HLx Editions 提供的 Xilinx HLS 平台。此外,我将使用 Basys 3 评估板作为目标 FPGA 平台。图 2 显示了板上最终递增/递减计数器的布局。右侧的 7 段显示计数器。UP 按钮用于向上计数,DOWN 按钮用于向下计数。INIT 按钮初始化计数器。用“INIT value”表示的四个滑动开关用于输入初始化编号。此外,四个 LED 显示该值。

 
pYYBAGN6wVWAeoq_AALP5clvVuw339.png
图 2
 

我们分三个阶段来实施这个项目:C/C++ 描述逻辑综合电路板编程

第 1 阶段:C/C++ 描述(Vivado-HLS 项目)

1- 运行 Vivado-HLS IDE 并创建一个新项目。

 
pYYBAGN6wVeAFRcCAACPUwUZDus670.png
图 3
 

2- 在创建新项目向导的第一页中,插入“counter-vhls”作为项目名称,并为项目文件选择适当的位置。

 
poYBAGN6wVmACRJNAABWdYlrjic637.png
图 4
 

3-选择“计数器”作为顶级功能名称。

 
poYBAGN6wVuAPGkiAABhFpuH9As097.png
图 5
 

4- 在“解决方案配置”页面中,单击省略号按钮选择 FPGA 平台。

 
pYYBAGN6wV2Abus6AABgpYGWUQo175.png
图 6
 

5- 设备选择对话框将打开。点击Boards,找到digilent vendor,选择Basys3 board,点击OK。

 
poYBAGN6wWCAM403AAB-PVTSncQ952.png
图 7
 

6- 在 Source 文件夹下创建两个名为“counter.cpp”和“counter.h”的新文件。

7- 在 Test Bench 文件夹下创建两个名为“counter-tb.cpp”和“counter-tb.h”的新文件。

 
poYBAGN6wWKATxoQAACSUzsSpHE174.png
图 8
 

8-让我们编写设计头文件如下。如下图所示,该文件中的代码分为三个部分:

1- 首先,由于我们要使用 HLS 任意精度数据类型,我们应该包含“ap_int.h”头文件。2- 其次,我们定义了一些稍后在设计中使用的数据类型 3- 最后,我们定义了一个常量数组,用于保存对应于从 0 到 9 的数字的 7 段代码。

 
pYYBAGN6wWSAaI_2AACAG-Zfjkw249.png
图 9
 

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_presseddown_pressed被声明为静态变量以保存按钮的历史记录。number变量保持计数器状态,因此定义为静态变量。

4-设置输出:此部分将 INIT 值发送到 LED 并启用右侧 7 段。

5-初始化:如果reset_counter信号被激活,这个if 语句初始化计数器状态。

6-向上计数:这部分由两个if 语句组成第一个检查是否按下了向上按钮。第二个if检查 UP 按钮是否已被释放。

7-向下计数:这部分与向上计数部分非常相似。

8- 7 段码:最后一段发出计数器状态对应的 7 段码。

 
poYBAGN6wWaAT6AnAAEgqfPg46o486.png
图 10
 

10- 现在,我们需要一个 C/C++ 测试平台来测试设计。可以在此处找到测试台文件测试台分为三个步骤:

— 生成测试向量, — 将测试向量应用于设计, — 最后,将硬件输出与黄金模型的输出进行比较并报告任何差异

11- 现在我们可以通过单击工具栏中的图标来运行 C 模拟

 
pYYBAGN6wWmAI7s4AACEkfmnmYI440.png
图 11
 

12-成功完成C-Simulation后,我们可以运行高级综合。

 
poYBAGN6wWuAKa0QAACEDBZt4xo391.png
图 12
 

图 13 显示了综合报告的部分内容。它有三个主要部分:

1- 时序信息 2- 资源利用 3- 端口接口

 
poYBAGN6wW2Ae2EkAAEoBcMcA6w782.png
图 13
 

13- 最后,我们应该通过单击其图标来生成和导出设计 RTL-IP。

 
pYYBAGN6wW-AOefpAACC4k6zbDg667.png
图 14
 

第 2 阶段:逻辑综合(Vivado 项目)

现在,我们已准备好进行逻辑综合和生成 FPGA 比特流。

1-创建一个名为counter-vivado的新Vivado项目。请注意,该项目没有任何源文件。

 
pYYBAGN6wXKAM-uSAACBt012Prs576.png
图 15
 

2- 不要忘记选择 Basys-3 板作为目标 FPGA。

 
pYYBAGN6wXSADRCKAACeY22hizo218.png
图 16
 

3-创建一个新的块设计

 
poYBAGN6wXaAf3XUAAB0b0FhqgI338.png
图 17
 

4-右键单击图表区域内的某处并选择“IP设置...”选项

5-然后单击设置对话框中IP下的存储库选项。然后点击右侧的加号,浏览到counter HLS项目文件夹。Vivado 在文件夹中搜索任何可能的 IP 并将其添加到其存储库中。

 
poYBAGN6wXiAGe2xAAC-yGE6pLc013.png
图 18
 

6- 右键单击​​图表区域内的某处并选择“添加..”选项。然后搜索计数器 IP 并将其添加到 vivado 项目中。

 
poYBAGN6wXuAKGrLAABCezyevzM476.png
图 19
 

17- 单击图表区域顶部的“运行连接自动化”。

 
pYYBAGN6wX2Acn7EAADBculMvVI988.png
图 20
 

18- 再次单击图表区域顶部的“运行连接自动化”。

 
poYBAGN6wX-AZC5AAAB75I6KA3E852.png
图 21
 

9- 在我们的计数器 IP 上选择未连接的端口并将它们设为外部(右键单击端口名称,您将在下拉菜单中看到“设为外部”选项)。

10-您可以通过选择端口并使用“外部端口属性”窗口来重命名端口。

 
pYYBAGN6wYGAIp-8AAB8kHG2S3g802.png
图 22
 
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
 
poYBAGN6wYSAO6dKAABXyS6la4w542.png
图 23
 

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...”

 
pYYBAGN6wYeAJ8H3AADEt3_bpS8664.png
图 24
 

14- 然后,再次右键单击“Design Sources”文件夹下的“design_1”并选择“Create HDL Wrapper...”

15- 现在单击左侧 Flow Navigator 中 PROGRAM and DEBUG 下的“Generate Bitstream”选项。

 
poYBAGN6wYmAYYabAAGJcB8K-mc927.png
图 25
 

第 3 阶段:电路板编程

1- 最后,对电路板进行编程并检查设计。

 
pYYBAGN6wYyAPpPRAAH73j_PlSk272.png
图 26
 
如果您对使用 HLS 进行设计感兴趣,请查看具有FPGA 高级合成的数字系统设计:组合电路

下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 15V精密CMOS运算放大器PC6100数据手册
  2. 0.97 MB   |  3次下载  |  免费
  3. 2舵机控制程序案例
  4. 12.46 MB   |  2次下载  |  1 积分
  5. 3轻触三功能+常按 SOS 功能手筒LED驱动ICSD3302数据手册
  6. 0.60 MB   |  2次下载  |  2 积分
  7. 4采用QFN封装且具有2.95V-6V 输入的LMZ30604 4A电源模块数据表
  8. 1.86MB   |  2次下载  |  免费
  9. 56位固定方向低偏斜低抖动电压转换器或缓冲器TXV0106数据表
  10. 2.19MB   |  2次下载  |  免费
  11. 642V、5A SIMPLE SWITCHER® 特性降压稳压器LM22677/-Q1数据表
  12. 1.54MB   |  1次下载  |  免费
  13. 73.5V 至 36V 输入、1V 至 20V 输出、6A 电源模块LMZM33606数据表
  14. 1.97MB   |  1次下载  |  免费
  15. 830VP沟道MOSFET AO3407A数据手册
  16. 0.18 MB   |  1次下载  |  免费

本月

  1. 1STM32国内外发展现状
  2. 1.15 MB   |  18次下载  |  免费
  3. 2传感芯片选型指南
  4. 3.60 MB   |  13次下载  |  免费
  5. 3储能电源市场分析
  6. 7.99 MB  |  11次下载  |  免费
  7. 4TDK电容器产品指南
  8. 11.88 MB   |  9次下载  |  1 积分
  9. 5ATmega8芯片中文手册
  10. 2.45 MB   |  8次下载  |  1 积分
  11. 62A多电池高效开关充电器AN_SY6912A中文资料规格书
  12. 1.43 MB   |  7次下载  |  免费
  13. 7储能电源市场分析报告
  14. 2.61 MB   |  7次下载  |  免费
  15. 816A 输出电流,高可靠、高效率 同步降压转换器PCD3201产品手册
  16. 0.47 MB   |  6次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935093次下载  |  免费
  3. 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
  4. 1.48MB  |  420050次下载  |  免费
  5. 3Altium DXP2002下载入口
  6. 未知  |  233068次下载  |  免费
  7. 4电路仿真软件multisim 10.0免费下载
  8. 340992  |  191317次下载  |  免费
  9. 5十天学会AVR单片机与C语言视频教程 下载
  10. 158M  |  183317次下载  |  免费
  11. 6labview8.5下载
  12. 未知  |  81567次下载  |  免费
  13. 7Keil工具MDK-Arm免费下载
  14. 0.02 MB  |  73789次下载  |  免费
  15. 8NI LabVIEW中实现3D视觉的工具和技术
  16. 未知  |  70088次下载  |  免费