User Tools

Site Tools


study:fpga:20241031-002:index

Lattice的MachXO2系列FPGA的使用 (2024-10-31)

Local Backup

  • 在我們的學習系統中我們選用了Lattice Semiconductor公司的MachXO2系列FPGA,主要出於以下幾方面的考量:
    • Lattice Semiconductor公司的FPGA學習與使用門檻最低,易學易用
    • 性價比高,除了適合入門級的學習之用,也能滿足80%以上的企業應用
    • 非常適合於大學教學實驗及創新實踐
  • 本節我們來看看我們選用的這個系列的FPGA有哪些特點以及應用領域。

硬體部分

1 MachXO2 FPGA硬體特性

  • 靈活的邏輯架構,256-6864個查找表(LUTs),18-334個輸入輸出腳位(PIOs)
  • 超低功耗- 採用先進的65nm低功耗工藝,等待狀態時功耗低至22μW,具有可編程、低擺動的差分I/O
  • 最高達256Kbits的用戶Flash記憶體及最高達240Kbits sysMEM™ 內嵌塊RAM,高達54Kbits的分散式RAM,有專用的FIFO控制邏輯
  • 最高可達334個hot-socketable輸入/輸出管腳避免額外的洩漏
  • 可以透過JTAG , SPI , I2C或Wishbone匯流排進行編程
  • TransFR特性允許在現場設計更新而不干擾設備的運行
  • 可程式sysIO™ 支援LVCMOS, LVTTL, PCI, LVDS, BLVDS, MLVDS, RSDS, LVPECL, SSTL, HSTL以及更多中接口,可程式上拉、下拉模式
  • 靈活的片上時脈處理- 8個主時脈輸入腳位、支援高速I/O的雙沿時脈、每個裝置內有2個類比PLL、外部時脈輸入時頻率範圍從7MHz到400MHz
  • 晶片內硬化了SPI、I2C以及定時器/計數器功能
  • 晶片內有5.5%精度的片上振盪器
  • 每顆晶片都有TraceID進行追蹤
  • 最小封裝為2.5mmx2.5mm
  • 2 XO2 FPGA的結構

MachXO2內部結構功能

  • 可程式部分:
    • FPGA的核心部分是由邏輯閘(Logic Gate)、暫存器(Register)以及連線(Wire)構成的可程式化的邏輯區塊,也即此圖中的PFUs(Programmable Function Units with Distributed RAM - 具有分散式記憶體的可程式功能單元),這些邏輯塊的規模由兩個重要指標表示LUTs和Slices
    • 可程式輸入輸出管腳PIOs:分成多個Bank的sysIO,每個Bank可以有單獨的供電電壓Vccio,以支援不同電平的資料傳輸協議,這些輸入輸出腳可以自由分配,並且可以透過程式設計、配置支援多種資料傳輸協定(不同電平、差分等),IO腳的輸入輸出電阻也可以編程、配置
    • 區塊RAM:在這裡稱為sysMEM Embedded Block RAM(EBR)
  • 硬核心部分: 現今的FPGA除了可程式化的邏輯和IO之外,還提供了一系列常用的功能模組,以硬核心的方式內嵌在晶片以內,即便用戶在設計中不用這些功能,這些資源也存在於系統中。硬派的優點在於速度快、功耗低,且這些硬核心一般為常用的功能塊。在MachXO2中內嵌的硬核心功能主要有:
    • 嵌入式功能塊:Embedded Function Blocks(EFB)- MachXO2主要的EFB包括一個SPI、兩個I2C、和一個定時器
    • 程式Flash:On-chip Configuration Flash Memory
    • 使用者Flash:User Flash Memory(UFM)
    • PLL/DLL: sysPLL

    • MachXO2內部的可程式功能單元構成示意圖

    • MachXO2的Slice構成示意圖

    • MachXO2內部的嵌入式功能模組

3 XO2 FPGA的資源

  • 上面我們介紹了MachXO2內部的結構,XO2系列不同的型號內部結構是相同的,但資源的多少則取決於所選的型號,在設計中我們需要根據資源的需求來選用合適的裝置,了解到這些裝置的資源配置對於我們設計也是有幫助的,可以充分利用裝置內部的資源簡化外圍電路的設計,同時也要知道裝置內部的局限性,在外圍進行擴展。在我們小腳丫2.0版中我們選用了XO2-4000的型號(請參閱MachXO2選型表),它有下列資源:
    • 4320個查找表
    • 10個嵌入式RAM區塊,攻擊92kbits的容量
    • 34kbits的分散式SRAM
    • 96Kbits的用戶Flash記憶體
    • 內部有兩個PLL和兩個DLL
    • 支援DDR/DDR2/LPDDR記憶體接口
    • 內部具有配置用的Flash
    • 支援雙啟動模式
    • 內部有SPI模組,2個I2C模組以及一個定時器模組

