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