Microsemi IGLOO nano 開發板教程

邏輯主頁

特點

透過 Libero (v9.1 SP4) 設計流程涵蓋以下主題,以便在控制 IGLOO nano Eval 板上的 LED 強度和圖案速度的同時建立各種 LED 輸出圖案:

• Libero 設計流程工具的基本概述
• Microsemi Libero Catalog Core 實例,包括 PLL、計數器、多工器、解碼器和 Flash*Freeze 輸入緩衝器
• 自訂 VHDL 元件設計和實例,包括計數器控制器、按鈕去抖動器和脈衝寬度調變訊號產生器
• 使用 ModelSim AE 中的指令模擬自訂核心
• 在 Synplify Pro 中設定時序約束與屬性
• 在 Smart Time 中管理時間約束和分析
• 在 I/O 屬性編輯器中設定引腳分配
• 佈局設定、建立程式檔案以及使用 Flash Pro 對裝置進行編程

介紹

本教學將介紹 IGLOO nano FPGA 開發,並介紹新增時序約束和屬性等進階主題。假設您對 Libero 設計流程有基本的了解。 Libero v9.1 IDE 將用於實例化 Microsemi 內核、自訂 HDL 內核,並透過在 Libero Canvas 上將內核結合在一起來建立頂層檔案。結果將能夠控制連接到 IGLOO nano Eval 板上的 LED 的 I/O 輸出模式,同時說明 IGLOO nano 的 Flash*Freeze 功能。將介紹按鈕去抖動電路的狀態機設計和編碼屬性;另外兩個自訂 VHDL 元件將與來自 Libero 目錄的核心一起實例化。

背景

Microsemi IGLOO nano 入門套件支援快速 FPGA 低功耗原型設計。IGLOO nano 利用專用的 FlashFreeze 引腳來觸發超低功耗 FlashFreeze 狀態。這種靜態狀態允許 nano 的消耗低至 5uW(典型值為 24uW)的功率,同時保留系統記憶體和暫存器內容。

IGLOO FPGA 使用可重編程快閃記憶體技術,與同類 SRAM 裝置相比,FPGA 具有非揮發性、高度安全性和更低的功耗。 IGLOO 系列採用時脈調節電路、整合式鎖相環、嵌入式 SRAM、嵌入式 NVM 和系統內程式功能。

本教學所需的硬體/軟體:
• Microsemi IGLOO nano 評估套件
• 兩條 USB 線(一條用於供電,一條用於編程,包含在套件中)
• 低成本程式設計器(包含在套件中)
• Libero v9.1 SP4 隨附 Synplify Pro AE 和 ModelSim AE
• 可選萬用電表用於在 Flash*Freeze 模式下測量 FPGA 核心電流。

應用

建立電路

  1. 開發的第一步是啟動 Libero IDE 並使用新專案精靈建立新專案。項目 → 新建項目。輸入項目名稱、位置並選擇 VHDL 作為首選 HDL 類型。
  2. 按一下「下一步」以開啟選擇設備視窗”。

注意:確保選擇正確的晶粒,否則需要從頭開始啟動專案以便稍後進行更改。

  1. 輸入以下內容並按「下一步>」按鈕:
    • 系列:IGLOO
    • 晶粒:AGLN250V2
    • 封裝:100 VQFP

  2. 確保在選擇整合工具選單中的合成下的單選按鈕上選擇了 Synplify Pro AE,然後按「下一步>」。

  3. 在「將檔案新增至專案」視窗中,強調顯示使用者檔案下的 HDL 原始檔 (*.vhd; *.v; *.h),然後按一下「新增檔案…」按鈕。

  4. 導覽至本教學中包含的下載檔案的位置並選擇 PWM.vhd、Debounce.VHD 和 UpDownCont.vhd,然後按一下新增以匯入檔案。.vhd 檔案將出現在視窗的 **HDL 原始檔 (*.vhd; .v; .h) 標題下。按一下「完成」。

  5. 此時您應該會看到 Libero IDE 中的專案流程視窗和層次結構視窗中匯入的 .vhd 文件,請參閱下圖 1。


