基于System-Verilog的FPGA设计与仿真
前言
实验要求:
学习和掌握System Verilog基本语法,在DE2-115开发板上重新设计之前做过的Verilog练习,如流水灯、全加器或者VGA显示、超声波测距 等,并完成 testbench 仿真。
实验器材:
DE2-115开发板
Quartus II 软件
System Verilog 课件和教材
先前的Verilog代码
一、System Verilog基本语法
- 基本结构:了解模块(module)、端口声明(input/output)、wire和reg数据类型。
- 数据类型:掌握位宽(bit-width)、整数(integer)、实数(real)等数据类型。
- 运算符:学习位运算符、算术运算符、关系运算符和逻辑运算符。
- 控制流:理解条件语句(if, case)、循环语句(for, while, repeat, foreach)。
- 并发构造:学习always块、initial块和assign语句。
- 任务和函数:掌握如何定义和调用任务(task)和函数(function)。
- 包和库:了解如何使用包(package)和库(library)来组织代码。
- 接口:学习如何定义和使用接口(interface)。
- 参数化模块:掌握如何创建参数化模块,以提高代码的复用性。
二、设计Verilog练习
-
流水灯:设计一个模块,通过循环点亮LED灯,实现流水灯效果。
-
全加器:实现一个1位全加器,然后扩展到多位。
-
VGA显示:设计VGA控制器,生成基本的VGA信号,并在屏幕上显示图形或文字。
-
蜂鸣器控制:设计一个蜂鸣器控制模块,能够切换蜂鸣器状态。
三、编写testbench仿真
-
创建testbench模块:创建一个独立的模块来测试你的设计。
-
初始化测试环境:在testbench中初始化输入信号和期望的输出。
-
生成测试向量:编写代码来模拟不同的输入条件,观察输出是否符合预期。
-
监视和断言:使用 m o n i t o r 、 monitor、 monitor、display、$finish等系统任务来监视信号和结束仿真。使用assert语句来验证设计的正确性。
-
运行仿真:在仿真工具(如ModelSim或Vivado)中运行testbench。
四、实验内容
1、流水灯testbench示例
module led_chaser_tb;
// 参数定义LED数量
parameter NUM_LEDS = 8;
// 测试信号
logic [NUM_LEDS-1:0] leds;
// 时钟信号
logic clk;
// 生成时钟
always #10 clk = ~clk;
// 实例化被测试模块
led_chaser uut (
.clk(clk),
.leds