曹賽男,劉 方
(南京航空航天大學電子信息工程學院,江蘇南京 2 10016)
基于PCI總線[1]的串口通信技術,在工業領域中有著重要的應用。而目前市場上基于PCI總線的串口通信卡,雖然可以實現多串口收發且波特率可調,但可調的波特率只是幾個點,不能實現連續可調。但在一些軍事通信中,經常會需要波特率連續可調,以滿足軍事通信中對波特率的特殊要求。文中基于這個要求,采用硬件描述語言,實現這一功能要求在FPGA上的研究、開發、測試與驗證。
在數據通信中,波特率等于每秒鐘傳輸的數據位數。在串行通訊中,收發雙方基于同一波特率實現數據的發送與接收。波特率即為發送或接收信號的頻率。
1.2.1 設計要求
例如RS232標準中串行通信波特率的一般要求范圍是300~115 200 bit·s-1。而傳統的串行通信卡支持波特率可調只是在某幾點可調。文中研究的目標是波特率連續可調,例如要求波特率在300~115 200 bit·s-1之間可以實現步進為1 bit·s-1甚至0.1 bit·s-1的調節。
改變波特率即改變信號發送或信號接收時鐘的頻率,可以采用對基準時鐘進行數據分頻的方法,但達不到調節的連續性。文中采用改進的DDS方法,實現對發送時鐘fclk步進為1 bit·s-1的調節。
1.2.2 DDS原理介紹
直接數字頻率合成DDS(Direct Digital Synthesis)是種把一系列數字信號通過D/A轉換器轉換為模擬信號的合成技術。傳統DDS的核心結構[2]如圖1所示。

圖1 傳統DDS的核心結構圖
輸出頻率可由式(1)確定。

最小頻率精度可由下式確定

其中,fclk是時鐘頻率;FCW是頻率控制字;L為相位累加字的字長。
1.2.3 產生頻率連續可調的時鐘信號
在傳統的DDS技術中,頻率最小步進值的尾數不是零,給后續的頻率合成造成不便,所以采用改進的DDS技術[3],循環相位累加器設定一個可調的最大值作為溢出值,最大值溢出后,以余值而不是以零作為下一次累加的起始值。結構框圖如圖2所示。

圖2 改進之后的DDS結構圖
改進后的DDS輸出頻率可由式(3)確定

最小頻率精度可由式(4)確定

其中,Mode為循環相位累加器的最大值,即模值,可以預先設定。N為一個周期所包含的采樣點數。Mode,N的取值要綜合考慮fclk和FCW的值,以獲得一個隨FCW線性變化的fclk,即實現了fclk隨FCW變化而變化的連續可調。
1.2.4 采用的DDS技術
針對RS232標準中串行通信中波特率的一般要求范圍300~115 200 bit·s-1,采用改進的DDS技術,基于FPGA,設計如圖3所示的DDS模塊。

圖3 采用改進的DDS技術設計時鐘信號發生器
其中的循環相位累加器模塊DDS_adder模塊,相位寄存器模塊DDS_addr_gen是基于硬件描述語言設計的模塊,ROM模塊DDS_ROM是基于FPGA的宏模塊[4]。
在本設計中實現發送時鐘fclk在300~115 200 bit·s-1范圍內步進為0.1 bit·s-1的調節。其中,Mode取7 812 500,N取4,fclk為外部晶振提供的頻率為50 MHz時鐘。
因此,有ΔF=1.6 FCW。其中,FCW為應用程序所傳送的實際控制頻率的10倍,根據UART協議,發送時鐘的頻率至少是串口通信波特率的16倍。所以,以上的參數設置即實現了步進為0.1 bit·s-1的連續可調的波特率設置。
1.2.5 連續可調信號的驗證
文中DDS技術是基于FPGA實現的。根據不同的頻率控制字fword輸入,經過幾個過渡時鐘后,DDS模塊即可以穩定產生隨頻率變化的時鐘信號fclk。
在圖4的仿真中,所仿真的頻率點是115200Hz,9600Hz,1200Hz。對應的fword為0x00119400,0x00017700,0x00002EE0。

圖4 時鐘信號發生器所產生的時鐘信號圖
PCI接口模塊向通信模塊傳送頻率控制字,發送的數據,發送命令和接受命令。從通信模塊獲取中斷信號,接收的數據。頻率控制字fword經過DDS模塊,產生COM模塊所需的發送時鐘頻率,COM模塊接收數據或發送數據受控于PCI接口模塊[5],實現與外部串口的數據溝通,總體框架如圖5所示。

圖5 整體設計框架圖
串口通信模塊COM要實現數據的接收和發送雙向工作,接收和發送均采用FIFO的方式[4],發送FIFO滿,即自動向外部端口發送數據,接收FIFO半滿即自動將FIFO中的數據向上傳輸。采用FIFO結構,而不采用RAM,可以免去復雜的地址問題。
COM模塊的設計框架如圖6所示。包括:rcvFIFO實現從串口接收數據的和用于Rcv模塊。txmitFIFO實現向串口發送數據的和用于Txmit模塊。

圖6 COM模塊的設計框架圖
從PCI接口傳送過來的數據是32位的,經過txmitFIFO,32位數據分4次傳送到Txmit模塊。
2.3.1 COM中各個模塊的功能驗證
要保證COM模塊可以實現數據的發送與接收,其中的各模塊必須實現各自的功能,再將各模塊連接起來。
例如其中Rcv模塊實現串口數據的接收,接收數據的頻率由DDS接口產生的時鐘信號fclk控制。接收的數據發送到rcvFIFO中。Rcv模塊接受數據的仿真波形如圖7所示,串口接收的數據是1,0,1,0,1,0,1,0,發出的數據是10101010。

圖7 Rcv模塊的仿真圖
2.3.2 COM模塊功能的驗證
各模塊的功能驗證通過后,再將各個模塊連接起來,完成COM模塊的設計,圖8所示為COM模塊發送端口的波形圖。頻率控制字是0x00119400,DDS模塊產生發送時鐘fclk,Serial_port輸出即為輸出串口。

圖8 COM模塊發送端口仿真圖
文中研究的波特率連續可調的串口通信模塊是基于PCI接口的,其在工業控制中有著廣泛應用。實現頻率連續可調可以滿足很多特殊需求。PCI接口的設計和通信模塊的設計可以同時基于FPGA,實現設計的靈活性。設計方案中只實現了一收一發的功能,基于本設計可以擴展成多串口的波特率連續可調的通信卡。
[1]PCI Special Interest Group.PCI local bus specification(v2.2)[EB/OL].(2003-08-07)[2011-03-15]http://www.pcisig.com.
[2]李春劍,吉望西,劉達倫.基于VerilogHDL的DDS設計與仿真[J].現代電子技術,2008,33(20):51-53.
[3]李曉芳,常春波,高文華.基于FPGA的DDS算法的優化[J].儀器儀表學報,2006,27(6):896-898.
[4]Altera Corp.Megafunction overview user guide[EB/OL].(2003-08-07)[2011-03-15]http://www.altera.com/literature/lit-ip.jsp.
[5]李貴山,陳金鵬.PCI局部總線及其應用[M].西安:西安電子科技大學出版社,2003.