圖 1 設計流程

  1. 點擊 SmartDesign 按鈕並確保「選擇類型」下的「SmartDesign 元件」強調顯示,然後輸入頂級元件的名稱,例如 Top。

  2. 展開目錄中「核心」標籤下的「時脈與管理」標題,然後將「PLL – 靜態核心」拖曳到畫布上。此時您將看到靜態 PLL:建立核心窗口,如下圖 2 所示。在硬連線 I/O 的輸入上輸入 20MHz,在多工器上選擇 PLL,並在輸出上輸入 50MHz。點擊生成按鈕並將核心命名為 CLKGEN。透過雙擊畫布中的區塊,可以隨時修改 PLL 核心選項。

圖 2 PLL 靜態核心配置

  1. 右鍵單擊 CLKGEN PLL 的 POWER 輸入端口,然後單擊彈出視窗中的 tie high

  2. 接下來右鍵單擊 CLKA 端口,然後單擊彈出視窗中的提升至頂層

  3. 打開「Cores」標籤下的「Actel Macros」標題,將 AND2 閘拖曳到「Canvas」上。

  4. 右鍵單擊 B 連接埠並提升至頂層

  5. 右鍵單擊頂層輸入連接埠 B,然後從彈出式選單中選擇修改連接埠

  6. 將連接埠重新命名為 nSysReset

  7. 按住鍵盤控制鍵,右鍵單擊 CLKGEN LOCK 輸出端口,然後點擊 AND2 A 輸入端口,從彈出式選單中選擇連接,請參閱下圖 3。這將為我們提供一個取決於 PLL 鎖定輸出的有效低重設。

圖 3 連接埠連接

  1. 接下來我們需要實例化 Flash*Freeze 腳位的輸入緩衝區。在 Core 標籤中的 Actel Macros 下,向下捲動到 INBUF_FF 並將其拖曳到畫布上。這會自動將 INBUF_FF 連接到頂層。

  2. 右鍵單擊頂層輸入連接埠 PAD,將其重新命名為 Flash_Freeze_N,然後右鍵單擊輸出連接埠 Y 並選擇標記未使用。這將啟用 Flash*Freeze 模式。

  3. 開啟 Catalog 視窗 Core 標籤下的 Basic Blocks 標題,然後將 Counter Core 拖曳到 Canvas 上。

  4. 使用如下圖 4 所示的設定來設定核心,按一下產生按鈕並將核心命名為 counter1

圖 4 計數器 1 核心設置

  1. 右鍵點選 Counter1 輸出埠 Q0,並選擇 Add Slice 選項。像 Q21 一樣輸入 21:21 以從總線中單獨運行位元 21,請參閱下圖 5。點擊「+」按鈕可以開啟連接埠。重複此步驟,得出 Q20Q19Q0。將計數器 1 的時脈輸入端口連接到 CLKGEN 的 GLA 輸出,就像我們之前連接端口一樣,按住控制鍵,右鍵單擊兩個端口,然後從彈出式選單中選擇連接。也將計數器 1 的 Aclr 連接到 AND2 閘的 Y 輸出。

圖 5 在 Q0 中加入切片

  1. 右鍵單擊計數器 1 的連接埠匯流排 Q0 並選擇標記為未使用,總線上的其餘位元稍後將透過多工器連接到 3 位元計數器的時脈輸入。

  2. 重複步驟 19,將另一個計數器拖曳到畫布並依照圖 6 所示進行設定。點擊產生按鈕並將核心命名為 Counter2。該計數器將是一個 3bit 計數器 UpDown 計數器。

圖 6 計數器 2 核心設置

  1. 將「核心」標籤中「基本區塊」標題下的「多工器」拖曳到畫布中,並按照下面的圖 7 所示進行設置,按一下產生並將核心命名為 Mux1

圖 7 時脈多工器設置

  1. 右鍵單擊畫布左邊緣並選擇新增連接埠…輸入 DipSwitches0,確保選擇了輸入單選按鈕,然後按一下確定。按照我們在上面的步驟 21 中所做的那樣,透過加入 8 個切片來引入 DipSwitches 總線的所有 8 條線路。這些輸入埠稍後將被指派給 IGLOO Eval 板上的 8 位元 Dip 開關組。

  2. 接下來我們需要連接所有端口,如下圖 8 所示。仔細研究圖 8,並將 DipSwitches 總線的位元 2 和 3 與 Mux1 上的 Sel0 和 Sel1 連接起來。也將 Counter1 的位元 21、20 和 19 連接到 Mux1 上的 Data0、Data1 和 Data2。結果將傳送至計數器2的時脈。

