QuartusII和Modelsim联合仿真实现不带时钟信号的简单乘法器

创建项目

找个地方新建文件夹,设置这个项目的路径为那个文件夹,项目名字可以自己取(为了避免后面的不统一,建议和我取一样的)

从空项目创建

不用添加任何文件

选择开发板,我选择的是这个,然后next

选择simulation方式为modelsim,后面选择SystemVerilog,其他不管,然后next

看到项目的一些信息,finish完成,等待创建好

项目创建好后,做一些准备工作

设置modelsim的路径,以便于联合仿真

Tools-options-EDA tools options,将Modelsim的路径设为本机安装的Modelsim的路径下的win64,ok退出

准备好了后,可以开始写代码了

新建一个systemverilog 把乘法器代码沾进去,保存,记得模块module名字和文件名字要一样,保存之后记得运行一下

module basic_base2_mul(x_in, y_in, p_out);	
	parameter 	N = 8,
				M = 4;
	input logic [N-1:0] x_in;
	input logic [M-1:0] y_in;
	output logic [N+M-1:0] p_out;

	integer i;
	reg [M:0] wires[N:0];
	initial 
	   begin
	       for (i=0;i<=N;i=i+1) begin
	          wires[i]=0;
	          end
	   end
	       
	
	always @(x_in or y_in)begin
		for(i=0; i<=N-1; i=i+1)begin
			wires[i+1] = mult_by_1(x_in[i], wires[i][M:1], y_in); 
			p_out[i] = wires[i+1][0];
		end
		p_out[N+M-1:N] = wires[N][M:1];
	end

	function [M:0] mult_by_1;		
		input			xi;
		input  [M-1:0] 	A, B;
	
		if(xi)	mult_by_1 = A + B;
		else	mult_by_1 = A;
	endfunction
endmodule

生成testbench,以便于生成产生激励信号文件,用testbench能自动生成模板

Processing-star-star testbench writer

先这样试一下,如果报了这个错的话,在

assignment的setting里按下面图片操作,改成verilog,记得apply 运用

然后再去star一次,按照上面的步骤,说明生成激励文件了

然后就把激励文件运用到项目中去

在自己的项目的文件夹下会发现自动产生了这个文件(有的版本的QuartusII如果没有自动生成的话,就自己创建一个vt文件放到这个目录下。把下面的代码粘贴进去)

记事本打开,修改一下里面的激励文件的信号

从timescale后面的有一点点修改,我的代码在这里(老师上课的时候打开这个文件的时候我截了图,老师下面第一行用的是ns,但我没改了,其实只要加initial里面的内容就好了)改好之后保存,在quartus里面设置这个文件的路径


`timescale 1 ps/ 1 ps

module basic_base2_mul_vlg_tst();

// constants                                          

// general purpose registers

reg eachvec;

// test vector input registers

reg [7:0] x_in;

reg [3:0] y_in;

// wires                                              

wire [11:0]  p_out;



// assign statements (if any)                         

basic_base2_mul i1 (

// port map - connection between master ports and signals/registers  

       .p_out(p_out),

       .x_in(x_in),

       .y_in(y_in)

);

initial                                               

begin                                                 

// code that executes only once                       

// insert code here --> begin                         

x_in = 8'd0;  y_in = 4'd2;

#30 

x_in = 8'b00000100; y_in = 4'b0100;                 

// --> 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

又来到assignment-setting-simulation,下面选择compile testbench

点击下面浏览文件,进去这个目录找到这个文件,再add,一路ok,apply回去

跳到RTL,转到modelsim

打开到这边等编译完成

点击这边的run可以看到有线出来了

,但是这个时候是没有数据的,因为8‘hxx,后面的xx就代表数据

8意思是8个二进制位,也就是后面的数字时8bit的,h代表这个数字时16进制的,xx其实就告诉你了后面的你就写两位的数字就好了,因为两个十六进制位就相当于八个二进制位(我觉得是这样的)

右键那个位置,force设置数据

设置第一个和第二个,也就是x和y

这是个乘法器,故可得到答案

又再改一次再run就会有各种结果出来

十六进制的乘法满16进1

4*4 = 16

故进1余0得到结果10,在第三行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值