引言
異步串行通信是現(xiàn)代電子系統(tǒng)中最常用的數(shù)據(jù)信息傳輸方式之一,一般情況下,,為了能夠正確地對異步串行數(shù)據(jù)進行發(fā)送和接收,,就必須使其接收與發(fā)送的碼元同步,位同步時鐘信號不僅可用來對輸入碼元進行檢測以保證收發(fā)同步,,而且在對接收的數(shù)字碼元進行各種處理等過程中,,也可以為系統(tǒng)提供一個基準(zhǔn)的同步時鐘。
本文介紹的位同步時鐘的提取方案,,原理簡單且同步速度較快。整個系統(tǒng)采用VerilogHDL語言編寫,,并可以在CPLD上實現(xiàn),。
位同步時鐘的提取原理
本系統(tǒng)由一個跳變沿捕捉模塊、一個狀態(tài)寄存器和一個可控計數(shù)器共三部分組成,,整個如圖1所示,,其中data_in是輸入系統(tǒng)的串行信號,clock是頻率為串行信號碼元速率2N倍的高精度時鐘信號,,pulse_out是系統(tǒng)產(chǎn)生的與輸入串行信號每個碼元位同步的脈沖信號,,即位同步時鐘。
跳變沿捕捉模塊的輸入也就是整個的輸入data_in和clock,。當(dāng)data_in發(fā)生跳變時,,無論是上升沿或是下降沿,捕捉模塊都將捕捉所發(fā)生的這次跳變,并產(chǎn)生一個脈沖信號clear,,這個clear信號所反應(yīng)的就是輸入信號發(fā)生跳變的時刻,。然后以它為基準(zhǔn),
就可以有效地提取輸入串行信號的同步時鐘,。
狀態(tài)寄存器有兩個輸入,,分別接跳變沿捕捉模塊的輸出clear和可控計數(shù)器的輸出pulse_out,當(dāng)clear信號的上升沿到來時,,此狀態(tài)寄存器的輸出k被置1,,之后在pulse_out和k信號本身的控制下,k在pulse_out和k信號上產(chǎn)生一個脈沖之后被置0,,這個k為一般連接到可控計數(shù)器的控制端,。
可控計數(shù)器是模可變的計數(shù)器,,在k信號的控制下可以對clock信號進行模為N-2或2N的計數(shù),,其三個輸入分別接跳變沿捕捉模塊的輸出clear、狀態(tài)寄存器的輸出k和時鐘clock,。其中clear信號可以對計數(shù)器進行異步清零,,k信號可選擇計數(shù)的模,當(dāng)k=1時,,計數(shù)器的模為N-2,,計數(shù)滿N-2后即產(chǎn)生輸出脈沖pulse_out,當(dāng)k=0時,,計數(shù)器的模為2N,,計數(shù)滿2N時,產(chǎn)生輸出脈沖pulse_out,。
整個系統(tǒng)工作時,,當(dāng)輸入信號data_in發(fā)生跳變時,跳變沿捕捉將可以捕捉到這次跳變,,并產(chǎn)生一個脈沖信號clear,,此clear信號可以將可控計數(shù)器的計數(shù)值清零,同時將狀態(tài)寄存器的輸出k置1,,并送入可控計數(shù)器中,,以使計數(shù)器進行模塊為N-2的計數(shù),待計滿后,,便可輸出脈沖信號pulse_out,,此信號一方面可作為整個系統(tǒng)輸出的位同步時鐘信號,另一方面,,它也被接進了狀態(tài)寄存器,,以控制其輸出k在計數(shù)器完成N-2的計數(shù)后就變?yōu)?,,并在沒有clear脈沖信號時使K保持為0,從而使可控計數(shù)器的模保持為2N,,直到輸入信號data_in出現(xiàn)新的跳變沿并產(chǎn)生新的clear脈沖信號,,由以上原理可見,在輸入信號為連“1”或連“0”的情況下,,只要系統(tǒng)使用的時鐘信號足夠精確,,就可以保證在一定時間里輸出滿足要求的位同步時鐘,而在輸入信號發(fā)生跳變時,,系統(tǒng)又會捕捉下這個跳變沿并以此為基準(zhǔn)輸出位同步時鐘,。
位同步時鐘的提取
本系統(tǒng)包括三個部分,一是采用VerilogHDL語言編寫程序,,第二步再將每個部分作為一個模塊(module)來編寫,,最后通過元件例化的方法將三個模塊連接起來,以完成這個整個系統(tǒng)的設(shè)計,。
下面是跳變沿捕捉模塊的部分程序,,其中Int0為串行輸入信號,PCclk為輸入系統(tǒng)的高精度時鐘信號,,本模塊的輸出Pcout對應(yīng)于圖1中的clear信號,,它同時又接入狀態(tài)寄存器模塊的Psclr和可控計數(shù)器模塊的clr。其仿真結(jié)構(gòu)如圖2所示,。
跳變沿捕捉模塊的部分程序如下:
module PcheckCapture (PCout,,Int0,PCclk),;
……
reg PCtemp1,,PCtemp2;
always@(posedge PCclk) begin
PCtemp1<=Int0,;
PCtemp2<=PCtemp1,;
end
assign PCout="PCtemp1"^PCtemp2;
……
狀態(tài)寄存器模塊的部分程序如下,,其中輸入信號Psclr來自跳變沿捕捉模塊,,另一個輸入信號Pss則來自可控計數(shù)器的輸出s對應(yīng)圖1中的pulse_out,輸出信號Psout對應(yīng)圖1中的k,;
module PcheckSreg (Psout,Pss,,Psclr),;
……
wire Pstemp;
assign Pstemp=~(Pss&Psout),;
always@(posedge Pstemp or posedge Psclr) begin
if(Psclr==1b1)Psout<=1,;
else Psout<=~Psout;
end
……
下面是可控計數(shù)器模塊的部分程序,其中三個輸入信號k,、clr,、clk分別對應(yīng)于圖1中的k、clear,、clock,,輸出信號s對應(yīng)于圖1中的輸出信號pulse_out;
module PcheckCoumter (s,,k,,clr,clk),;
……
always@(posedge clk or posedge clr)
begin
if(clr==1)begin
s=0,;
cnt=0;
end
else begin
if(k==0) begin
if(cnt==2N-1)begin
cnt=0,;
s=1,;
end;
else begin
cnt=cnt+1,;
s=0,;
end
end
else begin
if(cnt==N-2)begin cnt="0";
s=1,;
end
else begin
cnt=cnt+1,;
s=0;
end
……
…
在頂層模塊中,,應(yīng)對三個模塊進行例化,,并在導(dǎo)線相連接,以構(gòu)成一個完整的系統(tǒng),,此模塊的程序如下:
modulePcheckTop (PTout,,PTint,PTclk),;
inout PTout,;
input PTint,PTclk,;
PcheckCapture a (clear,,PTint,PTclk),;
PcheckCounter b (PTout,,k,clear,,PTclk),;
PcheckSreg
c(k,,PTout,clear),;
endmodule
圖3為整個系統(tǒng)的仿真結(jié)果,。
結(jié)束語
本位同步時鐘提取方案已在CPLD器件上進行了仿真實現(xiàn),通過以上的分析可知,,本位同步時鐘的提取方案具有結(jié)構(gòu)簡單,、節(jié)省硬件資源、同步建立時間短等優(yōu)點,,在輸入信號有一次跳變后,,系統(tǒng)出現(xiàn)連“1”連“0”,或信號中斷時,,此系統(tǒng)仍然能夠輸出位同步時鐘脈沖,,此后,只要輸入信號恢復(fù)并產(chǎn)生新的跳變沿,,系統(tǒng)仍可以調(diào)整此位同步時鐘脈沖輸出而重新同步,,此系統(tǒng)中輸入的時鐘信號頻率相對碼元速率越高,同步時鐘的位置就越精確,,而當(dāng)輸入碼元速率改變時,,只要改變本系統(tǒng)中的N值系統(tǒng)就可重新正常工作。