顧涵 丁力 瞿佳韻
【摘 要】基于FPGA芯片采用類曼徹斯特組碼方式,設(shè)計(jì)和仿真了串行數(shù)據(jù)傳輸過程中譯碼接收模塊的功能。首先對(duì)譯碼接收模塊的硬件電路進(jìn)行設(shè)計(jì),其次結(jié)合LVDS硬件電路和芯片端口重點(diǎn)分析和編寫了各模塊的VHDL程序,最后采用Isim對(duì)設(shè)計(jì)功能進(jìn)行波形仿真,驗(yàn)證了設(shè)計(jì)的準(zhǔn)確性。
【關(guān)鍵詞】類曼徹斯特;VHDL;設(shè)計(jì)
0 引言
類曼徹斯特碼[1]是一種利用自同步法保持位同步的線路碼型,在傳輸數(shù)字信息的同時(shí),也將同步時(shí)鐘信號(hào)一起傳輸?shù)綄?duì)方,它用上升沿來表示一個(gè)碼元的開始,然后連續(xù)兩個(gè)時(shí)鐘信號(hào)的高電平表示“1”,對(duì)應(yīng)編碼數(shù)據(jù)“0100”,反之連續(xù)兩個(gè)時(shí)鐘的低電平表示“0”,對(duì)應(yīng)編碼數(shù)據(jù)“0111”。經(jīng)類曼徹斯特編碼后,無論是數(shù)據(jù)“1”還是數(shù)據(jù)“0”,在開始的時(shí)候都有一個(gè)上升沿,包含了時(shí)鐘信息,正是具有這一特點(diǎn),在現(xiàn)代通信中得到了廣泛的應(yīng)用。我們采用類曼徹斯特碼,設(shè)計(jì)和仿真了串行數(shù)據(jù)傳輸過程中譯碼接收模塊的功能。
1 LVDS技術(shù)介紹
LVDS[2]是一種低擺幅的差分信號(hào)技術(shù),具有終端適配簡(jiǎn)潔方便、低功耗、低成本、高速傳輸?shù)葍?yōu)點(diǎn),并且能對(duì)傳輸數(shù)據(jù)進(jìn)行時(shí)效保護(hù),確保了數(shù)據(jù)傳輸?shù)目煽啃浴VDS使得信號(hào)能夠在差分平衡電纜上以幾百M(fèi)bps[3]的速率傳輸,其低壓幅和低電流的驅(qū)動(dòng)輸出完全達(dá)到了低噪聲和低功耗的要求。采用LVDS技術(shù)設(shè)計(jì)的接收器引進(jìn)恒流式驅(qū)動(dòng)方式,準(zhǔn)許帶電插入,對(duì)系統(tǒng)不會(huì)造成任何損壞,適用于高速數(shù)據(jù)的傳輸。
差分信號(hào)的抗噪特性在理想狀態(tài)[4]下,所謂理想狀態(tài)是指線路沒有干擾時(shí),發(fā)送端IN= IN+-IN-,接收端IN+-IN-=OUT,發(fā)送端信號(hào)等于接收端信號(hào)。在非理想狀態(tài)下,非理想狀態(tài)是指線路有干擾時(shí),發(fā)送端IN=IN+-IN-,接收端(IN++q)-(IN-+q)= IN+-IN-=OUT,噪聲在輸出端被抑制掉,所以輸入端信號(hào)依舊等于輸出端信號(hào)。從兩種狀態(tài)的分析可知差分方式可以很好的抑制噪聲,確保數(shù)據(jù)準(zhǔn)確無誤的傳輸。
2 硬件設(shè)計(jì)
圖1 LVDS譯碼接收電路
硬件設(shè)計(jì)采用LVDS差分電路,LVDS譯碼接收電路如圖1所示,電路中臨近接收器端并接了兩個(gè)51Ω的電阻,電阻間對(duì)地接了10pF的電容,能夠起到消除共模干擾的作用。在傳輸過程中使用雙絞屏蔽電纜,該電纜具有良好的傳輸特性,主要參數(shù)為時(shí)間延時(shí)4.3ns/m(max) [5],2芯時(shí)延差0.1ns/m(max),特性阻抗(94~106)Ω,衰減32db/100m(80Mhz)。采用這種方式設(shè)計(jì)電路一方面能夠提高系統(tǒng)的抗干擾性,另一方面能夠保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。
3 軟件設(shè)計(jì)
譯碼接收過程可分為三步進(jìn)行:第一步,檢測(cè)接收的數(shù)據(jù)是否為有效數(shù)據(jù),若不是則重新開始新的十七位數(shù)據(jù)譯碼;第二步,對(duì)十七位數(shù)據(jù)進(jìn)行類曼徹斯特譯碼;第三步,將生成的校驗(yàn)位(對(duì)接收的數(shù)據(jù)進(jìn)行偶校驗(yàn)的結(jié)果)與編碼時(shí)生成的校驗(yàn)位進(jìn)行比較,若相等則將譯碼后的十六位數(shù)據(jù)發(fā)送出去。具體VHDL程序可以分為數(shù)據(jù)定義、數(shù)據(jù)緩存、數(shù)據(jù)有效性判斷和數(shù)據(jù)轉(zhuǎn)換及校驗(yàn)四大模塊,其中最后一個(gè)模塊和編碼程序類似,本文就不再闡述。
3.1 數(shù)據(jù)定義模塊
數(shù)據(jù)及輸入輸出端口定義模塊程序?yàn)椋?/p>
module Manchester_Decoder(clk,rst,sdi,in_data) ;
input clk,rst;input sdi;
output [15:0] in_data;
3.2 數(shù)據(jù)緩存模塊
數(shù)據(jù)緩存模塊中數(shù)據(jù)傳輸采用逐位傳遞方式,具體程序?yàn)椋?/p>
reg [4:0] sdi_delay;always @(posedge clk)
begin
sdi_delay[4:1]<=sdi_delay[3:0];//空出最后一位待放新接收的數(shù)據(jù)
sdi_delay[0]<=sdi;//將接收到的數(shù)據(jù)放入緩存
end
3.3 數(shù)據(jù)有效性判斷模塊
在對(duì)數(shù)據(jù)有效性進(jìn)行判斷時(shí)要分別對(duì)連續(xù)“1”和連續(xù)“0”的個(gè)數(shù)進(jìn)行判斷,具體程序?yàn)椋?/p>
reg [7:0] hign_count,low_count;
always @(posedge clk or posedge sdi_delay[0])
begin
if(sdi_delay[0]==1'b1)
begin
hign_count<=hign_count+1;//判斷接收數(shù)據(jù)中連續(xù)1的個(gè)數(shù)
low_count<=8'd0;
end
else
begin
hign_count<=8'd0;
low_count<=low_count+1; //判斷接收數(shù)據(jù)中連續(xù)0的個(gè)數(shù)
end
end
4 測(cè)試和仿真
若接收到的數(shù)據(jù)為0100-0100-0100-0100-0100-0100-0100-0100-0100-0100-0100-0100-01 11-0111-0111-0111-0111,則經(jīng)過譯碼后的數(shù)據(jù)應(yīng)為0x001F。采用ISim進(jìn)行波形仿真,驗(yàn)證譯碼模塊功能的準(zhǔn)確性,ISim測(cè)試代碼為:
initial begin
clk = 0;rst = 0;
bufd=72'b0100_0100_0100_0100_0100_0100_0100_0100_0100_0100_0100_0100_0111_0111_0111_0111_0111;#100 rst=1;
end(下轉(zhuǎn)第187頁)
always #5 clk=~clk;always@(posedge clk) bufd<=bufd>>1;assign sdi=bufd[0];
從圖2中我們可以看出,當(dāng)數(shù)據(jù)接收完成后,譯碼輸出數(shù)據(jù)為0x001F,和預(yù)期設(shè)計(jì)功能相符。
【參考文獻(xiàn)】
[1]江曉林,等.通信原理[M].哈爾濱工業(yè)大學(xué)出版社,2010.
[2]劉江海.EDA技術(shù)[M].華中科技大學(xué)出版社,2009.
[3]王曉聰.基于FPGA的HDB3碼編碼器優(yōu)化設(shè)計(jì)與分析[J].現(xiàn)代電子技術(shù),2011.
[4]楊少春.類曼徹斯特編解碼器設(shè)計(jì)及應(yīng)用[J].器件與電路,2012.
[5]樊昌信.現(xiàn)代通信原理[M].人民郵電出版社,2011.
[責(zé)任編輯:劉帥]