在这个项目中,一个简单的2位 比较器 设计和实施 verilog. HDL。提出了真实表,k-map和比较器的最小方程。比较器的Verilog代码由模型模拟,并呈现仿真波形。

2位比较器的规范如下:
- 输入:2位A和B进行比较
- 输出:
- a_greater_b:高如果a> B else low
- a_equal_b:高,如果a = b elly low
- a_less_b:高如果a<B else low
A1
|
A0
|
B1
|
B0
|
a_greater_b.
|
a_equal_b.
|
a_less_b.
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
0
|
0
|
0
|
1
|
0
|
0
|
1
|
0
|
0
|
1
|
0
|
0
|
0
|
1
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
0
|
1
|
0
|
0
|
1
|
0
|
0
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
0
|
1
|
1
|
0
|
0
|
0
|
1
|
0
|
1
|
1
|
1
|
0
|
0
|
1
|
1
|
0
|
0
|
0
|
1
|
0
|
0
|
1
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
0
|
1
|
0
|
0
|
1
|
0
|
1
|
0
|
1
|
1
|
0
|
0
|
1
|
1
|
1
|
0
|
0
|
1
|
0
|
0
|
1
|
1
|
0
|
1
|
1
|
0
|
0
|
1
|
1
|
1
|
0
|
1
|
0
|
0
|
1
|
1
|
1
|
1
|
0
|
1
|
0
|
K-Map表和比较器的相应方程式:
a_greater_b.
|
A1A0
00
|
01
|
11
|
10
|
B1B0
00
|
0
|
1
|
1
|
1
|
01
|
0
|
0
|
1
|
1
|
11
|
0
|
0
|
0
|
0
|
10
|
0
|
0
|
1
|
0
|
a_greater_b = B0 B1 A0 + B1 A1 + A1 A0 B0
= A0 B0 (B1 + A1)+ + B1 A1
= A0 B0 (B1 + A1)+ + B1 A1
a_equal_b.
|
A1A0
00
|
01
|
11
|
10
|
B1B0
00
|
1
|
0
|
0
|
0
|
01
|
0
|
1
|
0
|
0
|
11
|
0
|
0
|
1
|
0
|
10
|
0
|
0
|
0
|
1
|
a_equal_b = (B1 A1+A1 B1) (B0 A0+A0 B0)
a_less_b.
|
A1A0
00
|
01
|
11
|
10
|
B1B0
00
|
0
|
0
|
0
|
0
|
01
|
1
|
0
|
0
|
0
|
11
|
1
|
1
|
0
|
1
|
10
|
1
|
1
|
0
|
0
|
a_less_b = A0 A1 B0 + A1 B1 + B1 B0 A0
在获得比较器输出的最小化方程之后,很容易为比较器编写Verilog代码。
以下是比较器的Verilog代码:
// FPGA projects using Verilog/ VHDL // yl315.net : FPGA projects, verilog. projects, VHDL projects // 2位比较器的Verilog代码 module comparator(input [1:0] A,B, output A_less_B, A_equal_B, A_greater_B); wire tmp1,tmp2,tmp3,tmp4,tmp5, tmp6, tmp7, tmp8; // A = B output xnor u1(tmp1,A[1],B[1]); xnor u2(tmp2,A[0],B[0]); and u3(A_equal_B,tmp1,tmp2); // A less than B output assign tmp3 = (~A[0])& (~A[1])& B[0]; assign tmp4 = (~A[1])& B[1]; assign tmp5 = (~A[0])& B[1]& B[0]; assign a_less_b. = tmp3 | tmp4 | tmp5; // A greater than B output assign tmp6 = (~B[0])& (~B[1])& A[0]; assign tmp7 = (~B[1])& A[1]; assign tmp8 = (~B[0])& A[1]& A[0]; assign a_greater_b. = tmp6 | tmp7 | tmp8; endmodule `timescale 10 ps/ 10 ps // FPGA projects using Verilog/ VHDL // yl315.net // Verilog testbench code for 2-bit comparator module tb_comparator; reg [1:0] A, B; wire A_less_B, A_equal_B, A_greater_B; integer i; // device under test comparator dut(A,B,A_less_B, A_equal_B, A_greater_B); initial begin for (i=0;i<4;i=i+1) begin A = i; B = i + 1; #20; end for (i=0;i<4;i=i+1) begin A = i; B = i; #20; end for (i=0;i<4;i=i+1) begin A = i+1; B = i; #20; end end endmodule
最后,模拟ModelSIM中的Verilog代码和测试台,并通过模拟波形验证比较器的操作。

