軟件介紹

Libero是Microchip推出的升级版 SoC 与 FPGA 开发设计工具。它支持 PolarFire、SmartFusion 等多个系列 FPGA 芯片开发,集成了 Synopsys 的综合工具、Mentor Graphics 的仿真工具等第三方工具,能完成从设计输入、综合、仿真到布局布线、时序分析、程序生成的全流程开发。该工具还具备 SmartDesign 图形化 SoC 设计生成、SmartPower 功率分析等特色功能,适配 Windows 和特定 Linux 系统,不过使用前需申请 License 许可。

準備工作

軟件下載

官方軟件下載地址如下:

Libero® SoC Design Suite Versions 2025.1 to 12.0 | Microchip Technology

免費License獲取

免費License申請地址:

FPGA Software Licenses | Generate FPGA Licenses

點擊Request Free License之後出現下面的選項,建議選擇第二種,比較方便,只需要綁定DiskID即可

點擊Register之後,有提示如何獲取DiskID,打開命令行,輸入Vol C:即可查詢

申請之後就等待官方通過郵件發送License dat文件,郵箱是在Microchip網站註冊登錄的郵箱

License設置

拿到License.dat文件之後,需要添加環境變量,變量名:LM_LICENSE_FILE,變量值:license.dat存放地址

添加好環境變量之後最好重啟一下電腦,這樣環境變量才能生效

Libero工作流

新建工程

打開Libero軟件,界面如下圖所示,和Vivado、Quartus的界面相比明顯比較簡陋,實際上軟件的功能也更少,這個我們以後再聊。點擊New進行新建工程

出現如下界面,寫一個工程名字,選擇工程存放地址,選擇編程語言,之後點擊next

這裡我們選擇FPGA型號,我用的IGLOO2的評估板,型號是M2GL010T-1FGG484,但是搜不到這個型號,只能搜到M2GL010T-1FG484,少了一個G,查了下命名規則,多一個G的器件是環保的,不含鉛。也就是說,這兩個型號的芯片應該是同die的,封裝也一樣,那就無所謂了,按照我FPGA的經驗,就用這個M2GL010T-1FG484建工程就行,到時候燒錄不會有問題。選中型號點擊next

後面的保持默認即可,有現成的HDL代碼和約束文件可以添加一下,沒有的話就一路next最后finish

然後就來到了工程界面,工程名button_led.prjx

編寫HDL

點擊File>New>HDL編寫HDL文件(ps:這裡的SmartDesign是一個圖形化工具,可以把其他module放到裡面,通過連線的方式進行例化,比較直觀方便,以後有機會再講)

出現彈窗讓選擇語言,我一般用verilog,verilog相比VHDL更好理解一些,和C語言更接近。編寫一個文件名字,下面的選項默認勾選,會生成一個簡易模版

生成的模版如下

修改一下,寫個最簡單的按鍵控制LED

module top( button0, button1, button2, led0, led1, led2 );
input button0, button1, button2;
output led0, led1, led2;

assign led0 = button0;
assign led1 = button1;
assign led2 = button2;


endmodule

創建工程結構

這時候在work這裡還看不到top,v,需要先點擊Build Hierarchy來創建結構,後續如果工程有更多的Module,每次添加或例化module之後都要點擊Build Hierarchy來刷新一下,我也不理解為什麼軟件不設計成自動的,但還好它至少會有個黃色警告符來提示你一下

Build Hierarchy之後work下面可以看到top.v,但是上面還有一條提示信息:Please select a root,意思是現在的結構還沒有一個root,也就是沒有頂層

我們右鍵top.v,Set As Root

這樣就將top.v設置為頂層了,提示信息也消失了

綜合

接下來將工程進行綜合,我們切換到Design Flow標籤頁,可以看到Synthesize功能,雙擊運行

查看一下綜合的報告,沒問題就繼續

仿真

接下來我們先仿真,類似Vivado和Quartus,Libero也有一個定製版的Modelsim,應該是基於Modelsim的輕量版改的吧,不需要額外的license

回到Design Hierarchy,右擊top.v,Create Testbench>HDL

