As design complexities increase, use of vendor-specific intellectual property (IP) blocks has become a common design methodology. Altera provides parameterizable megafunctions that are optimized for Altera device architectures. Using megafunctions instead of coding your own logic saves valuable design time. The Altera-provided functions offer more efficient logic synthesis and device implementation. You can scale the size of the megafunction by setting various parameters.
上面一段文字摘自Altera文檔。
“Altera的Megafunction是重要的設計輸入資源。由於Megafunction是基於Altera底層硬體結構最合理的成熟應用模塊的表現,所以在代碼中盡量使用Megafunction這類IP資源,不但能將設計者從繁瑣的代碼編寫中解脫出來,更重要的是在大多數情況下 Megafunction的綜合和實現結果比用戶編寫的代碼更優。
Megafunction包括Altera的參數化模塊庫(LPM,library of parameterized modules),器件專有的Megafunction模塊,用Altera MegaCore IP生成工具調用的IP Core,以及Altera Megafunction計劃協作者(AMPP, Altera Megafunction Parterners Program)提供的第三方IP Core。
特別是針對一些與Altera器件底層結構相關的特性,必須通過Megafunction實現,例如一些存儲器模塊(DPRAM、SPRAM、FIFO、 CAM等),DSP模塊,LVDS驅動器,PLL,高速串列收發器(SERDERS),DDR輸入/輸出(DDIO)等。另外一些諸如乘法器、計數器、加法器、濾波器等電路雖然也可以直接用代碼描述,然後用通用邏輯資源實現,但是這種描述方法不但費時費力,在速度和面積上與Megafunction的實現結果仍然有較大的差距。”
上面一段文字是從《Altera FPGA/CPLD設計(高級篇)》里摘抄的。這段文字比較全面地概括了採用Altera Megafunction進行設計的優勢和Megafunction包含的IP類型。
一個好的IP Core要具備可靠、可重用、可配置、可測試的特性,詳細準確的說明文檔也是其重要組成部分。與這些優良特性相對應的往往就是高昂的授權費用——好貨不便宜。說到這裡,大家可能就知道我下面要說什麼了:Altera的Megafunction是好貨白送你。用好Altera的Megafunction只需要使用者認真閱讀文檔並執行必要的配置工作——花些時間、用點心思,就可以用上高質量的IP Core,何樂而不為呢?雖然只有Altera的LPM、部分器件專有的Megafunction模塊是免費的,但是採用這些免費的模塊也足夠滿足大多數設計的需要。畢竟,LPM庫只有25個模塊就號稱可以完成所有的設計。
7.1版的Quartus II軟體中包含了60個Altera提供的可配置宏單元,26個LPM模塊(包括由基本類型引申得來的常用形式)。分為Arithmetic、Gates、I\O、JTAG-accessible Extensions、Memory Compiler、Storage、Other Megafunctions七大類。
Magafunction的用法
一、通過MegaWizard Plug-in Manager設計嚮導得到用戶訂製Megafunction
調用Megafunction最簡單直觀的方法是使用MegaWizard Plug-in Manager設計嚮導。從Windows開始菜單中的Altera快捷方式目錄下或Quartus II菜單的Tools下都可以打開這一嚮導的GUI界面。
GUI界面的第一頁有三個選項:
選擇第一項后,GUI界面的第二頁是Megafunction基本配置信息輸入,可以指定Megafunction的類型和輸出文件路徑和類型、名稱。接下來就可以配置指定Megafunction的各項參數了。
配置完畢后,MegaWizard Plug-in Manager生成四類文件:
二、在HDL代碼中直接例化和配置
Altera的大部分Megafunction的源文件是用AHDL(Altera HDL)寫成的,文件的擴展名是.tdf。在Verilog或VHDL代碼中可以直接例化AHDL編寫的模塊和配置參數。
例化代碼分為兩部分:埠映射和參數映射。以下面一個lpm_counter為例(Verilog例化代碼,在VHDL中分別對應PORT MAP和GENERIC MAP):
埠映射部分:
lpm_counter lpm_counter_component (
.clock (clock),
.q (q),
.aclr (1'b0),
.aload (1'b0),
.aset (1'b0),
.cin (1'b1),
.clk_en (1'b1),
.cnt_en (1'b1),
.cout (),
.data ({8{1'b0}}),
.eq (),
.sclr (1'b0),
.sload (1'b0),
.sset (1'b0),
.updown (1'b1));
參數映射部分:
defparam
lpm_counter_component.lpm_direction = "UP",
lpm_counter_component.lpm_port_updown = "PORT_UNUSED",
lpm_counter_component.lpm_type = "LPM_COUNTER",
lpm_counter_component.lpm_width = 8;
在HDL代碼中直接例化Megafunction的好處有以下兩點:
從上面的代碼可以看出,Megafunction的埠和參數都是很複雜的,很難全憑記憶完整的列出;對於一些比較特殊的參數內容(比如string類型的參數),如果不熟悉的話,很容易寫錯甚至不知道該寫哪些內容。
解決這一問題的方法是,先採用MegaWizard Plug-in Manager生成用戶訂製Megafunction文件,然後參考該文件例化和配置Megafunction的方法,在自己的設計文件中直接例化Megafunction。
背景資料:
Altera Megafunctions, 部分Megafunction的文檔,MegaWizard Plug-Ins
[admin via 研發互助社區 ] Magafunction的用法已經有7311次圍觀
http://cocdig.com/docs/show-post-43135.html