王松
(臨邑縣人民醫院,山東,德州 251500)
核磁共振成像系統中的主控板既要負責與計算機的通信,又要生成相應的脈沖序列,同時還需對其他模塊進行控制。因此,其性能的好壞會直接影響成像效果[1]。在對主控板進行設計時,通常將其絕大多數功能交由CPU執行,但當任務繁重時會大大增加CPU的負擔,進而降低整個系統的性能[2-3]。本文所設計的主控板中數據的存儲和通信由CPU處理,其余功能均由FPGA所編寫的其他硬件模塊來執行,這將有效提高整個成像系統的使用性能。
為了滿足設計要求,本文選擇帶有性能較好的FPGA芯片的Stratix系列開發板作為主控板,其整體結構如圖1所示。在對主控板進行設計時,主要分為軟件設計和硬件設計。在對軟件進行設計時,協處理器采用系統自帶的NiosⅡ,利用SoPC Builder軟件構建基于FPGA上的開發平臺,具體結構如圖2所示。通過相應的操作系統和協議棧,實現主控板和軟件之間的數據傳輸和通信。將網口所傳輸的數據存儲在RAM中,同時將所收集的數據傳輸給計算機進行圖像處理,通過網線實現與計算機之間的通信,這樣可以保證數據傳輸的速度和穩定性。

圖1 主控板整體結構

圖2 嵌入式開發平臺
在對主控板進行硬件設計時,利用Verilog語言生成相應的控制模塊,通過脈沖序列所生成的模塊對RAM中的數據進行處理,進而實現對其他模塊的控制并生成所需的脈沖序列[4-5]。本文將主控板的功能進行了明確的區分,通過對主控板進行嵌入式設計實現了與計算機之間的通信,通過相應的硬件設計生成了系統所需的脈沖序列,通過該設計可有效降低CPU的運行壓力,提升整個系統的運行速度和穩定性,同時還可實現對系統多通道的擴展。
在進行嵌入式設計時,操作系統選用代碼公開、移植方便且可裁剪的μC/OS-Ⅱ,其具體結構如圖3所示。

圖3 文件系統結構
在對其進行移植時需要對OS_CPU.C、OS_CPU_A、OS_CPU.H中與處理器相關的代碼進行修改。在對OS_CPU.H進行編譯時,主要對于編譯器相關的數據和定義進行修改,具體代碼如下[6]:
/* This is the definition for Nios II.*/
typedef unsigned char BOOLEAD;
typedef unsigned char INT8U;
……
typedef unsigned int OS_STK;
# define OS_STK_GROWTH 1/* Stack grows from HIGH to LOW memory */
在該文件中還對2個重要函數進行了宏定義,代碼如下。其中,OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()分別為關中斷和開中斷函數。該函數是進行原子操作的重要環節,在操作時還可調用系統自帶的中斷函數[7]。
# define OS_CPU_SR alt_irq_context
# define OS_ENTER_CRITICAL()cpu_sr=alt_irq_disable_all()
# define OS_EXIT_CRITICAL()alt_irq_enable_all(cpu_sr)
在對OS_CPU.C進行編譯時,主要對堆棧函數進行初始化,同時對系統所用到的Hook函數進行修改。在對OS_CPU.S進行處理時,主要對實現任務的啟動和切換函數進行編譯,這也是進行系統移植的核心工作。在編譯時,主要針對以下函數:OSStartHighRdy()為優先級最高的啟動運行函數;OSCtxSW()和OSIntCtxSW()分別為任務級和中斷級的任務切換函數。當以上設置完成后還需對系統的時鐘進行設置,對定時器的中斷行為進行設置,同時還需將其與中斷函數進行綁定[8-9]。
將lwIP協議棧(即TCP/IP小型協議棧)移植到本文所用的操作系統上,以實現主控板和計算機之間的通信。由于lwIP協議棧中與編譯器和操作系統等相關部分的代碼都是獨立的且位于同一目錄下(.srcarch),所以在進行協議棧的移植時只需對相應目錄下的文件進行修改即可。在對與CPU或編譯器相關的接口進行修改時,主要針對相應目錄下cc.h和pre.h中的數據類型、存儲方式等,在修改時要與之前所定義的參數保持一致。
在對操作系統相關的接口進行編譯時,主要針對sys_arch.h和sys_arch.c兩個文件,主要目的是實現信號量函數、消息量函數、定時器函數和創建線程的函數。本文所用操作系統中也有信號量和消息機制,對系統中的類似函數進行封裝處理后即可實現所需功能。除此之外,還有幾個函數需進行重新定義,其中包括消息隊列結構,通過系統自身的QSQ管理模塊即可實現對消息隊列的管理,包括創建、刪除等操作。在lwIP中每個線程都需有相應的結構隊列,由于上文中已經定義了sys_timeout和sys_timeouts結構體,所以只要找到相應線程所使用的指針函數即可。
本文所采用的網絡芯片為88E1111以太網收發器芯片,其具體的驅動結構如圖4所示。其中,函數1主要實現對芯片的初始化,函數2主要實現對以太網數據包的讀取,函數3的主要作用是在進行初始化時對以太網數據包進行發送,函數7主要是對網卡進行初始化,函數8和9的基本功能是進行數據包收發。

圖4 底層驅動程序
當以上程序開發完畢后,對其網絡通信進行測試,看所進行的移植操作是否成功。利用Ping命令和iperf軟件測試相應協議的工作狀態,測試結果如圖5所示。觀察測試結果發現,lwIP協議在μC/OS-Ⅱ運行正常,由于主控板頻率較低,在一定程度上限制了網卡芯片的性能發揮[10]。通過iperf測試可發現數據傳輸的速率約為12.6 Mbps,完全可滿足實際需要,如圖6所示。

圖5 測試結果

圖6 50 MHz工作頻率iperf測試結果
圖7為整體功能實現的流程圖。其中,通信模塊已實現了其主要功能,后續還需主控板對數據進行處理分析并生成對應的脈沖序列,這也是本文硬件設計所需解決的主要問題。要想生成對應的脈沖序列,首先需要對硬件中的各個模塊進行初始化,當軟件收到相應命令后發出信號通知脈沖序列生成模塊進行數據的讀取,后續還需對所有的數據進行校驗,以保證數據的有效性。最后得到整個命令的總長度并執行命令,根據所得命令對各個模塊進行配置,進而生成相應的脈沖序列達到最終目標。

圖7 整體功能實現的流程圖
圖8為利用Modelsim軟件對硬件進行仿真的結果,觀察發現其幅值和時序均達到了預期目標。圖9為示波器所采集的圖像結果,觀察可發現測試所得結果與仿真結果基本一致,可滿足最終的成像要求。

圖8 硬件仿真結果

圖9 示波器采集圖像
本文主要對核磁共振成像系統的主控板進行設計,通過軟件實現了處理器和計算機之間的通信,利用硬件得到了系統所需的脈沖序列。通過對所設計的系統進行仿真和測試發現,通過這種設計可增加系統成像的精度和穩定性。本設計在開發過程中得到了臨邑縣人民醫院信息中心技術人員的大力支持和幫助,特此鳴謝。