数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 (三)奇偶校验

数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 (三)奇偶校验


声明:
博主主页:王_嘻嘻的CSDN博客
未经作者允许,禁止转载
系列专栏:牛客Verilog习题集
推荐一个IC、FPGA新手入门的好网站:快 点 击 进 入 学 习 吧


  继续整理牛客网经典Verilog习题讲解,牛客网里除了最新的Verilog题库还有其它领域的经典笔试、面试题,大家快和我一起刷起来吧 点 击 跳 转



题目


需要对输入的32位数据进行奇偶校验,根据sel输出校验结果(1输出奇校验,0输出偶校验):


数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 (三)奇偶校验_第1张图片

分析:

  很多朋友刚拿到此题的时候,可能根据波形连需求都看不明白,这点也是牛客的缺点,题干写的过于简单!!

  • 首先需要明白什么是奇偶校验,其实这是来判断数据总线上有奇数个‘1’,还是偶数个‘1’
  • 通常奇偶校验会用在环境简单的传输通道,检验数据是否在传输过程中发生错误

  明白何为奇偶校验后,还需要注意题目中有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


你可能感兴趣的:(牛客Verilog习题集,fpga开发,学习)