本文为 FPGA 学习总结,欢迎分享交流。
运行环境
- windows10
- Vivado 2018.3
- Modelsim 10.7
如何对编写的代码进行仿真?仿真对于我们 FPGA 的设计十分重要,我们用几个简单的例子进行讲解。
Test bench 文件结构
完整的测试文件结构为:
module Test_bench();//通常无输入无输出
/* 信号或变量声明定义
逻辑设计中输入对应 reg 型
逻辑设计中输出对应 wire 型
使用 initial 或 always 语句产生激励
例化待测试模块
监控和比较输出响应 */
endmodule
根据实际情况会有顺序调换或简化。
时钟激励设计
/*----------------------------------------------------------------
时钟激励产生方法一:50%占空比时钟
----------------------------------------------------------------*/
parameter ClockPeriod=10;
initial
begin
clk_i=0;
forever // 一直产生时钟
#(ClockPeriod/2) clk_i=~clk_i;
end
/*----------------------------------------------------------------
时钟激励产生方法二:50%占空比时钟
----------------------------------------------------------------*/
initial
begin
clk_i=0;
always #(ClockPeriod/2) clk_i=~clk_i; // #代表延迟
end
/*----------------------------------------------------------------
时钟激励产生方法四:产生固定数量的时钟脉冲
----------------------------------------------------------------*/
initial
begin
clk_i=0;
repeat(6) // 下面的代码执行6次,产生3个周期的时钟
#(ClockPeriod/2) clk_i=~clk_i;
end
/*----------------------------------------------------------------
时钟激励产生方法五:产生非占空比为 50%的时钟(用于特殊场合)
----------------------------------------------------------------*/
initial
begin
clk_i=0;
forever
begin
#((ClockPeriod/2)-2) clk_i=0;
#((ClockPeriod/2)+2) clk_i=1;
end
end
复位信号设计
/*----------------------------------------------------------------
复位信号产生方法一:异步复位
----------------------------------------------------------------*/
initial
begin
rst_n_i=1;
#100; // 延迟后产生,必须在时钟振荡后才起作用
rst_n_i=