单独启动modelsim进行时序仿真

习惯了quartus和modelsim进行联合仿真,单独使用modelsim进行仿真的次数很少,导致有些细节很容易忘记,因此写下此博客来记录,方便以后回顾。

第一步:打开modelsim–>file–>new–>project

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
或者选择添加已经存在(exising file)的文件。

第二步:编译

在这里插入图片描述
在这里插入图片描述

第三步:开始仿真

在这里插入图片描述
在这里插入图片描述

这里注意选中testbench文件进行仿真

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文件修改后需要重新编译

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
按住键盘的上下键可以切换已经输入过的命令,然后回车即可。

测试的例子

模块文件:

`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input data,
	input data_valid,
	output reg match
	);
reg [3:0] tmp;
 always@(posedge clk or negedge rst_n ) begin
	 if(!rst_n)begin
		 match<='b0;
		 tmp<='b0;
	 end
	 else if(!data_valid) begin
		 tmp<=tmp;
	 end
	 else begin
		 tmp<={tmp[2:0],data};
	 end
		
 end
always@(posedge clk) begin
	if(data_valid=='b0) begin
		match<=1'b0;
	end
	else if(tmp==4'b0110)
		match<='b1;
	else
		match<=0;
end


endmodule

tb.v文件

`timescale 1ns/1ns
module testbench();

	reg clk,rst_n;
	reg data;
	reg data_valid;
	wire match;
parameter clockPeriod=10;

//时钟信号产生模块	
initial begin
	clk=0;
	forever 
	#(clockPeriod/2) clk= ~clk;//时钟经过(clockPeriod/2)ns就翻转一次

end	

//给信号赋予初始值	
initial begin
	//clk = 0;
	rst_n = 0;
	data_valid=0;
	#5 rst_n=1;//延迟5ns后,复位信号拉高
	data_valid=1;
	  
	#10 data=0;
	#10 data=1;
	#10 data=1;
	#10 data=0;
	#10 data=0;
	#10 data=1;
	#10 data=1;
	#10 data=0;

end   


//测试的模块。例化
sequence_detect dut(
	.clk(clk),
	.rst_n(rst_n),

	.data(data),
	.data_valid(data_valid),
	.match(match)
);
endmodule

最后的波形
在这里插入图片描述

今天是国庆假期,假期愉快。祝愿我们的祖国生日快乐!繁荣昌盛!

--晓凡 2022102日于桂林书
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值