FPGA比较器实现与资源消耗

从一位到四位

1、真值表达式

一位真值表,

一位真值表达式

四位真值表

2、verilog思路及代码

4位比较器可以有多个一位比较器组成,由四位真值表可知,判断两个相等很简单,只需要判断最终4个一位比较器的输出值是否相等,而判断大小的思路也是从高位开始比较,如果高位相等就寻找低一位的值。

`timescale 1ns / 1ps

module compare1(
    input X,
    input Y,
    output XGY,
    output XSY,
    output XEY
);
    assign XGY = X & (~Y);
    assign XSY = (~X) & Y;
    assign XEY = X & Y | (~X ) & (~Y);

endmodule

module compare4(
    input [3:0] X,
    input [3:0] Y,
    output XGY,
    output XSY,
    output XEY
);
    parameter count=4;
    wire [3:0] lg,sm,eq;
    genvar  i;
    generate
        for(i=0;i<count;i=i+1) begin
            compare1 conpare1_1(
                .X(X[i]),
                .Y(Y[i]),
                .XGY(lg[i]),
                .XSY(sm[i]),
                .XEY(eq[i])
            );
        end
    endgenerate
    assign XEY = (eq == 4'hF);
    assign XGY = lg[3] | (eq[3] & lg[2]) | (eq[3] & eq[2] & lg[1] ) | (eq[3] & eq[2] & eq[1] & lg[0]);
    assign XSY = sm[3] | (eq[3] & sm[2]) | (eq[3] & eq[2] & sm[1] ) | (eq[3] & eq[2] & eq[1] & sm[0]);
endmodule

3、testbench

`timescale 1ns/1ps

module compare_tb();

  // Inputs
  reg [3:0] X;
  reg [3:0] Y;

  // Outputs
  wire XGY;
  wire XSY;
  wire XEY;

  // Instantiate the module
  compare4 uut (
    .X(X),
    .Y(Y),
    .XGY(XGY),
    .XSY(XSY),
    .XEY(XEY)
  );

  // Stimulus
  initial begin
    // Test case 1
    X = 4'b0101;
    Y = 4'b0111;
    #10;

    // Test case 2
    X = 4'b1100;
    Y = 4'b1010;
    #10;
    
    // Test case 3
    X = 4'b1110;
    Y = 4'b1110;
    #10;

    // Add more test cases as needed

    // End simulation
    $finish;
  end

4、RTL

5、综合

6、实现

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值