Quartus II宏功能模塊的使用方法(波形發生器的設計)

2020-10-31 電子小資料

使用Quartus II 的MegeWizard Plug-In Manager中的宏功能模塊可以幫助用戶完成一些複雜系統的設計,並可以方便地對現有的設計文件進行修改。這些宏功能模塊包括LPM(Library Parameterized Megafunction)、MegaCore(例如FFT、FIR等)和AMPP(Altera Megafunction Partners Program,例如PCI、DDS等)。下面以波形發生器的設計為例,介紹Quartus II宏功能模塊的使用方法。

2.3.1 設計原理

波形發生器的原理圖如圖所示。其中,lpm_counter0是LPM計數器,LPM_ROM是LPM只讀存儲器(ROM)。ROM中保存的是某種波形信號(如鋸齒波或正弦波)的數據,其地址由計數器lpm_counter0提供。lpm_counter0是一個8位加法計數器,在時鐘的控制下計數器的輸出q[7..0]由「00000000」到「11111111」循環變化,使ROM輸出周期性的波形信號的數據 。

波形發生器的原理圖

2.3.2 編輯輸入頂層設計文件

設計開始時應首先為波形發生器建立新的設計工程,本例的設計工程名為「mydds」,並選擇Cyclone II系列的EP2C35F672C6(DE2的目標晶片)作為設計工程的下載目標晶片。新的工程建立後,在Quartus II集成環境下,執行「File」→「New」命令,打開一個新的「Block Diagram/Schematic File 」(模塊/原理圖文件)編輯窗口。

1. 加入計數器元件

首先加入「arithmetic」庫庫中的「lpm_counter」(計數器)LPM元件。LPM是參數化的多功能庫元件,每一種LPM元件都具有許多埠和參數,通過對埠的選擇與參數的設置得到設計需要的元件。計數器元件上有許多埠,實際設計只需要時鐘輸入clock和數據輸出q[]埠。通過參數設置就可以將不用的埠消去,並對使用埠的參數進行設置。

lpm_counter元件選擇窗

選定計數器元件後單擊元件選擇窗的「OK」按鈕,彈出如圖所示的「MegaWizard Plug-In Manager[page 2c]」對話框頁面。在該對話框頁面中,選擇VHDL(或Verilog HDL或AHDL)作為輸出文件的類型,並在「What name do you want for the output file ?」欄目中選擇或填入生成的計數器名稱及保存的文件夾(如D:\myeda\lpm_counter0)。完成上述操作後,單擊「Next」按鈕,進入「MegaWizard Plug-In Manager [page 3 of 7] LPM_COUNTER」頁面。在此頁面中設置計數器的q輸出位數為8bit,時鐘輸入clock的有效邊沿為「Up only」(上升沿有效)。

MegaWizard Plug-In

LPM_COUNTER

單擊「Next」按鈕,進入「MegaWizard Plug-In Manager [page 4 of 7] LPM_COUNTER」頁面。在此對話框頁面中,選擇計數器的類型為「Plain binary」(二進位)。計數器的類型除了二進位外,還可以選擇任意模值,如5、10、60等。

單擊「Next」按鈕,進入「MegaWizard Plug-In Manager [page 5 of 7]LPM_COUNTER」頁面。此頁面用於為計數器添加同步或異步輸入控制端,如「Clear」(清除)、「Load」(預置)等。

2. 建立存儲器初值設定文件

為了將數據裝入ROM中,在加入ROM之前,首先應建立一個存儲器初值設定文件(或稱為.mif格式文件)。建立存儲器初值設定文件的操作如下:

① 執行「File」→「New」命令,打開一個新的「Memory initialization file」(存儲器初值設定文件)編輯窗口,在彈出存儲器參數設置對話框中輸入存儲器的字數(Number of words)為256,字長(Word size)為8位

存儲器參數設置對話框

②單擊「OK」按鈕,彈出存儲器初值設定文件的界面,將此文件以.mif為類型屬性(如mydds.mif)保存在工程目錄中。在存儲器初值設定文件的界面中,右擊存儲器的某個地址(如0),彈出Address Radix(地址基數)和Memory Radix(存儲器基數)選擇快捷菜單。執行「Address Radix」命令可對存儲器的地址基數進行選擇,地址基數有Binary(二進位)、Decimal(十進位)、Octal(八進位)和Hexadecimal(十六進位)4種選擇,本例選擇地址基數為「Decimal」。執行「Memory Radix」命令可對存儲器單元中的數據基數進行設置,數據基數有Binary、Hexadecimal、Octal、Signed Decimal和Unsigned Decimal等5種選擇,本例的設計選擇「Unsigned Decimal」 (無符號十進位) 。