圖 8 教程中 Seop 21 的連接

  1. 按照我們在步驟 21 中所做的那樣,透過增加切片從 Counter2 的輸出 Q0 總線中提取出所有三位元。

  2. 在 Basic Blocks 下的 Cores 標籤中,將解碼器拖曳到畫布上,將輸出寬度設為 8,解碼啟用設定為 Active High,將輸出(Eq)設為 Active Low,點擊產生並將核心解碼器命名為下圖 9。

圖 9 解碼器設置

  1. 將輸入資料線 Data0Data1Data2 分別連接到 Counter2 Q0Q1Q2 的輸出位元。

  2. 我們需要另一個解碼器來以第二種模式驅動 LED。將另一個解碼器核心拖到畫布上並像之前一樣進行設置,但這次我們需要 4bit 輸出,請參見下圖 10。

圖 10 Dec_Mode2 設定

  1. 將 Dec_Mode2 輸入埠的 Data0 和 Data1 分別連接到輸出埠 Q1Q2。兩個解碼器上的啟用將被自訂 VHDL PWM 產生器的輸出選通。這將允許我們改變 LED 的亮度。

  2. 透過在 Eq0 的輸出中加入 4 個切片來從 Dec_Mode2 解碼器中取出所有 4bit,並擴展連接埠。

  3. 透過從核心標籤下的基本區塊標題中拖曳到第二個多工器來實例化多工器核心。將核心配置為輸出匯流排寬度為 8 和輸入匯流排為 2,如下圖 11 所示,按一下產生並將多工器命名為 Mux_Mode

圖 11 Mux_Mode 設定

  1. 此多工器將允許我們選擇將哪個解碼器輸出運行到 Eval 板的 LED。將 Result0 輸出端口提升至頂層,右鍵單擊頂層端口並選擇修改端口,將其重新命名為 LED。透過新增 8 個切片並擴展端口,將所有 7 個輸入端口引出至 Data1

  2. 將 Mux_Mode 選擇線 Sel0 連接到頂層輸入埠 DipSwitches0

  3. 解碼器 Eq0 的輸出連接Mux_Mode 輸入 Data0_port0

  4. 將 Dec_Mode2 的輸出 Eq0 對稱地連接到輸入 Data1_port0Eq0 連接到 Data1_port7Data1_port0Eq1 連接到 Data1_port1Data1_port6Eq2 連接到 Data1_port2Data1_port5Eq3 連接到 Data1_port3Data1_port4。見圖 12。

圖 12 Mux_Mode 連接

  1. 如果啟用,我們將需要驅動 Counter2 的 UpDown 輸入。為此,我們需要實例化先前匯入的一個 .vhd 檔案。將 UpDownCont.vhd 元件拖曳到 Canvas 上。該文件可以在左側的「設計資源管理器」視窗下的「層次結構」標籤中找到。可以雙擊該元件區塊來開啟.vhd 檔案並研究其內容。UpDownCont.vhd 區塊控制 Conter2 的操作(向上計數或向下計數)。請參閱下面的圖 13的 RTL 圖。

圖 13 UpDownCont.vhd RTL 圖

  1. 透過新增 3 個切片,取出 UpDownCont 輸入連接埠 cntr_in0 的所有三位。將輸入 cntr_in2cntr_in1cntr_in0 分別連接到 Counter2,Q2Q1Q0 的輸出,如下圖 14 所示。

