資源描述:
《HDB3碼編碼器及解碼器verilog代碼編程及實(shí)現(xiàn).ppt》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、通信原理消息數(shù)字基帶信號調(diào)制傳輸解調(diào)基帶信號解碼消息基帶信號的選擇:AMI碼HDB3碼HDB3碼保持了AMI碼的優(yōu)點(diǎn),克服了AMI碼在遇到連“0”長時難以提取定時信息的困難,因而獲得廣泛應(yīng)用。HDB3碼編碼規(guī)則HDB3碼為3階高密度雙極性碼,其編碼規(guī)則為:1將消息代碼轉(zhuǎn)換為AMI碼;2檢查AMI碼中連“0”的情況,出現(xiàn)4個或4個以上連“0”時,將第4個“0”變?yōu)榕c前一個非“0”符號同極性的符號,用“V”標(biāo)識(+V和-V);3、檢查相鄰V符號之間非“0”符號是否為偶數(shù),如果為偶數(shù),則將當(dāng)前V符號前一個非“0”符號后的第一個“0”變?yōu)椤癇”,”B”的極性
2、與前一個非”0“符號相反,并使“V”后的非“0”符號從“V”開始再交替變化。編碼器實(shí)現(xiàn):在實(shí)際電路設(shè)計時,先在純粹的數(shù)字電路下完成插“V”的操作,再完成插“B”的操作;然后再將單極性變成雙極性。這樣可以在數(shù)字電路中實(shí)現(xiàn),且降低寄存器需求。因?yàn)椤癡”、“B”是認(rèn)為標(biāo)識的符號,所以在具體電路中,需做以下替換:0-00,1-01,V-11,B-10。設(shè)計步驟:插“V”的實(shí)現(xiàn):1、設(shè)置連“0”計數(shù)器,復(fù)位為0;2、對輸入信號進(jìn)行判斷,如果為1則計數(shù)器復(fù)位,且輸出“01”;3、如果為“0”,則對“0”進(jìn)行計數(shù),如果計數(shù)值不為4,則輸出“00”;4、如果計數(shù)值為
3、“4”,則計數(shù)器復(fù)位,同時輸出為“11”。moduleadd_v(data_in,clk,data_out);inputdata_in;inputclk;output[1:0]data_out;reg[1:0]data_out;regcounter;always@(posedgeclk)if(data_in==1'b1)begincounter<=0;data_out<=2'b01;endelsebegincounter<=counter+1;if(counter==3)begindata_out=2'b11;counter=0;endelsebeg
4、indata_out=2'b00;endendendmoduleRTL圖插“B”的實(shí)現(xiàn):1、設(shè)置對“01”的計數(shù)器counter為0,設(shè)置對“11”的計數(shù)器firstV為0;2、對輸入進(jìn)行判斷,如果為“01”,則counter加1,仍然輸出“01”;3、如果輸入為“00”,輸出為“00”,計數(shù)器不變;4、如果輸入為“11”,firstV加1,此時如果counter為奇數(shù),則輸出仍為“11”;5、如果counter為偶數(shù),則將counter復(fù)位,且將此處前第4個數(shù)變成“10”。關(guān)鍵要設(shè)置四位的移位寄存器moduleadd_b(add_in,addb_o
5、ut,clk);inputclk;input[1:0]add_in;output[1:0]addb_out;regfirstv;regcounter;reg[1:0]d[3:0];always@(posedgeclk)begind[3]<=d[2];d[2]<=d[1];d[1]<=d[0];d[0]<=add_in;endalways@(posedgeclk)beginif(d[0]==2'b11)begincounter=0;firstv=0;endelseif(d[0]==2'b01)begincounter=counter+1;firstv=
6、1;endelsebeginfirstv=1;endendassignaddb_out=(counter==0)&&(firstv==1)&&(d[0]==2'b11)?2'b10:d[3];endmoduleRTL圖單雙極性變換:由HDB3編碼規(guī)則,“V”的極性是正負(fù)交替,而“1”和“B”的極性看成一體,為正負(fù)交替的,同時“V”的極性與前面的非“0”碼一致。1、設(shè)置一個極性標(biāo)志even=0;2、如果輸入信號為“00”,輸出仍為“00”;3、輸入為“01”,或“10”,如果even=1,輸出“01”;如果even=0,輸出為“10”,然后將even翻
7、轉(zhuǎn);4、如果輸入為“11”,判斷even,如果為1,則輸出“10”,如果位0,輸出“01”。注意:輸出后的“10”和“01”表示的不再是“1”、“V”、和“B”了,而是標(biāo)識符號的正負(fù)極性。再將輸出控制4選1的開關(guān),就可以將“00”、“01”、“10”轉(zhuǎn)化為0、+1和-1了。modulepolar(addb_out,clk,BP,BN);input[1:0]addb_out;inputclk;outputBP,BN;reg[1:0]polar_out;regBP,BN;regeven;always@(posedgeclk)if(addb_out==2'
8、b11)beginif(even==1)beginpolar_out<=2'b01;endelsebegin