第一步 新建工程
新建工程选择开发板,进入vivado界面,这里就不多说了。
第二步 添加design souce
这一步就是写我们要测试的Verilog模块,因为只是仿真,所以我们不需要综合和实现,也因此我个人认为,在design souce里面的文件就不需要按照顶层到底层的方式写,而是将需要测试的模块都放在里面。
这里我添加了两个文件,分别是两种方式实现的38译码器:
其中各个文件的代码如下:
//decoder_3_8.v
`timescale 1ns / 1ps
module decoder_3_8(add,decode);
input[3-1:0] add;
output[7:0] decode;
assign decode = 8'h1 << add;
endmodule
//decoder_3_8_2.v
`timescale 1ns / 1ps
module decoder_3_8_2(
input wire[2:0] a,
output reg[7:0] y
);
integer i;
always @(a)
begin
for (i=0;i<8;i=i+1)
begin
if (a==i)
y[i]<=1;
else y[i]<=0;
end
end
endmodule
还可以看另一种写法如下,不过我没有添加到工程里面:
module q_decode_38(data_in,data_out);
input[2:0] data_in; //端口声明
output[7:0] data_out;
reg[7:0] data_out;
always@(data_in)
begin
case(data_in)
3'd0:data_out = 8'b0000_0001;
3'd1:data_out = 8'b0000_0010;
3'd2:data_out = 8'b0000_0100;
3'd3:data_out = 8'b0000_1000;
3'd4:data_out = 8'b0001_0000;
3'd5:data_out = 8'b0010_0000;
3'd6:data_out = 8'b0100_0000;
3'd7:data_out = 8'b1000_0000;
endcase
end
endmodule
第三步 编写testbench
点击add source,添加simulasion source,我这里命名为testbench.v。
testbench代码如下:
//testbench.v
`timescale 1ns / 1ps
module testbench; // declare testbench name
reg clock;
reg [2:0] add_count;
wire[7:0] decode;
wire[7:0] decode2;
initial begin
clock = 0;
add_count = 0;
repeat(16) #50
begin
clock <= ~clock;
add_count <= add_count + 1;
end
$stop;
end
decoder_3_8 d38(.add(add_count),
.decode(decode));
decoder_3_8_2 d382(.a(add_count),
.y(decode2));
endmodule
第四步 设置simulation
进入simulation setting。
第五步 运行仿真
点击run simulation。因为仿真不会告诉你哪里错了,所以如果仿真失败,可以点击综合(run synthesis)看看报错的说明。
观察波形: