牛客网-Verilog篇
VL3 奇偶校驗(yàn)
原題鏈接
1.原題復(fù)現(xiàn)
2.思路以及代碼
以前做過(guò)HDLBits,也是有相關(guān)的奇偶校驗(yàn)題目,但是被遺忘的差不多啦,特此找了一篇博客,重新學(xué)習(xí)一下奇偶校驗(yàn)的相關(guān)知識(shí):
參考的相關(guān)博客為:論述:Verilog中的奇偶校驗(yàn)
用自己的話大概來(lái)總結(jié)下:
1.首先要明白奇偶校驗(yàn)的定義:
2. 奇偶校驗(yàn)的工作原理:
以 8位的輸入 data_in 為例子:
| 奇數(shù) | 1 | 1 |
| 偶數(shù) | 0 | 0 |
探究^data_in和偶校驗(yàn)值之間的關(guān)系:
可以發(fā)現(xiàn),當(dāng)作為單比特?cái)?shù)據(jù)進(jìn)行異或運(yùn)算時(shí)候,可以等價(jià)理解為:k個(gè)一比特?cái)?shù)據(jù)的異或運(yùn)算可以被視為"k個(gè)一比特?cái)?shù)據(jù)在不考慮進(jìn)位和溢出問(wèn)題時(shí)的求和運(yùn)算"。
即^data_in和偶校驗(yàn)位之間的關(guān)系可以理解為:
對(duì)data_in的二進(jìn)制碼中所有的比特位進(jìn)行不考慮進(jìn)位或者溢出問(wèn)題的求和:
- 如果求和最低位的結(jié)果為1:即(^data_in)的結(jié)果為1,說(shuō)明data_in的1的個(gè)數(shù)為奇數(shù),因此偶校驗(yàn)位為1
- 如果求和最低位的結(jié)果為0:即(^data_in)的結(jié)果為0,說(shuō)明data_in的1的個(gè)數(shù)為偶數(shù),因此偶校驗(yàn)位為0.
針對(duì)于奇校驗(yàn),應(yīng)該比較容易理解:數(shù)據(jù)和校驗(yàn)位如果滿足偶校驗(yàn)的要求的話,那么數(shù)據(jù)和取反后的校驗(yàn)位合起來(lái)能滿足奇校驗(yàn)的要求。
也就是 assign odd_bit = ~even_bit 的原理出處。
據(jù)此,再次給出參考博客寫(xiě)好的針對(duì)數(shù)據(jù)進(jìn)行奇偶校驗(yàn)時(shí)候的詳細(xì)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;//偶校驗(yàn)需求下計(jì)算出來(lái)的校驗(yàn)位 wire odd_bit; //奇校驗(yàn)需求下計(jì)算出來(lái)的校驗(yàn)位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-最后給出 牛客網(wǎng)上相關(guān)題目的代碼解析:
`timescale 1ns/1ns module odd_sel( input [31:0] bus, input sel, output check ); //*************code***********////奇校驗(yàn)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;//偶校驗(yàn)//*************code***********// endmodule總結(jié)
以上是生活随笔為你收集整理的牛客网-Verilog篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【WIN10蓝屏】win10系统蓝屏原因
- 下一篇: WIN10蓝屏崩溃原因查找