【乐斗龙神】HDL硬件编程入门

简介: 【乐斗龙神】HDL硬件编程入门

HDL硬件编程入门

image-20220917165727633.assets/image-20220917165727633-1663513123715-25.png)

FPGA设计流程

  • 写硬件描述语言VerilogHDL,实现你要的功能
  • a 设计定义,让LED一秒闪烁一次
  • b 设计输出,编写逻辑(verilog代码),画逻辑图,使用IP核
  • c 综合工具,(EDA软件,Vivado)提供,对逻辑进行分析,得到逻辑门级别的电路内容
  • d 功能仿真,(Modelsim软件),逻辑能够实现,一般数字逻辑仿真和真实结果是接近的
  • e 布局布线,(Vavido)在器件上实现逻辑功能,10ns内完成

image-20220917172754926.assets/image-20220917172754926-1663513123715-26.png)

  • f 分析性能

    • 1 时序仿真,(Modelsim)十分耗时,通常使用静态时序分析
    • 2 静态时序分析(Vivado),让逻辑在目标板上正常工作,查看运行结果 ILA,测试目标板
  • g 板级调试
  • h OK

基本流程(设计+仿真+板级验证)

1 目的(led点亮)

点亮一个led灯

这个灯的io管脚信息是T14

image-20220918200654140.assets/image-20220918200654140-1663513123715-27.png)

2 工程环境建立

硬件环境:

上位机

笔记本电脑,Windows操作系统

嵌入板

FPGA-ZYPQ-7010,芯片型号

软件环境:

新建一个以名为 led_test 的工程。 双击桌面 VIVADO 2018.3 图标打开 VIVADO 开发环境,按如下操作步骤进行。
1、 起始页——点击 Create Project
2、 向导起始页——点击 Next
3、 Project Name 界面——工程名 led_test,选择设置工程路径,点击 Next
4、 Project Type 界面——选择 RTL Project,点击 Next
5、 Add Source 界面——点击 Next
6、 Add Existing IP 界面——点击 Next
7、 Add Constraints 界面——点击 Next
8、 Default Part 界面——Family 选择 Zynq-7000,Package 选择 clg400, Speed grade 选择-1,在过滤后的结果中选择目标器件为 xc7z010clg400-1,点击 Next 建立好的工程如下图所示

image-20220918201136974.assets/image-20220918201136974-1663513123715-28.png)

3 设计代码

3.1 设计内容design HDL source

本设计的端口列表和源码比较简单,内容如下:

module led_test(  
    output led  
);      

assign led = 1;     

endmodule 

注意没有红色语法错误

本工程只有一个模块,模块名为 led_test。该模块内只有一个模块端口,即 led。在模块内定义了模块端口 led 后,需在模块端口外对其进行声明,声明其 为 output 输出类型的端口。 使用 assign 语句,可以对输出端口 led 进行电平信号赋值,逻辑 1 表示其为 高电平。定义完成后输入 endmodule 结束模块的代码描述。 这样即实现了对 led 输出逻辑高电平的数字逻辑设计。按照前面的分析内容, FPGA 芯片通过 T14 管脚输出该信号,即可实现点亮开发板上 LED 指示灯 D5 这 样一个目标。

3.2 电路逻辑RTL分析

Register Transisitor Logic analysis

RTL 描述与分析功能可以对工程的 RTL 结构、语法进行查看,进而可以分析并修正逻辑上的错误。在 RTL 描述与分析阶段后的原理图网表是由与 FPGA 底层部件无关的逻辑符号来体现的。

1)如图所示,在 Flow Navigator 下,找到 RTL Analysis,并展开。单击 Open Elaborated Design。

image-20220918203108616.assets/image-20220918203108616-1663513123716-29.png)

2)单击图中的 Schematic,打开 RTL 原理图,如图所示。该原理图是依据 HDL 描述生成的,根据该原理图可以查看设计是否达到要求并加以修改。在 Vivado 的设计过程中,用户可以在 RTL 分析、综合、实现阶段后打开设计原理 图或设计网表来进行观察。在 RTL 描述与分析阶段后的原理图网表是由与 FPGA 底层部件无关的逻辑符号来体现的。

读者可在后续过程中看到综合阶段 后的原理图,在综合阶段后的原理图中的逻辑原件便是由 FPGA 中的底层部件 来构建的了。

image-20220918203423178.assets/image-20220918203423178-1663513123716-30.png)

3.3 综合Synthesis

经过综合后,RTL 设计转化为基于 FPGA 底层资源的电路网表。接下来就 是将设计进行布局布线。但是在布局布线之前必须将电路端口与 FPGA 的 I/O 端 口进行关联起来。

1、 如图所示,在 Flow Navigator 窗口下,找到 Synthesis 并展开。

2、 在展开项中,单击 Run Synthesis 开始对设计进行综合。

image-20220918225426785.assets/image-20220918225426785-1663513123716-31.png)

