CPLD/FPGA在數(shù)字通信系統(tǒng)的應(yīng)用
1 引言
本文引用地址:http://www.ex-cimer.com/article/201706/348938.htm
近年來,由于微電子學(xué)和計(jì)算機(jī)技術(shù)的迅速發(fā)展,給EDA技術(shù)行業(yè)帶來了巨大的變化。 HDL(hardware description language)硬件描述語言是一種描述電路行為的語言,是設(shè)計(jì)者和EDA工具的界面,設(shè)計(jì)者通過HDL描述自己的設(shè)計(jì)對(duì)象。目前比較流行的HDL主要有Verilog HDL、VHDL、AHDL等,其中Verilog HDL和VHDL因?yàn)檫m合標(biāo)準(zhǔn)化的方面而最終成為IEEE標(biāo)準(zhǔn)。但是Verilog HDL比VHDL更容易掌握,并且完成同一功能的Verilog HDL條數(shù)一般僅為VHDL的1/3,Verilog HDL 善于描述更低層設(shè)計(jì)包括結(jié)構(gòu)級(jí)和物理層的設(shè)計(jì),而VHDL設(shè)計(jì)技術(shù)很不直觀,設(shè)計(jì)人員需要有EDA編程基礎(chǔ),經(jīng)過半年左右的專業(yè)培訓(xùn)才能掌握,所以用Verilog HDL的優(yōu)越性高一些。作為學(xué)習(xí)HDL設(shè)計(jì)方法的入門和基礎(chǔ),是一種值得大力推廣的硬件描述語言。
2 漢明碼的基本原理
漢明碼是一種能夠糾正一個(gè)錯(cuò)碼且編碼效率較高的線性碼。在偶數(shù)監(jiān)督碼中,無論信息位有多少,監(jiān)督位只有一位,它使碼組中“1”的個(gè)數(shù)為偶數(shù),在接收端解碼的時(shí)候,實(shí)際就是計(jì)算S= an-1⊕ an-2⊕。。。。⊕a0,若S=0,就認(rèn)為無錯(cuò),若S=1,就認(rèn)為有錯(cuò)。上式稱為監(jiān)督關(guān)系式,S為校正子。由于校正子S的取值只有這樣兩種,它只能代表有錯(cuò)和無錯(cuò)兩種信息,而不能指出錯(cuò)碼的位置。如果監(jiān)督位增加一位,即變成兩位,可能有四種組合:00,01,10,11,故能表示四種不同虛報(bào)許,若用其中一種表示無錯(cuò),則其余三種就有可能用來指示一位錯(cuò)碼 的3種不同位置,同理,r個(gè)監(jiān)督關(guān)系式就能指示一位錯(cuò)碼的(2r-1)個(gè)可能位置.一般說來,若碼長(zhǎng)為n,信息位數(shù)為k,則監(jiān)督位數(shù)r=n-k.如果希望用r個(gè)監(jiān)督位夠造出r個(gè)監(jiān)督關(guān)系式來指示一位錯(cuò)碼的n種可能位置,則要求
2r-1≥n ; 2r≥k+r+1;
設(shè)分組碼(n, k)中k=4.為糾正一位錯(cuò)碼,要求監(jiān)督位數(shù)r≥3.若取r=3,則n= k+r=7.我們用a6a5a4…a0表示7個(gè)碼元,用S1S2S3表示三個(gè)監(jiān)督關(guān)系式中的校正子,則S1S2S3的值與錯(cuò)碼位置的關(guān)系如下表.
由表可知,僅當(dāng)一錯(cuò)碼位置在 a2 a4 a5 a6時(shí),校正子S1為1,否則S1為0.這就意味著a2 a4 a5 和a6 構(gòu)成偶數(shù)監(jiān)督關(guān)系
S1= a2 ⊕ a4⊕ a5⊕a6
同理
S2= a1 ⊕ a3⊕a5⊕a6
S3= a0 ⊕a3⊕a4⊕a6
在發(fā)送端編碼時(shí),信息位a6 a5 a4和 a3 的值決定于輸入信號(hào),因此它們是隨機(jī)的。監(jiān)督位a2 a1 和 a0 應(yīng)根據(jù)信息位的取值按監(jiān)督關(guān)系來確定,即監(jiān)督位應(yīng)使上三式中的S1S2S3的值為零。
a2⊕a4⊕a5⊕a6=0
a1⊕a3⊕a5⊕a6 =0
a0⊕a3⊕a4⊕a6=0
有上式移項(xiàng)運(yùn)算,解出監(jiān)督位
a2= a4⊕a5⊕a6
a1= a3⊕a5⊕a6
a0= a3⊕a4⊕a6
根給定信息位后,可直接計(jì)算出監(jiān)督位,如下表
接收到每個(gè)碼組后,先按上式計(jì)算出S1 S2 和S3 ,再按上表判斷錯(cuò)碼情況。例如,若接收碼組為0000110,則計(jì)算的S1 =1,S2 =1,S3 =0,由于S1 S2 S3 等于110,可知a5位有一錯(cuò)碼。上述方法構(gòu)成的碼稱為漢明碼。表Ⅱ所列的(7,4)漢明碼最小碼距是d0=3,這種碼能糾正一個(gè)錯(cuò)碼或檢測(cè)兩個(gè)錯(cuò)碼。漢明碼的編碼效率等于k/n=(2r-1-r)/( 2r-1)=1-r/(2r-1)=1-r/n.當(dāng)n很大時(shí),則編碼效率接近1??梢姖h明碼是一種高效碼。
3 編碼電路的實(shí)現(xiàn)
本設(shè)計(jì)的開發(fā)平臺(tái)是MAX+PLUSⅡ[4], MAX+PLUSⅡ是Altra公司專為本公司生產(chǎn)的PLD的研制和應(yīng)用開發(fā)的軟件它的突出特點(diǎn)在于其強(qiáng)大的綜合能力和布局布線能力,另外還具有適用范圍廣、器件結(jié)構(gòu)獨(dú)立、通用性好、兼容性好、集成度與自動(dòng)化程度高以及易學(xué)易用的特點(diǎn).
編碼器設(shè)計(jì)的特點(diǎn)是使用了矩陣的乘法,假設(shè)A是輸入至編碼器的數(shù)據(jù)向量,G是矩陣乘法的發(fā)生矩陣,C是漢明碼碼字,那么根據(jù)矩陣乘法計(jì)算得到漢明碼字。
程序編寫如下
module bianma(clk,reset,data_in,dcin,code_out,dcout);
input clk,reset;//時(shí)鐘和復(fù)位信號(hào).
input[3:0] data_in;//輸入數(shù)據(jù)變量,位寬為4bit.
input dcin;//輸入有效控制信號(hào),定義1表無效,編碼器不輸出碼字,定義0表有效.
output[6:0] code_out;//編碼器輸出,位寬為7bit.
output dcout;//輸出有效控制信號(hào),定義1表無效.定義0表有效.
reg[6:0] code_out;
reg dcout;
reg[3:0] datareg;
reg dcinreg;
wire c0=datareg[3];
wire c1=datareg[2];
wire c2=datareg[1];
wire c3=datareg[0];
wire c4=datareg[3]^datareg[2]^datareg[1];
wire c5=datareg[3]^datareg[2]^datareg[0];
wire c6=datareg[3]^datareg[1]^datareg[0];
always@(posedge clk or negedge reset)//根據(jù)時(shí)鐘信號(hào)和輸入使能信號(hào)采集數(shù)據(jù).
if(!reset)
dcinreg=1;
else
dcinreg=dcin;
always@(posedge clk)//采集是否有效.
if (reset)
datareg=0;
else if(!dcin)
datareg=data_in;
always@(posedge clk)//碼字在數(shù)據(jù)向量采集后一個(gè)時(shí)鐘周期計(jì)算得到.
if (reset)
dcout=1;
else
dcout=dcinreg;
always@(posedge clk)//碼字輸出是否有效.
if(reset)
code_out =0;
else
code_out={c0,c1,c2,c3,c4,c5,c6};
endmodule
該源程序經(jīng)過編譯和仿真,時(shí)序圖如下所示,得到結(jié)果符合系統(tǒng)功能要求
本設(shè)計(jì)使用的芯片為MAX3000A系列EPM3032ALC44-4,芯片的輸入輸出端口的設(shè)計(jì)采用D觸發(fā)器組來緩存數(shù)據(jù),確保采集數(shù)據(jù)向量和發(fā)送的碼字穩(wěn)定,并于時(shí)鐘信號(hào)嚴(yán)格同步。
4 結(jié)束語
本文通過介紹漢明碼的編碼原理,進(jìn)而用Verilog HDL進(jìn)行漢明碼編碼器的設(shè)計(jì),并通過時(shí)序仿真波形圖進(jìn)行邏輯分析,結(jié)果符合實(shí)際情況.而Verilog HDL有著類似C語言的編程風(fēng)格,易于學(xué)習(xí)和掌握,與傳統(tǒng)的原理圖設(shè)計(jì)方法相比較, Verilog HDL更適合于規(guī)模日益增大的數(shù)字系統(tǒng). Verilog HDL等硬件描述語言進(jìn)行數(shù)字系統(tǒng)的設(shè)計(jì)是EDA發(fā)展的趨勢(shì),在數(shù)字系統(tǒng)的設(shè)計(jì)中有著廣泛的空間.
評(píng)論