關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 基于CPLD的位同步時鐘提取電路設計

        基于CPLD的位同步時鐘提取電路設計

        ——
        作者:王志梁 劉篤仁 西安電子科技大學 時間:2007-01-26 來源:《電子元器件應用》 收藏


        引言

        本文引用地址:http://www.104case.com/article/21526.htm

        異步串行通信是現代電子系統中最常用的數據信息傳輸方式之一,一般情況下,為了能夠正確地對異步串行數據進行發送和接收,就必須使其接收與發送的碼元同步,位同步時鐘信號不僅可用來對輸入碼元進行檢測以保證收發同步,而且在對接收的數字碼元進行各種處理等過程中,也可以為系統提供一個基準的同步時鐘。

        本文介紹的位同步時鐘的提取方案,原理簡單且同步速度較快。整個系統采用veriloghdl語言編寫,并可以在cpld上實現。

        位同步時鐘的提取原理

        本系統由一個跳變沿捕捉模塊、一個狀態寄存器和一個可控計數器共三部分組成,整個系統的原理框圖如圖1所示,其中data_in是輸入系統的串行信號,clock是頻率為串行信號碼元速率2n倍的高精度時鐘信號,pulse_out是系統產生的與輸入串行信號每個碼元位同步的脈沖信號,即位同步時鐘。

        跳變沿捕捉模塊的輸入也就是整個的輸入data_in和clock。當data_in發生跳變時,無論是上升沿或是下降沿,捕捉模塊都將捕捉所發生的這次跳變,并產生一個脈沖信號clear,這個clear信號所反應的就是輸入信號發生跳變的時刻。然后以它為基準,就可以有效地提取輸入串行信號的同步時鐘。

        狀態寄存器有兩個輸入,分別接跳變沿捕捉模塊的輸出clear和可控計數器的輸出pulse_out,當clear信號的上升沿到來時,此狀態寄存器的輸出k被置1,之后在pulse_out和k信號本身的控制下,k在pulse_out和k信號上產生一個脈沖之后被置0,這個k為一般連接到可控計數器的控制端。

        可控計數器是模可變的計數器,在k信號的控制下可以對clock信號進行模為n-2或2n的計數,其三個輸入分別接跳變沿捕捉模塊的輸出clear、狀態寄存器的輸出k和時鐘clock。其中clear信號可以對計數器進行異步清零,k信號可選擇計數的模,當k=1時,計數器的模為n-2,計數滿n-2后即產生輸出脈沖pulse_out,當k=0時,計數器的模為2n,計數滿2n時,產生輸出脈沖pulse_out。

        整個系統工作時,當輸入信號data_in發生跳變時,跳變沿捕捉將可以捕捉到這次跳變,并產生一個脈沖信號clear,此clear信號可以將可控計數器的計數值清零,同時將狀態寄存器的輸出k置1,并送入可控計數器中,以使計數器進行模塊為n-2的計數,待計滿后,便可輸出脈沖信號pulse_out,此信號一方面可作為整個系統輸出的位同步時鐘信號,另一方面,它也被接進了狀態寄存器,以控制其輸出k在計數器完成n-2的計數后就變為0,并在沒有clear脈沖信號時使k保持為0,從而使可控計數器的模保持為2n,直到輸入信號data_in出現新的跳變沿并產生新的clear脈沖信號,由以上原理可見,在輸入信號為連“1”或連“0”的情況下,只要系統使用的時鐘信號足夠精確,就可以保證在一定時間里輸出滿足要求的位同步時鐘,而在輸入信號發生跳變時,系統又會捕捉下這個跳變沿并以此為基準輸出位同步時鐘。

        位同步時鐘的提取

        本系統包括三個部分,一是采用veriloghdl語言編寫程序,第二步再將每個部分作為一個模塊(module)來編寫,最后通過元件例化的方法將三個模塊連接起來,以完成這個整個系統的設計。

        下面是跳變沿捕捉模塊的部分程序,其中int0為串行輸入信號,pcclk為輸入系統的高精度時鐘信號,本模塊的輸出pcout對應于圖1中的clear信號,它同時又接入狀態寄存器模塊的psclr和可控計數器模塊的clr。其仿真結構如圖2所示。

        跳變沿捕捉模塊的部分程序如下:

        module pcheckcapture (pcout,int0,pcclk);

        ……

        reg pctemp1,pctemp2;

        always@(posedge pcclk) begin

        pctemp1<=int0;

        pctemp2<=pctemp1;

        end

        assign pcout=pctemp1^pctemp2;

        ……

        狀態寄存器模塊的部分程序如下,其中輸入信號psclr來自跳變沿捕捉模塊,另一個輸入信號pss則來自可控計數器的輸出s對應圖1中的pulse_out,輸出信號psout對應圖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

        ……

        下面是可控計數器模塊的部分程序,其中三個輸入信號k、clr、clk分別對應于圖1中的k、clear、clock,輸出信號s對應于圖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

        ………

        在頂層模塊中,應對三個模塊進行例化,并在導線相連接,以構成一個完整的系統,此模塊的程序如下:

        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為整個系統的仿真結果。

        結束語

        本位同步時鐘提取方案已在cpld器件上進行了仿真實現,通過以上的分析可知,本位同步時鐘的提取方案具有結構簡單、節省硬件資源、同步建立時間短等優點,在輸入信號有一次跳變后,系統出現連“1”連“0”,或信號中斷時,此系統仍然能夠輸出位同步時鐘脈沖,此后,只要輸入信號恢復并產生新的跳變沿,系統仍可以調整此位同步時鐘脈沖輸出而重新同步,此系統中輸入的時鐘信號頻率相對碼元速率越高,同步時鐘的位置就越精確,而當輸入碼元速率改變時,只要改變本系統中的n值系統就可重新正常工作。



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 胶州市| 班玛县| 封丘县| 巩义市| 达州市| 北海市| 鹤壁市| 西乡县| 饶河县| 花垣县| 博乐市| 嘉定区| 固始县| 桂林市| 静宁县| 海伦市| 柳林县| 常德市| 山阳县| 苍溪县| 贞丰县| 灵武市| 宜宾县| 尉氏县| 启东市| 顺平县| 改则县| 体育| 子洲县| 孝感市| 辽阳市| 凤山县| 东丰县| 庆阳市| 全椒县| 常宁市| 承德市| 抚顺县| 荣昌县| 专栏| 涞源县|