0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

奇偶校驗(yàn)器的設(shè)計(jì)方法和特點(diǎn)

Hack電子 ? 來(lái)源:Hack電子 ? 2023-09-05 10:40 ? 次閱讀

bc659b9a-4b94-11ee-a25d-92fbcf53809c.png

奇偶校驗(yàn)是一種簡(jiǎn)單、實(shí)現(xiàn)代價(jià)小的檢錯(cuò)方式,常用在數(shù)據(jù)傳輸過(guò)程中。對(duì)于一組并行傳輸?shù)臄?shù)據(jù)(通常為8比特),可以計(jì)算岀它們的奇偶校驗(yàn)位并與其一起傳輸。接收端根據(jù)接收的數(shù)據(jù)重新計(jì)算其奇偶校驗(yàn)位并與接收的值進(jìn)行比較,如果二者不匹配,那么可以確定數(shù)據(jù)傳輸過(guò)程中岀現(xiàn)了錯(cuò)誤;如果二者匹配,可以確定傳輸過(guò)程中沒(méi)有出錯(cuò)或者出現(xiàn)了偶數(shù)個(gè)錯(cuò)誤(出現(xiàn)這種情況的概率極低)。

需要指出當(dāng)出現(xiàn)偶數(shù)個(gè)錯(cuò)誤時(shí),奇偶校驗(yàn)是無(wú)法檢測(cè)此時(shí)電路出現(xiàn)傳輸錯(cuò)誤。例如,發(fā)送的數(shù)據(jù)為8’b1010_1011此時(shí)計(jì)算出的偶校驗(yàn)值是1。如果在傳輸中后兩位從11跳變?yōu)?0,那么此時(shí)接收到的數(shù)據(jù)為8’b10100100,接收的偶校驗(yàn)值仍然為1。對(duì)接收的數(shù)據(jù)進(jìn)行偶校驗(yàn)計(jì)算,得到的結(jié)果仍然為1,這與收到的校驗(yàn)值是相同的,接收電路無(wú)法檢測(cè)出接收數(shù)據(jù)中岀現(xiàn)的錯(cuò)誤。

奇偶校驗(yàn)位有兩種類型:偶校驗(yàn)位與奇校驗(yàn)位。

以偶校驗(yàn)位來(lái)說(shuō),如果一組給定數(shù)據(jù)位中1的個(gè)數(shù)是奇數(shù),補(bǔ)一個(gè)bit為1,使得總的1的個(gè)數(shù)是偶數(shù)。例:0000001, 補(bǔ)一個(gè)bit為1, 00000011。

以奇校驗(yàn)位來(lái)說(shuō),如果給定一組數(shù)據(jù)位中1的個(gè)數(shù)是奇數(shù),補(bǔ)一個(gè)bit為0,使得總的1的個(gè)數(shù)是奇數(shù)。例:0000001, 補(bǔ)一個(gè)bit為0, 00000010。

bc8e3b4a-4b94-11ee-a25d-92fbcf53809c.png

簡(jiǎn)單理解奇偶校驗(yàn):

奇校驗(yàn):原始碼流+校驗(yàn)位 總共有奇數(shù)個(gè)1

偶校驗(yàn):原始碼流+校驗(yàn)位 總共有偶數(shù)個(gè)1

二、XOR

2.1 XOR法

題目:采用XOR法試寫(xiě)一個(gè)發(fā)送端奇偶校驗(yàn)器,在發(fā)送端會(huì)輸入一段8bit的數(shù)據(jù),可以選擇切換奇數(shù)校驗(yàn)或者偶數(shù)校驗(yàn),并且將校驗(yàn)值附在末位輸出。

2.2 verilog代碼

//使用XOR法設(shè)計(jì)奇偶校驗(yàn)器

module parity_checker01(

input clk,

input rst_n,

input parity_odd,//是否為奇校驗(yàn):奇數(shù)校驗(yàn)為1,偶數(shù)校驗(yàn)位0

input [7:0] data_in,//輸入的八位數(shù)據(jù)

output [8:0] data_out,//輸出的九位數(shù)據(jù)

output reg even_bit,//偶數(shù)校驗(yàn)碼

output reg odd_bit//計(jì)數(shù)校驗(yàn)碼

);

//使用按位異或確定偶數(shù)校驗(yàn)碼和奇數(shù)校驗(yàn)碼

always@(posedge clk or negedge rst_n) begin

if(!rst_n) begin

even_bit <= 1'b0;

odd_bit <= 1'b0;

end

else begin

even_bit <= ^data_in;? ?//偶校驗(yàn)條件下計(jì)算出來(lái)的校驗(yàn)位

odd_bit <= ~(^data_in);//奇校驗(yàn)條件下計(jì)算出來(lái)的校驗(yàn)位

end

end

//組合邏輯完成輸入數(shù)據(jù)與校驗(yàn)碼的拼接

assign data_out = parity_odd ? {data_in[7:0],odd_bit}

: {data_in[7:0],even_bit};

endmodule

2.3 Testbench

`timescale 1ns / 1ps//仿真時(shí)間單位1ns 仿真時(shí)間精度1ps

module parity_checker01_tb();

//信號(hào)申明

regclk;

regrst_n;

reg parity_odd;

reg [7:0] data_in;

wire [8:0] data_out;

wire even_bit;

wire odd_bit;

//模塊實(shí)例化(將申明的信號(hào)連接起來(lái)即可)

parity_checker01 u_parity_checker01(

.clk (clk),

.rst_n (rst_n),

.parity_odd (parity_odd),

.data_in (data_in),

.data_out (data_out),

.even_bit (even_bit),

.odd_bit (odd_bit)

);

//生成時(shí)鐘信號(hào)

always #5 clk = ~clk;

//生成復(fù)位信號(hào)

//為時(shí)鐘信號(hào)和復(fù)位信號(hào)等賦初值

initial begin

clk = 1;

rst_n = 1;

data_in = 0;

parity_odd = 1;

#5 rst_n <= 0;

#5 rst_n <= 1;

data_in = 8'h01;

#20

data_in = 8'hb7;

#20

data_in = 8'h32;

#20

data_in = 8'he9;

#20

data_in = 8'hd3;

end

endmodule

2.4 仿真結(jié)果

bcad67ea-4b94-11ee-a25d-92fbcf53809c.png

三、計(jì)數(shù)器法

3.1 計(jì)數(shù)器法

題目:采用計(jì)數(shù)器法試寫(xiě)一個(gè)發(fā)送端奇偶校驗(yàn)器,在發(fā)送端會(huì)輸入一段8bit的數(shù)據(jù),可以選擇切換奇數(shù)校驗(yàn)或者偶數(shù)校驗(yàn),并且將校驗(yàn)值附在末位輸出。

3.2 verilog代碼

//使用計(jì)數(shù)器法設(shè)計(jì)奇偶校驗(yàn)器

module parity_checker02(

input clk,

input rst_n,

input parity_odd,//是否為奇校驗(yàn):奇數(shù)校驗(yàn)為1,偶數(shù)校驗(yàn)位0

input [7:0] data_in,//輸入的八位數(shù)據(jù)

output [8:0] data_out,//輸出的九位數(shù)據(jù)

output reg even_bit,//偶數(shù)校驗(yàn)碼

output reg odd_bit//奇數(shù)校驗(yàn)碼

);

//定義一個(gè)三位寬的計(jì)數(shù)器

reg[2:0] cnt;

//計(jì)數(shù)器模塊

//輸入數(shù)據(jù)data_in逢1逐位計(jì)數(shù)

integer i;

always @(*) begin

cnt = 3'd0;

for (i=0;i<8;i=i+1) begin

if(data_in[i]==1'b1) begin

cnt = cnt + 1;

end

end

end

//計(jì)數(shù)器校驗(yàn)?zāi)K

//使用時(shí)序邏輯對(duì)計(jì)數(shù)器中的1校驗(yàn)奇數(shù)or偶數(shù)

//計(jì)數(shù)器最低位為奇數(shù),則整體為奇數(shù),反之為偶數(shù)

always@(posedge clk or negedge rst_n) begin

if(!rst_n) begin

even_bit <= 1'b0;

odd_bit <= 1'b0;

end

else if(cnt[0] == 1'b1) begin//通過(guò)計(jì)數(shù)器最低位判斷是否為偶數(shù)

even_bit <= 1'b1;??

odd_bit <= 1'b0;

end

else begin

even_bit <= 1'b0;

odd_bit <= 1'b1;

end

end

//組合邏輯完成輸入數(shù)據(jù)與校驗(yàn)碼的拼接

assign data_out = parity_odd ? {data_in[7:0],odd_bit}

: {data_in[7:0],even_bit};

endmodule

3.3 Testbench

`timescale 1ns / 1ps//仿真時(shí)間單位1ns 仿真時(shí)間精度1ps

module parity_checker02_tb();

//信號(hào)申明

regclk;

regrst_n;

reg parity_odd;

reg [7:0] data_in;

wire [8:0] data_out;

wire even_bit;

wire odd_bit;

//模塊實(shí)例化(將申明的信號(hào)連接起來(lái)即可)

parity_checker02 u_parity_checker02(

.clk (clk),

.rst_n (rst_n),

.parity_odd (parity_odd),

.data_in (data_in),

.data_out (data_out),

.even_bit (even_bit),

.odd_bit (odd_bit)

);

//生成時(shí)鐘信號(hào)

always #5 clk = ~clk;

//生成復(fù)位信號(hào)

//為時(shí)鐘信號(hào)和復(fù)位信號(hào)等賦初值

initial begin

clk = 1;

rst_n = 1;

data_in = 0;

parity_odd = 1;

#5 rst_n <= 0;

#5 rst_n <= 1;

data_in = 8'h01;

#10

data_in = 8'hb7;

#10

data_in = 8'h32;

#10

data_in = 8'he9;

#10

data_in = 8'hd3;

end

endmodule

仿真結(jié)果

bcc71fbe-4b94-11ee-a25d-92fbcf53809c.png

四、總結(jié)

奇偶校驗(yàn)器設(shè)計(jì)主要思路是通過(guò)弄清一組數(shù)據(jù)中“1”和“0”的數(shù)目。若是奇校驗(yàn)則原始碼流+校驗(yàn)位總共有奇數(shù)個(gè)“1”;若是偶校驗(yàn)則原始碼流+校驗(yàn)位總共有偶數(shù)個(gè)“1”。設(shè)計(jì)方法主要有XOR法和計(jì)數(shù)器法。XOR法最簡(jiǎn)單,只需要對(duì)數(shù)據(jù)使用按位異或,輸出為“0”代表數(shù)據(jù)中“1”位偶數(shù)個(gè);計(jì)數(shù)器法最直觀,計(jì)數(shù)器中數(shù)值的奇偶性表示對(duì)應(yīng)數(shù)據(jù)中“1”個(gè)數(shù)的奇偶。

Tips:判斷計(jì)數(shù)器是奇數(shù)還是偶數(shù)主要有判斷data_out[0]和取余數(shù)兩種方法,前者綜合后耗損的資源太多不推薦前者。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1343

    瀏覽量

    109925
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2253

    瀏覽量

    94283
  • 奇偶校驗(yàn)器
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    7122
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4722

    瀏覽量

    68231

原文標(biāo)題:FPGA基礎(chǔ)-奇偶校驗(yàn)器設(shè)計(jì)

