基于VHDL的時(shí)鐘分頻和觸發(fā)延遲電路在FPGA上的實(shí)現(xiàn)
0 引言
EAST(先進(jìn)實(shí)驗(yàn)超導(dǎo)托卡馬克)是我國自行設(shè)計(jì)研制的國際首個(gè)全超導(dǎo)托卡馬克裝置。中央定時(shí)同步系統(tǒng)是EAST托卡馬克裝置的重要組成部分。EAST中央定時(shí)與同步系統(tǒng)為分布廣泛的數(shù)據(jù)采集系統(tǒng)和其它子系統(tǒng)提供精確的方波時(shí)鐘信號(hào),以及精確的同步觸發(fā)信號(hào),控制各子系統(tǒng)按照預(yù)設(shè)的時(shí)序流程工作。該系統(tǒng)主要由EAST可視化中央控制臺(tái),時(shí)序信號(hào)光纖網(wǎng),核心模塊,若干個(gè)分布式節(jié)點(diǎn)以及外圍隔離驅(qū)動(dòng)設(shè)備組成,見圖1。核心模塊負(fù)責(zé)向各分布式節(jié)點(diǎn)發(fā)送同步的基準(zhǔn)系統(tǒng)時(shí)鐘和系統(tǒng)觸發(fā)信號(hào)。分布式節(jié)點(diǎn)根據(jù)設(shè)置對核心模塊發(fā)送的基準(zhǔn)時(shí)鐘信號(hào)進(jìn)行分頻,得到所需要頻率的時(shí)鐘發(fā)送到子系統(tǒng)。通過設(shè)置的觸發(fā)延遲模件參數(shù)可以得到子系統(tǒng)所需要的觸發(fā)時(shí)刻。
目前,進(jìn)行分頻電路設(shè)計(jì)主要采用定時(shí)器來實(shí)現(xiàn),8254計(jì)數(shù)器所支持的最高時(shí)鐘頻率有限(最高為10 MHz)以及誤差較大也不是理想的實(shí)現(xiàn)方案。可編程邏輯器件FPGA是當(dāng)今最熱門的邏輯開發(fā)器件之一,它在工作最高頻率、集成度、時(shí)序控制能力上具有無與倫比的優(yōu)勢。因此選用FPGA芯片來實(shí)現(xiàn)時(shí)鐘分頻和觸發(fā)延遲電路是當(dāng)前的主流。在使用FPGA做時(shí)鐘分頻設(shè)計(jì)時(shí),文獻(xiàn)設(shè)計(jì)計(jì)數(shù)器的時(shí)候用VHDL做了分頻器的設(shè)計(jì),但是只討論了偶數(shù)的分頻;文獻(xiàn)在運(yùn)動(dòng)控制系統(tǒng)中使用Verilog描述語言在FPGA環(huán)境下對通用整數(shù)分頻器進(jìn)行了設(shè)計(jì),但在通用任意整數(shù)分頻器中分頻系數(shù)的設(shè)置稍顯復(fù)雜,不利于分布式中央定時(shí)系統(tǒng),并且主要討論的都是單路輸出;文獻(xiàn)在FPGA上實(shí)現(xiàn)了奇數(shù)和偶數(shù)的通用分頻器,將半整數(shù),奇數(shù),偶數(shù)放在一個(gè)模N計(jì)數(shù)器里進(jìn)行預(yù)置,這樣分頻系數(shù)的設(shè)定比較方便,但輸出奇數(shù)分頻時(shí)鐘信號(hào)時(shí)的誤差過大,達(dá)不到分布式定時(shí)同步系統(tǒng)的精度。而對觸發(fā)延遲輸出方面,之前這方面的研究主要采用的是模擬電路實(shí)現(xiàn)的方法,不易進(jìn)行遠(yuǎn)程控制和更改。
本文首先介紹中央定時(shí)同步系統(tǒng)的基本組成結(jié)構(gòu),隨后具體給出了時(shí)鐘分頻和觸發(fā)延遲電路的邏輯設(shè)計(jì)。利用FPGA芯片來實(shí)現(xiàn)對輸入基準(zhǔn)時(shí)鐘信號(hào)進(jìn)行多通道任意整數(shù)倍的等占空比分頻輸出,同時(shí)對觸發(fā)脈沖進(jìn)行任意時(shí)刻延遲的多路輸出。本設(shè)計(jì)主要采用VHDL語言來設(shè)計(jì),利用QuartusⅡ9.0對設(shè)計(jì)進(jìn)行了仿真分析,結(jié)果表明該設(shè)計(jì)滿足分布式定時(shí)觸發(fā)系統(tǒng)的分頻延遲功能。
1 系統(tǒng)組成
EAST定時(shí)與同步系統(tǒng)主要由一個(gè)核心模塊和多個(gè)分布式節(jié)點(diǎn)構(gòu)成,核心模塊給分布式節(jié)點(diǎn)提供一道基準(zhǔn)時(shí)鐘信號(hào)和一道基準(zhǔn)觸發(fā)信號(hào),各分布式節(jié)點(diǎn)負(fù)責(zé)對基準(zhǔn)時(shí)鐘和觸發(fā)進(jìn)行分頻和延時(shí)處理,為子系統(tǒng)系統(tǒng)提供它所需要的時(shí)鐘和觸發(fā)??傮w系統(tǒng)結(jié)構(gòu)如圖1所示。分布式節(jié)點(diǎn)是該中央定時(shí)觸發(fā)系統(tǒng)的核心,而時(shí)鐘分頻和觸發(fā)延遲也是分布式節(jié)點(diǎn)最重要的任務(wù)。分布式節(jié)點(diǎn)主要由微處理器和FPGA組成,外圍由以太網(wǎng)絡(luò)端口,光電轉(zhuǎn)化模塊等等組成。微處理器接收核心模塊發(fā)送的分頻系數(shù)和延遲參數(shù),F(xiàn)PGA主要根據(jù)微處理器傳輸來的參數(shù)對輸入的基準(zhǔn)時(shí)鐘進(jìn)行相應(yīng)的分頻,并對核心模塊發(fā)送的主觸發(fā)信號(hào)進(jìn)行延遲輸出。時(shí)鐘同步系統(tǒng)分布式節(jié)點(diǎn)結(jié)構(gòu)如圖2所示。
2 時(shí)鐘分頻設(shè)計(jì)
對基準(zhǔn)時(shí)鐘的整數(shù)分頻主要分為等占空比偶數(shù)分頻和等占空比奇數(shù)分頻,它們的分頻原理也是不同的,必須要分別對待。對于單通道偶數(shù)分頻,設(shè)計(jì)比較簡單,之前已經(jīng)有很多這方面的研究,在此不再贅述。在本設(shè)計(jì)中,由于EAST定時(shí)觸發(fā)系統(tǒng)需要多路分頻信號(hào),可以在程序設(shè)計(jì)的時(shí)候采用VHDL里面的類屬參量和元件例化語句,類屬參量Generic是一種端口界面常數(shù),常以一種說明的形式放在實(shí)體或塊結(jié)構(gòu)體前的說明部分。類屬參數(shù)映射的綜合處理較簡單,所有的參數(shù)配置都通過Generic map來傳遞,子模塊內(nèi)部只需要根據(jù)上層模塊指定的參數(shù)進(jìn)行綜合即可。整數(shù)時(shí)鐘分頻電路需要在一個(gè)程序中可以同時(shí)對基準(zhǔn)時(shí)鐘進(jìn)行奇數(shù)和偶數(shù)分頻,所以在頂層文件中需要聲明元件的語句格式如下:
時(shí)鐘分頻設(shè)計(jì)的RTL Viewer,即在FPGA中所設(shè)計(jì)的電路原理圖如圖3所示,所有的計(jì)數(shù)分頻模塊都采用同樣的基準(zhǔn)時(shí)鐘,以保證每路時(shí)序信號(hào)能夠完全的同步。等占空比奇數(shù)分頻設(shè)計(jì)所采用的方法是:假設(shè)所需要的分頻系數(shù)為n(n為奇數(shù)),首先定義2個(gè)buffer類型的信號(hào)端口clk1和clk2,在上升沿敏感的情況下,當(dāng)從0計(jì)數(shù)到(n-3)/2時(shí),給clk1賦值1;當(dāng)從(n-3)/2計(jì)數(shù)到n-1時(shí),給clk1賦值0;同樣的,在下降沿敏感的情況下,0到(n-3)/2時(shí)給clk2賦值1,(n-3)/2到n-1時(shí)給clk2賦值0。由于VHDL語言中process里的語句都是并行執(zhí)行的,所以再將2路信號(hào)相或輸出便得到分頻數(shù)為n的分頻信號(hào)。為了實(shí)現(xiàn)多路的觸發(fā)延時(shí),和前面所述多路分頻電路一樣,在頂層文件中做個(gè)例化,取各種不同的奇數(shù)來驗(yàn)證輸出結(jié)果。下圖4中clkout1~clkout8分別為2,3,4,5,6,7,8,9次分頻,可以看到所輸出的信號(hào)均為同步等占空比的分頻信號(hào)。更多路、其他分頻信號(hào)的實(shí)現(xiàn)可以稍加修改頂層程序即可。
實(shí)驗(yàn)采用50 MHz晶振,時(shí)鐘周期為20μs。從圖4中可以看出每路分頻信號(hào)均為等占空比,由于偶數(shù)和奇數(shù)分開進(jìn)行分頻,因此是對奇數(shù)分頻的輸出是很精確的,例如clkout6輸出的7分頻信號(hào)里剛好是7個(gè)基準(zhǔn)時(shí)鐘周期。系統(tǒng)中在放電前需要設(shè)定分頻參數(shù)時(shí),只需要發(fā)送相應(yīng)的指令改動(dòng)頂層文件中的n值即可。
3 觸發(fā)延遲設(shè)計(jì)
時(shí)鐘分頻電路是為了使各子系統(tǒng)能夠更好的做到時(shí)序同步,而觸發(fā)延遲電路是對子系統(tǒng)進(jìn)行定時(shí)啟動(dòng)和停止各正在運(yùn)行的子系統(tǒng)。觸發(fā)延遲模塊主要是將輸入的原始觸發(fā)信號(hào)按延時(shí)參數(shù)進(jìn)行延時(shí)輸出,為EAST中的數(shù)據(jù)采集和其它子系統(tǒng)提供精確的同步觸發(fā)信號(hào)。本設(shè)計(jì)采用VHDL中移位寄存器來實(shí)現(xiàn)觸發(fā)延遲功能。首先定義一個(gè)類屬參數(shù)delay_count,在頂層設(shè)計(jì)實(shí)體中可以設(shè)置延遲參數(shù)。然后在延遲程序模塊的結(jié)構(gòu)體中定義一個(gè)移位寄存器trigger_r(delay_count-1 downto 0),其中delay_count代表所要延遲的位數(shù)。然后每隔一個(gè)時(shí)鐘讓寄存器左移一位,直至將原始觸發(fā)信號(hào)放到寄存器trigger_r的最后一位,最后再把它輸出,結(jié)果便是延遲了delay_count個(gè)單位時(shí)鐘的觸發(fā)信號(hào)了,該移位寄存器的功能語句如下所示:
4路延遲仿真結(jié)果如圖5所示。圖中每個(gè)時(shí)鐘周期為20 ns,其中,delclk1是延遲10 ns×10=0.1μs的觸發(fā)信號(hào),delclk2是延遲0.3μs的觸發(fā)信號(hào),delclk3和delclk4分別是延遲0.9μs和1.2 μs的延遲信號(hào)。其他任意時(shí)間的延遲都可以這樣方便的實(shí)現(xiàn),延遲誤差在ns級(jí)范圍。
4 結(jié)語
本文所使用的時(shí)鐘分頻和觸發(fā)延遲實(shí)現(xiàn)簡單,充分發(fā)揮了FPGA邏輯器件的高集成度、高速、高可靠性和并行處理能力的優(yōu)勢,方便每次放電時(shí)設(shè)定時(shí)鐘和觸發(fā)參數(shù),非常適合EAST分布式中央定時(shí)同步系統(tǒng)中分布式節(jié)點(diǎn)的設(shè)計(jì)。在FPGA上的分頻延時(shí)設(shè)計(jì)與仿真工作已經(jīng)完成,接下來的工作就是要把設(shè)計(jì)文件下載到芯片中,使設(shè)計(jì)工作賦予實(shí)際。結(jié)合FPGA的高效性和嵌入式系統(tǒng)的以太網(wǎng)通信功能,便可以實(shí)現(xiàn)EAST分布式中央定時(shí)同步系統(tǒng)的時(shí)鐘同步和觸發(fā)延遲功能,滿足EAST分布式節(jié)點(diǎn)對各子系統(tǒng)的同步觸發(fā)的要求。
評(píng)論