出現彈窗,設置仿真激勵文件名和時鐘週期,會生成一個testbench模版

修改一下,隨便寫幾種激勵試試看


`timescale 1ns/100ps

module button_led_tb;

parameter SYSCLK_PERIOD = 100;// 10MHZ

reg SYSCLK;
reg NSYSRESET;
reg button0,button1,button2;
wire led0,led1,led2;

initial
begin
    SYSCLK = 1'b0;
    NSYSRESET = 1'b0;
end

//////////////////////////////////////////////////////////////////////
// Reset Pulse
//////////////////////////////////////////////////////////////////////
initial
begin
    #(SYSCLK_PERIOD * 10 )
        NSYSRESET = 1'b1;
end


//////////////////////////////////////////////////////////////////////
// Clock Driver
//////////////////////////////////////////////////////////////////////
always @(SYSCLK)
    #(SYSCLK_PERIOD / 2.0) SYSCLK <= !SYSCLK;


//////////////////////////////////////////////////////////////////////
// Instantiate Unit Under Test:  top
//////////////////////////////////////////////////////////////////////
top top_0 (
    // Inputs
    .button0(button0),
    .button1(button1),
    .button2(button2),

    // Outputs
    .led0( led0),
    .led1( led1),
    .led2( led2)

    // Inouts

);

initial
begin
    button0 = 0;
    button1 = 0;
    button2 = 0;
    #10;
    
    button0 = 1;
    button1 = 1;
    button2 = 1;
    #10;
    
    button0 = 1;
    button1 = 0;
    button2 = 0;
    #10;
    
    button0 = 0;
    button1 = 1;
    button2 = 0;
    #10;
    
    button0 = 0;
    button1 = 0;
    button2 = 1;
    #10;
    $finish;
end

endmodule

切換到Stimulus Hierarchy,Build Hierarchy之後可以看到button_led_tb.v

右鍵button_led_tb,Set as active stimulus,這裡感覺有個小bug,按理說前面創建testbench時的小彈窗是默認勾選Set as active stimulus的,但是這裡還是需要手動再Set as active stimulus,這樣才能被設置為激勵文件

回到Design Flow,可以看到有3個仿真

三者核心定义与目标

  • 综合前仿真(功能仿真):基于 RTL 代码(Verilog/VHDL),完全不涉及 FPGA 硬件特性。

  • 目标:仅验证逻辑功能是否符合需求,比如数据处理、状态机跳转、接口交互等核心逻辑是否正确。

  • 综合后仿真(门级时序仿真):RTL 代码经综合工具转换为门级网表后进行,融入 FPGA 的逻辑单元延迟(如 LUT、触发器的固有延迟)。

  • 目标:验证门级实现的功能正确性,同时初步检查时序约束(如时钟频率、Setup/Hold 时间)是否满足。

  • 布线后仿真(布局布线后时序仿真):门级网表经布局布线工具处理后进行,已包含逻辑单元延迟 + 实际布线延迟(导线长度、拓扑带来的延迟)。

  • 目标:精准验证硬件最终实现的功能和时序,排查布局布线导致的时序违规,是烧写 FPGA 前的最终验证。

這裡我們選擇綜合後仿真,雙擊Simulate,軟件自動調用Modelsim,由於testbench裡面寫了$finish,彈窗會詢問是否finish,點擊否,切換到wave標簽頁,右鍵選擇Zoom Full

看波形沒啥問題

添加約束文件

接下來雙擊Manage Constraints來添加約束

選擇Edit with IO Editor

查訊開發板的按鍵和LED管腳信息

選擇對應的管腳進行約束,點擊commit保存

返回可以看到這個pdc約束文件,確認它勾選到了Place and Route

佈局佈線

回到Design Flow,點擊Place and Route

燒錄

接下來點擊Run Program action

板上驗證結果

根據開發板手冊,按鍵默認為高電平,按下為低電平,LED低電平有效。理論推導結果為LED初始狀態下全滅,按下按鍵後,對應的LED亮。實際板上測試結果與理論符合。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