FPGA学习.PART5
1. 概述
在此次实验中仅使用FPGA的PL部分,适用于所有可以在Vivado中使用的FPGA
FPGA设计至少包含两部分文件:硬件描述文件、引脚约束文件;
逻辑仿真旨在通过生成激励信号,观察输出是否符合预期,
并进一步分析模块设计的合理性;
2. 实验步骤
2.1 新建工程(略)
2.2 创建硬件描述文件
文件代码如下,一个简易的38译码器,将 1 左移 SW 位,并输出左移后的八位 LED 寄存器;
1 2 3 4 5 6
| module dec38( input [2:0] SW, output [7:0]LED ); assign LED = 1 << SW; endmodule
|
2.3 创建引脚约束文件
文件代码如下,很冗杂手敲容易出错,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #set_property PACKAGE_PIN Y9 [get_ports {clk}] #set_property IOSTANDARD LVCMOS33 [get_ports {clk}]
set_property PACKAGE_PIN T22 [get_ports {LED[0]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[0]}] set_property PACKAGE_PIN T21 [get_ports {LED[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[1]}] set_property PACKAGE_PIN U22 [get_ports {LED[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[2]}] set_property PACKAGE_PIN U21 [get_ports {LED[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[3]}] set_property PACKAGE_PIN V22 [get_ports {LED[4]} set_property IOSTANDARD LVCMOS33 [get_ports {LED[4]}] set_property PACKAGE_PIN W22 [get_ports {LED[5]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[5]}] set_property PACKAGE_PIN U19 [get_ports {LED[6]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[6]}] set_property PACKAGE_PIN U14 [get_ports {LED[7]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED[7]}]
set_property PACKAGE_PIN F22 [get_ports {SW[0]}] set_property IOSTANDARD LVCMOS33 [get_ports {SW[0]}] set_property PACKAGE_PIN G22 [get_ports {SW[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {SW[1]}] set_property PACKAGE_PIN H22 [get_ports {SW[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {SW[2]}]
|
2.4 创建仿真激励文件
文件代码如下,从 0 到 7更改寄存器 sw 中的值,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| `timescale 1ns / 1ps
module decoder38_top; reg [2:0] sw; wire [7:0] led;
initial begin sw = 0; #100 sw = 1; #100 sw = 2; #100 sw = 3; #100 sw = 4; #100 sw = 5; #100 sw = 6; #100 sw = 7; #100; $stop; end
dec38 u1 ( .SW(sw), .LED(led) ); endmodule
|
2.5 进行仿真
左侧工作区,RTL Analysis -> Elaborated Design 展开,选择 Schematic 即可生成原理图;
如下图所示,
左侧工作区,SYNTHESIS -> Open Synthesized Design展开,选择 Schematic 即可生成综合后的原理图,如下图所示,
左侧工作区,SIMULATION -> Run Simulation 选择 Run Post-Implementation Timing Simulation即执行后的时序仿真,也是最接近真实的时序波形;
相比较之下,其他几个选项分别对应:
- behavioral simulation 行为级仿真,也就是功能仿真
- Post-Synthesis Function Simulation 综合后的功能能仿真
- Post-Synthesis Timing Simulation 综合后带时序信息的仿真
- Post-Implementation Function Simulation 布线后的功能仿真
行为仿真如下图,明显无延迟,为功能性仿真;
实现后的时序仿真如下图,
存在较为明显的时延与跳变,综合而言能够符合设计预期,
是一个能够正常进行工作的38译码器。
2.6 上板观察现象
左侧工作区,PROGRAM AND DEBUG -> Open Hardware Manager 打开硬件管理,自动连接设计好的文件,烧录文件观察现象。拨动 开关 0 ~ 3 LED 的亮灭符合我们的预期。(较为简易,视频/GIF就不放了)