【FPGA基础入门实践】Verilog 基本项目操作逐步演示

简介: 【FPGA基础入门实践】Verilog 基本项目操作逐步演示


0x00 回顾:AND/OR/NOT 逻辑的特性

AND:与门可以具有两个或更多的输入,并返回一个输出。当所有输入值都为 1 时,输出值为 1。如果输入值中有任何一个为 0,则输出值为 0。

OR:或门可以具有两个或更多的输入,并返回一个输出。如果输入值中至少有一个为 1,则输出值为 1。如果所有输入值都为 0,则输出值为 0。

NOT:非门具有一个输入和一个输出。当输入值为 1 时,输出值为 0;当输入值为0时,输出值为1。

晶体管级逻辑门 AND/OR/NOT 的结构:

0x01 扇出的概念(Fan-out)

扇出 (fan-out) 是一个定义单个逻辑门能够驱动的数字信号输入最大量的专业术语。

扇出即输出可从输出设备输入信号的电路的数量。它的英文含义是“分散”。扇出的大小表示一个输出被多个其他逻辑门的输入使用。如果删除太大,电路可能会受损或信号无法正确传递,因此需要解决这个问题。可以通过将一个信号分割为两个部分进行处理或创建缓冲区等方法来减小扇出的影响。

0x02 传播延迟(Propagation Delay)

传播延迟 (Propagation Delay) 是指逻辑电路从接收输入信号到产生输出结果所需的平均时间。它受逻辑门的数量及其延迟时间的影响,表示如下:

其中,Propagation Delay)是传播延迟时间,(Propagation delay time from High to Low)是输出响应输入信号从逻辑 1 变为逻辑 0 所需的时间,(Propagation delay time from Low to High)是输出响应输入信号从逻辑 0 变为逻辑 1 所需的时间。

延迟时间随着通过门数的增加而增加,因此在设计逻辑电路时必须牢记这一点,以提高效率。

0x03 Verilog 中的 task 和 function

Verilog 中的任务 (task) 和函数 (function) 是用来减少代码重复的关键字,就像 C 语言中的函数一样。换句话说,在具有大量相同行为的项目中,任务和函数可以用来简化代码。任务和函数都可以有局部变量、全局变量、寄存器、时间变量、整数、实数等,但不能有导线。 它们也只包含行为语法,没有始终和初始语法。具体区别如下:

① task:

  • 可以使用 task 和 endtask 将开始和结束包围起来进行声明。
  • 可以包含延迟、时序和事件控制语句。
  • 可以有一个或多个输入、输出、input 等参数,也可以没有任何参数。
  • 内部可以同时调用任务(task)和函数(function)。
  • 如果不使用时间延迟功能,可以进行综合。
  • 可以在非零仿真时间下执行。
  • 可以通过命令语句调用,但不能在表达式内部使用。

② function:

  • 可以使用 "function" 和 "endfunction" 将开始和结束包围起来进行声明。
  • 不能包含延迟、时序和事件控制语句。
  • 至少有一个以上的输入,并且只有一个返回值。
  • 内部只能调用函数(function)。
  • 可以进行综合,并用于组合电路建模。
  • 总是在仿真时间为 0 时执行。

0x04 FPGA 的工作原理

描述FPGA的工作原理:使用Vivado和Verilog语言验证FPGA工作时,可以使用以下程序。

Verilog 编码(Verilog Coding)

在 Vivado 中编写 Verilog 设计源代码和测试平台代码来控制门的行为。在这种情况下,变量值中的 0 或 1 可以作为 FPGA 中的 "开关 "来实现。(开关打开 = 1,开关关闭 = 0,等等)。

设备分配(Device assignment)

要操作FPGA,需要为项目分配相应的器件。在 Vivado 中,这可以在 Project Manager > Settings > Project device 菜单中完成,设备应为 xc7a75tfgg484-1 (Artix7)。Artix-7 FPGA 是 FPGA 器件,可为逻辑、信号处理、嵌入式存储器、LVDS I/O、存储器接口和收发器提供优化的性能。

引脚分配(Pin assignment)

引脚只是 Verilog 代码中的输入和输出变量。您可以通过 Vivado 的 Project Manager > Add Sources > Add或create constraints > Create File 创建一个 .xdc 文件,并从 FPGA 引脚列表和Verilog 源的端口链接您要分配的引脚。举个例子:

set_property -dict {PACKAGE_PIN G21 IOSTANDARD LVCMOS33} [get_ports a] [get_ports a] [get_ports a] [get_ports a [get_ports a]

综合/实现(Synthesis/Implement)

在 Vivado 中,可以通过 Synthesis > Run Synthesis、Implementation > Run Implemented > Open Implemented Design 创建综合设计和布线设计。

器件配置(Device Configuration)

设备配置可以通过 Vivado 中的“编程和调试”>“生成比特流”>“打开硬件管理器”来完成。

FPGA 行为

在 Vivado 中,单击 Program and debug > Open Hardware Manager > Open Target > Auto Connect,然后在 Project[title] > Project[title]_runs > impl_1 文件夹中添加 debug_nets.ltx 文件。

Program and debug > Program Device > Debug probes file > Select the debug_nets.ltx file added above and specify the Program device(xc7a75t_0) to connect to the external FPGA device。

0x05 具体操作过程

Device assignment:

Device assignment → Device : xc7a75tfgg484

Pin assignment

链接你希望在 FPGA pin list 中分配的 Pin 和 Verilog 源端口:

set_property -dict {PACKAGE_PIN G21 IOSTANDARD LVCMOS33} [get_ports a]
set_property -dict {PACKAGE_PIN F15 IOSTANDARD LVCMOS33} [get_ports y]

Synthesis / Implementation:

Device configuration:

我的板子比较老,是 FPGA Starter Kit Ⅲ:

初始化状态如下所示:

Open Target →  点击 auto connect,自动连接:

选择 Program Device:

🚩 输出结果演示:

📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2022.9.20
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

Introduction to Logic and Computer Design, Alan Marcovitz, McGrawHill, 2008

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

相关文章
|
11天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的变步长LMS自适应滤波器verilog实现,包括testbench
### 自适应滤波器仿真与实现简介 本项目基于Vivado2022a实现了变步长LMS自适应滤波器的FPGA设计。通过动态调整步长因子,该滤波器在收敛速度和稳态误差之间取得良好平衡,适用于信道均衡、噪声消除等信号处理应用。Verilog代码展示了关键模块如延迟单元和LMS更新逻辑。仿真结果验证了算法的有效性,具体操作可参考配套视频。
106 74
|
19天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的信号发生器verilog实现,可以输出方波,脉冲波,m序列以及正弦波,可调整输出信号频率
本项目基于Vivado2019.2实现信号发生器,可输出方波、脉冲波、m随机序列和正弦波。完整程序无水印,含详细中文注释与操作视频。FPGA技术使信号发生器精度高、稳定性强、功能多样,适用于电子工程、通信等领域。方波、脉冲波、m序列及正弦波的生成原理分别介绍,代码核心部分展示。
|
10天前
|
存储 编解码 算法
基于FPGA的直接数字频率合成器verilog实现,包含testbench
本项目基于Vivado 2019.2实现DDS算法,提供完整无水印运行效果预览。DDS(直接数字频率合成器)通过数字信号处理技术生成特定频率和相位的正弦波,核心组件包括相位累加器、正弦查找表和DAC。相位累加器在每个时钟周期累加频率控制字,正弦查找表根据相位值输出幅度,DAC将数字信号转换为模拟电压。项目代码包含详细中文注释及操作视频。
|
6月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误码率统计模块
升级版FPGA MSK调制解调系统集成AWGN信道模型,支持在Vivado 2019.2中设置不同SNR仿真误码率。示例SNR值从0到15,结果展示解调质量随SNR提升。MATLAB仿真验证了MSK性能,图片显示了仿真结果。 ### 理论概要 研究聚焦于软件无线电中的MSK调制解调,利用Verilog实现。MSK是一种相位连续、恒包络的二进制调制技术,优点包括频谱效率高。系统采用无核设计,关键模块包括调制器、解调器和误码检测。复位、输入数据、中频信号等关键信号通过Verilog描述,并通过Chipscope在线观察。
127 6
基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误码率统计模块
|
6月前
|
异构计算
FPGA入门(6):数码管静态/动态显示(二)
FPGA入门(6):数码管静态/动态显示(二)
86 10
|
6月前
|
C语言 芯片 异构计算
FPGA新起点V1开发板(六-语法篇)——verilog简介+基础语法
FPGA新起点V1开发板(六-语法篇)——verilog简介+基础语法
102 1
|
6月前
|
缓存 异构计算
FPGA入门(7):IP核调用(二)
FPGA入门(7):IP核调用(二)
58 0
|
6月前
|
异构计算
FPGA入门(7):IP核调用(一)
FPGA入门(7):IP核调用(一)
136 0
|
6月前
|
异构计算
FPGA入门(6):数码管静态/动态显示(一)
FPGA入门(6):数码管静态/动态显示
67 0
|
6月前
|
异构计算
FPGA入门(5):控制LED灯
FPGA入门(5):控制LED灯
71 0

热门文章

最新文章