圖 14 UpDownCont.vhd 連接

  1. 接下來我們必須實例化 pwm_gen(在「層次結構」標籤下的設計資源管理器中找到的 PWM.vhd 元件)。為此,將 PWM.vhd 元件拖曳到 Canvas 上,就像我們之前對 UpDownCont.vhd 元件所做的那樣。還可以打開這個塊來研究 VHDL。

  2. 透過新增 7 個切片,將所有輸入位元帶出到 pwm_gen、del_PWM0 輸入連接埠。

  3. 將 ADD_or_Sub 提升至頂層。

  4. del_PWM1del_PWM2del_PWM3del_PWM4 分別連接到 DipSwitches4DipSwitches5Dipswitches6DipSwitches7

  5. 右鍵點選 del_PWM0del_PWM5del_PWM6del_PWM7,並選擇 tie low

  6. 右鍵點選 del_PWM1del_PWM2del_PWM3,然後從彈出式選單中選擇反轉

  7. 將 pwm_gen 輸出、pwm_out 連接到解碼器和 Dec_Mode2 啟用輸入。

  8. 將 pwm_gen 輸出 pwm_out 提升至頂層

  9. 最後一個要實例化的 VHDL 元件是 switch_debounce(在「層次結構」標籤下的設計資源管理器中找到的 Debounce.vhd 元件)。為此,將 Debounce.vhd 元件拖曳到 Canvas 上。此組件用於確保當需要單一變更時,按鈕顫動不會對工作週期輸入多個變更。該組件有兩個輸出、一個單次脈衝和一個 39ms 等待的電平變化。下圖 15 可以看到 ASM 圖。可以開啟此組件塊來研究 VHDL 組件。

圖 15 Debounce.vhd FSM 的 ASM 圖

  1. switch_debouncepwm_gen_0 的輸入 clk 訊號連接到 CLKGEN 輸出 GLA

  2. switch_debouncepwm_gen_0 的輸入 nreset 訊號連接到 AND2 輸出 Y

  3. 將 switch_debounce 輸出 db_level 連接到 pwm_gen 輸入 strDelPWM

  4. 將 switch_debounce 輸入 sw 提升為頂層輸入,並將連接埠重新命名為 strDelPWM反轉輸入

  5. 右鍵單擊 db_leveldb_pulse 連接埠並將它們提升至頂層

  6. 將 UpDownCont_0 輸入 en 連接到頂層輸入埠 DipSwitches1

  7. 最後把 Counter2_0 的 UpDown 輸入埠和 UpDownCont_0 的輸出埠 UpDown 連接起來。最終的頂層原理圖應該類似於圖 16 所示的原理圖。右鍵點選畫布並選擇自動排列實例和自動排列連接來整理原理圖。

圖 16 最終頂層原理圖連接注意連接埠綁定高、低和反轉

  1. 在層次結構標籤下的設計資源管理器中,右鍵單擊頂部,然後選擇「設定為根」”。

  2. 在工作列中點選 SmartDesign → 檢查設計規則。如果沒有錯誤,則繼續步驟 58 中的模擬,否則需要檢查連線和設定。

使用 ModelSim AE 進行預合成模擬

  1. 若要隔離和模擬任何一個元件,請右鍵點選設計資源管理器的層次結構標籤中的元件,然後選擇設定為根。將 UpDownCont.vhd 組件設定為根。

  2. 再次右鍵單擊同一組件並選擇組織刺激。這將彈出一個選單,允許關聯 testbench.vhd 檔案。透過強調顯示「關聯文件:」下右側的文件,然後按一下刪除再按一下確定,確保沒有關聯的 testbench.vhd 檔案。對於這次模擬,我們將使用 UpDownCont.vhd 檔案底部的測試腳本並將其貼到 ModelSim 模擬器中。

  3. 雙擊檔案開啟 UpDownCont.vhd,然後突出顯示註釋的腳本,右鍵單擊並從彈出式選單中選擇複製。

  4. 開啟專案流程標籤並點擊模擬按鈕,當詢問「您是否要現在關聯刺激」時,按一下

  5. 將 3 個訊號 encntr_inupdown_out物件視窗拖放到波形視窗。

  6. 將先前複製的腳本貼到 Transcript 窗口,按下回車鍵並觀察波形。波形應與下圖 17 的波形類似。

image

圖 17 UpDownCont.vhd 計數器控制 ModelSim 仿真

  1. Debounce.vhd FSM 可以採用與 UpDownCont.vhd 元件相同的方式來模擬。Debounce.vhd FSM 的模擬可以在下面的圖 18 和 19 中看到。圖 19 詳細顯示了脈衝輸出。透過試驗用於模擬 UpDownCont.vhd 元件的指令,建立自己的指令來模擬 Debounce.vhd 元件。

