写在前面:本章主要内容为了解和确认 NAND/NOR/XOR 门的行为,并使用Verilog实现,生成输入信号后通过模拟,验证每个门的操作,并使用 FPGA 来验证 Verilog 实现的电路的行为。
本章目录:
0x03 4-input AOI(AND OR Inverter) gate
Ⅰ. 前置知识
0x00 与非门(NAND)
如果所有输入均为High (1),则输出为Low (0),在其他情况下,将产生High (1) 输出。
- NAND 是 AND 运算符的否定结果
布尔表达式中以 "负乘法" 形式表现:
0x01 或非门(NOR)
如果所有输入均为 Low (0),则输出为 High(1),其中一个输入为高 (1) 则产生低功率 (0)。
- NOR 是 OR 运算符的否定结果
布尔表达式中以 "否定合" 形式表现:
0x02 异或门(XOR)
如果 两个值不相同,则异或结果为1。如果 两个值相同,异或结果为0。
Ⅱ. 练习(Assignment)
0x00 4-input NAND gate
比较 AB 的布尔表达式,完成 A 和 B 的 Verilog 代码,通过 Simulation 结果进行比较。
💬 Design source:
-
`timescale
1ns /
1
ps
-
-
module
input_4_NAND
(
-
// Input the var
-
input a, b, c, d,
-
// Output the var
-
output e, f, g
-
);
-
-
// NAND = NOT + AND
-
assign e = ~(a & b);
// a and b then inv
-
assign f = ~(e & c);
// e and c then inv
-
assign g = ~(f & d);
// f and d then inv
-
-
endmodule
💬 Simulation:
-
`timescale
1ns /
1ps
-
-
module input_4_NAND_tb;
-
reg aa, bb, cc, dd;
-
wire e, f, g;
-
-
input_4_NAND u_input_4_NAND (
-
.a(aa),
-
.b(bb),
-
.c(cc),
-
.d(dd),
-
.e(e),
-
.f(f),
-
.g(g)
-
);
-
-
initial aa =
1'b0;
-
initial bb =
1'b0;
-
initial cc =
1'b0;
-
initial dd =
1'b0;
-
-
always aa = #
100 ~aa;
-
always bb = #
200 ~bb;
-
always cc = #
400 ~cc;
-
always dd = #
800 ~dd;
-
-
initial begin
-
#
1600
-
$finish;
-
end
-
-
endmodule
🚩 运行结果如下:
💡 解读:在 assign
语句中,用取反运算符 ~
和或运算符 |
实现了 4 个输入取反或运算,并将结果分别赋值给输出变量 e
, f
, g
。
0x01 4-input NOR gate
比较 AB 的布尔表达式,完成 A 和 B 的 Verilog 代码,通过 Simulation 结果进行比较。
💬 Design source:
-
`timescale
1ns /
1
ps
-
-
module
input_4_NOR
(
-
/* Input the var */
-
input a, b, c, d,
-
/* Output the var */
-
output e, f, g
-
);
-
-
/* NOR = NOT + OR */
-
assign e = ~(a | b);
-
assign f = ~(e | c);
-
assign g = ~(f | d);
-
-
endmodule
💬 Testbench:
-
`timescale
1ns /
1ps
-
-
// input_4_NOR_tb
-
-
module input_4_NOR_tb;
-
// input
-
reg aa, bb, cc, dd;
-
// output
-
wire e, f, g;
-
-
input_4_NOR u_input_4_NOR (
-
.a(aa),
-
.b(bb),
-
.c(cc),
-
.d(dd),
-
-
.e(e),
-
.f(f),
-
.g(g)
-
);
-
-
initial aa =
1'b0;
-
initial bb =
1'b0;
-
initial cc =
1'b0;
-
initial dd =
1'b0;
-
-
always aa = #
100 ~aa;
-
always bb = #
200 ~bb;
-
always cc = #
400 ~cc;
-
always dd = #
800 ~dd;
-
-
initial begin
-
#
1600
-
$finish;
-
end
-
-
endmodule
🚩 运行结果如下:
0x02 4-input XOR gate
比较 AB 的布尔表达式,完成 A 和 B 的 Verilog 代码,通过 Simulation 结果进行比较。
💬 Design source:
-
`timescale
1ns /
1
ps
-
-
module
input_4_XOR
(
-
/* Input the var */
-
input a, b, c, d,
-
/* Output the var */
-
output e, f, g
-
);
-
-
/* XOR */
-
assign e = a ^ b;
-
assign f = e ^ c;
-
assign g = f ^ d;
-
-
endmodule
💬 Testbench:
-
`timescale
1ns /
1ps
-
-
module input_4_XOR_tb;
-
// input
-
reg aa, bb, cc, dd;
-
// output
-
wire e, f, g;
-
-
input_4_XOR u_input_4_XOR (
-
.a(aa),
-
.b(bb),
-
.c(cc),
-
.d(dd),
-
-
.e(e),
-
.f(f),
-
.g(g)
-
);
-
-
initial aa =
1'b0;
-
initial bb =
1'b0;
-
initial cc =
1'b0;
-
initial dd =
1'b0;
-
-
always aa = #
100 ~aa;
-
always bb = #
200 ~bb;
-
always cc = #
400 ~cc;
-
always dd = #
800 ~dd;
-
-
initial begin
-
#
1600
-
$finish;
-
end
-
-
endmodule
🚩 运行结果如下:
0x03 4-input AOI(AND OR Inverter) gate
💬 Design source:
-
`timescale
1ns /
1
ps
-
-
-
module
inpu_4_AOI
(
-
/* Input the var */
-
input a, b, c, d,
-
/* Output the var */
-
output e, f, g
-
);
-
-
/* AOI */
-
assign e = a & b;
-
assign f = e & c;
-
assign g = ~(e | f);
-
-
endmodule
💬 Testbench:
-
`timescale
1ns /
1ps
-
-
module inpu_4_AOI_tb;
-
// input
-
reg aa, bb, cc, dd;
-
// output
-
wire e, f, g;
-
-
inpu_4_AOI u_inpu_4_AOI (
-
.a(aa),
-
.b(bb),
-
.c(cc),
-
.d(dd),
-
-
.e(e),
-
.f(f),
-
.g(g)
-
);
-
-
initial aa =
1'b0;
-
initial bb =
1'b0;
-
initial cc =
1'b0;
-
initial dd =
1'b0;
-
-
always aa = #
100 ~aa;
-
always bb = #
200 ~bb;
-
always cc = #
400 ~cc;
-
always dd = #
800 ~dd;
-
-
initial begin
-
#
1600
-
$finish;
-
end
-
-
endmodule
🚩 运行结果如下:
-
📌 [ 笔者 ] 王亦优
-
📃 [ 更新 ]
2022.9
.20
-
❌ [ 勘误 ]
/* 暂无 */
-
📜 [ 声明 ] 由于作者水平有限,本文有错误和不准确之处在所难免,
-
本人也很想知道这些错误,恳望读者批评指正!
📜 参考资料 Introduction to Logic and Computer Design, Alan Marcovitz, McGrawHill, 2008 Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. . 百度百科[EB/OL]. []. https://baike.baidu.com/. |
转载:https://blog.csdn.net/weixin_50502862/article/details/128603167