Verilog HDL——Modelsim仿真

news2024/9/29 13:18:18
常用testbench语法
  • $finish 和 $stop : $finish任务用于终止仿真并跳出仿真器;$stop任务则用于中止仿真。
  • `timescale [time_unit] / [time_precision] :time_unit指定计时和延时的测量单位,time_precision则是指定仿真器的精度。
  • #n :代表延时n个时间轴单位。
  • initial :initial 块执行一次。inital 块内是顺序执行的。一般来给信号赋初值。
  • always :always表示由事件激发反复执行。
操作步骤

仿真程序仍然用上次的一个分频计数程序:

module traffic(Clk_50M, Rst, Clk30, Clk_1Hz);
input Clk_50M, Rst;
output Clk30,Clk_1Hz;


//------------分频器------------------
reg Clk_1Hz;//分频器  50M分频
reg[31:0] Cnt_1Hz;//计数
always@(posedge Clk_50M or negedge Rst)
begin
	if(!Rst)//Rst为0时  进行复位 置初值
		begin
			Cnt_1Hz <= 1;
			Clk_1Hz <= 1;
		end
	else
		begin
			if(Cnt_1Hz >= 2)//为了显示波形这里25000000临时改为2
				begin
					Cnt_1Hz <= 1;//计数器置1
					Clk_1Hz <= ~Clk_1Hz;
				end
			else
				Cnt_1Hz <= Cnt_1Hz +1;//计数
		end
end

//------------计数器------------------
reg[7:0] Cnt30;//计数器
reg Clk30;
always@(posedge Clk_1Hz or negedge Rst)
begin
	if(!Rst)
		begin
			Cnt30 <= 0;
			Clk30 <= 1;
		end
	else
		begin
			if(Cnt30 >= 30)
				begin
					Cnt30 <= 0;//计数到30清零
					Clk30 <= ~Clk30;
				end
			else
			Cnt30 <= Cnt30 + 1;
		end
end


endmodule 

这里的TestBench可以自己编写也可以使用软件自动生产的模版。

首先建立一个波形仿真文件:
在这里插入图片描述
然后,Edit——>Insert——>Insert Node or Bus:
在这里插入图片描述
选择 Run Functional Simulation:

在这里插入图片描述
此时工程文件下会产生simulation文件夹:
在这里插入图片描述
这时选择 Processing——>Start——>Start Test Bench Template Writer
simulation文件夹下的modelsim文件夹内会产生一个TestBench模板

在这里插入图片描述
traffic.vt文件内容:

// Copyright (C) 1991-2013 Altera Corporation
// Your use of Altera Corporation's design tools, logic functions 
// and other software and tools, and its AMPP partner logic 
// functions, and any output files from any of the foregoing 
// (including device programming or simulation files), and any 
// associated documentation or information are expressly subject 
// to the terms and conditions of the Altera Program License 
// Subscription Agreement, Altera MegaCore Function License 
// Agreement, or other applicable license agreement, including, 
// without limitation, that your use is for the sole purpose of 
// programming logic devices manufactured by Altera and sold by 
// Altera or its authorized distributors.  Please refer to the 
// applicable agreement for further details.

// *****************************************************************************
// This file contains a Verilog test bench template that is freely editable to  
// suit user's needs .Comments are provided in each section to help the user    
// fill out necessary details.                                                  
// *****************************************************************************
// Generated on "05/03/2023 19:08:39"
                                                                                
// Verilog Test Bench template for design : traffic
// 
// Simulation tool : ModelSim-Altera (Verilog)
// 

`timescale 1 ps/ 1 ps
module traffic_vlg_tst();
// constants                                           
// general purpose registers
reg eachvec;
// test vector input registers
reg Clk_50M;
reg Rst;
// wires                                               
wire Clk30;
wire Clk_1Hz;