存儲器初值設定文件的界面

③ 將數據加入存儲器初值設定文件中。新建的存儲器初值設定文件中的數據全部為0,在存儲器初值設定文件的界面可以直接輸入每個存儲器字的數據,也可以右擊文件,在格式文件操作快捷菜單提示下,完成數據輸入。

例如,在格式文件操作快捷菜單中選擇「Custom Fill Cells」(塊填充)項,彈出「Custom Fill Cells」對話框。在對話框的「Starting address」欄目內輸入起始地址(如00),在「Ending address」欄目內輸入結束地址(如255);將「Incrementing/Decrementing」選中後,在「Starting Value」欄目中輸入起始值(如0),在「Increment by」(或Decrement by)欄目中輸入增加(或減少)值(如1)。完成上述操作後單擊「OK」按鈕,結束.mif格式文件中的數據填充,得到一個鋸齒波數據。

根據快捷菜單,還可以對格式文件中的數據進行拷貝、粘貼、填充0、填充1等操作。生成的存儲器初值設定文件(mydds.mif)的格式如下:

WIDTH=8;

DEPTH=256;

ADDRESS_RADIX=UNS;

DATA_RADIX=UNS;

CONTENT BEGIN

//存儲器的地址與數據

0 : 0;

1 : 1;

2 : 2;

//以下252行數據省略

254 : 254;

255 : 255;

END;

用上述方法只能生成一些簡單的波形數據,對於複雜的波形(如正弦波)的數據,需要在存儲器初值設定文件的界面上一個一個地將數據填入。利用C語言程序也可以生成存儲器初值設定文件(.mif)中的數據,例如生成正弦波數據的C語言源程序(myram.c)如下:

#include <stdio.h>

#include "math.h"

main()

{int i,k;

for(i=0;i<256;i++)

{k=128+128*sin(360.0*i/256.0*3.1415926/180);

printf("%d : %d;\n",i,k);

}

return;

}

在C語言編譯軟體環境下將myram.c文件通過編譯並運行後,在DOS(Windows的命令提示符)環境下執行命令:

myram > myram_1.mif

則將myram文件運行的結果保存在myram_1.mif文件(該文件可以任意命名,也可以不加文件屬性)中。以「記事本」方式打開myram_1.mif文件,將其地址和數據部分的內容(共256行)複製到以記事本方式打開的存儲器初值設定文件(mydds.mif)中,替換源文件中的地址和數據。

注意:如果原來的存儲器初值設定文件(.mif)中的地址基數選用「Hexadecimal」 (十六進位),而用C語言程序生成的地址基數是十進位,因此需要把mydds.mif中的「ADDRESS_RADIX=HEX;」語句修改為「ADDRESS_RADIX=DEC;」,表示地址基數為十進位,而原來的存儲器初值設定文件中的地址基數選用十進位,則不需要修改。在Quartus Ⅱ環境下打開修改後的mydds.mif,其存儲的數據即為正弦波的數據。

3. 加入只讀存儲器ROM元件

在彈出的元件選擇窗的「Libraries」欄目中展開「megafunction」的「storage」庫,選中庫中的「lpm_rom」(只讀存儲器ROM))元件,單擊「OK」按鈕完成LPM_ROM元件符號的加入。雙擊元件符號右上角屬性(property)框,彈出元件符號屬性(Symbol Properties)窗口的General頁面。元件符號屬性窗口有General(常規)、Port(埠)、Parameter(參數)和Format(格式)4個頁面,General頁面用於符號名稱(Symbol name)和實例名稱(Instance name)的設置;Port 頁面用於使用或不使用埠的設置;Parameter 頁面用於參數的設置;Format 用于格式的設置,如元件符號的線條、字體的顏色等。

在General頁面保持的默認的符號名稱LPM_ROM和實例名稱inst1。單擊元件符號窗口上方的「Port」按鈕,進入Port頁面。LPM_ROM一共提供了address(地址)、inclock(時鐘輸入)、memenab(存儲器使能)、outclock(時鐘輸出)和q[](數據輸出)5個埠,在Port頁面的status(狀態)欄中設置使用或不使用這些埠,在本例設計中,將address、inclock和q[]設置為「Used」(使用),將memenab和outclock設置為「Unused」(不使用)。