圖 18 Debounce.vhd FSM ModelSim 仿真

圖 19 Debounce.vhd FSM 放大脈衝輸出視圖

  1. 在預綜模擬之後,透過在設計資源管理器視窗的層次結構標籤中右鍵單擊頂部並選擇設為根,將頂部設為根

  2. 透過點選「Top」標籤來產生頂層設計,點選「SmartDesign」→「生成設計」。

使用 Synplify Pro AE 進行合成

  1. 轉到專案流程標籤並點擊合成按鈕,這將啟動 Synplify Pro AE。

  2. 在 Synplify Pro 左側面板的時序約束區塊中輸入 20MHz,然後點選執行。不應該有錯誤。

  3. 在左側面板中確保已選取 FSM 編譯器

  4. 在工作列中點選新建範圍檔案按鈕。這裡可以設定約束,點選確定接受預設設定。

  5. 在「時脈」標籤上,按一下 n:CLKGEN_0.GLA 的「啟用」複選框,然後在頻率區塊中輸入 20MHz。參見下圖 20。


圖 20 在 Synplify Pro AE 中輸入時脈約束

  1. 然後點選「屬性」選項卡,在「屬性」區塊中輸入 syn_encoding,然後按下回車鍵。從物件列中刪除,將值列設為格雷編碼並按一下啟用方塊。參見下圖 21。


圖 21 為 Debounce.vhd 電路輸入 FSM 屬性

  1. 關閉本機 Top_syn.sdc 窗口,當要求儲存檔案時按一下​​「」。當另存為視窗彈出時按一下儲存

  2. 再次按一下執行退出 Synplify Pro檔案退出。當詢問「儲存項目 Top_syn 的變更」時,按一下「」。在我們進入設計師之前,這個過程限制了我們的設計。這將稍後在設計器內的約束編輯器中顯示。

使用設計器進行佈局和佈線

  1. 轉到 Libero 中的專案流程選項卡,然後按一下設計器

  2. 按一下「確定」接受「組織設計器約束」視窗中的預設約束。注意 Top.pdc 和 Top_sdc.sdc 應該包含在 Designer 的約束檔右側。

  3. 設計器將啟動,按一下「下一步」、「下一步」和「完成」接受預設設定。

  4. 點選“編譯”按鈕

  5. 當編譯選項視窗開啟時,強調顯示全域管理類別,勾選「提升扇出大於:的常規網路」方塊並輸入 15。在「但不要提升超過:」方塊中,輸入 3。按一下確定。參見下圖 22。

圖 22 輸入編譯選項控制扇出

  1. 點選設計器中的 I/O 屬性編輯器,將訊號指派給引腳。

  2. MultiView Navigator 啟動,同時 I/O 屬性編輯器視窗開啟。研究下面的圖 23 並進行相同的引腳分配。 Flash*Freeze 引腳已被指派。

圖 23 I/O 屬性編輯器引腳分配

  1. 點選檔案 → 提交並檢查。點選檔案 → 退出。

  2. 點選設計器中的佈局按鈕。按一下確定接受預設設定。

  3. 佈局完成後,佈局按鈕右上角會出現一個複選標記,表示已滿足時間要求。

  4. 此時可以使用 Back-Annotate 按鈕,並且可以使用 Libero 的專案流程標籤中的模擬按鈕完成後佈局模擬。

  5. 點選 Designer 中的 Timing Analyzer 按鈕。在左側的「摘要」視窗中,請注意綠色複選標記,它表示已滿足時間要求。點選 CLKGEN_0 下的 Register to Register 元素。透過觀察最大延遲分析視圖窗口,通知時序已滿足。 Slack 欄位應顯示所有正值,左下方視窗指示奈秒內的鬆弛分佈。這些視窗共同向我們表明時間已經滿足。參見下圖 24。


