日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > ZYNQ


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

需要指出當(dāng)出現(xiàn)偶數(shù)個(gè)錯(cuò)誤時(shí),奇偶校驗(yàn)是無法檢測此時(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)值是相同的,接收電路無法檢測出接收數(shù)據(jù)中岀現(xiàn)的錯(cuò)誤。

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

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

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

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

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

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

二、XOR法

2.1 XOR法

題目:采用XOR法試寫一個(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ì)算出來的校驗(yàn)位 odd_bit  <= ~(^data_in);//奇校驗(yàn)條件下計(jì)算出來的校驗(yàn)位 endend //組合邏輯完成輸入數(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í)間精度1psmodule 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)連接起來即可)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é)果


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

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

題目:采用計(jì)數(shù)器法試寫一個(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 endend  //計(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) begineven_bit <= 1'b0; odd_bit  <= 1'b0; end else if(cnt[0] == 1'b1) begin//通過計(jì)數(shù)器最低位判斷是否為偶數(shù)even_bit <= 1'b1; odd_bit  <= 1'b0; end else begineven_bit <= 1'b0;odd_bit  <= 1'b1; endend  //組合邏輯完成輸入數(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í)間精度1psmodule 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)連接起來即可)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é)果


四、總結(jié)

奇偶校驗(yàn)器設(shè)計(jì)主要思路是通過弄清一組數(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法最簡單,只需要對(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ù)兩種方法,前者綜合后耗損的資源太多不推薦前者


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