單擊元件符號窗口的「Parameter」按鈕,進入Parameter頁面。該頁面有6項參數需要設置。

① 在名稱為「LPM_ADDRESS_CONTROL」項的Value(值)框中選擇「"REGISTERED"」(註冊),在Type(數據類型)框中選擇Auto(自動)為數據類型。數據類型有多種,如「Signed Binary」(帶符號整型)、 「Unsigned Integer」(無符號整型)、「Octal」(八進位)、「Float」(浮點)等,這些數據類型都可以用「Auto」替代。

②在名稱為「LPM_FILE」項的Value框中輸入存儲器初值文件的名稱,本例的設計的名稱為「mydds.mif」,在Type框中選擇Auto為數據類型。

③在名稱為「LPM_NUMWORDS」項的Value框中填入存儲器的字數,本例設計的字數為256(即28),在Type框中選擇Auto為數據類型。

④在名稱為「LPM_OUTDATA」項的Value框中選擇「"UNREGISTERED"」(未註冊),在Type框中選擇Auto為數據類型。

⑤在名稱為「LPM_WIDTH」項的Value框中填入存儲器的字長,本例設計的字長為「8」,在Type框中選擇Auto為數據類型。

⑥在名稱為「LPM_WIDTHAD」項的Value框中填入存儲器地址的位數,本例設計的地址位數為「8」,在Type框中選擇Auto為數據類型。

單擊元件屬性窗口下方的「OK」按鈕,結束LPM_ROM參數屬性的設置。

4. 編輯和編譯頂層設計文件

在新建的圖形編輯窗口中加入計數器lpm_counter0和只讀存儲器LPM_ROM元件後,還需要加入一個輸入(input)元件和兩個輸出(output)元件,輸入元件接於lpm_counter0的clock端,並更名為「clk」,作為電路的時鐘輸入;一個輸出元件接於LPM_ROM的q[]端,並更名為「q[7..0]」,作為8位波形數據輸出;一個輸出元件接於lpm_counter0的輸出q[7..0]端,並更名為「qc[7..0]」,作為另一個8位數據輸出埠,由於存儲器的地址是從「00000000」遞增到「11111111」不斷循環,因此這個數據埠輸出的是一種鋸齒波。參照波形發生器原理圖,完成設計電路的內部連接,然後以「mydds.bdf」為文件名保存在工程目錄中,並通過Quartus II的編譯。

2.3.3 仿真頂層設計文件

在Quartus II 13.0界面執行「Assignments」→「Settings」命令,在彈出的設置(Settings)窗口,單擊選中「EDA Tool Settings」項,對「Simulation」欄目下的仿真測試文件進行設置和新的測試文件mydds.vho的添加。

執行「Tools」→「Run EDA Simulation Tool」→「RTL Simulation」命令,開始對設計文件的寄存器傳輸級時序仿真,命令執行後,系統會自動打開ModelSim-Altera 10.1d主界面和波形窗口。為了便於觀察,將波形窗口中q、clk和qc信號保留,其餘信號刪除,然後右擊信號q,執行彈出的Object快捷菜單的「Properties…」命令,彈出波形屬性窗口。在屬性窗口將將q的數制基數設置為十六進位(hexadecimal),單擊波形屬性窗口上方的「Format」按鈕,進入波形格式頁面,在該頁面選中「Analog」(模擬)格式,並在「Max:」欄中填入「300」作為模擬波形顯示幅度的最大值,單擊「OK」按鈕,結束q信號的波形格式設置。用同樣的方法設置qc信號為十六進位的模擬波形輸出格式。

右擊信號clk,執行彈出的Object快捷→「clock…」命令,彈出「Define Clock」(定義時鐘)窗口,在窗口的Period(周期)欄目中將時鐘周期改寫為10000(默認單位為ps),由於目標晶片的傳輸延遲在10ns左右,因此時鐘周期小於10000ps時將無法看到設計電路時序仿真的輸出波形。窗口中其他欄目保持默認,單擊「OK」按鈕,結束clk信號的設置。

單擊波形窗口的「運行全程」按鈕,約數秒後單擊「停止」按鈕結束仿真,然後單擊「全程」按鈕,展開仿真波形,用「縮小」或「放大」按鈕調整波形窗口,得到便於觀察的正弦波和鋸齒波仿真波形,仿真波形上的微小「尖峰」是設計電路的競爭-冒險現象。

設計電路的仿真波形

2.3.4 圖形文件的轉換