圖 24 SmartTime 最大延遲分析

  1. 也可以使用工具 → 時序分析器 → 最小延遲分析視圖下的最小延遲分析視圖來分析保持違規。

  2. 如果其中一條路徑(Source Pin 到 Sink Pin)顯示負鬆弛,則可以透過雙擊該路徑的行來進一步分析時序。將會彈出一個單獨的窗口,顯示擴展的路徑。此視窗將顯示資料所需時間、資料到達時間以及 Slack。可以在路徑詳細資訊下查看所需時間和到達時間的每個部分。如果從 Designer 開啟 ChipPlanner,則可以透過右鍵點擊邏輯電路選擇交叉偵測路徑來交叉探測路徑。這使得人們可以分析 FPGA 結構上的邏輯路徑。參見下頁圖 25。


圖 25 最大延遲擴展路徑

  1. 滿足時間要求後,可以在 Designer 中建立程式設計檔案。

  2. 關閉智慧時間檔案→退出。

  3. 點選設計器中的程式設計檔案按鈕。按一下確定並按一下生成,接受預設設定。

  4. 一旦建立了程式設計資料檔 (.pdb),請關閉 Designer。文件→退出。當系統詢問時,將變更儲存到設計器。

使用 Flash Pro 對 FPGA 進行編程

  1. 確保開發板透過一條 mini-USB 線連接到 CON2 電源,並透過 LC 編程器(包含在套件中)透過第二根 mini-USB 線連接到 IGLOO nano Eval 板的 LCPS 連接器。

  2. 如果出現提示,請安裝 USB 驅動程式。請參閱 IGLOO nano 評估套件的入門卡,以獲得連接電路板的進一步協助。

  3. 在 Libero 的 Project Flow 標籤中,按一下 Programming 按鈕啟動 FlashPro。

  4. FlashPro 啟動並偵測 LC 程式設計器。它被檢測為 FlashPro3,這很好。點選 PROGRAM 按鈕對晶片進行程式設計。參見下圖 26。


圖 26 FlashPro 對 IGLOO nano FPGA 進行編程

  1. 此時晶片將被編程。當按下電路板上的 SW1SW3 按鈕時,Dip 開關可用於控制速度、類型以及 PWM 佔空比的變化速度。SW3 降低 PWM 佔空比,有效調暗 LED。按住 SW1 的同時按下 SW3 會增加 PWM 佔空比,從而有效地使 LED 變亮。參見下圖 27。


圖 27 用於控制 LED 閃爍模式和亮度的開關

  1. 可以使用 O-Scope(接腳 76、77 和 78)觀察去抖動電平/脈衝輸出PWM 輸出,用於選通解碼器上的啟用訊號。

  2. SW6 滑動到 ON 位置即可進入 Flash*Freeze 模式。

  3. 可以使用電流表來測量核心電流,方法是將探頭連接到 JP10 的引腳 1 和 4,並從引腳 2 和 3 拉出跳線。注意切換 FlashFreeze 開關時核心電流消耗如何變化。請參閱圖 28、29 和 30 來說明 FlashFreeze 功能。


圖 28 測量芯線電流時電流探頭的連接


圖 29 正常模式下 35mA 核心電流消耗


圖 30 Flash*Freeze 模式下核心電流消耗為 26.8uA

功能、限制和變更

本教學使用 Libero v9.1 Service Pack 4 開發,並由 Synopsis(Synplify Pro AE)和 Mentor Graphics(ModelSim AE)支援軟體。Libero 可以作為獨立的開發環境與替代的綜合和模擬軟體一起使用。

總結

本教學展示了使用 Libero 設計流程實例化 Microsemi 核心、自訂 VHDL 核心、在更大的設計中模擬單一元件、為 FSM 設計設定時序約束和屬性、在 SmartTime 中管理時序約束和交叉偵測資料路徑、在 I/O 屬性編輯器中設定引腳分配、控制和佈局,最後在 FlashPro 中對 IGLOO nano FPGA 進行程式設計。確保滿足時序要求是任何 FPGA 設計流程中的重要方面,SmartTime 讓這一步驟變得簡單。

附加資訊

更多設計支援、產品教學、應用說明、使用者指南和其他文件可在 Microsemi cSOC 集團網站 http://www.actel.com/techdocs/default.aspx 上找到。

附錄:文件下載

Microsemi_IGLOO_LED_Patterns.doc (2.8 MB)
Led_PatternProj.zip (775.6 KB)