3、 当综合完成后,出现 Synthesis Completed 对话框,如图所示。可以选择 Open Synthesis Design 来打开综合后的设计进行观察,单击 OK 按钮。

4、 查看FPGA器件的基本单元情况

在 Synthesis Design 下单击 Schematic 即可打开。显然,在综 合后的原理图视图中,电路网表即采用 FPGA 器件中拥有的基本元件来 搭建了,如图中的 LUT6 查找表。

5、 查看基本单元的内部映射关系

此时,我们可以查看 LUT6 的内部映射关系。在原理图窗口内选择 LUT6 对应的 Cell。在 Sources 窗口下方的 Cell Properties 窗口中,选择 Truth Table,可以看到逻辑表达式 O=!I5 + !I0 & !I1 & I5 + !I0 & I1 & I2 & !I4 + !I0 & !I2 & I3 & !I4 以及真值表映射关系,如图所示。

6、 查看资源利用情况

单 击 Synthesis Design 下 的 Report Utilization 选项。出现 Report Utilization 对话框,如图所示。通过 Report Utilization 功能,我们可以 得到工具针对当前设计的资源利用率的详细报告。

在 Vivado 下方打开了 Utilization-utilization_1 标签窗口。如图所示,给 出了该设计的资源利用率

1)Slice LUTs(切片逻辑)使用了 36 个,总共 53200,利用率 0.07%;

2)FF 使用了 27 个,总共 106400 个,利用率 0.03%。

3)IO 使用了 3 个,总共 125 个,利用率 2.40%。

4 激励创建及仿真测试

将上面的设计内容进行分析和综合直至没有错误以及警告后,按开发流程 接下来进入激励创建及仿真测试环节。由于本实验比较简单,仿真环节在此节 内容中暂时不作讲解,但是作为一个 FPGA 数字逻辑的完整的开发流程,仿真 环节是必不可少的,这一要求请务必引起各位初学者的重视。

4.1 仿真内容simulation HDL source

5 板级调试与板级验证

5.1 添加设计约束IOPlan

通常,一个设计中的 FPGA 不会是独立使用的,FPGA 一定会与其他外设、 接口相连接,并且 FPGA 通常需要有外部时钟的接入。因此,FPGA 设计需要在 工具中指定对应的 IO 引脚位置以及输入时钟的信息,即需要用户对 IO 进行约 束以及进行时钟周期等时序约束。在 Vivado 中,用户可通过 I/O Planner 进行 IO 约束,使用 Timing Constraints Manager 指定期望设计性能即进行设计的时序约 束。本节将重点介绍如何为设计添加 IO 约束。为设计添加 IO 约束的方法非常 简单:

1、 首先在综合完成后的设计上点击 Open Synthesized Design 来打开综合后 的设计;

2、 在菜单栏视图处下拉 I/O Planning view 点击进入 IO 规划视图界面,如 图所示

选择之后会进入 IO 分配界面,按照里面分配引脚和电平标准,之后点击保 存按钮如图所示。

点击保存按钮后会弹出保存约束文件窗口,我们输入 led_flash,然后我们点 击 OK,保存约束文件

5.2 设计实现Implement

Vivado 下的 FPGA 设计实现是指由 FPGA 实现工具将 FPGA 综合后的电路 网表针某个具体指定的器件以及相关物理与性能约束进行优化、布局、布线并 生成最终可以下载到 FPGA 芯片配置文件的过程。

在 Vivado 下进行设计实现的具体步骤如下:

1、 在 Flow Navigator 下找到并展开 Implementation,如图所示。单击 RunImplementation 选项,开始执行实现过程。

2、 实现过程完成后会出现如图所示的 Implementation Completed 对话框。 选择 Open Implemented Design,单击 OK 按钮。

3、 在图中的 Open Implemented Design 变为 Implemented Design。Vivado 右 上角出现器件的结构图,如下图左边所示。调整结构图,可以清晰地 看到该设计用到的器件和器件之间的连线(即布线),如下图右边所示。

5.3 比特流文件的生成与下载

设计的最后一步是将 Vivado 实现产生的网表文件转化为比特流文件,并且 将比特流文件下载到 FPGA 芯片中。比特流文件用于完成对 FPGA 进行配置。

1、 比特流文件的生成

如图所示,在 Flow Navigator 窗口下找到 Program and Debug 选项并展开。 单击 Generate Bitstream 选项,开始生成比特流文件。

2、 比特流文件的下载

1)比特流文件生成后,会出现如图所示的 Bitstream Generation Completed 对 话框,选择 Open Hardware Manager 选项。单击 OK 按钮。

2)在图中,Open Hardware Manager 变为 Hardware Manager;如果没有,则 单Open Hardware Manager 打开 Hardware Manager。Vivado 右上侧出现 Hardware Manager 界面,如图所示。

3)在 Hardware Manager 界面中,单击 Auto Connect 连接设备。如果 Auto Connect 无法连接,则需要检查开发板是否上电或驱动是否安装成功,方法 可以参阅前述章节 Vivado 2018.3 软件安装的驱动安装相关内容。

