声明:
博主主页:王_嘻嘻的CSDN博客
未经作者允许,禁止转载
系列专栏:牛客Verilog习题集
推荐一个IC、FPGA新手入门的好网站:快 点 击 进 入 学 习 吧
继续整理牛客网经典Verilog习题讲解,牛客网里除了最新的Verilog题库还有其它领域的经典笔试、面试题,大家快和我一起刷起来吧 点 击 跳 转
需要对输入的32位数据进行奇偶校验,根据sel输出校验结果(1输出奇校验,0输出偶校验):
很多朋友刚拿到此题的时候,可能根据波形连需求都看不明白,这点也是牛客的缺点,题干写的过于简单!!
明白何为奇偶校验后,还需要注意题目中有sel信号,如题所述,该信号为‘1’时,需要输出奇校验,为‘0’时,需要输出偶校验。
在完成该题时,可以用到按位计算的操作(操作符在前,变量在后),比如 |a(按位或)、&a (按位与) 、 ^a (按位异或)。
本题在计算奇校验时用到了按位异或,因为异或的特点就是偶数个‘1’时输出0,奇数个‘1’时输出‘1’。(具体可以通过枚举法感受一下)
而偶校验只需对奇校验取反即可,在下面的题解中,我用到的是“~”,是位取反的功能,在单比特情况下, ‘~’和‘!’是相同功能的。但是多比特时,‘!’是逻辑取反,只会输出‘0’或‘1‘。
module odd_sel(
input [31:0] bus,
input sel,
output check
);
//*************code***********//
wire odd_check = ^bus[31:0]; //奇校验
wire even_check = ~odd_check; //偶校验
assign check = sel ? odd_check : even_check;
//*************code***********//
endmodule