通过观察波形,比较器的Verilog代码正常工作。
推荐的 Verilog projects:
2. FIFO记忆的Verilog代码
3. 16位单循环MIPS处理器的Verilog代码
4. verilog. HDL中的可编程数字延迟计时器
5. 数字电路中基本逻辑组件的Verilog代码
6. 32位无符号分频器的Verilog代码
7. 用于固定点矩阵乘法的Verilog代码
8. 在Verilog HDL中的板牌识别
9. 携带外观前方乘法器的Verilog代码
10。 微控制器的Verilog代码
11. 4x4乘法器的Verilog代码
12. 停车系统的Verilog代码
13。 使用Verilog HDL对FPGA的图像处理
14。 如何使用Verilog HDL将文本文件加载到FPGA中
15。 交通灯控制器的Verilog代码
16。 FPGA闹钟的Verilog代码
17。 比较器设计的Verilog代码
18。 VERILOG代码D触发器
19。 完整加法器的Verilog代码
20。 与测试台的计数器的Verilog代码
21。 16位RISC处理器的Verilog代码
22。 FPGA上的按钮的Verilog代码
23。 如何为双向/ inout端口编写Verilog TestBench
3. 16位单循环MIPS处理器的Verilog代码
4. verilog. HDL中的可编程数字延迟计时器
5. 数字电路中基本逻辑组件的Verilog代码
6. 32位无符号分频器的Verilog代码
7. 用于固定点矩阵乘法的Verilog代码
8. 在Verilog HDL中的板牌识别
9. 携带外观前方乘法器的Verilog代码
10。 微控制器的Verilog代码
11. 4x4乘法器的Verilog代码
12. 停车系统的Verilog代码
13。 使用Verilog HDL对FPGA的图像处理
14。 如何使用Verilog HDL将文本文件加载到FPGA中
15。 交通灯控制器的Verilog代码
16。 FPGA闹钟的Verilog代码
17。 比较器设计的Verilog代码
18。 VERILOG代码D触发器
19。 完整加法器的Verilog代码
20。 与测试台的计数器的Verilog代码
21。 16位RISC处理器的Verilog代码
22。 FPGA上的按钮的Verilog代码
23。 如何为双向/ inout端口编写Verilog TestBench
24。 Tic Tac Toe游戏在Verilog和Logisim
25。 verilog.中的32位5级流水线MIPS处理器(第1部分)
26。 verilog.中的32位5级流水线MIPS处理器(Part-2)
27。 verilog.中的32位5级流水线MIPS处理器(第3部分)
28。 解码器的Verilog代码25。 verilog.中的32位5级流水线MIPS处理器(第1部分)
26。 verilog.中的32位5级流水线MIPS处理器(Part-2)
27。 verilog.中的32位5级流水线MIPS处理器(第3部分)
29。 多路复用器的Verilog代码
30. Verilog中的n位加法器设计
31。 verilog. vs vhdl.:通过示例解释
32。 FPGA时钟分频器的Verilog代码
33。 如何在Verilog中生成时钟使能信号
34。 PWM生成器的Verilog代码
35。 verilog.编码VS软件编程
你也应该给电路。它很容易理解代码。
回复删除