一、仿真概述
- 仿真不需要消耗FPGA资源
- 仿真可以应用于设计流程中的多个阶段。它是设计输入后的第一个步骤,也是实现后的最后一个步骤,作为验证设计的最终功能和性能的一部分。仿真可以应用于设计流程中的多个阶段。它是设计输入后的第一个步骤,也是实现后的最后一个步骤,作为验证设计的最终功能和性能的一部分。
- 仿真是一个迭代过程,通常会重复进行,直到满足设计功能和时间需求为止。
1、FPGA设计流程
- 设计输入:包括verilog编写 调用ip核
- RTL仿真:代码语法检查如果有错误修改设计
- 设计综合 布局布线:和硬件相关
- 时序仿真:考虑到总线的延迟 用的不是很多
- 时序分析:比较关键
- 系统上的验证:验证成功就可以在产品上使用了
2、仿真介绍硬件调试简介
功能仿真
功能仿真也称为行为仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致。也可以叫做RTL仿真
时序仿真
时序仿真也称为布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,能较好地反映芯片的实际工作情况。
二、TB文件编写
`timescale 仿真单位/仿真精度 // 1ns/1ps
moudle test_bench();
endmoudle
三、实例
- 右击Simulation Sources 添加 ADdd sources
- 选择第三个
- 在tb_led_twinkle中编写TB代码示例 ( by 正点原子)
`timescale 1ns / 1ps //仿真单位/精度
//
// Company:
// Engineer:
//
// Create Date: 2022/08/05 15:10:07
// Design Name:
// Module Name: tb_led_twinkle
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module tb_led_twinkle();
reg sys_clk;
reg sys_rst_n;
wire [1:0] led ;
initial begin
sys_clk = 1'b0;
sys_rst_n = 1'b0;
#200
sys_rst_n = 1'b1;
end
always #10 sys_clk = ~sys_clk;
led_twinkle u_led_twinkle(
.sys_clk (sys_clk),
.sys_rst_n (sys_rst_n),
.led (led)
);
endmodule
- 通过仿真检查
- 手动添加
- led选择无符号的十进制显示