// assign statements (if any)                          
traffic i1 (
// port map - connection between master ports and signals/registers   
	.Clk30(Clk30),
	.Clk_1Hz(Clk_1Hz),
	.Clk_50M(Clk_50M),
	.Rst(Rst)
);
initial                                                
begin                                                  
// code that executes only once                        
// insert code here --> begin                          
                                                       
// --> end                                             
$display("Running testbench");                       
end                                                    
always                                                 
// optional sensitivity list                           
// @(event1 or event2 or .... eventn)                  
begin                                                  
// code executes for every event on sensitivity list   
// insert code here --> begin                          
                                                       
@eachvec;                                              
// --> end                                             
end                                                    
endmodule


这时在工程内新建一个Verilog HDL File,将traffic.vt文件内容复制进去,保存为traffic_vlg_tst.v。
然后在该模版上进行修改:

// Copyright (C) 1991-2013 Altera Corporation
// Your use of Altera Corporation's design tools, logic functions 
// and other software and tools, and its AMPP partner logic 
// functions, and any output files from any of the foregoing 
// (including device programming or simulation files), and any 
// associated documentation or information are expressly subject 
// to the terms and conditions of the Altera Program License 
// Subscription Agreement, Altera MegaCore Function License 
// Agreement, or other applicable license agreement, including, 
// without limitation, that your use is for the sole purpose of 
// programming logic devices manufactured by Altera and sold by 
// Altera or its authorized distributors.  Please refer to the 
// applicable agreement for further details.

// *****************************************************************************
// This file contains a Verilog test bench template that is freely editable to  
// suit user's needs .Comments are provided in each section to help the user    
// fill out necessary details.                                                  
// *****************************************************************************
// Generated on "05/03/2023 15:40:48"
                                                                                
// Verilog Test Bench template for design : traffic
// 
// Simulation tool : ModelSim-Altera (Verilog)
// 

