牛客网刷题verilog学习(一)

4位数值比较器电路

 

输入描述:

    input        [3:0]       A       ,
    input       [3:0]           B       


 

输出描述:

    output   wire            Y2    , //A>B
    output   wire        Y1    , //A=B
    output   wire        Y0      //A<B

 这个题刚开始看毫无思路,多看两遍题目,它其实是从高位到低位逐次比较判断。下面就是具体执行,借鉴评论区大佬代码,先写4位module,1位module在后面。

`timescale 1ns/1ns

module comparator_4(
    input        [3:0]       A       ,
    input       [3:0]        B       ,
 
     output     wire        Y2    , //A>B
    output   wire        Y1    , //A=B
    output   wire        Y0      //A<B
);

wire W_y2[0:3];
wire W_y1[0:3];
wire W_y0[0:3];

genvar gen_i;
for (gen_i = 0; gen_i < 4; gen_i = gen_i + 1) begin
    compare_1 compare_1_u(
    .A (A[gen_i]   ),
    .B (B[gen_i]   ),
    .Y2(W_y2[gen_i]),//A>B
    .Y1(W_y1[gen_i]),//A=B
    .Y0(W_y0[gen_i]) //A<B
);
end

assign Y2 = W_y2[3] | ((W_y1[3]) & (W_y2[2])) | ((W_y1[3]) & (W_y1[2]) & (W_y2[1])) | ((W_y1[3]) & (W_y1[2]) & (W_y1[1]) & (W_y2[0]));
assign Y0 = W_y0[3] | ((W_y1[3]) & (W_y0[2])) | ((W_y1[3]) & (W_y1[2]) & (W_y0[1])) | ((W_y1[3]) & (W_y1[2]) & (W_y1[1]) & (W_y0[0]));
assign Y1 = W_y1[3] & W_y1[2] & W_y1[1] & W_y1[0];

endmodule 

module compare_1(
    input A,
    input B,
    output Y2,//A>B
    output Y1,//A=B
    output Y0 //A<B
);

assign Y2 = A & (!B);
assign Y0 = (!A) & B;
assign Y1 = !(Y2 | Y0);


endmodule
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值