上一篇文章介绍了怎么使用ISE新建一个项目进行波形仿真,本篇利用上一篇的半加器模块实现全加器功能。
1、因为要用到半加器模块,所以我们在添加文件的时候需要把已经写好的半加器verilog文件加到工程里来
2、把signals里边涉及到的信号都加进来,可以看到完整的RTL图
3、可以看到原理图如图所示
4、在新建测试文件这里我们选择全加器
5、测试代码编写完毕,运行结束可以观察到如图所示波形
附录代码:
1、半加器
module half_adder(
input wire in_1,
input wire in_2,
output wire sum,
output wire count
);
assign {count,sum} = in_1 + in_2;
endmodule
2、全加器
module full_adder(
input wire in_1,
input wire in_2,
input wire cin,
output wire count,
output wire sum
);
wire h0_sum;
wire h0_count;
wire h1_count;
// 对两个半加器分别进行实例化
half_adder half_adder_inst0(
.in_1 (in_1),
.in_2 (in_2),
.sum (h0_sum),
.count (h0_count)
);
half_adder half_adder_inst1(
.in_1 (cin),
.in_2 (h0_sum),
.sum (sum),
.count (h1_count)
);
assign count = (h0_count | h1_count);
endmodule
仿真代码
`timescale 1ns / 1ns
module tb_full_adder;
// Inputs
reg in_1;
reg cin;
reg in_2;
// Outputs
wire count;
wire sum;
initial begin
// Initialize Inputs
in_1 = 0;
in_2 = 0;
cin = 0;
end
initial begin
$timeformat(-9,0,"ns",6);
$monitor("@time %t:in_1=%b,in_2=%b,cin=%b,sum=%b,count=%b",$time,in_1,in_2,cin,sum,count);
end
// Instantiate the Unit Under Test (UUT)
full_adder uut (
.in_1(in_1),
.in_2(in_2),
.cin(cin),
.count(count),
.sum(sum)
);
always #10 in_1 <= {$random} % 2;
always #10 in_2 <= {$random} % 2;
always #10 cin <= {$random} % 2;
endmodule
补充几个好用的快捷键:
1、ctrl+D,快速复制当前行
2、alt+光标,列选中
3、先选中内容,ctrl+鼠标拖拽,可以快速复制内容到任意位置