牛客网-Verilog篇
生活随笔
收集整理的這篇文章主要介紹了
牛客网-Verilog篇
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
VL3 奇偶校驗
原題鏈接
1.原題復現
2.思路以及代碼
以前做過HDLBits,也是有相關的奇偶校驗題目,但是被遺忘的差不多啦,特此找了一篇博客,重新學習一下奇偶校驗的相關知識:
參考的相關博客為:論述:Verilog中的奇偶校驗
用自己的話大概來總結下:
1.首先要明白奇偶校驗的定義:
2. 奇偶校驗的工作原理:
以 8位的輸入 data_in 為例子:
| 奇數 | 1 | 1 |
| 偶數 | 0 | 0 |
探究^data_in和偶校驗值之間的關系:
可以發現,當作為單比特數據進行異或運算時候,可以等價理解為:k個一比特數據的異或運算可以被視為"k個一比特數據在不考慮進位和溢出問題時的求和運算"。
即^data_in和偶校驗位之間的關系可以理解為:
對data_in的二進制碼中所有的比特位進行不考慮進位或者溢出問題的求和:
- 如果求和最低位的結果為1:即(^data_in)的結果為1,說明data_in的1的個數為奇數,因此偶校驗位為1
- 如果求和最低位的結果為0:即(^data_in)的結果為0,說明data_in的1的個數為偶數,因此偶校驗位為0.
針對于奇校驗,應該比較容易理解:數據和校驗位如果滿足偶校驗的要求的話,那么數據和取反后的校驗位合起來能滿足奇校驗的要求。
也就是 assign odd_bit = ~even_bit 的原理出處。
據此,再次給出參考博客寫好的針對數據進行奇偶校驗時候的詳細Verilog模塊代碼:
module generate_parity_bit #(parameter DATA_WIDTH = 8,parameter PARITY_TYPE = "even parity" //允許的取值:"even parity" 或 "odd parity" ) (input [DATA_WIDTH-1:0] data_in,output parity_bit_out );wire even_bit;//偶校驗需求下計算出來的校驗位 wire odd_bit; //奇校驗需求下計算出來的校驗位assign even_bit = ^data_in; assign odd_bit = ~even_bit;if(PARITY_TYPE == "even parity") beginassign parity_bit_out = even_bit; end else beginassign parity_bit_out = odd_bit; endendmodule-最后給出 牛客網上相關題目的代碼解析:
`timescale 1ns/1ns module odd_sel( input [31:0] bus, input sel, output check ); //*************code***********////奇校驗wire even_bit ;assign even_bit = ^bus;wire odd_bit;assign odd_bit = ~even_bit;reg check_mid;assign check = sel? even_bit:odd_bit;//偶校驗//*************code***********// endmodule總結
以上是生活随笔為你收集整理的牛客网-Verilog篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【WIN10蓝屏】win10系统蓝屏原因
- 下一篇: WIN10蓝屏崩溃原因查找