1. 与门的 verilog 实现代码
设计一个与门电路,实现 y = a & b。verilog 代码如下:
module addgate(a, b, y);
input a;
input b;
output y;
wire a;
wire b;
wire y;
assign y = a & b;
endmodule
其中,wire 代表连线。也就是说,a、b、y 都是连线,assign 赋值的意思,就是说 = 号两边直接用线连起来。
2. 测试代码
测试代码如下:
module addtest();
reg p0;
reg p1;
wire p2;
initial begin
p0 = 0;
p1 = 0;
#1
p0 = 1;
#1
p1 = 1;
#1
p0 = 0;
#1
p1 = 1;
#1
$finish;
end
initial begin
$dumpfile ("... .../addgate/addtest.vcd");
$dumpvars;
end
addgate addgate1(
.a(p0),
.b(p1),
.y(p2));
endmodule
3. wire 与 reg 的区别
我们看到变量类型有 wire、reg 两种类型。它们有啥区别呢?wire 就是连线,可以认为输入和输出之间是零时间传输。reg 可以用来保持数据,如果没有新的赋值命令,reg 的之保持不变。具体导致使用方法不同:
- wire 用 assign 语句赋值,例如:
assign y = a & b;
- reg 用 = 号赋值,例如:
p0 = 0;
一般情况下,模块的输入端口设成 wire,因为它必须即使相应外部输入。模块的输出端口设成 reg,因为它需要保障输出结果的稳定性。当然,这也不是绝对的,需要根据实际情况选择。