设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 596|回复: 0
收起左侧

Quartus Verilog HDL/FPGA 实现 74HC85/74LS85 可级联4位2进制大小比较器(幅度比较器)

[复制链接]
发表于 2022-12-2 09:20:26 | 显示全部楼层 |阅读模式
main.png
  1. module hc85(                        //74HC85/74LS85 可级联4位2进制大小比较器(幅度比较器) GND:Pin8 VCC:Pin16
  2.         //比较值输入
  3.         input [3:0] A,                //4位宽被比较值A Pin:15,13,12,10
  4.         input [3:0] B,                //4位宽比较值B Pin:1,14,11,9
  5.         //比较结果输入(小于,等于,大于 只能输入一个高电平,否则为非法输入):
  6.         input A_LSS_B,                //A小于B 输入 Pin2 (级联接上一片Pin7,第一片接低电平)
  7.         input A_EQU_B,                //A等于B 输入 Pin3 (级联接上一片Pin6,第一片接高电平)
  8.         input A_GTR_B,                //A大于B 输入 Pim4 (级联接上一片Pin5,第一片接低电平)
  9.         //比较结果输出
  10.         output reg QA_LSS_B,        //A小于B 输出 Pin7 (级联接下一片Pin2)
  11.         output reg QA_EQU_B,        //A等于B 输出 Pin6 (级联接下一片Pin3)
  12.         output reg QA_GTR_B        //A大于B 输出 Pin5 (级联接下一片Pin4)
  13. );

  14. always @(*) begin
  15.         case({A_LSS_B,A_EQU_B,A_GTR_B})
  16.                 3'b100:                //A小于B
  17.                         {QA_LSS_B,QA_EQU_B,QA_GTR_B} = (A > B) ? 3'b001 : 3'b100;
  18.                 3'b010:                //A等于B
  19.                         {QA_LSS_B,QA_EQU_B,QA_GTR_B} = {A < B,A == B,A > B};
  20.                 3'b001:                //A大于B
  21.                         {QA_LSS_B,QA_EQU_B,QA_GTR_B} = (A < B) ? 3'b100 : 3'b001;
  22.                 default:                //非法输入
  23.                         {QA_LSS_B,QA_EQU_B,QA_GTR_B} = 3'b000;
  24.         endcase
  25. end
  26. endmodule

  27. module main(
  28.         input clk,                        //板载时钟 Pin17
  29.         output reg led                //LED 低电平(计算正确) 点亮 Pin3
  30. );
  31. reg [15:0] A;
  32. reg [15:0] B;
  33. wire [3:0] LSS;
  34. wire [3:0] EQU;
  35. wire [3:0] GTR;
  36. hc85 U1(
  37.         .A(A[3:0]),
  38.         .B(B[3:0]),
  39.         .A_LSS_B(1'b0),
  40.         .A_EQU_B(1'b1),
  41.         .A_GTR_B(1'b0),
  42.         .QA_LSS_B(LSS[0]),
  43.         .QA_EQU_B(EQU[0]),
  44.         .QA_GTR_B(GTR[0])
  45. );

  46. hc85 U2(
  47.         .A(A[7:4]),
  48.         .B(B[7:4]),
  49.         .A_LSS_B(LSS[0]),
  50.         .A_EQU_B(EQU[0]),
  51.         .A_GTR_B(GTR[0]),
  52.         .QA_LSS_B(LSS[1]),
  53.         .QA_EQU_B(EQU[1]),
  54.         .QA_GTR_B(GTR[1])       
  55. );

  56. hc85 U3(
  57.         .A(A[11:8]),
  58.         .B(B[11:8]),
  59.         .A_LSS_B(LSS[1]),
  60.         .A_EQU_B(EQU[1]),
  61.         .A_GTR_B(GTR[1]),
  62.         .QA_LSS_B(LSS[2]),
  63.         .QA_EQU_B(EQU[2]),
  64.         .QA_GTR_B(GTR[2])       
  65. );

  66. hc85 U4(
  67.         .A(A[15:12]),
  68.         .B(B[15:12]),
  69.         .A_LSS_B(LSS[2]),
  70.         .A_EQU_B(EQU[2]),
  71.         .A_GTR_B(GTR[2]),
  72.         .QA_LSS_B(LSS[3]),
  73.         .QA_EQU_B(EQU[3]),
  74.         .QA_GTR_B(GTR[3])
  75. );

  76. reg err;
  77. initial err = 0;                //计算是否出错
  78. always @(posedge clk) begin
  79.         if(!err) begin
  80.                 {A,B} <= {A,B} + 1;
  81.                 if({LSS[3],EQU[3],GTR[3]} == {A < B,A == B, A > B}) begin
  82.                         led <= 1'b0;
  83.                 end else begin
  84.                         err <= 1'b1;
  85.                         led <= 1'b1;
  86.                 end
  87.         end
  88. end
  89. endmodule
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-3-29 15:05 , Processed in 0.753043 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表