一種快速雛型系統設計方法
—以 SoPC 設計低頻段手持式頻譜分析儀
蕭如宣 林奕辰
資訊與通訊工程研究所
摘要
近幾年來超大型積體電路技術的快速發展,在信 號處理方面由於即時處埋的迫切需求,許多的廠商推 出了一系列的數位信號處理器(Digital Signal Process- ing, DSP)。這些 DSP 雖然具有快的運算速度、大儲存 空間、高速定址能力,但仍是循序處理方式,因此造 成在高速訊號處理需求時,時效上仍無法符合實質的 需求。拜科技所賜有了系統單晶片(System on Chip, SoC)的出現,可以加入許多並行計算之軟硬體設計加 速了並行能力,但其缺點就是晶片開發有其高風險、 設計過長以及功能改變彈性不足等問題。也因此有了 可規劃系統單晶片(System on a Programmable Chip, SoPC)的設計方法的誕生,在系統設計完成之後就可 以立即驗證,這是相當方便而且先進的技術。本文介 紹以SOPC Builder 建構系統模組(包含 uP) ,以 DSP Builder 建構 DSP 模組,以硬體描述語言(如 VHDL 或 Verilog)設計客戶邏輯電路,再結合 GNUPro 軟體發展 工具設計系統軟體,並以SOPC 晶片快速驗證雛型系 統功能。這種系統軟硬體共同設計新方法將是未來系 統設計的新主流。 關鍵詞:DSP, DFT, FFT, VHDL, SOC, SOPC壹、緒論
DSP 硬體設計是有它存在的價值,一般電腦功能 雖然強大,但在某些方面的處理還是要有專門的處理 器來做處理,這樣才不至於浪費電腦太多的資源,例 如 現 在的 顯示 卡 很多 都有 專 門處 理圖 形 的處 理器 (GPU),相對地專門用在數位訊號處理的就稱為 DSP 處理器。它在通訊、電腦、儀器、工業控制、醫學應 用、軍事應用、消費電子、航太工業…等,使用的範 圍非常的廣泛;數位訊號處理的發展,在早期的時候, 僅有個別的數學理論研究發展;而數位訊號處理的數 學模型以拉普拉斯(Laplace)和傅立葉(Fourier)轉換的 提出,用來描述連續信號最為重要。我們知道傅立葉 轉換常用在時域及頻域的轉換,所以最直接想到的就 是「頻譜分析儀」了,一般來說頻譜分析儀體積及重 量都不小所以攜帶不便,而且具有快速傅立葉轉換 (Fast Fourier Transform, FFT)更是不便宜,且頻段大都 在幾百KHz 到 GHz 之間,很少有幾 kHz 以下的,所 以人類可聽到的頻段的頻率一般的頻譜分析儀就沒辦 法測量出來。因此本頻譜分析儀設計研究其頻段設計 在MHz 以下的。一般來說 DSP 擁有靈活性好、精確 度高、與類比電路相比,數位電路的密集度高,基於 以上的理由使用 DFT 或 FFT 來設計硬體是非常適合 的,可以在頻譜分析的電路方面可以得到不錯效果。貳、原理
傅立葉轉換將波形轉成頻譜(把時域轉換成頻域) 常用的就是傅立葉轉換演算法,其中又以快速傅立葉 轉換(FFT)演算法改進了離散傅立葉轉換(DFT)的演 算,以更快的計算方式來節省計算的時間,並且降低 了數位訊號處理中乘法的運算量,使得更多更複雜的 訊號得以快速的處理,改善了數位訊號不能即時處理的問題,除了以上的優點外最大的優點是可以節省乘 法器的數量(如表一所示),愈多點的電路省的愈多, 而在硬體電路設計上也是要盡量少用乘法器的,因為 它會使用到許多的邏輯閘,所以要少用 。 N point Standard DFT FFT 2 4 1 64 4096 192 128 16384 448 256 65536 1024 512 262144 2304 1024 1048576 5120
N(a power of 2) N2 Nlog N 52 [ ]
2 表一:乘法器需求數量的比較 一、FFT 設計原理
在設計上,一般來說要取多少點的FFT和精確度 有非常大的關係,本設計研究使用的LCD面板為320 x 240所以以256點的板面來做設計考慮。若以256點FFT 來設計的話其只能有128點的頻率的輸出,因為轉換出 來的頻率有鏡射(mirror)的現象,換句話說如要對應到 每一點的話就必需要做到512點的FFT(一般在設計 FFT時點數愈多精確度會愈高),所以本設計研究的 FFT引擎會以512點來設計。 二、Butterfly 的架構 Butterfly 的計算架構是組成 FFT 中必備的硬體電 路,其方程式: [ ] 1 [ ] 0 N nk N n X k x nW − = =
∑
,k=0,1,2,...,N-1 (1) 若以2-point 的 DFT 來看就可以得到: ( ) 1 [ ] 2 0 nk n X k x nW = =∑
, k=0,1 [ ]0 20k [ ]1 1 2 k x W x W = + (2) 且 0 0 、 最後可得: 2 1 k j W =e− = 21k j k ( )1k W =e−π = − ( ) [ ] [ ] ( ) [ ] [ ] 0 0 1 0 1 1 X x x X x x = + ⎧ ⎨ = − ⎩ (3) 由方程式(3)我們可以知道其 Butterfly 電路構成, 如圖一所示。 圖一:簡單的2-point Butterfly 架構 依此類推可以得到8 point 的電路(如圖二所示)。 0 N W 1 N W 2 N W 3 N W N/2 - point DFT N/2 - point DFT x[0] x[2] x[4] x[6] x[1] x[3] x[5] x[7] X[0] X[1] X[2] X[3] X[4] X[5] X[6] X[7] G[0] G[1] G[2] G[3] H[0] H[1] H[2] H[3] 圖二:8-point Butterfly 架構 三、A/D 轉換器與取樣A/D 轉換器的主要功能,是將輸入的類比訊號轉 換為數位方式表示,才能再來對這些數位訊號做處 理。快速傅立葉轉換(FFT)就可以將這些離散信號從時 域轉到頻域做分析。 取樣頻率的決定最主要是看A/D 轉換器的轉換速 度來決定的。本項設計研究使用的是AD9203 為 10-Bit 40 MSPS 取樣頻率的 A/D 轉換器。當 OTR 為 Low 時表示轉換完成可以輸出,其輸出範圍 0000000000 到 1111111111(如圖三所示),而其最大工作頻率為 30MHz,其動作方式是一個 clock 轉換一次,所以可 以使用clock 頻率加以控制取樣率。 類比訊號 AD9203 10bit A/D Converter 1111111111 . . . 0000000000 圖三:AD9203 A/D 轉換器的輸出範圍
參、快速設計流程
一、Altera SoPC 設計流程 Altera SoPC 之快速設計流程如圖四所示,首先使 用Quartus II 中 SOPC Builder 產生所需的界面元件(如 Soft CPU(Nios)、記憶體 I/O、週邊 I/O、串/並列 I/O…等)及 I/O 位址,接下來用 Altera MAX+plus II 或 Quartus II 編寫 VHDL 或 Verilog 程式碼來完成自行設 計之邏輯電路,最後將所有電路在Quartus II 中彙整, 並由編譯器作電路合成及安裝至目標晶片,這樣就完 成了硬體設計的流程;如果電路不需額外的軟體控 制,這時就可以直接下載至發展平台並立即驗證。 至於軟體的設計,使用GNUPro 的 Nios SDK 工具軟 體(包含編譯器、組譯器、連結器、除錯器、監督程式、 資料庫等),並依 SOPC Builder 產生的 excalibur.h 檔 來撰寫及編譯C 語言之驅動程式,完成後先將硬體電 路下載至發展平台其次才將軟體下載驗證,快速完成 整個設計之流程。 處理器元件庫 週邊元件庫 網路檔 原始檔 EDF HDL Testbench 合成與安裝 使用者設計 其他IP Quartus II 硬體發展 軟體發展
SOPC Builder GUI
檔 客戶程式庫 週邊驅動程式 C Header 編譯、連結、除錯 使用者程式碼 程式庫 RTOS 工具 GNUPro 組成處理器 選 取 與 組 成 週 邊IP元 件 區塊連接 產生 硬體組成檔 可執行碼 驗 證 驗證與除錯 晶片 Altera SOPC 並列埠 串列埠 乙太網路 JTAG 晶片上除錯 客戶指令 模組 IP 圖四:Altera SoPC 快速設計流程圖 二、系統設計 LCD and Touch Panel Touch Panel Controller Nios 核心 SoPC Chip RAM 類比訊號輸入A/D取樣 電路 (FFT ) 頻譜分析電路 運算單元 圖五:系統方塊圖 圖五說明這各系統的動作方式,類比訊號從A/D 轉換器進入,由Nios (Nios 為 Altera 公司的 soft CPU) 來控制取樣率,轉換之後的資料會進入頻譜分析電 路。經過頻譜分析電路運算完成的資料儲存在 RAM 當中,這些控制都由Nios 核心來完成。Nios 處理器將 RAM 中的資料逐一取出並做一些運算,之後將處理完 成的資料顯示在 LCD 上。在控制方面利用觸控面板 (Touch Panel)實現取樣頻率選擇及相關設定。 三、頻譜分析電路之設計 Sample and Hold(FIFO) (From AD9203) 資料輸入 (From Nios) 控制訊號 FFT處理器
(From Nios I/O) 資料輸出 RAM 內部 ROM 內部 Butterfly架構 圖六:頻譜分析方塊圖 如圖六所示,頻譜分析電路主要是由FFT 處理器 所完成,控制訊號是由觸控面板→Nios 處理器→FFT 處理器。訊號輸入是由 SMA 接頭進入→AD9203→ FFT 處理器(取樣及栓鎖控制)→FFT 處理器(內部 RAM)→FFT 處理器(Butterfly 架構)→Nios 處理器→觸 控面板。
硬體電路除了A/D Converter 需 PCB Layout 擴接 電路板之外(如圖七所示),其它主要硬體電路都是以 VHDL 來實現,並且選用 Altera APEX20KE 系列的 EP20K200EFC484- 2X 晶片來完成系統電路的設計、 模擬與驗證,這個晶片之規格如表二所示。
Maximum system
gates
Typical
gates LEs ESBs
Maximum RAM bits Maximum macrocells Maximum user I/O pins 526,000 200,000 8,320 52 106,496 832 376 表二:AlteraEP20K200EFC484- 2X 晶片規格
肆、電路之設計
本項設計研究使用Altera 公司的 SoPC 開發軟體 Quartus II 3.0 版並安裝 Nios 3.02 版做為主要系統開發 的環境,處理器電路(nios32)和平方差電路(square)使 用SOPC Bulider 設計產生,其餘的電路包括觸控板控 制電路(touchcntr)、輸入訊號選擇器(data_mux)、除頻 電路(multi_div)等都在 MAX+plus II 完成設計模擬 (如圖十一所示)。其次利用MATLAB 6.5 安裝 Altera DSP Builder 3.12 版,並在 Simulink 的工作環境下設計 Sin 波形產 生電路(sigen) (如圖八所示)、模擬波形(如圖九所示) 與產生VHDL Code(如圖十所示),其中 Sin 波形產生 電路共使用了29 個 Logic Cells、6 個 Registers、12 個 DSP 元件。
最主要時域與頻域轉換的「快速傅利葉轉換與取 樣栓鎖電路(Taurus_fft)」其內部電路(如圖十二所示), 其中鎖電路(ad9203_sah)使用 MAX+plus II 10.2 版軟 體設計與模擬;FFT 電路(fft512_aaukfft_fftchipa)使用 Altera FFT MegaCore Function 1.3.2 版產生,這個電路 總共使用了1827 個邏輯單元、12800 個 memory bits。 最後完整的電路(如圖十一)包括處理器(nios32)、 觸控板控制電路(touchcntr)、Sin 波形產生電路(sigen)、 輸入訊號選擇器(data_mux)、除頻電路(multi_div)、快 速傅利葉轉換與取樣栓鎖電路(Taurus_fft)、平方差電 路(square)…等;此電路總共使用 5059 個邏輯單元、 41088 個 memory bits。 圖八:使用Sinulink 設計 Sin 波形產生電路 圖九:Sin 波形產生電路之波形模擬 clock sclrp oD2A_010BitSigneds[9..0] singen inst20 圖十:Sin 波形產生電路之轉出電路
伍、電路模擬與驗證
一、電路模擬 本項設計利用Quartus II 3.0 下的功能模擬器,來 驗證、控制與轉換訊號是否與設計的相符,其中最主 要 的 部 分 是 快 速 傅 利 葉 轉 換 與 取 樣 栓 鎖 電 路 (Taurus_fft)。其中的動作方式共分成三個程序分別 為:開始資料寫入時resetn 由 Lo 到 High 將之前的資 料清除,接著write 為 High、SA_RD 為 High 表示現 在正在取樣,當收到s_OK 為 High 時表示資料已取樣 完 成 , 也 就 是 第 一 個 程 序 結 束(資料讀 取 )﹔之 後 SA_RD 就必需由 High 轉 Lo 表示開始讀取資料,這時 fftreset 由 Lo 轉 High 再轉 Lo(把 FFT 中的資料清除) 準備開始轉換資料,當go 由 Lo 轉 High 時開始轉換, 這第二個程序已完成(資料處理開始)﹔進到最後的階段,當done 由 Lo 轉 High 表示資料 FFT 運算完成, 控制read 由 Lo 轉 High 準備讀取運算好的資料,讀取 方式是由R_CLK 來控制,每當 R_CLK 每由 Lo 轉 High 就可以讀取一筆資料,逐一將資料讀取完成以結束第 三個程序(資料讀取)完成整個動作,其模擬結果如圖 十三所示。 二、實際驗證 取一個訊號產生器並設定其輸出電壓及頻率,在 這特別需要特別注意到電壓大小不可以超過2Vp-p。 由於本設計最大取樣頻率為17MHz,因此我們可 測之最大頻率約8.3MHz,所以 8.3MHz 以下的頻率都 是可測出來的。取一頻率為1.2MHz 由訊號產生器輸 到本電路的SMA輸入端,再來是設定(Set)取樣頻 率,進入設定畫面後選擇取樣頻率,在此要注意到取 樣頻率最少要大於被測頻率的兩倍,選擇後按返回 (RETURN),設定畫面,設定取樣頻率後選擇開始(Start) 開 始 測量 ,操 作 流程(Set→選擇頻率→RETURN→ Start);若要重新測量時請先選擇清除(Clean)再按 Start 重新測量,操作流程(Clean→Start);經驗證結果只要 是大於待測頻率兩倍的設定都能符合實際輸出的頻率 (如圖十四、十五、十六所示),除此之外本電路經過 八小時未關機的連續測試,仍未有當機之現像,所以 穩定性上是相當的不錯。
陸、結論
本項設計使用MATLAB Simulink 的 DSP Builder 與Quartus II SoPC 系統開發軟體一起工作,並採用 Altera 公司 SoPC 系列晶片,它結合了 FPGA/CPLD 的 強大硬體數位計算能力,並且可以將硬體線路規劃至 晶片中,不但可以有效縮小PCB 的使用面積,相對也 可以降低產品的功率損耗,最主要的是可以將 Nios CPU 嵌入系統,這樣能使電路設計更多元化,軟體功 能增刪就變的很容易,要什麼功能就可以有什麼功 能,非常方便快速;這樣整個結合在一起,就構成「一 種快速雛型系統設計方法」,除能快速驗證系統功能之 外,並有體積小、低開發風險的特點。 本項設計研究在這種「快速雛型系統設計方法」 之下,雖然已有不錯的成效但未來還有進步的空間, 例如取樣頻率的設定還不夠靈活,目前只有八種頻率 可供選擇,往後還會將取樣頻率設定方式加以調 整以求有更靈活的設定空間。由於取樣頻率受限於 AD9203 的速度,如要有更高的取樣率,則需更換更 高速的AD Converter;目前已有廠商將 AD Converter 結合在晶片之中,因此未來一些雜訊干擾的問題將可 獲得更好的改善。實用科學是非常有趣的,能將科學 融入到生活之中才有意義,能完成一件作品更是令人 興奮。
致謝
感謝茂綸公司提供Altera Nios APEX20K SoPC 實 驗板,讓本項設計研究得以順利製作完成;更感謝 2004 Nios 競賽裁判的青睞,讓本作品得以獲得亞軍榮 耀。
參考文獻
[1]蕭如宣,《VHDL 數位電路設計》(儒林圖書,2002)。 [2]蕭如宣,《SOPC 系統設計》(儒林圖書,2003)。 [3]曾建誠 等,《離散時間訊號處理 第二版》(全華科 技,2002),頁 9-1 ~頁 9-73。 [4]鈦思科技,《視覺化建模環境–Simulink 入門與進 階》(鈦思科技,2001)。 [5]侯捷 譯,《C++ Primer 第三版》(碁峰資訊,2003)。 [6] Brian W. Kernighan, Dennis M. Ritchie, “The CProgramming Language, 2/e”, Prentice Hall, 1999.
[7]Altera Corporation, FFT MegaCore Function, http://www.altera.com, 2005.
VCC reset_n INPUT VCC clk INPUT VCC rxd INPUT VCC button[3..0] INPUT VCC ADC_n[9..0] INPUT f lash_by te_n OUTPUT f lash_we_n OUTPUT f lash_cs_n OUTPUT sram_cs_n[0] OUTPUT sram_cs_n[1] OUTPUT sram_we_n OUTPUT sram_be_n[3..0] OUTPUT oe_n OUTPUT txd OUTPUT a1_a17 OUTPUT proto_sel OUTPUT proto5_sel OUTPUT ext_addr[18..0] OUTPUT led[1] OUTPUT led[0] OUTPUT tp_x OUTPUT tp_y OUTPUT tp_cs OUTPUT tp_clk OUTPUT AD_clk OUTPUT 7seg_0[3] OUTPUT 7seg_0[0] OUTPUT 7seg_1[3] OUTPUT 7seg_1[0] OUTPUT 7seg_1[7] OUTPUT 7seg_0[6] OUTPUT 7seg_1[6] OUTPUT VCC ext_data[31..0] BIDIR VCC lcd_pio[11..0] BIDIR VCC tp_dinout BIDIR GND VCC RESET OSCIN VALID XENA Y ENA AD_CS AD_CLK XVALUE[11..0] Y VALUE[11..0] AD_dinout touchcntr inst5 osc_in f_sel[2..0] f _out 17MHz Multi_div inst7 osc vectorX[9..0] vectorY[9..0] square_out[20..0] square inst4 clock sclrp oD2A_010BitSigneds[9..0] singen inst2 NOT inst9 data1x[9..0] data0x[9..0] sel result[9..0] data_mux inst12 CLRN D PRN Q DFF inst14 CLRN D PRN Q DFF inst10 CLRN D PRN Q DFF inst13 clk reset_n in_port_to_the_AD9203_IP_pio[22..0] in_port_to_the_AD9203_OP_pio[6..0] in_port_to_the_button_pio[3..0] in_port_to_the_data_sel_pio in_port_to_the_f req_sel_pio[2..0] in_port_to_the_tp_pio[24..0] rxd_to_the_uart_0 out_port_from_the_AD9203_OP_pio[6..0] out_port_f rom_the_data_sel_pio ext_ram_bus_address[19..0] ext_ram_bus_byteenablen[3..0] ext_ram_bus_readn select0_n_to_the_ext_sram select1_n_to_the_ext_sram select_n_to_the_ext_f lash w rite_n_to_the_ext_flash w rite_n_to_the_ext_sram out_port_from_the_freq_sel_pio[2..0] txd_f rom_the_uart_0 ext_ram_bus_data[31..0] bidir_port_to_and_from_the_lcd_pio[11..0] nios32 inst resetn m_osc R_clk SA_RD osc f ftreset go read w rite real_data_in[9..0] s_OK dout[9..0] w r_addr[8..0] read_r[10..1] read_i[10..1] exp[7..1] done Taurus_f ft inst3 NOT inst8 NOT inst11 NOT inst15 NOT inst16 NOT inst17 NOT inst18 NOT inst19 osc reset tp_pio[24..0] addr[19..0] addr[17] addr[19..1] ad9203_ip_pio[22..0] ad9203_op_pio[6..0] m_osc M17 tp_pio[24] tp_pio[11..0] tp_pio[23..12] osc reset M17 data_sel osc osc data_sel osc ad9203_op_pio[6..0] f req_sel[2..0] f req_sel[2..0] f req_sel[2..0] ad9203_op_pio[6] ad9203_op_pio[5] ad9203_op_pio[4] ad9203_op_pio[3] f req_sel[2] f req_sel[1] f req_sel[0] ad9203_ip_pio[20..0] ad9203_ip_pio[21] ad9203_ip_pio[22] osc ad9203_op_pio[0] m_osc ad9203_op_pio[2] ad9203_op_pio[1] osc ad9203_op_pio[3] ad9203_op_pio[6] ad9203_op_pio[4] ad9203_op_pio[5] real_data_in[9..0] osc data_sel reset real_data_in[9..0] ad9203_ip_pio[21] data_sel 圖十一:系統完成之總電路圖 VCC resetn INPUT VCC R_clk INPUT VCC SA_RD INPUT VCC read INPUT VCC go INPUT VCC write INPUT VCC f f treset INPUT VCC m_osc INPUT VCC real_data_in[9..0] INPUT read_r[10..1] OUTPUT read_i[10..1] OUTPUT exp[7..1] OUTPUT done OUTPUT s_OK OUTPUT dout[9..0] OUTPUT wr_addr[8..0] OUTPUT GND OR2 inst6 AND2 inst7 AND2 inst8 NOT inst9 clrn S_clk R_clk SA_RD data_in[9..0] data_out[9..0] addr_out[8..0] S_ok ad9203_sah inst1 sy sclk reset go writeaddress[9..1] readaddress[9..1] read write writereal[10..1] writeimag[10..1] readreal[10..1] readimag[10..1] exponent[7..1] done f f t512_aukf f t_f f tchipa inst10 sinout[9..0] R_clk read sinout[9..0] w r_addr[8..0] m_osc 圖十二:快速傅利葉轉換與取樣栓鎖電路
圖十三:快速傅利葉轉換與取樣栓鎖電路功能模擬結果 圖十四:本分析儀在8.3MHz 取樣頻率時(輸入頻率 1277.1KHz)的實際量測情形 圖十五:本分析儀在5.5MHz 取樣頻率時(輸入頻率 1277.1KHz) 的實際量測情形 圖十六:本分析儀在8.3MHz 取樣頻率時(輸入頻率 1277.1KHz) 的實際量測情形