当前位置:   article > 正文

Quartus 18.1和Modelsim 10.4联合仿真详细过程_quartus prime lite edition仿真

quartus prime lite edition仿真

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

保存后,点击界面上方蓝色三角形按钮,或菜单栏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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

接着菜单栏打开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;		//错误
  • 1
  • 2

且编译没有报错,在仿真时提示Iteration limit reached at time 340 ns

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/832297
推荐阅读
相关标签
  

闽ICP备14008679号