在數字電路中,數據的正確性非常重要。 為了保證數據的正確性,在傳輸數據時需要添加一些冗余信息,以便在接收端進行校驗。 其中一種常用的校驗方式是奇偶校驗(Parity Check)。 本文將介紹奇偶校驗的基本原理及實現方法,并給出FPGA實現的代碼示例。
一、奇偶校驗原理
奇偶校驗是一種基本的數據校驗方式,其原理是在數據的尾部添加一個位,使得該位和數據中所有1的個數之和為奇數或偶數。 由于校驗位的加入,使得數據傳輸中一旦數據錯誤就能夠被檢測出來,從而保證了數據的正確性。
奇偶校驗可以采用兩種方式:奇校驗和偶校驗。
奇校驗::全部數據和該校驗位中“1”的總數為奇數,則表示數據無誤,否則數據錯誤
偶校驗:全部數據和該校驗位中“1”的總數為偶數,則表示數據無誤,否則數據錯誤
奇偶校驗的優點是簡單、快速,不需要大量計算。 但是奇偶校驗只能檢測出錯誤,不能糾正錯誤,因此在實際應用中很少單獨使用,通常與其它更加強大的校驗方式結合起來使用。
以輸出一組16bit數據為“1100_0011_1101_0100”為例,這組數據中有8個“1”。
如果使用奇校驗,則校驗位為1,傳輸數據實際為16bit數據+1bit奇校驗位,即“1100_0011_1101_0100_1”。
如果使用偶校驗,則校驗位為0,傳輸數據實際為16bit數據+1bit偶校驗位,即“1100_0011_1101_0100_0”。
二、FPGA奇偶校驗設計
1、多位輸入,分別用每位做:與、或、異或
module test(
input [3:0] in,
output out_and,
output out_or,
output out_xor
);
//方法一
assign out_and = in[0] & in[1] & in[2] & in[3];
assign out_or = in[0] | in[1] | in[2] | in[3];
assign out_xor = in[0] ^ in[1] ^ in[2] ^ in[3];
//方法二
assign out_and = ∈
assign out_or = |in;
assign out_xor = ^in;
endmodule
2、奇偶校驗測試
奇偶校驗只要求出其中一個,另一個取反即得到了。
module parity_check(
input [7:0] data_in,
input sel,
output check
);
wire even;// 偶校驗
wire odd;// 奇校驗
assign even = ^data_in;
assign odd = ~even;
assign check = (sel)?odd : even;
endmodule
測試激勵
module sim(
);
reg clk;
reg [7:0] data_in;
parity_check u_parity_check (
.data_in(data_in),
.sel(1'b0)
);
initial begin
data_in = 0;
#10 data_in = 8'b1011_1000;
#10 data_in = 8'b1011_0000;
#10 data_in = 8'b1111_1000;
#10 data_in = 8'b1011_1100;
#10 data_in = 8'b1011_1010;
#10 data_in = 8'b1111_1010;
#10 data_in = 8'b1011_1001;
#10 data_in = 8'b1011_1101;
#10 data_in = 8'b1011_1011;
#10 $finish;
end
endmodule
仿真測試結果圖:
從圖中可以看出,仿真測試結果與預期一致。
三、總結
奇偶校驗算法很簡單,實現起來也很容易,本文提供了一個比較簡單的方法實現,大家可以參考下。
-
FPGA
+關注
關注
1630文章
21796瀏覽量
606012 -
仿真
+關注
關注
50文章
4124瀏覽量
133993 -
數字電路
+關注
關注
193文章
1629瀏覽量
80822 -
代碼
+關注
關注
30文章
4827瀏覽量
69052 -
奇偶校驗
+關注
關注
0文章
15瀏覽量
8232
發布評論請先 登錄
相關推薦
串口調試助手的奇偶校驗測試方法
奇偶校驗碼,奇偶校驗碼原理是什么?
stm32串口奇偶校驗
stm32 usart奇偶校驗如何配置
![stm32 usart<b class='flag-5'>奇偶校驗</b>如何配置](https://file.elecfans.com/web2/M00/0A/63/poYBAGD6JMyAYewdAAEQfJWnx78915.png)
增強FIFO模式下的奇偶校驗
介紹FPGA奇偶校驗的基本原理及實現方法
![介紹<b class='flag-5'>FPGA</b><b class='flag-5'>奇偶校驗</b>的<b class='flag-5'>基本原理</b>及<b class='flag-5'>實現</b><b class='flag-5'>方法</b>](https://file1.elecfans.com/web2/M00/88/84/wKgZomRrCyCAadAPAACJhMaTcNk042.jpg)
奇偶校驗器的設計方法和特點
![<b class='flag-5'>奇偶校驗</b>器的設計<b class='flag-5'>方法</b>和特點](https://file1.elecfans.com/web2/M00/A3/09/wKgaomT2lZSAKFngAAALc6ViXNs315.png)
評論