在这个项目中,一个简单的2位 比较器 是在 Verilog 高密度脂蛋白。给出了真值表,K-Map和比较器的最小化方程。比较器的Verilog代码由ModelSim仿真,并给出了仿真波形。

2位比较器的规格如下:
- 输入:2位A和B用于比较
- 输出:
- A_greater_B:如果A高> 低等
- A_equal_B:如果A = B,则为高,否则为低
- 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 // hzgifts.cn : FPGA projects, Verilog projects, VHDL projects // 2位比较器的Verilog代码 module 比较器(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 // hzgifts.cn // Verilog testbench code for 2-bit 比较器 module tb_comparator; reg [1:0] A, B; wire A_less_B, A_equal_B, A_greater_B; integer i; // device under test 比较器 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岁 D触发器的Verilog代码
19 Full Adder的Verilog代码
20 带testbench的计数器的Verilog代码
21 16位RISC处理器的Verilog代码
22 用于在FPGA上反跳按钮的Verilog代码
23。 如何为双向/输入端口编写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岁 D触发器的Verilog代码
19 Full Adder的Verilog代码
20 带testbench的计数器的Verilog代码
21 16位RISC处理器的Verilog代码
22 用于在FPGA上反跳按钮的Verilog代码
23。 如何为双向/输入端口编写Verilog Testbench
24 Verilog和LogiSim中的Tic Tac Toe游戏
25岁 Verilog中的32位5级流水线MIPS处理器(第1部分)
26 Verilog中的32位5级流水线MIPS处理器(第2部分)
27。 Verilog中的32位5级流水线MIPS处理器(第3部分)
28。 解码器的Verilog代码25岁 Verilog中的32位5级流水线MIPS处理器(第1部分)
26 Verilog中的32位5级流水线MIPS处理器(第2部分)
27。 Verilog中的32位5级流水线MIPS处理器(第3部分)
29。 复用器的Verilog代码
30岁 Verilog中的N位加法器设计
31。 Verilog和VHDL:通过示例解释
32。 FPGA上时钟分频器的Verilog代码
33。 如何在Verilog中生成时钟使能信号
34。 用于PWM发生器的Verilog代码
35岁 Verilog编码与软件编程
您也应该给电路。它使代码易于理解。
回复删除