文章出處:【微信號(hào):Hack電子,微信公眾號(hào):Hack電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    串口調(diào)試助手的奇偶校驗(yàn)測(cè)試方法

    很多串口調(diào)試助手感覺(jué)奇偶校驗(yàn)功能都是形同虛設(shè)的(我設(shè)置奇校驗(yàn)和偶校驗(yàn)都能收到數(shù)據(jù))。是不是我測(cè)試方法有誤呢?串口助手校驗(yàn)失敗會(huì)有什么現(xiàn)象?。?/div>
    發(fā)表于 04-28 15:11

    UART中有奇偶校驗(yàn)位和無(wú)奇偶校驗(yàn)位的數(shù)據(jù)傳輸是怎樣的?

    例如,我使用 8 位數(shù)據(jù)傳輸類型。奇偶校驗(yàn)位共有 3 種類型無(wú)奇偶校驗(yàn)校驗(yàn)校驗(yàn)----------------------偶校驗(yàn)我假設(shè)
    發(fā)表于 12-08 07:24

    奇偶校驗(yàn)

    奇偶校驗(yàn)碼   奇偶校驗(yàn)碼是一種開(kāi)銷最小,能發(fā)現(xiàn)數(shù)據(jù)代碼中一位出錯(cuò)情況的編碼,常用于存儲(chǔ)讀寫(xiě)檢查,或ASCII字符、其它類
    發(fā)表于 10-13 16:42 ?5268次閱讀

    奇偶校驗(yàn),奇偶校驗(yàn)是什么意思

    奇偶校驗(yàn),奇偶校驗(yàn)是什么意思 奇偶校驗(yàn)定義 為了系統(tǒng)的可靠性,對(duì)于位數(shù)
    發(fā)表于 03-08 17:32 ?2186次閱讀

    奇偶校驗(yàn)碼,奇偶校驗(yàn)碼原理是什么?

    奇偶校驗(yàn)碼,奇偶校驗(yàn)碼原理是什么? 奇偶校驗(yàn)碼是奇校驗(yàn)碼和偶校驗(yàn)碼的統(tǒng)稱,是一種最基本的檢錯(cuò)碼。它是由n-1位信息元和1位
    發(fā)表于 03-17 17:39 ?6.3w次閱讀

    奇偶校驗(yàn)_奇偶校驗(yàn)設(shè)計(jì)程序

    本內(nèi)容提供了奇偶校驗(yàn)_奇偶校驗(yàn)設(shè)計(jì)的程序代碼,希望對(duì)大家有幫助
    發(fā)表于 11-11 10:04 ?5691次閱讀

    stm32串口奇偶校驗(yàn)

    STM32串口通信使用奇偶校驗(yàn)的時(shí)候應(yīng)該設(shè)置數(shù)據(jù)位長(zhǎng)度9bit,奇偶校驗(yàn)是硬件完成的,并且stm32用校驗(yàn)位時(shí),數(shù)據(jù)位要選9位,8位會(huì)出現(xiàn)故障可能。
    的頭像 發(fā)表于 07-23 09:26 ?1.1w次閱讀

    stm32 usart奇偶校驗(yàn)如何配置

    stm32 usart奇偶校驗(yàn)如何配置?或許你在stm32 usart奇偶校驗(yàn)過(guò)程中會(huì)遇到如下一些坑,stm32 usart偶校驗(yàn)錯(cuò)誤標(biāo)志位以及出現(xiàn)偶校驗(yàn)錯(cuò)誤,
    的頭像 發(fā)表于 07-23 09:55 ?7399次閱讀
    stm32 usart<b class='flag-5'>奇偶校驗(yàn)</b>如何配置

    STM32的UART奇偶校驗(yàn)注意

    STM32的UART奇偶校驗(yàn)注意STM32的UART在初始化時(shí),我們通常用到最多的就是無(wú)校驗(yàn)位,1停止位。但是我在項(xiàng)目中也遇到某些芯片通信用的需要奇校驗(yàn)或者偶校驗(yàn),這里需要特別注意的是
    發(fā)表于 12-28 19:10 ?20次下載
    STM32的UART<b class='flag-5'>奇偶校驗(yàn)</b>注意

    增強(qiáng)FIFO模式下的奇偶校驗(yàn)

    自昊芯推出專題講解SCI串口通訊奇偶校驗(yàn),分為兩期講解,上期主要講解標(biāo)準(zhǔn)SCI模式下的奇偶校驗(yàn),本期主要講解增強(qiáng)FIFO模式下的奇偶校驗(yàn)。
    的頭像 發(fā)表于 11-02 09:30 ?976次閱讀

    FPGA奇偶校驗(yàn)的基本原理及實(shí)現(xiàn)方法

    在數(shù)字電路中,數(shù)據(jù)的正確性非常重要。為了保證數(shù)據(jù)的正確性,在傳輸數(shù)據(jù)時(shí)需要添加一些冗余信息,以便在接收端進(jìn)行校驗(yàn)。其中一種常用的校驗(yàn)方式是奇偶校驗(yàn)(Parity Check)。本文將介紹奇偶校
    的頭像 發(fā)表于 05-14 14:59 ?2848次閱讀
    FPGA<b class='flag-5'>奇偶校驗(yàn)</b>的基本原理及實(shí)現(xiàn)<b class='flag-5'>方法</b>

    什么是奇偶校驗(yàn) 奇偶校驗(yàn)的基本原理 奇偶校驗(yàn)電路什么意思

    什么是奇偶校驗(yàn) 奇偶校驗(yàn)的基本原理 奇偶校驗(yàn)電路什么意思? 奇偶校驗(yàn)是一種用于檢測(cè)二進(jìn)制數(shù)據(jù)中錯(cuò)誤的方法。它的基本原理是在二進(jìn)制數(shù)據(jù)的末尾添
    的頭像 發(fā)表于 10-17 16:16 ?3556次閱讀

    什么是奇偶校驗(yàn)電路?奇偶校驗(yàn)是時(shí)序邏輯電路嗎?

    什么是奇偶校驗(yàn)電路?奇偶校驗(yàn)是時(shí)序邏輯電路嗎? 奇偶校驗(yàn)電路是一種數(shù)字電路,在數(shù)據(jù)傳輸過(guò)程中用于檢測(cè)數(shù)據(jù)是否發(fā)生錯(cuò)誤。在每個(gè)數(shù)據(jù)字節(jié)(通常是8位)的最高位添加一位(偶
    的頭像 發(fā)表于 10-17 16:16 ?3444次閱讀

    什么是奇校驗(yàn)和偶校驗(yàn)?常見(jiàn)的奇偶校驗(yàn)方式有哪些?

    校驗(yàn),以保證正確性。常用的校驗(yàn)方法奇偶校驗(yàn)、循環(huán)冗余校驗(yàn)(CRC)、海明碼等。 2. 奇偶校驗(yàn)是一種最簡(jiǎn)單的
    的頭像 發(fā)表于 10-17 16:28 ?1w次閱讀

    奇偶校驗(yàn)和crc校驗(yàn)的區(qū)別 CRC校驗(yàn)奇偶校驗(yàn)之間有什么關(guān)系?

    奇偶校驗(yàn)和crc校驗(yàn)的區(qū)別 CRC校驗(yàn)奇偶校驗(yàn)之間有什么關(guān)系? 奇偶校驗(yàn)和 CRC(Cyclic Redundancy Check)
    的頭像 發(fā)表于 10-17 16:28 ?3208次閱讀