FPGA杂记2——modelsim仿真

modelsim设计及仿真所需文件

  • Design文件:用于存放设计文件,将所设计的V代码放在文件中,方便在之后的运行程序中调用
  • Testbench文件:用于存放与库文件编译、波形显示、测试脚本相关的代码文件,方便在之后的运行中直接调用 ,其中 .do文件 是modelsim的运行文件,包括测试脚本、设计文件、库文件的编译等
  • .Bat文件:调用可执行的程序

下面我将会详细地按照上述的文件将一些代码写出来作为一个modelsim运行脚本的模板,在此也感谢 特权同学,接下来写到的FPGA杂记基本上源于他的B站讲解视频,同时这是他的淘宝商铺链接,感兴趣的同学也可以在B站中看到他更多的一些视频学习资料,一起学习一起成长


Design文件

这个设计文件在这里也没啥好说的,只要将相应所要实现的功能通过v代码实现,写在各个模块中,需要的话可以通过 例化 进行模块间的调用即可


Testbench文件

compile.do文件
vlib work
vmap work work

#library
#vlog  -work work ../../library/artix7/*.v

#IP
#vlog  -work work ../../../source_code/ROM_IP/rom_controller.v

#SourceCode
vlog  -work work ../design/vlg_design.v

#Testbench
vlog  -work work testbench_top.v 


vsim -voptargs=+acc work.testbench_top

#Add signal into wave window
do wave.do

#run -all

以上的代码主要包括四个部分:Library(库)、IP、SourceCode(设计文件)、Testbench(测试文件),其中

  • Library 加上注释不用执行是因为我们所用的库在刚开始就已经编译好了的,即都是编译好的库文件
  • IP 是在设计中使用到了IP文件(Vivado中是.COE文件)才需要调用IP所在位置的网表文件,相当于做一次编译操作,否则不需要执行,关于IP的Vivado设计我也会在之后的设计中再具体明说
  • SourceCode ——设计原码
  • Testbench ——测试脚本
  • 运行的 do.wave.do 是添加波形,会自动将设计文件中设计的输入与输出接口添加进来
  • 最后一句不加注释的话就会在 compile.do 文件执行最后直接跑仿真,若是加了注释就可以在图形界面中点击run -all的符号
  • vsim那句是调用modelsim工具,在其中打开测试文件脚本
Testbench文件
`timescale 1ns/1ps		//延时单位为1ns,延时精度是1ps
module testbench_top();

//参数定义
`define CLK_PERIORD		10		//时钟周期设置为10ns(100MHz)	


//接口申明
reg clk;
reg rst_n;

	
//对被测试的设计进行例化
vlg_design		uut_vlg_design(
	.clk(clk),
	.rst_n(rst_n)
    );	
	

//复位和时钟产生
//时钟和复位初始化、复位产生
initial begin
	clk <= 0;
	rst_n <= 0;
	#1000;
	rst_n <= 1;
end
	
//时钟产生
always #(`CLK_PERIORD/2) clk = ~clk;	


//测试激励产生
initial begin

	@(posedge rst_n);	//等待复位完成
	@(posedge clk);

	repeat(10) begin
		@(posedge clk);
	end
	
	$stop;
end

endmodule

以上模块包括了以下几个部分:

  • 参数的定义:用于设定时钟周期
  • 接口申明:定义模块的输入与输出接口,这里需要注意的是 测试模块的输入接口是设计模块的输出接口(reg型),测试模块的输出接口是设计模块的输入接口(wire型)
  • 例化测试模块 : 对被测试的设计进行例化操作,才能在本测试模块中调用设计模块
  • 复位与时钟的产生:主要是对复位以及时钟进行初始化操作,并且关闭复位信号,产生时钟
  • 测试激励的产生:在等待复位完成之后,需要给测试模块添加激励(输入)信号,才能使得该测试模块正常运行
wave.do文件
add wave -position insertpoint sim:/testbench_top/*		//添加波形操作

最后我想补充一点,在常见的设计中,Testbench文件夹中应该还有一个文件 glbl.v ,该文件主要的作用是宏定义一些全局信号,这在设计中也是很重要的(具体代码点击这里),如果加入了该文件就需要在 compile.do文件中编译,如下图所示:glbl.v文件引入后的compile.do文件Testbench文件夹所有文件如下图所示:
Testbench文件夹


.Bat文件

这是一个可执行程序,用于快速将所有文件在modelsim中打开,打开脚本会发现里面程序是这样的:

@echo off
@cls
title FPGA Auto Simulation batch script		//打开的窗口名字

echo ModelSim simulation
echo.
echo Press '1' to start simulation
echo.

:input
set INPUT=
set /P INPUT=Type test number: %=%
if "%INPUT%"=="1" goto run1
goto end

:run1
@cls
echo Start Simulation;
echo.
echo.
cd testbench
vsim -do "do compile.do"		//打开modelsim并运行compile.do文件
goto clean_workspace

:clean_workspace

rmdir /S /Q work
del vsim.wlf
del transcript.

:end

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值