鄭凡凡,周天熠,王 昕,叢 偉,羅興科
(北京宇航系統(tǒng)工程研究所,北京,100076)
測量系統(tǒng)數字量變換器用于接收控制系統(tǒng)發(fā)送的三路異步RS422協議信號[1],并將數據形成一定碼流送給后級中心程序器。數字量變換器由數據綜合板和數據采集板組成。數據綜合板和數據采集板的模塊功能分別如圖1和圖2所示。
圖1 數據采集模塊功能Fig.1 Functional block of a data acquisition board
數據采集板用于接收控制系統(tǒng)的RS422 協議信號,將串行數據轉換成并行數據并存入外置FIFO 芯片,在與數據綜合模塊進行數據交互時,在讀使能信號和片選地址信號的作用下,將并行數據送至數據綜合模塊??偩€驅動芯片用于控制數據方向。
數據綜合板用于接收中心程序器的幀同步信號和移位脈沖信號,從外置FLASH 中讀取已提前寫入的波道表信息,生成讀使能信號和地址信號送至數據采集模塊,同時獲取數據采集模塊的并行數據,并形成串行碼流送至中心程序器。
隨著技術的發(fā)展,電子電路變得越來越復雜,利用軟件進行電路仿真設計開始發(fā)揮越來越重要的作用。但是在過去十余年中,在數字量變換器的研制過程中,未能針對整機及模塊中的關鍵元器件(如先進先出存儲器(First-in First-out Memory,FIFO)、閃存(FLASH))進行全面、系統(tǒng)的仿真,軟件開發(fā)方測試或者軟件第三方測評只針對兩種模塊的可編程邏輯器件(Complex Programmable Logic Device,CPLD)的Verilog 程序[2],未包含CPLD 與外置FIFO 芯片、與外置FLASH 芯片的數據交互過程,更未體現兩個模塊間的數據交互過程。究其原因在于這些關鍵元器件功能復雜,模型建立非常困難,市面上沒有能夠直接使用的模型。元器件的模型無法建立,模塊或整機的仿真就無法進行,只能在產品研制出來后,靠設計經驗和萬用表、示波器進行調試,模塊間、產品間聯試一旦出現問題,故障機理不清,排查、定位困難重重,產品歸零工作負擔巨大。
從元器件級功能性能特性入手開展建模,進而開展模塊級和整機級仿真,就能夠在設計階段提早發(fā)現和解決絕大多數設計問題,并在產品發(fā)生故障時進行快速定位和驗證,有效提高設計能力和試驗效率。
綜上所述,本文使用ISE14.7 和Modelsim SE-64 10.4,使用Xilinx 公司的FPGA XC4VSX35-10ff668,針對數字量變換器整機建模問題,深入研究對關鍵元器件進行建模,對元器件模型進行互連建立單個模塊的模型,對模塊模型互連從而得到整機的模型,同時針對模塊間接口信號進行仿真并分析其時序關系,將該關鍵設計要素直接顯示在仿真軟件中,增強軟件的可靠性。
基于圖2,欲建立數據綜合模塊模型,須先建立其中關鍵元器件FLASH模型。
外置FLASH 具體型號為AT49F512,對FLASH既可進行讀取操作,也可進行寫入操作,并且斷電時不會丟失數據。在數據綜合模塊中,提前將波道表文件(.dat文件)下載到FLASH中,在產品上電后邏輯器件CPLD 從FLASH 中讀取其中存儲的波道數據,進而生成用于板間交互的片選地址信號。
Xilinx 公司的FPGA 提供了大量的存儲器資源,包含內嵌塊存儲器、分布式存儲器以及移位寄存器,利用這些資源可以生成深度、位寬可配置的只讀存儲器(Read-Only Memory,ROM)、FIFO以及移位寄存器等存儲邏輯[3]。ROM 存儲的數據穩(wěn)定,斷電后所存數據不會改變,并且結構簡單使用方便。結合數據綜合板對FLASH 的使用方式,使用FPGA 的ROM IP核對其進行建模。
在ISE14.7 建立工程后,在存儲器IP 核配置界面設置其為“Single Port ROM”,位寬設置為8 位,深度根據波道表中存儲數據量而定(此處設置為256)。另外根據波道表形成存儲器初始化文件(.coe 文件)對ROM核進行初始化[4],生成的ROM核完全具備外置FLASH的功能。
編寫測試文件對ROM 核進行數據讀取,可讀出其中存儲的波道表,具體如圖3 所示。從圖3 可以看出,輸出信號在1、2、3 之間變化,可用于代表第1路RS422 信 號、第2 路RS422 信號、第3 路RS422 信號。在空余波道處讀出了預先寫入的FF。
圖3 對ROM核讀取其存儲波道表Fig.3 Read the data of the ROM IP core
基于圖2,對FLASH 建立模型后,針對原有的CPLD+FLASH架構,使用FPGA進行替代。即CPLD中Verilog代碼經過適應性修改移植到FPGA中,同時使用FPGA的ROM核對FLASH進行建模。最終,數據綜合模塊可抽象為ISE中的一個工程。圖4為數據綜合模塊的ISE工程,該模塊的輸入輸出信號如圖5所示。
圖4 數據綜合模塊開發(fā)工程Fig.4 The development project of the data fusion board
圖5 數據綜合模塊輸入輸出信號Fig.5 Input and output signals of the data fusion board
頂層文件XPC.v調用rom核后,接收中心程序器的幀同步信號frame 和碼同步信號shift,接收數據采集板的并行數據q,接收本地時鐘clk,向數據采集板輸出讀使能信號read和波道地址信號addr,向中心程序器輸出串行碼流data信號。
基于圖1,欲建立數據采集模塊模型,須先建立其中關鍵元器件FIFO模型。
外置FIFO 具體型號為IDT7205,FIFO 存儲器是雙口緩沖器,其中一個是存儲器的輸入口,另一個是存儲器的輸出口,常用于數據的緩存或者高速異步數據的交互。此外,FIFO具有滿指示信號full和空指示信號empty。當full 信號有效時,就不再往FIFO 中寫入數據,當empty信號有效時,就不能再從FIFO中讀取數據[5]。
在數據采集模塊中,異步串口數據接收模塊(uart.v)將外部的異步串行數據轉化為8 位位寬的字節(jié)數據,完成串轉并操作,同時生成控制FIFO 寫使能信號,并行數據在寫使能信號作用下被寫入FIFO中。結合數據采集模塊對外置FIFO 的使用方式,使用FPGA自帶的FIFO IP核對其進行建模[6]。
在ISE14.7 建立工程后,在存儲器IP 核配置界面設置FIFO 類型為“Independent Clocks(RDCLK,WRCLK)Block RAM”。寫入位寬設置為8位,讀出位寬設置為8 位,FIFO 深度設置為8 192 字節(jié),和外置芯片大小一致。生成的FIFO 核完全具備外置FIFO的功能。
編寫測試文件對FIFO 核進行測試,首先對FIFO進行寫操作,然后對FIFO 進行讀操作。寫入時判斷是否寫滿,讀出時判斷是否讀空。圖6為對FIFO核寫入測試數據,從圖6中可以看出,在寫使能信號wrreq高電平有效后,在寫時鐘上升沿,將data 寫入到fifo中,fifo 中逐漸寫入了1、2、…、16,并且計數器wrdatacount滯后于寫入數據一個周期,即本時鐘上升沿寫入數據1,下一個時鐘上升沿wrdatacount變?yōu)?。fifo處于不滿狀態(tài)。
圖6 對FIFO核寫入測試數據Fig.6 Write test data to FIFO IP core
圖7為對FIFO核讀出已存數據。從圖7中可以看到,在讀使能信號rdreq高電平有效后,在讀時鐘上升沿,從FIFO中依次讀出之前寫入的1、2、…、16,且先寫入1先讀出1,后寫入16后讀出16。當數據全部讀出后,rdempty變?yōu)楦撸砻鱂IFO處于讀空狀態(tài)。同時計數器rd_data_count 由16 變?yōu)?,且rd_data_count滯后于讀出數據一個周期,即本時鐘上升沿讀出一個數據,下一個時鐘上升沿計數器自減一。
圖7 對FIFO核讀出已存數據Fig.7 Read the stored data from the FIFO IP core
基于圖1,對FIFO 建立模型后,針對原有的CPLD+FIFO 架構,使用FPGA 進行替代。即采集板CPLD中Verilog代碼經過適應性修改移植到FPGA中,同時使用FPGA 的FIFO 核對外置FIFO 進行建模??偩€驅動芯片控制數據的流向,可使用Verilog程序進行建模。最終,將各個元器件模型進行互連后,數據采集模塊可抽象為ISE中一個工程。圖8為數據采集模塊的ISE工程,該模塊的輸入輸出信號如圖9所示。
圖8 數據采集模塊開發(fā)工程Fig.8 The development project of the data acquisition board
圖9 數據采集模塊程序輸入輸出信號Fig.9 Input and output signals of the data acquisition board
數據采集模塊需接收控制系統(tǒng)三路異步RS422協議信號,故調用3次異步串口數據接收模塊uart.v和3次FIFO 核。頂層模塊XDP.v 接收三路異步RS422 協議信號,在調用uart.v 后將外部串行數據轉化為并行數據并寫入3個FIFO核中,在收到來自數據綜合板的讀使能信號read和地址信號addr后,在采集板時鐘作用下向數據綜合模塊輸出并行數據q。
基于數據綜合模塊模型和數據采集模塊模型,建立數字量變換器單機的整機電學模型,即對兩個模塊進行聯合仿真。
在ISE中建立一個更頂層的工程,該工程應包含原數據采集板和數據綜合板的工程,即原每個工程的頂層文件(XPC.v 和XDP.v)作為一個子模塊,在一個最頂層文件中被調用,以實現數據綜合模塊和數據采集模塊的聯合仿真。該設計思想不局限于數字量變換器單機內的兩個模塊,可推廣至不同單機間多個模塊的聯合仿真。
基于圖4 和圖8 兩個模塊的聯合建模,即整機電學模型,是一個更頂層的工程,見圖10。XDP.v調用3 次FIFO 核 和3 次uart.v 文件,XPC.v 調用ROM 核,兩者和圖4、圖8 中的兩個工程相一致?;谶@兩個子工程以及XDP.v 和XPC.v,建立最頂層文件XPC_XDP_unity.v,在該文件中調用XPC.v 和XDP.v并進行例化。須從兩個子模塊各自的輸入輸出信號中識別出聯合模型的輸入輸出信號。兩個子模塊之間的接口信號可設置為連線型變量wire,既非聯合模型的外部輸入信號,亦非聯合模型的對外輸出信號。之后,針對最頂層文件XPC_XDP_unity.v編寫測試文件XPC_XDP_unity_test.v對整個工程進行仿真。
圖10 數據綜合模塊與數據采集模塊聯合仿真工程Fig.10 The co-simulation project of the data fusion board and the data acquisition board
通過以上流程可建立數字量變換器的RS422數據采集模塊和數據綜合模塊的聯合仿真模型。建立頂層工程和頂層工程的測試文件是一個非常繁瑣的過程。應準確識別聯合模型中所有外部信號和模塊間互連信號,將所有對外信號分為輸入信號和輸出信號,將所有輸入信號的波形準確地寫入測試文件中作為激勵源,觀察模型輸出是否和實際輸出一致。
在本聯合模型中,輸入信號包含兩個模塊各自的時鐘信號,來自控制系統(tǒng)三路異步RS422 協議信號[1,7],來自中心程序器的幀同步信號和移位脈沖信號。輸出信號包含輸出給中心程序器的串行碼流data信號。而讀使能信號read、波道地址信號addr、并行數據q屬于模塊間互連信號。具體如圖11所示。將輸入信號寫入測試文件中施加于聯合模型作為激勵源[8],得到聯合模型的輸出,見圖12。
圖11 聯合模型的輸入輸出信號和模塊間信號Fig.11 Input and output signals and internal signals of the combined model
其中,第1路RS422串行信號rxd1對應的有效字節(jié) 為“11、12、13、14、15、16、17、18、19、1A”,第2 路RS422 串行信號rxd2 對應的有效字節(jié)為“21、22、23、24、25、26、27、28、29、2A”,第3路RS422 串行信號rxd3 對應的有效字節(jié)為“31、32、33、34、35、36、37、38、39、3A”。從fifo_d 和fifo_we 可看出這些并行數據分別被寫入對應的FIFO中。ef 信號是空指示信號,是由表征FIFO 空指示信號fifo_empty生成的信號,用于在從FIFO中讀數據而FIFO 為空時在碼流中插入連續(xù)3 個CC。圖中最開始ef信號處于連續(xù)3個低電平狀態(tài),因為第1次從FIFO中讀數時FIFO 處于空狀態(tài)。當FIFO 不空時,即從FIFO中讀取正常數據。結合fifo_out信號和ef信號有助于觀察bufferA 和bufferB,bufferA 和bufferB 是數據綜合板用于進行乒乓操作的兩個寄存器,首字節(jié)為約定的FF,之后第1路異步信號被選中但此時第1路FIFO處于空狀態(tài)故連續(xù)出3個CC,然后FIFO處于非空狀態(tài)從其中讀出數據“11、12、13、14、15、16、17”,出夠7個后切換到第2路信號。第2路FIFO處于非空狀態(tài),從其中讀出10 個字節(jié)“21、22、23、24、25、26、27、28、29、2A”,之后切換到第3路信號。第3 路FIFO 處于非空狀態(tài),從其中讀出10 個字節(jié)“31、32、33、34、35、36、37、38、39、3A”。3 路數據的切換由地址信號addr確定,addr存儲波道信息,先讀10個字節(jié)第1路數據,再讀10個字節(jié)第2路數據,再讀10 個字節(jié)第3 路數據。data 是數據綜合板把bufferA 和bufferB 的并行數據轉換為串行數據后向后級設備輸出的碼流信號。結合data 信號和shift 信號,可以看出,整機模型輸出端獲得了正確的串行碼流信號,和bufferA和bufferB中存儲的字節(jié)一一對應。
數據采集板將外部異步串口信號轉換成并行數據并將其存入FIFO中,數據綜合板從數據采集板讀取8位位寬的并行數據q。當數據綜合板發(fā)送讀信號向FIFO 中讀數時,FIFO 可能處于空狀態(tài),為了方便后級設備進行數據處理,特在數據采集板中引入連續(xù)出3 個CC 的操作,即如果FIFO 為空,數據采集板向數據綜合板連續(xù)送3 個CC,直到FIFO 不空為止。因此冗余字節(jié)CC的個數一定為3的整數倍。與之相對應,后級設備如果檢測到連續(xù)3個CC,將直接去除之。
基于以上機制,在圖12中,在第1個讀信號低電平使能首字節(jié)送固定字節(jié)FF之后,地址為addr為0代表取第1路數據,此時fifo1尚未寫入數據,處于空狀態(tài),所以在連續(xù)3 次讀信號read 取數時,ef 信號均處于低電平狀態(tài),q 為連續(xù)3 個CC,送至bufferA 和bufferB 為連續(xù)3 個CC。當第5 次讀信號低電平使能時,fifo1處于非空狀態(tài),故fifo1_out讀出已經寫入的第1個字節(jié)11,送至bufferB。
當地址為1 取第2 路數據時,由于fifo2 已經寫入了足夠多的字節(jié)處于非空狀態(tài),故ef信號均處于高電平狀態(tài),fifo2_out順序讀出已經寫入的所有數據。當地址為2取第3路數據時,亦然。
乒乓操作是一種常用的用于數據流控制的設計思想[9],典型的乒乓操作方法如圖13所示。
圖13 乒乓操作流程Fig.13 Flow chart of ping-pong operation
乒乓操作的流程為:輸入數據流通過“輸入數據選擇單元”將數據流等時分配到兩個數據緩沖模塊中,此處為兩個8位位寬的寄存器bufferA和bufferB,運算處理模塊主要用于完成并串轉換。乒乓操作仿真結果見圖14。第1 個緩沖周期即讀信號低電平期間,將輸入數據CC緩存到bufferA。第2個緩沖周期,flag信號由高變?yōu)榈停ㄟ^flag信號的切換,將輸入的數據11緩存到bufferB,同時將bufferA緩存的上個周期數據CC 進行并串轉換為“11001100”。第3 個緩沖周期通過flag 信號的再次切換,將輸入數據12 緩存到bufferA 中,同時將bufferB 中緩存的上個周期數據11進行并串轉換為“00010001”。依次循環(huán)下去,以上流程可以從圖14中得以驗證。
圖14 乒乓操作時序圖Fig.14 Timing sequence diagram of ping-pong operation
接口信號時序設計適用于各不同模塊間接口信號的數據交互過程。接口信號時序設計是否正確直接影響產品功能和性能是否足夠正確和穩(wěn)定。
基于前文,數據綜合模塊與數據采集模塊間的接口信號包含3種:數據綜合模塊向數據采集模塊傳遞地址信號addr,讀使能信號read,數據采集模塊向數據綜合模塊傳輸并行數據q。在綜合板通過read 信號向采集板采集數據的時刻,采集板對綜合板提供的并行數據需穩(wěn)定、無跳變[10-11]。
在圖10的ISE工程中,針對數據綜合模塊與數據采集模塊的接口信號時序進行仿真。將所有輸入信號的波形準確地寫入測試文件中作為激勵源,即可觀察到兩模塊間的接口信號時序仿真結果。其中,clk1為數據綜合板時鐘信號,shift為數據綜合板的移位脈沖信號,clk2為數據采集板時鐘信號,rd為數據綜合板read經clk2同步化后的讀使能信號。數據綜合板時鐘clk1和數據采集板時鐘clk2屬于非相干時鐘,標稱頻率相同,考慮數據采集板同步化rd信號相對于數據綜合板read信號延遲的最大值和最小值,分別取兩時鐘相位差為0°和180°的情況進行仿真,具體見圖15 和圖16。
圖15 兩個模塊接口信號時序仿真結果(時鐘同相)Fig.15 Simulation results of interface signal timing between the two boards(same phase)
圖16 兩個模塊接口信號時序仿真結果(時鐘反相)Fig.16 Simulation results of interface signal timing between the two boards(opposite phase)
從圖15 中可以看到,讀使能信號read 低電平持續(xù)時間為兩個移位脈沖周期(30 個clk1 周期),bufferA 和bufferB 用于實現乒乓緩存,在讀信號低電平的中間時刻采集板q 被賦值給bufferA 和bufferB,此圖中被賦值給bufferB。另外,q 穩(wěn)定時刻距離read信號下降沿約為6個時鐘周期,考慮到數據采集板和數據綜合板間信號經過屜間連接器、信號驅動芯片等的固有延遲時間大約為1個時鐘周期,故在綜合板通過read信號向采集板采集數據的時刻,采集板提供的并行數據是穩(wěn)定的。
同理,從圖16中可以看到,q穩(wěn)定時刻距離read信號下降沿約為5.5個時鐘周期,同樣考慮數據采集板和數據綜合板間信號經過屜間連接器、信號驅動芯片等的固有延遲時間,可得在綜合板通過read信號向采集板采集數據的時刻,采集板提供的并行數據是穩(wěn)定的。
綜上所述,在數據綜合板和數據采集板時鐘存在隨機相位差的情況下,采集板對綜合板提供的并行數據穩(wěn)定、無跳變。
過去十余年,測量系統(tǒng)數字量變換器只針對數據采集模塊或數據綜合模塊中可編程邏輯器件CPLD中的Verilog程序進行仿真,未能對模塊中其他關鍵元器件建立模型,未能建立模塊模型和整機模型。
數字量變換器的聯合仿真研究首次攻克了該難題,建立其中關鍵元器件的電學模型,進而對元器件模型互連建立每個模塊電學模型,最后對模塊模型互連建立整機電學模型,對于每個器件、每個模塊、整機的工程實現進行了充分的驗證、迭代、優(yōu)化,對于不同模塊間協同工作實現整機功能進行了充分、直觀、深入的演示。針對模塊間接口信號的仿真工作,直接揭露了接口信號的時序關系,將該設計要素通過仿真軟件得以直接顯示,并檢查、驗證接口信號的時序關系是否能夠滿足模塊間的數據交互需求,顯著增強了軟件的健壯性。
綜上所述,通過本文的仿真研究工作,設計師在實物調試之前即可在仿真軟件中對模塊、整機功能和性能進行仿真、驗證,從根本上提升了產品的可靠性。
以上思路和方法目前已總結形成標準,用于指導同類產品和測量系統(tǒng)其他類似產品的建模與仿真工作。相信在未來,建模與仿真將在產品設計、驗證、優(yōu)化等工作中發(fā)揮更大的作用。