|
- module hc85( //74HC85/74LS85 可级联4位2进制大小比较器(幅度比较器) GND:Pin8 VCC:Pin16
- //比较值输入
- input [3:0] A, //4位宽被比较值A Pin:15,13,12,10
- input [3:0] B, //4位宽比较值B Pin:1,14,11,9
- //比较结果输入(小于,等于,大于 只能输入一个高电平,否则为非法输入):
- input A_LSS_B, //A小于B 输入 Pin2 (级联接上一片Pin7,第一片接低电平)
- input A_EQU_B, //A等于B 输入 Pin3 (级联接上一片Pin6,第一片接高电平)
- input A_GTR_B, //A大于B 输入 Pim4 (级联接上一片Pin5,第一片接低电平)
- //比较结果输出
- output reg QA_LSS_B, //A小于B 输出 Pin7 (级联接下一片Pin2)
- output reg QA_EQU_B, //A等于B 输出 Pin6 (级联接下一片Pin3)
- output reg QA_GTR_B //A大于B 输出 Pin5 (级联接下一片Pin4)
- );
- always @(*) begin
- case({A_LSS_B,A_EQU_B,A_GTR_B})
- 3'b100: //A小于B
- {QA_LSS_B,QA_EQU_B,QA_GTR_B} = (A > B) ? 3'b001 : 3'b100;
- 3'b010: //A等于B
- {QA_LSS_B,QA_EQU_B,QA_GTR_B} = {A < B,A == B,A > B};
- 3'b001: //A大于B
- {QA_LSS_B,QA_EQU_B,QA_GTR_B} = (A < B) ? 3'b100 : 3'b001;
- default: //非法输入
- {QA_LSS_B,QA_EQU_B,QA_GTR_B} = 3'b000;
- endcase
- end
- endmodule
- module main(
- input clk, //板载时钟 Pin17
- output reg led //LED 低电平(计算正确) 点亮 Pin3
- );
- reg [15:0] A;
- reg [15:0] B;
- wire [3:0] LSS;
- wire [3:0] EQU;
- wire [3:0] GTR;
- hc85 U1(
- .A(A[3:0]),
- .B(B[3:0]),
- .A_LSS_B(1'b0),
- .A_EQU_B(1'b1),
- .A_GTR_B(1'b0),
- .QA_LSS_B(LSS[0]),
- .QA_EQU_B(EQU[0]),
- .QA_GTR_B(GTR[0])
- );
- hc85 U2(
- .A(A[7:4]),
- .B(B[7:4]),
- .A_LSS_B(LSS[0]),
- .A_EQU_B(EQU[0]),
- .A_GTR_B(GTR[0]),
- .QA_LSS_B(LSS[1]),
- .QA_EQU_B(EQU[1]),
- .QA_GTR_B(GTR[1])
- );
- hc85 U3(
- .A(A[11:8]),
- .B(B[11:8]),
- .A_LSS_B(LSS[1]),
- .A_EQU_B(EQU[1]),
- .A_GTR_B(GTR[1]),
- .QA_LSS_B(LSS[2]),
- .QA_EQU_B(EQU[2]),
- .QA_GTR_B(GTR[2])
- );
- hc85 U4(
- .A(A[15:12]),
- .B(B[15:12]),
- .A_LSS_B(LSS[2]),
- .A_EQU_B(EQU[2]),
- .A_GTR_B(GTR[2]),
- .QA_LSS_B(LSS[3]),
- .QA_EQU_B(EQU[3]),
- .QA_GTR_B(GTR[3])
- );
- reg err;
- initial err = 0; //计算是否出错
- always @(posedge clk) begin
- if(!err) begin
- {A,B} <= {A,B} + 1;
- if({LSS[3],EQU[3],GTR[3]} == {A < B,A == B, A > B}) begin
- led <= 1'b0;
- end else begin
- err <= 1'b1;
- led <= 1'b1;
- end
- end
- end
- endmodule
复制代码 |
|