Quartus 18.1和Modelsim 10.4联合仿真详细过程

Quartus和Modelsim联合仿真详细过程

软件

  • Modelsim SE-64 10.4
  • Quartus Prime 18.1 Lite Edition

关联软件

启动quartus,菜单栏选择Tools->options,左侧选择EDA Tool Options,在modelsim一栏选择modelsim安装路径下的win64文件夹。

创建工程

File->New Project Wizard,选择存放项目路径及工程名字,路径不要有汉字,空格及其他乱七八糟的符号,next。

然后选择对应芯片型号,如果仅是写写程序,随便选一个凑合凑合next。

仿真工具选择ModelSim,语言格式Verilog HDL,一路next直到Finlish。

编写及编译

File->New,选择Verilog HDL。

以一个简单的序列检测器为例,程序如下。项目顶层模块名需要和工程名字一致,由于该项目就一个模块,所以模块名为p224_1。

module p224_1(x,clk,rst,z);
input x,clk,rst;
output z;

reg [2:0] state;	//状态
wire z;

parameter IDLE = 3'd0,
			 A = 3'd1,
		 	 B = 3'd2,
		 	 C = 3'd3,
		 	 D = 3'd4,
			 E = 3'd5,
			 F = 3'd6,
			 G = 3'd7;
assign z = (state==D && x==0)?1:0;
		//状态为D且又检测到x为0,此时输出z为1
always@(posedge clk or negedge rst)
if(!rst)
	begin 
		state <= IDLE; 
	end
else
	casex(state)
		IDLE:
			if(x==1)
				state <= A;
			else
				state <= IDLE;
		A:
			if(x==0)
				state <= B;
			else
				state <= A;
		B:
			if(x==0)
				state <= C;
			else
				state <= F;
		C:
			if(x==1)
				state <= D;
			else
				state <= G;
		D:
			if(x==0)
				state <= E;
			else
				state <= A;
		E:
			if(x==0)
				state <= C;
			else
				state <= A;
		F:
			if(x==1)
				state <= A;
			else
				state <= B;
		G:
			if(x==1)
				state <= F;
			else
				state <= B;
		default:state <= IDLE;
	endcase
endmodule

保存后,点击界面上方蓝色三角形按钮,或菜单栏processing->Start compilation开始编译,在左下角message窗口查看结果。

编写测试文件

菜单栏选择processing->Start->Start Test Bench Template Writer,此时针对该工程会生成一个test bench的模板。

打开该文件,File->open,工程文件夹下simulation->modelsim->工程名.vt,注意右下角文件类型选择All Files

编写测试程序,复制测试程序的模块名备用,即该示例中的p224_1_vlg_tst,保存即可。

`timescale 1 ns/ 1 ns

module p224_1_vlg_tst();

reg clk;
reg rst;
reg [23:0]data;                                             
wire z,x;
assign x=data[23];
                       
p224_1 i1 (  
	.clk(clk),
	.rst(rst),
	.x(x),
	.z(z)
);
initial                                                
	begin     
		clk = 1;
		rst = 1;
		#2 rst = 0;
		#30 rst = 1;
		data = 20'b1100_1001_0000_1001_0100;
		#20000 $stop;
	end  
//时钟
always #20 clk <= ~clk;
always @(posedge clk)
	begin 
		#2 data={data[22:0],data[23]}; 
	end                                          
                                    
endmodule

接着菜单栏打开Assignment->Settings,左侧EDA Tool Settings->simulation。选择Test Benches

在打开的窗口中填入刚刚复制的测试程序的模块名,接着选择测试文件(工程名.vt),点击add会添加到下方窗口中,最后一路OK即可。

仿真

各类仿真的介绍
https://www.cnblogs.com/lvtu/articles/5553608.html
https://blog.csdn.net/i13919135998/article/details/52458685

菜单栏Tools->Run simulation Tool,RTL simulation为前仿真(综合后仿真,即综合后功能仿真,验证逻辑功能是否正确),gata level simulation为后仿真(时序仿真,综合后考虑线路延时),若测试程序出现错误,会在modelsim的窗口中提示。

记录遇到的一个错误

上述程序为Verilog 数字系统教程第三版(夏宇闻 编著)中的例题,在写程序时不小心打错了个字母

assign z = (state==D && x==0)?1:0;		//正确
assign z = (state==D && z==0)?1:0;		//错误

且编译没有报错,在仿真时提示Iteration limit reached at time 340 ns,即超过迭代次数,仅仿真了几个周期就停止运行。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页