`timescale 1 ps/ 1 ps
module traffic_vlg_tst();
// constants                                           
// general purpose registers
reg eachvec;
// test vector input registers
reg Clk_50M;
reg Rst;
// wires                                               
wire Clk30;
wire Clk_1Hz;

// assign statements (if any)                          
traffic i1 (
// port map - connection between master ports and signals/registers   
	.Clk30(Clk30),
	.Clk_1Hz(Clk_1Hz),
	.Clk_50M(Clk_50M),
	.Rst(Rst)
);
initial                                                
begin                                                  
// code that executes only once                        
// insert code here --> begin                          
	#0 
		Clk_50M = 0;
		Rst = 0;
	#100 
		Rst = 1;
	#8000 $stop;
// --> end                                             
$display("Running testbench");                       
end                           

always #5 Clk_50M <=~ Clk_50M;
                         
//	always                                                 
//	// optional sensitivity list                           
//	// @(event1 or event2 or .... eventn)                  
//	begin                                                  
//	// code executes for every event on sensitivity list   
//	// insert code here --> begin                          
//	always #5 Clk_50M <=~ Clk_50M;
//	@eachvec;                                              
//	// --> end                                             
//	end                                                    
endmodule


点击Assignments——>setting——>EDA Tool Settings——>Simulation

在这里插入图片描述
输入Test bench name,并在添加Test bench and simulation files中选中traffic_vlg_tst.v:
在这里插入图片描述
在这里插入图片描述
然后编译及运行
点击Processing——>Start Compilation,进行编译
编译完成后,点击Tools——>Run Simulation Tool——>RTL Simulation
在这里插入图片描述
然后可以看到仿真结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/486083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7.3 有源滤波电路(1)

对信号的频率具有选择性的电路称为滤波电路&#xff0c;它的功能是使特定频率范围内的信号通过&#xff0c;而阻止其它频率信号通过。有源滤波电路是应用广泛的信号处理电路。 一、滤波电路的基础知识 1、滤波电路的种类 通常&#xff0c;按照滤波电路的工作频带为其命名&am…

C语言从入门到精通第17天(指针和数组联用)

指针和数组联用 不同类型指针变量之间的区别数组的指针指针数组 不同类型指针变量之间的区别 在了解数组和指针联用之前&#xff0c;我们先对指针变量进行补充。我们对比一下int *p1和char *p2的区别&#xff1f; 相同点&#xff1a; 都是指针变量都是用来保存一个内存地址编…

中级软件设计师备考---软件工程1

目录 经典的模型敏捷开发方法【的分类】信息系统开发方法【的分类】结构化设计---内聚与耦合结构化设计---系统结构/模块结构 需求的分类 经典的模型 瀑布模型&#xff1a;最早的一类、适用于需求明确的项目、结构化的典型代表 原型模型&#xff1a;先构造一个建议的系统原型再…

数据治理服务及数据治理应用解决方案

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 一、数据治理概述 (一) 数据治理概念 数据治理是指将数据作为组织资产围绕数据全生命周期而展开的相关管控活动、绩效和风险管理工作的集合&#xff0c;以保障数据及其应用…

Nmap入门到高级【第十章】

预计更新Nmap基础知识 1.1 Nmap简介和历史 1.2 Nmap安装和使用方法 1.3 Nmap扫描技术和扫描选项 Nmap扫描技术 2.1 端口扫描技术 2.2 操作系统检测技术 2.3 服务和应用程序检测技术 2.4 漏洞检测技术 Nmap扫描选项 3.1 扫描类型选项 3.2 过滤器选项 3.3 探测选项 3.4 输出选项…

中间件漏洞(二)nginx解析漏洞

目录 1.漏洞原理分析 2. 利用条件 3. 漏洞复现 1.漏洞原理分析 Nginx的解析漏洞的出现和Nginx的版本没有关系&#xff0c;漏洞的产生是由于php配置问题导致的。 2. 利用条件 # php.ini cgi.fix_pathinfo1 # php-fpm.conf security.limit_extensions 分别解释一下cgi.fix_…

Sentinel --- 隔离和降级、授权规则、规则持久化

一、隔离和降级 限流是一种预防措施&#xff0c;虽然限流可以尽量避免因高并发而引起的服务故障&#xff0c;但服务还会因为其它原因而故障。 而要将这些故障控制在一定范围&#xff0c;避免雪崩&#xff0c;就要靠线程隔离&#xff08;舱壁模式&#xff09;和熔断降级手段了…

HTTP加密

文章目录 原理方式证书 原理 HTTP HTTPS TLS/SSL&#xff08;数据的加密解密层&#xff09; HTTP是应用层的协议&#xff0c;当应用层向下访问的时候并不是直接访问到socket层&#xff0c;而是先通过TLS/SSL加密解密层后再进行后续工作。此时得到的协议就是HTTPS。 举个例…

【五一创作】排序篇:冒泡排序,快速排序的递归与非递归实现(C语言)

目录 前言&#xff1a; 一&#xff1a;冒泡排序 基础思路 完整排序 时间复杂度分析 二&#xff1a;递归实现快速排序 基础思路 单趟排序 (1)双向扫描法 (2)挖坑法 (3)前后指针法(推荐这种) 完整排序 时间复杂度分析 优化 (1)三数取中 (2)小区间优化 三&#xf…

基于Vue3+TS+Vite+Cesium创建项目

基于Vue3TSViteCesium创建项目 基于Vite构建项目安装配置Cesium创建Cesium三维视图运行结果 随着近几年社会的发展&#xff0c;人们对三维可视化的需求也是越来越多&#xff0c;三维GIS如今真的越来越火了&#xff0c;对于做GIS前端开发的人员来说&#xff0c;Cesium开发是绝对…

PLC模糊PID(模糊规则表)

模糊PID的模糊化相关内容,请参看下面的博客文章: PLC模糊控制模糊PID(梯形图实现+算法分析)_RXXW_Dor的博客-CSDN博客博途PLC的模糊PID控制详细内容请查看下面的博客文章:Matlab仿真+博途PLC模糊PID控制完整SCL源代码参考(带模糊和普通PID切换功能)_博途怎么实现模糊pid_…

linux驱动开发 - 08_内核定时器

文章目录 1 Linux 时间管理和内核定时器简介1.1 内核时间管理简介1.2 内核定时器简介1、init_timer 函数2、add_timer 函数3、del_timer 函数4、del_timer_sync 函数5、mod_timer 函数 1.3 Linux 内核短延时函数 2 实验程序编写2.1 定时器驱动程序编写2.2 编写测试 APP 3 编译驱…

【Linux】管道

目录 一、前言 二、管道 1、匿名管道 1.1、基本原理 1.2、代码实现 1.3、管道的特点 1.4、基于管道的简单设计 2、命名管道 2.1、匿名管道与命名管道的区别 2.2、代码实现命名管道通信 一、前言 为了满足各种需求&#xff0c;进程之间是需要通信的。进程间通信的主要目…

【VM服务管家】专题_7.5 异常收集

目录 5.1 信息收集&#xff1a;异常报错信息收集的方法5.2 日志等级&#xff1a;日志等级调低的方法 5.1 信息收集&#xff1a;异常报错信息收集的方法 描述 环境&#xff1a;VM4.0以上VS2013及以上 现象&#xff1a;未知问题、偶发问题、崩溃问题如何收集信息提供给研发排查。…

【Linux】基础IO——库函数与系统调用的关系

目录 引言1.文件操作语言方案&#xff08;C的文件操作接口-库函数&#xff09;打开文件、关闭文件——fopen、fclose打开文件的模式 写入——fput、printf读取——fgets 2.文件操作系统方案&#xff08;系统的文件操作接口-系统调用&#xff09;打开文件、关闭文件——open、cl…

【游戏逆向】Lua游戏逆向及破解方法介绍

前言 随着手游的发展&#xff0c;越来越多的Cocos-lua端游开发者转移到手游平台。Lua脚本编写逻辑的手游也是越来越多&#xff0c;如梦幻西游、刀塔传奇、开心消消乐、游龙英雄、奇迹暖暖、疾风猎人、万万没想到等手游。随着Lua手游的增加&#xff0c;其安全性更值得关注&…

python基本数据类型---数字字符串

引入 在内存中存储的数据可以是不同的数据类型。比如名字可以使用字符串存储&#xff0c;年龄可以使用数字存储&#xff0c;python有6种基本数据类型&#xff0c;用于各种数据的存储&#xff0c;分别是&#xff1a;numbers(数字类型)、string(字符串)、List(列表)、Tuple(元组…

哈希表企业应用-DNA的字符串检测

DNA的字符串检测-引言 若干年后, ikun DNA 检测部成立,专门对 这些ikun的解析检测 突然发现已经完全控制不了 因为学生已经会了 而且是太会了 所以DNA采用 以下视频测试: ikun必进曲 ikun必经曲 ikun必阶曲 如何感受到了吧!,如果你现在唱跳并且还Rap 还有打篮球 还有铁山靠 那…

自动化运维工具Ansible之playbooks剧本

目录 一、playbooks 1、playbooks简述 2、playbooks剧本格式 3、playbooks组成部分 4、playbooks启动及检测 5、playbooks模块实战实例1 6、vars模块实战实例2 7、when模块实战实例3 8、with_items循环模块实战实例4 9、template模块实战实例5 10、tags模块实战实例…

有研究员公开了一个解析并提取 Dell PFS BIOS 固件的工具(上)

导语&#xff1a;研究员公开了一个解析并提取 Dell PFS BIOS 固件的工具。 Dell PFS BIOS提取器 介绍 解析 Dell PFS BIOS 映像并提取其 SPI/BIOS/UEFI 固件组件。它支持所有Dell PFS 修订版和格式&#xff0c;包括最初在 ThinOS 包中LZMA压缩、ZLIB压缩或拆分成块的格式。输出…