MachXO2 選型表

O2-256 XO2-640 XO2-640U XO2-1200 XO2-1200U XO2-2000 XO2-2000U XO2-4000 XO2-7000
查找表(LUTs)的密度 256 640 640 1280 1280 2112 2112 4320 6864
EBR RAM區塊(9 Kbits/block) 0 2 7 7 8 8 10 10 26
EBR SRAM(Kbits) 0 18 64 64 74 74 92 92 240
Dist. SRAM (Kbits) 2 5 5 10 10 16 16 34 54
用戶Flash儲存(Kbits) 0 24 64 64 80 80 96 96 256
PLL + DLL 0 0 1 + 2 1 + 2 1 + 2 1 + 2 2 + 2 2 + 2 2 + 2
支援DDR/DDR2/LPDDR記憶器 - - Yes Yes Yes Yes Yes Yes Yes
配置記憶體 內部Flash
雙啟動 Yes Yes Yes Yes Yes Yes Yes Yes Yes
內嵌功能區塊 I2C (2), SPI (1), Timer (1)
內核電壓Vcc 1.2 V ZE ZE - Z - ZE & HE HE ZE & HE ZE & HE
內核電壓Vcc 2.5 - 3.3 V HC HC HC HC HC HC HC HC HC

4 主要應用領域

4.1 微處理器的介面擴展

  • 為低成本的微控制器增加通用IO以節省成本
  • 為系統控制處理器增加SPI和I2C介面
  • 快速新增高效能的DDR SRAM和Flash記憶體接口
  • 透過採用PLD配置為系統狀態暫存器簡化系統管理

4.2 提高即時性要求較高的功能的效能

  • 在系統上電時透過快速啟動邏輯精確地控制訊號
  • 可以配置PWM功能以精確產生照明和馬達控制所需的類比電壓
  • 建構感測器緩衝器以及智慧中斷以確保即時世界的事件能夠被捕捉
  • 採用硬體UART克服採用軟體實現UART的效能限制

4.3 透過硬體加速提高系統的效能

  • 透過基於邏輯的訊號過濾機制降低處理器的負荷
  • 可以透過最小的處理器消耗實現影像的旋轉、縮放以及合併

設計工具及設計流程

1 Lattice Diamond整合化開發環境

  • 參考Diamond安裝及設定安裝好Diamond,如果遇到問題可以先看看Diamond安裝常見問題。現在我們就可以使用Diamond軟體開始FPGA的設計了,整個設計流程參考下圖。

  • 採用Diamond設計FPGA邏輯的基本流程

2 運行第一個例程

  • 下面我們可以開始可程式邏輯的開發,我們以控制LED交替閃爍為例,完成自己的第一個程式:
  • 1, 雙擊執行Diamond軟體,首先新建工程:選擇File →New →Project →Next
  • 2, 工程命名:我們將新工程命名為LED shining,工程目錄F:/LED shining,然後點選Next
  • 3, 新增相關設計文件或約束文件(如果已經有設計文件和約束文件,我們可以選擇添加進工程):這裡我們新建工程,沒有相關文件,不需添加,直接Next
  • 4, 裝置選擇:依照Step FPGA開發板元件LCMXO2-4000HC-4MG132C配置,Next(裝置型號必須確認正確,否則在腳位設定時會報錯)
  • 5, 選擇綜合工具:Synplify Pro(第三方)和Lattice LSE(原廠)都可以,我們就使用Lattice LSE,直接Next
  • 6, 工程資訊確認:上面選擇的所有資訊都在這裡,確認沒有問題,直接Finish
  • 7, 工程已經建好,我們下面新增設計檔, 選擇File →New →File
  • 8, 選擇Verilog Files(選擇自己使用的硬體描述語言),Name填寫LED shining,然後點擊New,這樣我們就創建了一個新的設計檔案LED shining.v,然後我們就可以在設計檔案中進行程式設計了
  • 9, 程式原始碼已經準備好,如下,將程式碼複製到設計檔案LED_shining.v中,並儲存。
    • module LED_shining ( 
          input clk ,       //clk = 12mhz 
          input rst_n ,     //rst_n, active low 
          output led1 ,     //led1 output 
          output led2      //led2 output 
      ) ;
       
      parameter CNT_1S =  12 _000_000 -  1 ;   //time 1S 
      parameter CNT_05S = CNT_1S >>  1 ;     //time 0.5S
       
      reg  [ 23 : 0 ] cnt ; 
      always  @ ( posedge clk or  negedge rst_n )  begin 
          if  ( ! rst_n ) cnt <=  1'b0 ; 
          else  if  ( cnt >= CNT_1S ) cnt <=  1'b0 ; 
          else if ( cnt >= CNT_1S ) cnt <= 1'b0 ; +  1'b1 ; 
      end
       
      wire clk_div =  ( cnt > CNT_05S ) ?  1'b1  :  1'b0 ;
       
      assign led1 = clk_div ; 
      assign led2 =  ~ clk_div ;
       
      endmodule
  • 10, 程式編寫完成,需要綜合,在軟體左側Process欄,選擇Process,雙擊Synthesis Design,對設計進行綜合,綜合完成後Synthesis Design顯示綠色對勾(如果顯示紅色叉號,說明程式碼有問題,根據提示修改程式碼),如圖
  • 11, 透過綜合工具,我們的程式碼就被綜合成了電路,產生的具體電路,我們可以透過選擇Tools → Netlist Analyzer查看(僅限Lattice的綜合工具,第三方綜合工具無法查看),如圖netlist_analyzer
  • 12, 綜合生成電路後,分配腳,選擇Tools → Spreadsheet View,依照下圖分配FPGA腳,然後設定IO_TYPE為LVCMOS33,儲存,介面如下
  • 13, 在軟體左側Process欄,選擇Process,勾選所有選項,直接雙擊Export Files,所有佈局佈線輸出依序完成,結束後,所有選項顯示綠色對勾。
  • 到這裡完成了第一個程式流程檔案的生成,下面可以下載到FPGA中。

