牛客刷题<三>奇偶校验

题目:奇偶校验_牛客题霸_牛客网

思路:每位互相异或^bus

每位异或后:sel为1,奇校验

                      奇数个1,check=1;偶数个1,check=0;与 ^bus相同

                      sel为0,偶校验

                      奇数个1,check=0;偶数个1,check=1;与 ^bus相反

那么可以直接通过赋值语句assign check=sel?(^bus):(~^bus);就可以实现通过sel选择输出

解法一:

`timescale 1ns/1ns
module odd_sel
(
    input [31:0]  bus,
    input sel,
    input check
);
    assign check = sel?(^bus):(~^bus); 
endmodule

解法二:

`timescale 1ns/1ns
module odd_sel(
input [31:0] bus,
input sel,
output check
);

wire odd;
assign odd = ^bus;
assign check = sel?odd:~odd;

endmodule 

解法三:这个代码还是很容易理解的

`timescale 1ns/1ns
module odd_sel
(
    input [31:0]  bus,
    input sel,
    input check
);
reg out_temp;
    wire odd_even;
    assign odd_even = ^ bus;
    
    always@(*)begin
        case(sel)
            1'b0:
                if(odd_even == 0)
                    out_temp = 1;
                else
                    out_temp = 0;
            1'b1:
                if(odd_even == 1)
                    out_temp = 1;
                else
                    out_temp =0;
            default:  out_temp = 0;
        endcase
    end
   assign check = out_temp; 
endmodule

解法四:有点不理解

`timescale 1ns/1ns
module odd_sel(
input [31:0] bus,
input sel,
output check
);
//*************code***********//
    wire [32:0] a;
    assign a = {sel,bus[31:0]};
    assign check = ~(^a);
    

//*************code***********//
endmodule

其余解法和这些雷同

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值