4)在 Hardware Manager 界面下出现选中的设备,如图所示。

5)在 Hardware Manager 界面中找到并右键单击 xc7z020_1(1),在浮动菜单 中单击Program Device…选项。

6)如图所示,出现 Program Device 对话框。默认情况下比特流文件会自动选 中,如果没有单击“…”按钮,找到并选中 led_flash.bit 文件。在 Program Device 对话框中单击 Program 按钮,开始下载。

5.4 板级验证

在开发板上验证该设计。验证方法:程序下载完成后,观察 LED 0 灯。查 看是否一秒钟亮一次,一秒钟灭一次。 至此,我们便完成了 Vivado 工具的整个基本设计流程。

helloFPGALED 二路选择器

image-20220917181958047.assets/image-20220917181958047-1663513123716-32.png)

目录
相关文章
|
网络协议
深入理解HTTP的基础知识:请求-响应过程解析
在当今数字化的世界中,理解HTTP协议的基础知识变得至关重要。本文将带您深入探索HTTP的核心概念和请求-响应的过程。HTTP是一种用于在计算机之间传输超文本数据的协议,它不仅定义了数据交换的规则和格式,还为不同的应用程序提供了通信和交换信息的能力。通过深入了解HTTP的请求-响应过程,我们将更好地理解网络通信的基本原理,为构建和优化网络应用打下坚实的基础。
1152 2
|
Kubernetes 负载均衡 安全
【K8S系列】深入解析k8s网络插件—Cilium
【K8S系列】深入解析k8s网络插件—Cilium
2122 1
|
Linux 开发者
Red Hat Subscription 开发者订阅与激活订阅
使用命令时会出现以提示,命令不可正常使用。 根据提示信息,我们可以知道,需要通过Red Hat Subscription,开发者订阅。 进入开发者页面 https://developers.redhat.com/products/rhel/download,下滑看到No-cost RHEL for developers subscription 面向开发人员的免费 RHEL 订阅,选择Activate your subscription 激活你的订阅;
3162 1
|
5月前
|
数据采集 人工智能 分布式计算
国内代理IP:企业高效计算的隐形加速器
在数字经济时代,国内代理IP成为企业突破网络限制、提升计算效能的关键工具。本文解析代理IP技术原理,展示其在网络身份伪装、数据采集优化及隐私保护等方面的价值。通过商业情报采集、广告验证、价格监控和隐私计算等场景应用,结合速度、成本、安全三重维度,阐述代理IP对企业计算效能的提升作用,并探讨未来技术发展趋势。掌握代理IP的正确使用方法,是企业数字化升级的重要一步。
150 6
|
9月前
|
算法 数据处理 Python
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
Savitzky-Golay滤波器是一种基于局部多项式回归的数字滤波器,广泛应用于信号处理领域。它通过线性最小二乘法拟合低阶多项式到滑动窗口中的数据点,在降噪的同时保持信号的关键特征,如峰值和谷值。本文介绍了该滤波器的原理、实现及应用,展示了其在Python中的具体实现,并分析了不同参数对滤波效果的影响。适合需要保持信号特征的应用场景。
1016 11
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
|
机器学习/深度学习 人工智能 自然语言处理
智能计算有哪些
智能计算有哪些
|
监控 数据挖掘 API
案例研究:如何通过淘宝天猫商品销量数据分析竞争对手
淘宝天猫的商品销量数据接口主要用于商品数据分析和监控业务,通过这些接口可以获取商品的实时销量、30天销量以及总销量等详细信息。以下是关于这一数据接口的详细介绍:
|
11月前
|
设计模式 程序员 C#
C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
WinForm MDI 模式就像是有超能力一般,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用。不过,也要小心管理好子窗体们的生命周期哦,否则一不小心就会出现一些意想不到的小bug
883 0
|
缓存 前端开发 PHP
【超详细】php实现扫码关注微信公众号系统/网站自动注册登录
【超详细】php实现扫码关注微信公众号系统/网站自动注册登录
628 0
|
开发者 C# Windows
WPF与游戏开发:当桌面应用遇见游戏梦想——利用Windows Presentation Foundation打造属于你的2D游戏世界,从环境搭建到代码实践全面解析新兴开发路径
【8月更文挑战第31天】随着游戏开发技术的进步,WPF作为.NET Framework的一部分,凭借其图形渲染能力和灵活的UI设计,成为桌面游戏开发的新选择。本文通过技术综述和示例代码,介绍如何利用WPF进行游戏开发。首先确保安装最新版Visual Studio并创建WPF项目。接着,通过XAML设计游戏界面,并在C#中实现游戏逻辑,如玩家控制和障碍物碰撞检测。示例展示了创建基本2D游戏的过程,包括角色移动和碰撞处理。通过本文,WPF开发者可更好地理解并应用游戏开发技术,创造吸引人的桌面游戏。
677 0