為了使利用Quartus II宏功能模塊設計的電路能在其他軟體平臺運行和驗證,可將其轉換為硬體描述語言(HDL)文件。執行Quartus II主窗口的「File」→「Create/Update」→「Create HDL Design File for Current File」命令,彈出生成HDL文件對話框,選擇生成Verilog HDL或VHDL類型文件。HDL文件類型確定後,單擊「OK」按鈕,即可為當前的設計生成Verilog HDL或VHDL文件。

生成HDL文件對話框

相關焦點

  • 三相SPWM波形發生器的設計與仿真
    編者按:本文提出了一種採用VHDL硬體描述語言設計新型三相正弦脈寬調製(SPWM)波形發生器的方法。該方法以直接數字頻率合成技術(DDS)為核心產生三相SPWM信號。
  • FPGA quartus ii裡的靜態時序分析
    FPGA quartus ii裡的靜態時序分析 huan09900990 發表於 2020-11-25 11:39:35 在fpga工程中加入時序約束的目的: 1、給quartusii
  • 通過EDA設計工具了解FPGA的設計流程
    綜合後的網表有兩種: RTL級網表和門級網表(gate netlist),通過對網表的分析可以對設計的實現方式有初步的了解,並分析其中的錯誤和不合理的地方,另外還可以對關鍵路徑的delay和slack進行分析。
  • FPGA設計開發軟體Quartus II的使用技巧之: 創建工程設計文件
    可以使用原理圖設計文件的塊建立新設計文件,或在修改塊和符號時更新設計文件,也可以在原理圖設計文件的基礎上生成塊符號文件(.bsf)、AHDL包含文件(inc)和HDL文件。還可以在編譯之前分析原理圖設計文件是否出錯。BlockEditor還提供有助於在原理圖設計文件中連接塊和基本單元(包括總線和節點連接以及信號名稱映射)的一組工具。
  • 低功耗MCU RJM8L303的真隨機數發生器設計原理和使用方法
    抖動可以用許多方法來衡量和表徵,它是一個平均值為零的隨機變量。除了時鐘抖動以外,兩個獨立時鐘之間的相位漂移也具有隨機的特性。因而抖動信號和相位漂移適合於在數字電路中作為真隨機數發生器的噪聲源。圖1 時鐘抖動的定義圖1中用實線描繪的是嚴格的周期性信號的波形,每個沿的起始點在時間軸上間隔相等;虛線代表的就是實際的近似周期性信號,其周期有微小的變化。
  • 使用MATLAB和任意波形發生器創建高性能激勵測試系統
    儘管在工作檯上擺滿脈衝發生器、函數發生器、調製發生器和RF發生器也不失為一種方法,但使用任意波形發生器(AWG)直接合成生成信號提供了更高的靈活性、可重複性和測量精度。靈活性源自我們生成波形的方式,其直接來自AWG中的內存,因此管理簡便,可以滿足無窮無盡的各類應用和測試需求。AWG基於採樣的結構基本上與數字示波器的操作相反。
  • FPGA設計開發軟體Quartus II的使用技巧之: 編譯及仿真工程
    (1)首先把頂層模塊設置為Top-Level Entry,如圖5.15所示。(2)選擇「processing」菜單的「Start Compilation」選項進行編譯,如圖5.16所示。 在目標器件中測試設計的邏輯功能和最壞情況下的時序,或者採用Fast Timing模型進行時序仿真,在最快的器件速率等級上仿真儘可能快的時序條件。下面是利用Quartus II Simulator進行仿真的步驟。(1)設置頂層模塊。Quartus II軟體可以仿真整個設計,也可以仿真設計的一部分。
  • 波形發生器設計,單片機、CPLD控制的任意波形發生器設計實例
    波形發生器有多種類型,任意波形發生器便是其中一種。對於任意波形發生器,小編曾帶來相關介紹,如高速任意波形發生器的設計等。本文中,講為大家講解採用單片機和CPLD控制的任意波形發生器的設計。如果你對本文即將要講解的內容存在一定興趣,不妨繼續往下閱讀哦。
  • 超聲波焊接的電箱(發生器)設計
    超聲波發生器(電箱)則負責這樣的控制和調整(調諧)。 這次介紹的電箱設計結合了帶有浮點運算單元的32位CortexM4微控制器,允許使用現代信號處理方法實時計算超聲波三聯件的參數。尤其是對三聯件阻抗的計算,用於評估負載水平和識別焊接過程所處階段,例如材料的熔化階段。
  • 國儀量子推出任意波形發生器AWG4100
    合肥高新發布近日,我區企業國儀量子(合肥)技術有限公司為了更好地滿足客戶需求,任意波形發生器AWG4100設計有4個通道,每個通道可以獨立產生高達1.2 GSa/s採樣率、16位垂直解析度的單端波形輸出。每個通道還擁有最大512 MSa的存儲深度,同時提供獨立和組合播放兩種模式,能夠輕鬆應對各種不同場景的複雜波形需求。
  • FPGA設計開發軟體Quartus II的使用技巧之:Quartus II軟體基礎介紹
    (1)使用NewProjectWizard(「File」菜單)建立新工程並指定目標器件或器件系列。(2)使用TextEditor建立VerilogHDL、VHDL或Altera硬體描述語言(AHDL)設計。根據需要,使用BlockEditor建立表示其他設計文件的符號框圖,也可以建立原理圖。
  • modelsim仿真沒有波形或看不到波形的原因及解決方法
    Quatus ii聯合modelsim仿真無法產生波形或波形一直為Hiz狀態原因分析   最近用用modelsim仿真Quatus寫的testbench,遇到了波形無法產生的問題,一直卡在這裡很久都沒找到原因,經過一番分析和各種亂試,終於找到原因了。
  • AWG5200任意波形發生器的功能特點及性能分析
    打開APP AWG5200任意波形發生器的功能特點及性能分析 海洋興業科技 發表於 2021-01-11 09:27:25 AWG5200
  • 國儀量子推出任意波形發生器AWG4100 每個通道512 MSa的存儲深度
    在量子計算、量子精密測量、通信雷達、核磁共振光譜、半導體測試和納米技術等領域,任意波形發生器 (AWG)憑藉其出色的解析度和帶寬等性能有著非常普遍和廣泛的應用。
  • AFG-303x/AFG-302x任意波形發生器的特點及應用範圍
    打開APP AFG-303x/AFG-302x任意波形發生器的特點及應用範圍 海洋興業科技 發表於 2021-01-06 09:38:34
  • DG900函數/任意波形發生器的功能及產品特點分析
    打開APP DG900函數/任意波形發生器的功能及產品特點分析 佚名 發表於 2020-11-27 09:41:32 一、DG900系列函數/任意波形發生器產品描述 DG900系列函數/任意波形發生器是一款集函數發生器、任意波形 發生器、噪聲發生器、脈衝發生器、碼型發生器、諧波發生器、 模擬/數字調製器、頻率計等功能於一身的多功能信號發生器。
  • DG800系列函數/任意波形發生器的功能作用及特點分析
    打開APP DG800系列函數/任意波形發生器的功能作用及特點分析 佚名 發表於 2020-11-27 09:35:15 DG800系列函數/任意波形發生器產品簡介: DG800系列函數/任意波形發生器是一款集函數發生器、任意波形發生器、噪聲發生器、脈衝發生器、碼型發生器、諧波發生器、 模擬/數字調製器、頻率計等功能於一身的多功能信號發生器。
  • 對基於FPGA的高斯白噪聲發生器的研究與設計
    現有的硬體高斯白噪聲發生器通常分為物理噪聲發生器和數字噪聲發生器兩類,數字噪聲發生器雖然沒有物理噪聲發生器的精度高,但是實現電路較為簡單,易於應用。  FPGA技術的發展,提高了硬體噪聲發生器的速度和性能,相比基於軟體實現的噪聲發生器,展現出更大的優勢。
  • 高壓發生器的原理及分類
    電源電路主要起到將網電源與高壓發生器其他電路隔離、給其他電路供電的作用。高壓電路主要將交流低電壓(220V/380V)升壓至直流高電壓(150kV),從而給X射線管供電。燈絲電路主要將低電壓(220V/380V)降壓至超低電壓(12V),從而給燈絲供電,加熱燈絲產生自由電子。控制電路主要用於控制高壓發生器的輸出電壓、輸出燈絲電流和加載時間,同時與其他X射線設備影像鏈部件通訊,保證曝光的準確性。
  • 【從零開始走進FPGA】創造平臺——Quartus II 11.0 套件安裝指南
    自從Bingo 2009年開始接觸FPGA,Quartus II 版本的軟體從n年前的5.1版本到今天的最新發布的11.0,都使用過;當然對於軟體核心構架而言,萬變不離其宗。雖然多多少少有點bug,但這10多個版本發展到了現在,能看到Altera一直在努力,致力於更完美的用戶界面,更快的綜合速度的軟體開發。