3 工程仿真

  • 上面我們走了整個工程開發的過程,程式較為簡單,對於複雜的工程開發需要預先模擬和後模擬等,確保最終的程式設計邏輯和時序符合我們的設計要求。 模擬軟體很多,這裡我們使用軟體內附的Modelsim軟體進行功能模擬:
  • 1, 首先我們加入testbench文件,跟前面加入設計文件一樣,File →New→File →Verilog Files,Name填寫,然後New,
  • 2, 測試原始碼如下,複製到LED shining tb.v檔案並儲存。為了方便仿真,我們在LED shining tb.v呼叫LED shining模組時將CNT 1S重新賦值為19:
    • `timescale  1ns  /  100ps 
      module LED_shining_tb ;
       
      parameter CLK_PERIOD =  10 ; 
       
      reg clk ; 
      initial clk =  1'b0 ; 
      always  # ( CLK_PERIOD / 2 ) clk =  ~ clk ;
       
      reg rst_n ;   //active low 
      initial  begin 
          rst_n =  1'b0 ; 
          # 20 ; 
          rst_n =  1'b1 ; 
      end
       
      wire led1 , led2 ; 
      LED_shining # ( .CNT_1S (  19  ) ) u_LED_shining ( 
          .clk                      ( clk      ) , 
          .rst_n                    ( rst_n    ) ,
       
          .led1                     ( led1     ) , 
          .led2                     ( led2     ) 
      ) ;
       
      endmodule
  • 3, 然後在軟體左側Process欄,選擇File List,找到LED shining tb.v(必須儲存過),點選右鍵,選擇Include for →Simulation
  • 4, 準備工作完成,我們選擇Tools →SimulationWizard →Next,
  • 5, 建立模擬工程,Lattice Diamond 3.12版本軟體自備ModelSim模擬工具,直接呼叫ModelSim(預設),工程名稱:LED shining tb,工程路徑預設即可:然後點選Next,
  • 6, 選擇RTL,然後Next
  • 7, 勾選Copy Source toSimulation Directory,然後Next
  • 8, 點選Next
  • 9, 點選Finish,等待模擬軟體的自動運行
  • 10, ModelSim軟體啟動,可以直接查看testbench檔案中變數的時序變化,想要看LED_shining模組中的變數的時序,可以透過下圖中的步驟將訊號新增至WAVE視窗。
  • 11, 在WAVE視窗模擬對應的時間長度,觀察訊號的時序

4 下載程式到FPGA

  • STEP MXO2 V2的程式晶片已經整合到小腳丫開發板上,因此只需要一條Micro USB線和電腦相連,就可以完成供電和程式設計的功能,驅動安裝好以後就可以開始編譯下載程式了。 將編譯完成的程式下載到開發板:
  • 1, 將開發板、下載器和電腦連接,如圖
  • 2, 選擇Tools →Programmer,選擇下載器HW-USBN-2B(FTDI),然後點選OK,
  • 3, 進入Programmer介面
  • 4, 在Programmer介面,點選右側Detect Cable,自動偵測Cable 顯示HW-USBN-2B(FTDI),然後點選下圖Program
  • 5, 顯示PASS,載入完成,觀察StepFPGA的LED交替閃爍,成功了。

5 STEP MXO2入門教程

  • 到這裡我們了解了用Diamond軟體進行開發的完整流程。接下來我們開始STEP-MXO2入門教學一步一步進入可程式邏輯設計。

相關設計文檔

  • 2 person(s) visited this page until now.

study/fpga/20241031-002/index.txt · Last modified: 2024/10/31 18:12 (external edit)