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,在第三行
标签:文件,begin,code,--,QuartusII,Modelsim,testbench,乘法器,out 来源: https://blog.csdn.net/weixin_45730885/article/details/117444794