1. 首页
  2. EDA技术

Quartus II和Modelsim联合仿真Altera IP核(FIFO)

前面的文章都是基于Modelsim SE的独立仿真FPGA开发代码或者Altera IP核,但是由于Altera版的modesim已经集成了常用的IP库,因此仿真起来就更为方便。所以,这里就介绍一下Quartus II和Modelsim的联合仿真。

一、建立Quartus II工程

大概步骤就不做详细介绍,只简单介绍一下建立工程后生成FIFO IP核的几个设置:

图1 FIFO同步、异步模式设置
图2 FIFO读请求模式设置

注:下面将对上述的几个设置分别做一下仿真,也就是同步FIFO、异步FIFO,读请求后数据的输出时序等。

Quartus II工程建立后,先对工程进行编译,编译无误后,开始做仿真前的准备工作。

二、建立激励文件

通过Quartus II的相关设置,可以生成一个.vt的激励文件模板,如下图所示。

图3 生成Testbench模板

激励文件默认保存在工程文件/simulation/modelsim文件夹下,随后就是对激励文件进行相应的编写。这里是对FIFO的一个写数据读数据的激励文件。

`timescale 1 ns/ 100 ps
module fifo_test_vlg_tst();
// constants                                           

// test vector input registers
reg clock;
reg [15:0] data_in;
reg rdreq;
reg wrreq;
// wires                                               
wire rdempty;
wire fifo_full_flag;
wire [15:0]  data_out;

reg clk_25m;
reg rst_n;
reg rdempty_temp;
reg fifo_full_flag_temp;

// assign statements (if any)                          
as_fifo i1 (
// port map - connection between master ports and signals/registers   
	.data(data_in),
	.wrreq(1'b1),
	.wrclk(wrreq),
	.rdreq(1'b1),
	.rdclk(!rdreq),
	.wrfull(fifo_full_flag),
	.rdempty(rdempty),
	.q(data_out)
);
//

initial begin
#0 clk_25m = 1'b0;
   rst_n = 1'b0;
#100 rst_n = 1'b1;
end

// 25MHz
always #20 clk_25m = ~clk_25m;

always@(posedge clk_25m or negedge rst_n)
	if(!rst_n) begin
		data_in <= 16'd0;
		fifo_full_flag_temp <= 1'b0;
	end
	else if(fifo_full_flag)
		fifo_full_flag_temp <= fifo_full_flag;

always@(posedge clk_25m or negedge rst_n)
	if(!rst_n) begin
		data_in <= 16'd0;
		wrreq <= 1'b0;
		rdreq <= 1'b0;
	end
	else if(fifo_full_flag_temp) begin
		wrreq <= 0;
		data_in <= 0;
		rdreq <= ~rdreq;
	end
	else begin
		wrreq <= ~wrreq;
		data_in <= data_in + 1;
	end
endmodule

三、仿真前的设置

准备好待测文件和激励文件之后,就要对仿真做一个简单的设置,如下图所示。

1) Tools——>Options——>EDA Tool Options

图4 设置仿真工具(全局)

2) Assignments——>EDA Tool Settings

图5 设置仿真选项
图6 添加Testbench文件
图7 添加Testbench文件
图8 添加后的Testbench文件

有时候也会将待测文件也添加到这里,防止出现“”的错误。

按照上述步骤设置好仿真后,再次编译文件,下面就开始仿真了。

四、同步FIFO的仿真

Tools——>Run Simulation Tools——>RTL Simulation,Quartus II自动调用modelsim仿真,并按照设定的时间仿真结束,下面是同步FIFO的仿真结果。

图9 同步FIFO开始写数据
图10 同步FIFO写满数据,开始读取数据
图11 同步FIFO读完数据

五、异步FIFO的仿真

仿真结果如下:

图12 异步FIFO开始写数据
图13 异步FIFO写满数据,开始读取数据
图14 异步FIFO读完数据

六、读请求操作模式的仿真

下面是对normal模式和show-ahead模式的仿真对比,写入FIFO的第一个数据为100;

1. normal模式

在fifo_rdreq有效后的第一个rdclk上升沿,输出写入的第一个数据100;

图15 读请求normal模式

2. show-ahead模式

在fifo_rdreq有效后立马就能读到第一个写入的数据100,因为读指针指向地址的数据已经提前输出到了fifo_q端,在fifo_rdreq有效后的rdclk上升沿接着输出下一个内存单元的数据;

图16 读请求show-ahead模式

扫码关注尚为网微信公众号

尚为网微信公众号
每天发布半导体汽车电子最新资讯和前沿技术,关注一波,没准就用上了。

原创文章,作者:sunev,如若转载,请注明出处:https://www.sunev.cn/eda/679.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注