FPGA杂记2——modelsim仿真

2024-01-01 13:33
文章标签 仿真 fpga modelsim 杂记

本文主要是介绍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 beginclk <= 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;
endendmodule

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

  • 参数的定义:用于设定时钟周期
  • 接口申明:定义模块的输入与输出接口,这里需要注意的是 测试模块的输入接口是设计模块的输出接口(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_workspacermdir /S /Q work
del vsim.wlf
del transcript.:end

这篇关于FPGA杂记2——modelsim仿真的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/559402

相关文章

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

FPGA编译与部署方法全方位介绍

FPGA编译与部署是FPGA开发中的核心环节,涉及从代码编写、调试到将设计部署到FPGA硬件的全过程。这个流程需要经过创建项目、编写FPGA VI、模拟调试、编译生成比特流文件,最后将设计部署到硬件上运行。编译的特点在于并行执行能力、定制化硬件实现以及复杂的时钟管理。通过LabVIEW的FPGA模块和NI硬件,可以快速完成开发和部署,尤其适用于复杂控制与高性能数据处理系统。 1. FPG

FPGA开发:条件语句 × 循环语句

条件语句 if_else语句 if_else语句,用来判断是否满足所给定的条件,根据判断的结果(真或假)决定执行给出的两种操作之一。 if(表达式)语句; 例如: if(a>b) out1=int1; if(表达式)         语句1; else         语句2; 例如: if(a>b)out1=int1;elseout1=int2; if(表达式1) 语句1; els

Matlab simulink建模与仿真 第十章(模型扩展功能库)

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、模型扩展功能库中的模块概览         注:下面不会对Block Support Table模块进行介绍。 二、基于触发的和基于时间的线性化模块 1、Trigger-Based Linearization基于触发的线性化模块 (1)每次当模块受到触发时,都会调用linmod或者dlinmod函数

FPGA开发:模块 × 实例化

模块的结构 对于C语言,其基本单元为函数。与此类似,Verilog的基本设计单元称之为"模块"(block)。对于整个项目的设计思想就是模块套模块。 一个模块由两个部分组成:一部分描述接口,一部分描述逻辑功能。 每个Verilog模块包含4个部分:端口定义、IO说明、内部信号声明、功能定义。且位于module和endmodule之间,如下: module block(a,b,c);inpu

AMEsim和Simulink联合仿真生成新的.mexw64液压模型文件

AMEsim和Simulink进行联合仿真非常重要的就是AMEsim经过第四阶段Simulation会在相同文件下面生成一个与AMEsim液压模型相同名字的.mexw64文件,在Simulink进行联合仿真的S-Function需要找的也就是这个文件,只不过输入的时候除了液压模型名字之外,后面有一个短下划线。 简而言之: AMEsim和Simulink联合仿真, 首先是需要AMEsim软

【自动驾驶】控制算法(八)横向控制Ⅱ | Carsim 与 Matlab 联合仿真基本操作

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作,荣幸在CSDN首发🐒 若您觉得内容有价值,还请评论告知一声,以便更多人受益。 转载请注明出处,尊重原创,从我做起。 👍 点赞、评论、收藏,三连走一波,让我们一起养成好习惯😜 在这里,您将

Matlab/Simulink和AMEsim联合仿真(以PSO-PID算法为例)

目录 安装软件和配置环境变量 Matlab/Simulink和AMEsim联合仿真详细流程 非常重要的一点 Simulink模型和AMEsim模型用S-Function建立连接 从AMEsim软件打开Matlab Matlab里的设置 Matlab的.m文件修改(对于PSO-PID算法) 运行程序 我印象中好像做过Matlab/Simulink和AMEsim联合仿真的分享似的