【牛客网刷题】VL3 奇偶校验
写在前面 本系列博客记录牛客网刷题记录 日拱一卒功不唐捐目录题目描述奇偶校验题目分析仿真结果题目描述现在需要对输入的32位数据进行奇偶校验,根据sel输出校验结果1输出奇校验0输出偶校验。信号示意图波形示意图输入描述输入信号bussel类型wirewire输出描述输出信号check类型wire奇偶校验奇偶校验是在通信过程中确保节点之间准确数据传输的过程。奇偶校验位附加到原始数据位以创建偶数或奇数位。内存中最小的单位是比特也称为“位”位只有两种状态分别以1和0来标示每8个连续的比特叫做一个字节byte。不带奇偶校验的内存每个字节只有8位如果其某一位存储了错误的值就会导致其存储的相应数据发生变化进而导致应用程序发生错误。而奇偶校验就是在每一字节8位之外又增加了一位作为错误检测位。在某字节中存储数据之后在其8个位上存储的数据是固定的因为位只能有两种状态1或0假设存储的数据用位标示为1、1、1、0、0、1、0、1那么把每个位相加111001015结果是奇数。对于偶校验校验位就定义为1对于奇校验则相反。当 CPU 读取存储的数据时它会再次把前8位中存储的数据相加计算结果是否与校验位相一致。从而一定程度上能检测出内存错误奇偶校验只能检测出错误而无法对其进行修正同时虽然双位同时发生错误的概率相当低但奇偶校验却无法检测出双位错误。奇偶校验在 Uart 协议传输时使用的较多但是这个校验方法校验的准确度并不是很高如果想要更严格的检验方法可以采用 CRC 校验。以下为 CRC 的介绍以及 Verilog 实现方法。CRC校验一什么是CRC校验CRC 校验二用 Verilog 实现生成 CRC 校验码题目分析本题的奇偶校验的方法比较特殊它是校验方法为输入的 32 bit 的 bus 数据若32位中有奇数个1采用奇校验则check输出为1否则输出为0若32位中有偶数个1采用偶校验则check输出为1否则输出为0。要想判定输入的32位数据有多少个1可以采用位异或的方法如果数据中有奇数个1则位异或结果为1如果数据中有偶数个1则位异或结果为0。并且输入输出都是 wire 变量因此采用 assign 语句实现。Verilog 代码/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ // Engineer : Linest-5 // File : odd_sel.v // Create : 2022-10-02 15:51:37 // Revise : 2022-10-02 15:51:37 // Module Name : odd_sel // Description : 奇偶校验 // 若输入的数据含有奇数个1且为奇校验则check拉高否则拉低 // 若输入的数据含有偶数个1且为偶校验则check拉高否则拉低 // Editor : sublime text3, tab size (4) /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ timescale 1ns/1ns module odd_sel( input [31:0] bus, input sel, output check ); //*************code***********// wire odd_even; assign odd_even ^bus; //按位异或偶数个1为0奇数个1位1 assign check sel ? odd_even : ~odd_even; //*************code***********// endmoduletestbench 代码/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ // Engineer : Linest-5 // File : tb_odd_sel.v // Create : 2022-10-02 16:32:01 // Revise : 2022-10-02 16:32:01 // Module Name : tb_odd_sel // Description : 奇偶校验仿真模块 // Editor : sublime text3, tab size (4) /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ timescale 1ns/1ns module tb_odd_sel(); reg [31:0] bus; reg sel; wire check; initial begin bus d0; sel d1; #20 bus d1; sel d1; #20 bus d2; sel d0; #20 bus d3; sel d1; #20 bus d4; sel d0; #20 bus d5; sel d0; #20 bus d6; sel d0; #20 bus d7; sel d1; #20 bus d8; sel d1; #20 bus d9; sel d0; #20 bus d10; sel d0; end odd_sel inst_odd_sel ( .bus(bus), .sel(sel), .check(check) ); //verdi initial begin $fsdbDumpfile(tb_odd_sel.fsdb); $fsdbDumpvars(0); end endmodule仿真结果电路结构仿真结果可以看到仿真波形中根据输入的数据且此时的奇偶校验选择输出相应的 check 值。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2423945.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!