版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
EDA技術(shù)實(shí)用教程第6章宏功能模塊與IP應(yīng)用
LPM是LibraryofParameterizedModules(參數(shù)可設(shè)置模塊庫(kù))的縮寫(xiě),Altera提供的可參數(shù)化宏功能模塊和LPM函數(shù)均基于Altera器件的結(jié)構(gòu)做了優(yōu)化設(shè)計(jì)。在許多實(shí)際情況中,必須利用宏功能模塊才可以使用一些Ahera特定器件的硬件功能。例如各類(lèi)片上存儲(chǔ)器、DSP(DigitalSignalProcessing)模塊、LVDS(Low-VoltageDifferential(差分)Signaling)驅(qū)動(dòng)器、嵌入式PLL(phase-lockedloop)以及SERDES[Serializer(串行化)/deserializer(并行化)]和DDIO電路模塊等,這些可以以圖形或硬件描述語(yǔ)言模塊形式方便調(diào)用的宏功能塊,使得基于EDA技術(shù)的電子設(shè)計(jì)的效率和可靠性有了很大的提高。設(shè)計(jì)者可以根據(jù)實(shí)際電路的設(shè)計(jì)需要,選擇LPM庫(kù)中的適當(dāng)模塊,并為其設(shè)定適當(dāng)?shù)膮?shù),就能滿(mǎn)足自己的設(shè)計(jì)需要,從而在自己的項(xiàng)目中十分方便地調(diào)用優(yōu)秀的電子工程技術(shù)人員的硬件設(shè)計(jì)成果。1/456.1宏功能模塊概述
KX康芯科技算術(shù)組件
累加器、加法器、乘法器和LPM算術(shù)函數(shù)
門(mén)電路多路復(fù)用器和LPM門(mén)函數(shù)I/O組件時(shí)鐘數(shù)據(jù)恢復(fù)(CDR)、鎖相環(huán)(PLL)、雙數(shù)據(jù)速率(DDR)、千兆位收發(fā)器塊(GXB)、LVDS接收器和發(fā)送器、PLL重新配置和遠(yuǎn)程更新宏功能模塊存儲(chǔ)器編譯器FIFOPartitioner、RAM和ROM宏功能模塊存儲(chǔ)組件存儲(chǔ)器、移位寄存器宏模塊和LPM存儲(chǔ)器函數(shù)
Altera提供多種方法來(lái)獲取Altera
MegafunctionPartners(伴侶)Program(AMPP)和MegaCore宏功能模塊,這些函數(shù)經(jīng)嚴(yán)格的測(cè)試和優(yōu)化,可以在Altera特定器件結(jié)構(gòu)中發(fā)揮出最佳性能。使用這些知識(shí)產(chǎn)權(quán)的參數(shù)化模塊減少設(shè)計(jì)和測(cè)試的時(shí)間。MegaCore和AMPP宏功能模塊包括應(yīng)用于通信、數(shù)字信號(hào)處理(DSP)、PCI和其他總線界面,以及存儲(chǔ)器控制器中的宏功能模塊。26.1宏功能模塊概述
KX康芯科技6.1.1知識(shí)產(chǎn)權(quán)核的應(yīng)用
AMPP程序
MegaCore函數(shù)
OpenCore評(píng)估功能
OpenCorePlus硬件評(píng)估功能
為了使用OpenCore和OpenCorePlus功能塊,可以在獲得使用許可和購(gòu)買(mǎi)之前免費(fèi)下載和評(píng)估AMPP和MegaCore函數(shù)。Altera提供以下程序、功能模塊和函數(shù),協(xié)助用戶(hù)在QuartusII和EDA設(shè)計(jì)輸入工具中使用IP函數(shù):
OpenCore宏功能模塊是通過(guò)OpenCore評(píng)估功能獲取的MegaCore函數(shù)。Altera
OpenCore功能允許在采購(gòu)之前評(píng)估AMPP和MegaCore函數(shù)。也可以使用OpenCore功能編譯、仿真設(shè)計(jì)并驗(yàn)證設(shè)計(jì)的功能和性能,但不支持下載文件的生成(只能仿真)。
OpenCorePlus評(píng)估功能通過(guò)支持免費(fèi)RTL仿真和硬件評(píng)估來(lái)增強(qiáng)OpenCore評(píng)估功能。RTL仿真支持用于在設(shè)計(jì)中仿真MegaCore函數(shù)的RTL模型。硬件評(píng)估支持用于為包括Altera
MegaCore函數(shù)的設(shè)計(jì)生成時(shí)限編程文件??梢栽跊Q定購(gòu)買(mǎi)MegaCore函數(shù)的許可之前使用這些文件,進(jìn)行板級(jí)設(shè)計(jì)驗(yàn)證。OpenCorePlus功能支持的MegaCore函數(shù)包括標(biāo)準(zhǔn)OpenCore版本和OpenCorePlus版本。OpenCorePlus許可用于生成時(shí)限編程文件,但不生成輸出網(wǎng)表文件(無(wú)法編程下載目標(biāo)芯片)。
AMPP程序可以支持第三方供應(yīng)商,以便建立QuartusII配用的宏功能模塊。AMPP合作伙伴提供了一系列為Altera器件實(shí)行優(yōu)化的現(xiàn)成宏功能模塊。AMPP函數(shù)的評(píng)估期由各供應(yīng)商決定??梢詮腁ltera網(wǎng)站/ipmegastore上的IPMegaStore下載和評(píng)估AMPP函數(shù)。
MegaCore函數(shù)是用于復(fù)雜系統(tǒng)級(jí)函數(shù)的預(yù)驗(yàn)證HDL設(shè)計(jì)文件,并且可以使用MegaWizardPlug-InManager進(jìn)行完全參數(shù)化設(shè)置。MegaCore函數(shù)由多個(gè)不同的設(shè)計(jì)文件組成,用于實(shí)施設(shè)計(jì)綜合后AHDL(Altera的HDL)包含文件和為使用EDA仿真工具進(jìn)行設(shè)計(jì)和調(diào)試而提供的VHDL或VerilogHDL功能仿真模型。36.1宏功能模塊概述
KX康芯科技6.1.2使用MegaWizardPlug-InManager
<輸出文件>.bsf
:BlockEditor中使用的宏功能模塊的符號(hào)(元件)。
<輸出文件>.cmp
:組件申明文件。
<輸出文件>.inc
:宏功能模塊包裝文件中模塊的AHDL包含文件。
<輸出文件>.tdf
:要在AHDL設(shè)計(jì)中實(shí)例化的宏功能模塊包裝文件。
<輸出文件>.vhd
:要在VHDL設(shè)計(jì)中實(shí)例化的宏功能模塊包裝文件。
<輸出文件>.v
:要在VerilogHDL設(shè)計(jì)中實(shí)例化的宏功能模塊包裝文件。
<輸出文件>_bb.v
:VerilogHDL設(shè)計(jì)所用宏功能模塊包裝文件中模塊的空體或
black-box申明,用于在使用EDA綜合工具時(shí)指定端口方向。
<輸出文件>_inst.tdf
:宏功能模塊包裝文件中子設(shè)計(jì)的AHDL例化示例。
<輸出文件>_inst.vhd
:宏功能模塊包裝文件中實(shí)體的VHDL例化示例。
<輸出文件>_inst.v
:
宏功能模塊包裝文件中模塊的VerilogHDL例化示例。
MegaWizardPlug-InManager(宏向?qū)Р寮芾砥鳎┛梢詭椭脩?hù)建立或修改包含自定義宏功能模塊變量的設(shè)計(jì)文件,然后可以在頂層設(shè)計(jì)文件中對(duì)這些文件進(jìn)行例化。這些自定義宏功能模塊變量是基于Altera提供的宏功能模塊,包括LPM(參數(shù)模塊庫(kù))、MegaCore和AMPP(宏編程伴侶)函數(shù)。MegaWizardPlug-InManager運(yùn)行一個(gè)向?qū)?,幫助用?hù)輕松地為自定義宏功能模塊變量指定選項(xiàng)。該向?qū)в糜跒閰?shù)和可選端口設(shè)置數(shù)值。也可以從Tools菜單或從原理圖設(shè)計(jì)文件中打開(kāi)MegaWizardPlug-InManager,還可以將它作為獨(dú)立實(shí)用程序來(lái)運(yùn)行。以下列出了MegaWizardPlug-InManager為用戶(hù)生成的每個(gè)自定義宏功能模塊變量而生成的文件。46.1宏功能模塊概述
KX康芯科技6.1.3在QuartusII中對(duì)宏功能模塊進(jìn)行例化
1、在VerilogHDL和VHDL中例化
2、使用端口和參數(shù)定義
3、使用端口和參數(shù)定義生成宏功能模塊
計(jì)數(shù)器乘-累加器和乘-加法器加法/減法器RAM乘法器移位寄存器
對(duì)宏功能模塊例化的途徑有多種,如可以在BlockEditor(原理圖)中直接例化;在HDL代碼中例化(通過(guò)端口和參數(shù)定義例化,或使用MegaWizardPlug-InManager對(duì)宏功能模塊進(jìn)行參數(shù)化并建立包裝文件);也可以通過(guò)界面,在QuartusII中對(duì)Altera宏功能模塊和LPM函數(shù)進(jìn)行例化。
Altera推薦使用MegaWizardPlug-InManager對(duì)宏功能模塊進(jìn)行例化以及建立自定義宏功能模塊變量。此向?qū)⑻峁┮粋€(gè)供自定義和參數(shù)化宏功能模塊使用的圖形界面,并確保正確設(shè)置所有宏功能模塊的參數(shù)??梢允褂肕egaWizardPlug-InManager建立宏功能模塊或自定義宏功能模塊變量。再利用MegaWizardPlug-InManager建立包含宏功能模塊實(shí)例的VerilogHDL或VHDL包裝文件,然后,可以在設(shè)計(jì)中使用此文件。對(duì)于VHDL宏功能模塊,MegaWizardPlug-InManager還建立組件申明文件。可以采用或調(diào)用任何其他模塊或組件相類(lèi)似方法調(diào)用函數(shù),直接在VerilogHDL或VHDL設(shè)計(jì)中對(duì)宏功能模塊進(jìn)行例化。在VHDL中,還需要使用組件申明。
QuartusIIAnalysis&Synthesis可以自動(dòng)識(shí)別某些類(lèi)型的HDL代碼和生成相應(yīng)的宏功能模塊。由于Altera宏功能模塊已對(duì)Altera器件實(shí)行優(yōu)化,并且性能要好于標(biāo)準(zhǔn)的HDL代碼;因此QuartusII可以使用生成方法。對(duì)于一些體系結(jié)構(gòu)特定的功能;例如RAM和DSP模塊,必須使用Altera宏功能模塊。QuartusII在綜合期間將以下邏輯映射到宏功能模塊:56.2.1LPM_COUNTER計(jì)數(shù)器模塊文本文件的調(diào)用
QuartusII中含有大量的功能強(qiáng)大的LPM模塊。本節(jié)通過(guò)介紹一個(gè)LPM計(jì)數(shù)器LPMCOUNTER的調(diào)用方法、流程的測(cè)試,給出MegaWizardPlug-InManager管理器對(duì)同類(lèi)宏模塊的一般使用方法。主要介紹調(diào)用方法上的不同之處和不同特性的仿真測(cè)試方法。6.2LPM計(jì)數(shù)器模塊使用方法
(1)打開(kāi)宏功能塊調(diào)用管理器。首先建立一個(gè)文件夾,例如d:\PM_MD。選擇Tools->MegaWizardPlug-InManager命令,打開(kāi)如圖6-1所示的對(duì)話(huà)框,選中Createanewcustommegafuncfionvariation單選按鈕,定制一個(gè)新的模塊。如果要修改已編輯好的LPM模塊,則選中Editanexistingcustommegafunctionvariation單選按鈕。如果要拷貝已編輯好的LPM模塊,選copy…。圖6-1定制新的宏功能塊
66.2.1LPM_COUNTER計(jì)數(shù)器模塊文本文件的調(diào)用
6.2LPM計(jì)數(shù)器模塊使用方法
單擊圖6-1的Next按鈕后,打開(kāi)如圖6-2所示的對(duì)話(huà)框。左欄中有各類(lèi)功能的LPM模塊選項(xiàng)目錄。單擊算術(shù)項(xiàng)Arithmetic,展示LPM算術(shù)模塊選項(xiàng)。選擇計(jì)數(shù)器LPM_COUNTER。再于右上選擇CycloneIII器件系列和VHDL語(yǔ)言方式。最后鍵入文件存放的路徑和文件名:d:\LPM_MD\CNT4B,單擊Next按鈕。圖6-2LPM宏功能塊設(shè)定最后生成的CNT4B.vhd文件是對(duì)參數(shù)可設(shè)置宏模塊庫(kù)中的LPM_COUNTER例化調(diào)用的頂層文件。并將CNT4B.vhd放在當(dāng)前工作庫(kù)D:\PM_CNT中。76.2.1LPM_COUNTER計(jì)數(shù)器模塊文本文件的調(diào)用
6.2LPM計(jì)數(shù)器模塊使用方法
(2)在圖6-2單擊Next按鈕后打開(kāi)如圖6-3所示的對(duì)話(huà)框。在對(duì)話(huà)框中選擇4位計(jì)數(shù)器,選擇“Createanupdowninput…”,使計(jì)數(shù)器有加減控制功能。最后單擊Next按鈕。圖6-3設(shè)4位可加減計(jì)數(shù)器86.2.1LPM_COUNTER計(jì)數(shù)器模塊文本文件的調(diào)用
6.2LPM計(jì)數(shù)器模塊使用方法
(3)在圖6-3單擊Next按鈕,打開(kāi)如圖6-4所示的對(duì)話(huà)框。在此若選擇Plainbinary則表示是普通二進(jìn)制計(jì)數(shù)器;現(xiàn)在選擇Modulus…12,即模12計(jì)數(shù)器,從0計(jì)到11。然后選擇時(shí)鐘使能控制ClockEnable和進(jìn)位輸出Carry-out。圖6-4設(shè)定模12計(jì)數(shù)器,含時(shí)鐘使能和進(jìn)位輸出96.2.1LPM_COUNTER計(jì)數(shù)器模塊文本文件的調(diào)用
6.2LPM計(jì)數(shù)器模塊使用方法
(4)在圖6-4單擊Next按鈕,打開(kāi)如圖6-5所示的對(duì)話(huà)框。在此選擇4位數(shù)據(jù)同步加載控制Load和異步清零控制Clear。
最后按Next按鈕后就結(jié)束設(shè)置。以上設(shè)置生成了LMP計(jì)數(shù)器模塊的VHDL文件CNT4B.vhd;CNT4B.vhd可被高一層次的VHDL程序作為計(jì)數(shù)器元件調(diào)用。圖6-5加入4位并行數(shù)據(jù)預(yù)置功能
106.2.1LPM_COUNTER計(jì)數(shù)器模塊文本文件的調(diào)用【例6-1】QuartusII生成的計(jì)數(shù)器文件CNT4B.vhd。
LIBRARYieee;USEieee.std_logic_1164.all;LIBRARYlpm;--打開(kāi)LPM庫(kù)
USElpm.all;--打開(kāi)LPM程序包
ENTITYCNT4BIS--異步清零、時(shí)鐘使能、時(shí)鐘輸入、同步預(yù)置數(shù)加載控制、加減控制
PORT(aclr,clk_en,clock,sload,updown:INSTD_LOGIC;data:INSTD_LOGIC_VECTOR(3DOWNTO0);--4位預(yù)置數(shù)
cout:OUTSTD_LOGIC;--進(jìn)位輸出
q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));--計(jì)數(shù)器輸出
ENDCNT4B;ARCHITECTURESYNOFcnt4bISSIGNALsub_wire0:STD_LOGIC;--進(jìn)位結(jié)點(diǎn)
SIGNALsub_wire1:STD_LOGIC_VECTOR(3DOWNTO0);--計(jì)數(shù)器結(jié)點(diǎn)
COMPONENTlpm_counter--以下是參數(shù)傳遞說(shuō)明語(yǔ)句
GENERIC(lpm_direction,lpm_port_updown,lpm_type:STRING;--定義字符串類(lèi)型
lpm_modulus,lpm_width:NATURAL);--定義正整數(shù)類(lèi)型生成的VHDL文件CNT4B.vhd(例6-1)只是調(diào)用了更底層(LPM程序包)的計(jì)數(shù)器元件模塊文件。從文件可以看出更核心的計(jì)數(shù)器設(shè)計(jì)模塊是LPM庫(kù)中LPM程序包的lpm_counter。它是一個(gè)可以設(shè)定參數(shù)的封閉的模塊,用戶(hù)看不到內(nèi)部設(shè)計(jì),只能通過(guò)參數(shù)傳遞說(shuō)明語(yǔ)句將用戶(hù)設(shè)定的參數(shù)通過(guò)文件CNT4B.vhd傳遞進(jìn)lpm_counter中。而CNT4B.vhd本身又可以作為一個(gè)底層元件被上層設(shè)計(jì)調(diào)用或例化。對(duì)于參數(shù)傳遞語(yǔ)句的語(yǔ)法內(nèi)容可參閱第9.1節(jié)。116.2.1LPM_COUNTER計(jì)數(shù)器模塊文本文件的調(diào)用【例6-1】QuartusII生成的計(jì)數(shù)器文件CNT4B.vhd。
接上頁(yè)
PORT(sload,clk_en,aclr,clock,updown:INSTD_LOGIC;
cout:OUTSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(3DOWNTO0);data:INSTD_LOGIC_VECTOR(3DOWNTO0));ENDCOMPONENT;BEGIN
cout<=sub_wire0;q<=sub_wire1(3DOWNTO0);
lpm_counter_component:lpm_counterGENERICMAP(--參數(shù)傳遞例化語(yǔ)句
lpm_direction=>"UNUSED",--單方向計(jì)數(shù)參數(shù)未用
lpm_modulus=>12,--定義模12計(jì)數(shù)器
lpm_port_updown=>"PORT_USED",--使用加減計(jì)數(shù)
lpm_type=>"LPM_COUNTER",--計(jì)數(shù)器類(lèi)型
lpm_width=>4)--計(jì)數(shù)位寬
PORTMAP(sload=>sload,clk_en=>clk_en,aclr=>aclr,clock=>clock,data=>data,updown=>updown,cout=>sub_wire0,q=>sub_wire1);ENDSYN;例6-1中,lpm_counter是LPM庫(kù)中調(diào)用的宏模塊元件名。lpm_Counter_component是調(diào)用lpm_counter的宏模塊元件例化名;其中的lpm_direction等稱(chēng)為宏模塊參數(shù)名,是被調(diào)用的元件(lpm_counter)文件中己定義的參數(shù)名,而UNUSED等是參數(shù)值,它們可以是整數(shù)、操作表達(dá)式、字符串或在當(dāng)前模塊中已定義的參數(shù)。使用時(shí)注意GENERIC語(yǔ)句只能將參數(shù)傳遞到比當(dāng)前層次僅低一層的元件文件中。12
【例6-2】設(shè)計(jì)例化CNT4B.vhd的頂層程序CNT4BIT.vhdLIBRARYieee;USEieee.std_logic_1164.all;LIBRARYlpm;--打開(kāi)LPM庫(kù)
USElpm.all;--打開(kāi)LPM程序包
ENTITYCNT4BITIS--異步清零、時(shí)鐘使能、時(shí)鐘輸入、同步預(yù)置數(shù)加載控制、加減控制
PORT(CLK,RST,ENA,SLD,UD:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(3DOWNTO0);--4位預(yù)置數(shù)
COUT:OUTSTD_LOGIC;--進(jìn)位輸出
DOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0));--計(jì)數(shù)器輸出
ENDENTITYCNT4BIT;ARCHITECTUREtranslatedOFCNT4BITISCOMPONENTCNT4B
PORT(aclr,clk_en,clock,sload,updown:INSTD_LOGIC;data:INSTD_LOGIC_VECTOR(3DOWNTO0);
cout:OUTSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDCOMPONENT;BEGINU1:CNT4BPORTMAP(sload=>SLD,clk_en=>ENA,aclr=>RST,cout=>COUT,clock=>CLK,data=>DIN,updown=>UD,q=>DOUT);ENDARCHITECTUREtranslated;
為了能調(diào)用計(jì)數(shù)器文件CNT4B.vhd,并測(cè)試和硬件實(shí)現(xiàn)它,必須設(shè)計(jì)例6-2程序CNT4BIT.vhd來(lái)申明、例化調(diào)用CNT4B.vhd
。136.2.2創(chuàng)建工程與仿真測(cè)試6.2LPM計(jì)數(shù)器模塊使用方法
按照第4章介紹的流程將例6-2設(shè)定為頂層工程文什,并對(duì)其仿真。圖6-6是其仿真波形,注意第2個(gè)SLD加載信號(hào)在沒(méi)有CLK上升沿處發(fā)生時(shí),無(wú)法進(jìn)行加載,顯然它是同步的。從波形中可以了解此計(jì)數(shù)器模塊的功能和性能。圖6-6例6-2的CNT4BIT仿真波形為例6-2的CNT4BIT創(chuàng)建工程146.2.2創(chuàng)建工程與仿真測(cè)試6.2LPM計(jì)數(shù)器模塊使用方法
按照第4章介紹的方法,首先建立一個(gè)空的原理圖頂層文件,并將其創(chuàng)建為工程文件。然后在原理圖編輯窗中打開(kāi)如圖4-41的窗口,選擇此窗口左下的MegaWizardPlug-InManager按鈕,按照本章以上的流程即能編輯生成一個(gè)計(jì)數(shù)器原理圖元件文件CNT4B.bsf;.bsf是BlockSchematicFile的意思。將此元件調(diào)入原理圖編輯窗就能編輯如圖6-7所示的計(jì)數(shù)器電路。仿真結(jié)果應(yīng)該與圖6-6相同。圖6-7原理圖輸入設(shè)計(jì)15圖6-88位乘法累加器頂層設(shè)計(jì)6.3基于LPM的流水線乘法累加器設(shè)計(jì)KX康芯科技乘法累加器常在全硬件的數(shù)字信號(hào)處理的不同算法中用到。本節(jié)通過(guò)一個(gè)8位流水線乘法累加器的實(shí)例介紹以頂層原理圖為工程,VHDL文本描述和宏功能塊為原理圖元件的輸入和(混合)設(shè)計(jì)方法。圖6-8是最終的原理圖頂層設(shè)計(jì)。包含三種LPM模塊,即寄存器LPM模塊、流水線加法器LPM模塊和流水線乘法器LPM模塊。以下分刖介紹這些模塊的調(diào)用。166.3.1LPM加法器模塊設(shè)置調(diào)用6.3基于LPM的流水線乘法累加器設(shè)計(jì)圖6-9從原理圖編輯窗進(jìn)入MegaWizardPlug-InManager管理器首先打開(kāi)一個(gè)原理圖編輯窗,存盤(pán)取名為MULTADD,然后將它創(chuàng)建成工程。再次進(jìn)入本工程的原理圖輸入對(duì)話(huà)框后,單擊左下的MegaWizardP1ug-InManager管理器按鈕,根據(jù)上節(jié)介紹的流程進(jìn)入圖6-9所示的LPM模塊編輯調(diào)用窗。17圖6-10選擇16位加法工作方式
6.3.1LPM加法器模塊設(shè)置調(diào)用6.3基于LPM的流水線乘法累加器設(shè)計(jì)在進(jìn)入圖6-2所示的窗口下,選擇LPM_ADD_SUB加減法器模塊,再選擇CycloneIII和VHDL;文件名可取為ADD16B。進(jìn)入以后的對(duì)話(huà)框后分別選擇16位加法器工作模式(圖6-10),選擇有加法進(jìn)位輸出;選擇有符號(hào)加法方式(圖6-11);選擇2級(jí)流水線工作方式(圖6-12);這時(shí)模塊出現(xiàn)一條時(shí)鐘輸入線,即變成了有時(shí)序電路的模塊。最后按Finish按鈕即可將此加法器調(diào)入原理圖編輯窗。186.3.2LPM乘法器模塊設(shè)置調(diào)用6.3基于LPM的流水線乘法累加器設(shè)計(jì)流程同上。在進(jìn)入圖6-2所示的窗口下,選擇LPM_MULT乘法器模塊,文件名可取為MULT8B。在圖6-13的對(duì)話(huà)框,選擇有符號(hào)乘法工作方式;選擇嵌入式專(zhuān)用硬件乘法器模塊,即選擇“Usededicatedmultiplie...”;調(diào)用專(zhuān)用乘法器,工作速度高,且不耗費(fèi)邏輯宏單元。
進(jìn)入圖6-14所示對(duì)話(huà)框后,選擇2級(jí)流水線工作方式(實(shí)際只一級(jí))。最后將完成設(shè)置的乘法器模塊加入圖6-8所示的原理圖中。19圖6-88位乘法累加器頂層設(shè)計(jì)8位LPM寄存器模塊FF8B設(shè)置6.3.2LPM乘法器模塊設(shè)置調(diào)用6.3基于LPM的流水線乘法累加器設(shè)計(jì)在圖6-2所示的窗中,于左欄中選擇Storage中的LPM_FF即可調(diào)入寄存器模塊:FF8B。最后根據(jù)圖6-8,連接好電路圖,準(zhǔn)備全程編譯和仿真測(cè)試。206.3.3乘法累加器的仿真測(cè)試6.3基于LPM的流水線乘法累加器設(shè)計(jì)以上工程MULTADD的仿真波彤如圖6-15所示。由波形可見(jiàn),在CLK的第4個(gè)上升沿后才得到第一個(gè)計(jì)算數(shù)據(jù),之前都是0,這就是流水線計(jì)算結(jié)構(gòu)的結(jié)果。
第4個(gè)上升沿后得到結(jié)果為S=0×0+23×15=345,而第5個(gè)上升沿后得到結(jié)果為S=23×15+11×22=587,第6個(gè)上升沿后得到結(jié)果為S=11×22+33×45=1727。圖6-15電路圖6-8的MULTADD工程仿真波形00T0T1T2T3T4分析:T0——準(zhǔn)備好前一組數(shù)據(jù)。
T1——觸發(fā)前一組數(shù)據(jù)鎖存,準(zhǔn)備好當(dāng)前數(shù)據(jù)。
T2——觸發(fā)前一組數(shù)據(jù)和當(dāng)前數(shù)據(jù)分別相乘。
T3——緩沖
T4——觸發(fā)前一組數(shù)據(jù)積和當(dāng)前數(shù)據(jù)積相加。(從觸發(fā)相乘T2到觸發(fā)相加T4經(jīng)過(guò)2個(gè)時(shí)鐘)216.3.3乘法累加器的仿真測(cè)試6.3基于LPM的流水線乘法累加器設(shè)計(jì)圖6-16是對(duì)于圖6-13在進(jìn)行不同選項(xiàng)后,編譯給出資源使用情況。在圖6-13的窗口選擇Uselogicelements,生成圖6-16右側(cè)的數(shù)據(jù),表明乘法器全部使用邏輯宏單元LE,共占用238個(gè)LE。若選擇圖6-13其余兩項(xiàng)中的任一項(xiàng)都將得到圖6-16左側(cè)的數(shù)據(jù)報(bào)告,數(shù)據(jù)表明,使用了2個(gè)嵌入式乘法器,而LE只耗用了50個(gè)。圖6-16對(duì)乘法器的構(gòu)建模式選擇不同設(shè)置后的編譯報(bào)告圖6-13選擇專(zhuān)用乘法器模塊構(gòu)建乘法器
226.3.3乘法累加器的仿真測(cè)試6.3基于LPM的流水線乘法累加器設(shè)計(jì)其實(shí),本設(shè)計(jì)項(xiàng)目可以直接用LPM庫(kù)的乘法累加器模塊ALTMULT_ADD實(shí)現(xiàn),其參數(shù)設(shè)置窗如圖6-17所示。圖6-17ALTMULT_ADD模塊設(shè)置對(duì)話(huà)框
23
【例6-3】?jī)蓚€(gè)8位乘8位的有符號(hào)數(shù)乘法器VHDL描述。
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_SIGNED.ALL;ENTITYMULT8ISPORT(A1,B1,A2,B2:INSIGNED(7DOWNTO0);--定義有符號(hào)位矢
R1,R2:OUTSIGNED(15DOWNTO0));END;ARCHITECTUREbhvOFMULT8ISBEGINR1<=A1*B1;R2<=A2*B2;ENDbhv;6.3基于LPM的流水線乘法累加器設(shè)計(jì)KX康芯科技6.3.4乘法器的VHDL文本表述和相關(guān)屬性設(shè)置本節(jié)探討文本表述的乘法器。例6-3是兩個(gè)8位乘8位的有符號(hào)數(shù)乘法器VHDL描述。如果僅按照普通的方法進(jìn)行綜合,綜合出的乘法器一定會(huì)占用大量的邏輯資源,而且運(yùn)行速度不見(jiàn)得快。24圖6-18a例6-3的編譯報(bào)告圖6-18設(shè)置乘法器用DSP模塊構(gòu)建6.3.4乘法器的VHDL文本表述和相關(guān)屬性設(shè)置6.3基于LPM的流水線乘法累加器設(shè)計(jì)在FPGA開(kāi)發(fā)中,最常用的方法是直接調(diào)用FPGA內(nèi)部已嵌入的硬件乘法器(DSP模塊);可以通過(guò)QuartusII來(lái)設(shè)置使用DSP模塊。方法是先進(jìn)入圖4-6的Settings窗,在左欄選擇Analysis&SynthesisSettings項(xiàng),在其右邊對(duì)話(huà)框中按Moreettings按鈕,在彈出的對(duì)話(huà)框(圖6-18)中對(duì)DSPBlockBalancing項(xiàng)選擇DSPblocks,即用DSP乘法器模塊構(gòu)建。
例6-3全程編譯后的報(bào)告如圖6-18a所示。其中用了兩個(gè)9位DSP模塊,0個(gè)邏輯宏單元。此項(xiàng)設(shè)計(jì)高速,且節(jié)省邏輯資源。25
【例6-4】?jī)蓚€(gè)8位乘8位的有符號(hào)數(shù)乘法器VHDL描述(帶DSP模塊屬性設(shè)置)。
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_SIGNED.ALL;ENTITYMULT8ISPORT(A1,B1,A2,B2:INSIGNED(7DOWNTO0);--定義有符號(hào)位矢
R1,R2:OUTSIGNED(15DOWNTO0));END;ARCHITECTUREbhvOFMULT8ISattributemultstyle:string;attributemultstyleofR1,R2:signalis“DSP”;BEGINR1<=A1*B1;R2<=A2*B2;
ENDbhv;圖6-19例6-4的編譯報(bào)告6.3基于LPM的流水線乘法累加器設(shè)計(jì)6.3.4乘法器的VHDL文本表述和相關(guān)屬性設(shè)置如果不用上述設(shè)置,例6-4利用定義DSP模塊屬性的方法調(diào)用DSP模塊。例6-4(定義DSP模塊屬性)編譯報(bào)告入圖6-19所示。其中用了2個(gè)9位DSP模塊,0個(gè)邏輯宏單元。261.建立.mif格式文件(多種方法)
(1)直接編輯法6.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用6.4.1存儲(chǔ)器初始化文件生成圖6-20MIF文件編輯窗在涉及RAM和ROM等存儲(chǔ)器應(yīng)用的EDA設(shè)計(jì)開(kāi)發(fā)中,調(diào)用LPM模塊類(lèi)存儲(chǔ)器是最方便、最經(jīng)濟(jì)、最高效和性能最容易滿(mǎn)足設(shè)計(jì)要求的途徑。本節(jié)介紹利用QuartusII調(diào)用LPMRAM的方法和相關(guān)技術(shù),包括仿真測(cè)試、初始化配置文件生成、例化程序表述、屬性應(yīng)用以及存儲(chǔ)器的純VHDL語(yǔ)言描述等。存儲(chǔ)器的初始化文件是可調(diào)出存于RAM或ROM中的數(shù)據(jù)或程序代碼文件。通過(guò)EDA工具設(shè)計(jì)(或設(shè)定的存儲(chǔ)器中代碼)的文件,由EDA軟件在統(tǒng)一編譯時(shí)自動(dòng)調(diào)入;此類(lèi)初始化代碼文件格式必須滿(mǎn)足一定的要求。
QuartusII能接受兩種格式初始化文件:MemoryInitializationFile(.mif)格式和Hexadecimal(Intel-Format)File(.hex)格式。
(1)直接編輯法。首先在QuartusII中打開(kāi)MIF文件編輯窗,即選擇File->New命令,在New窗中選擇MemoryFile欄的MemoryInitializationFile項(xiàng),單擊OK按鈕后,打開(kāi)MIF數(shù)據(jù)文件大小選擇窗口;在此根據(jù)存儲(chǔ)器地址和數(shù)據(jù)寬度選擇參數(shù)(如地址線為7位,選單元數(shù)Number為128;數(shù)據(jù)寬為8位,選擇Wordsize為8位);按OK鈕,將出現(xiàn)如圖6-20所示的.mif數(shù)據(jù)表格;表格中的數(shù)據(jù)格式可通過(guò)右擊窗口邊緣的地址數(shù)據(jù)所彈出的窗口中選擇。此表中任一數(shù)據(jù)對(duì)應(yīng)的地址為左列與頂行數(shù)之和。填完后,選擇File->SaveAs命令,保存此數(shù)據(jù)文件,取名為data7X8.mif保存。單元地址=18+1data7x8.mif27(2)文件編輯法
【例6-5】使用QuartusII以外的編輯器設(shè)計(jì)MIF文件。
DEPTH=128;;數(shù)據(jù)深度,即存儲(chǔ)的數(shù)據(jù)個(gè)數(shù)
WIDTH=8;;輸出數(shù)據(jù)寬度
ADDRESS_RADIX=HEX;;地址數(shù)據(jù)類(lèi)型,HEX表示選擇十六進(jìn)制數(shù)據(jù)類(lèi)型
DATA_RADIX=HEX;;存儲(chǔ)數(shù)據(jù)類(lèi)型,HEX表示選擇十六進(jìn)制數(shù)據(jù)類(lèi)型
CONTENT;此為關(guān)鍵詞
BEGIN;此為關(guān)鍵詞
0000:0080;0001:0086;0002:008C;……(數(shù)據(jù)略去)007E:0073;007F:0079;END;6.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用6.4.1存儲(chǔ)器初始化文件生成
(2)文件編輯法。即使用QuartusII以外的編輯器設(shè)計(jì)MIF文件,其格式如例6-5所示。其中地址和數(shù)據(jù)都為十六進(jìn)制,冒號(hào)左邊是地址值,右邊是對(duì)應(yīng)的數(shù)據(jù);并以分號(hào)結(jié)尾。存盤(pán)以mif為后綴,如取名為:data7X8.mif。286.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用KX康芯科技6.4.1存儲(chǔ)器初始化文件生成(3)C語(yǔ)言等軟件生成
(打開(kāi)目錄)【例6-6】用C語(yǔ)言程序生成正弦波波點(diǎn)數(shù)據(jù)值
#include<stdio.h>#include"math.h"main(){inti;floats;
for(i=0;i<1024;i++){s=sin(atan(1)*8*i/1024);
//atan(1)*8=(π/4)*8=2π,sin(2π*i/1024)
printf(“%d:%d;\n”,i,(int)((s+1)*1023/2));//當(dāng)s=-1~1,波點(diǎn)值=0~1023}}
(用工具軟件“正弦表.exe”產(chǎn)生波點(diǎn)數(shù)據(jù))
.mif格式文件波點(diǎn)可用C語(yǔ)言程序生成;如例6-6是產(chǎn)生正弦波數(shù)據(jù)值的程序。把例6-6程序編譯后,在DOS命令行下執(zhí)行命令:
romgen>sin_rom.Mif;
將生成sin_rom.mif文件,再加上.mif文件的頭部說(shuō)明即可。假設(shè)romgen是編譯后的程序名。此外,也可以用MATLAB和DSPBuilder生成此文件。
WIDTH=8;DEPTH=64;ADDRESS_RADIX=HEX;
DATA_RADIX=HEX;CONTENTBEGIN296.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用KX康芯科技6.4.1存儲(chǔ)器初始化文件生成(4)專(zhuān)用MIF文件生成器圖6-21利用康芯MIF生成器生成MIF正弦波數(shù)據(jù)文件
(4)專(zhuān)用MIF文件生成器。參考附錄1.4的MIIF文件生成器的用法,可生成不同波形、不同數(shù)據(jù)格式、不同符號(hào)(有無(wú)符號(hào))、或不同相位的MIF文件。例如某ROM的數(shù)據(jù)線寬為8位,地址線寬為7位,即可以放置128個(gè)8位數(shù)據(jù)?;蛘哒f(shuō),如果需要將一個(gè)周期分為128個(gè)點(diǎn),每個(gè)點(diǎn)精度為8位二進(jìn)制數(shù)的,初始相位為0度的正弦信號(hào)波數(shù)據(jù),放在ROM或RAM中,則此初始化文什應(yīng)該如圖6-21的設(shè)置。
以文件data7XS.mif存盤(pán)。用記事本打開(kāi)此文件將如圖6-22所示。圖6-22打開(kāi)MIF文件306.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用KX康芯科技6.4.1存儲(chǔ)器初始化文件生成2.建立.hex格式文件
第一種方法與以上介紹的方法相同,只是在New窗口中選擇Otherfiles項(xiàng)后,選擇Hexadecimal(Intel-Format)File項(xiàng),選ROM的數(shù)據(jù)數(shù)Number為64,數(shù)據(jù)寬Wordsize取8位;輸入數(shù)據(jù);最后存盤(pán).hex格式文件。
31KX康芯科技2.建立.hex格式文件
第二種方法是用普通8051單片機(jī)KEIL編譯器來(lái)產(chǎn)生。方法是利用匯編程序編輯器將此64個(gè)數(shù)據(jù)編輯于如圖7-3所示的編輯窗口中,然后用單片機(jī)ASM編譯器產(chǎn)生.hex格式文件。在此不妨取名為sdata.asm,編譯后得到sdata.hex文件。
圖6-23用匯編器生成HEX文件326.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用6.4.2LPM_RAM的設(shè)置和調(diào)用首先仍打開(kāi)一個(gè)原理圖編輯窗,存盤(pán)取名為RAMMD,將它創(chuàng)建成工程。進(jìn)入本工程的原理圖輸入對(duì)話(huà)框,單擊左下的MegaWizardPlug-InManager管理器按鈕,進(jìn)入圖6-24所示的LPM模塊編輯淵用窗。在這里的左欄選擇MemoryCompiler項(xiàng)下的單口RAM模塊,即RAM:1-PORT。文件取名為RAM1P,存在DALPMMD中。圖6-24調(diào)用單口LPMRAM
336.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用6.4.2LPM_RAM的設(shè)置和調(diào)用單擊Next按鈕后打開(kāi)如圖6-25所示的對(duì)話(huà)框。選擇好數(shù)據(jù)位8,數(shù)據(jù)深度128,即7位地址線。對(duì)應(yīng)CycloneIII,存儲(chǔ)器構(gòu)建方式選擇M9K,以及選擇雙時(shí)鐘方式。圖6-25設(shè)定RAM參數(shù)346.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用6.4.2LPM_RAM的設(shè)置和調(diào)用
在圖6-25下單擊Next按鈕后,打開(kāi)如圖6-26所示的對(duì)話(huà)框。在這里消去選項(xiàng)“qoutputport”的勾,即選擇時(shí)鐘只控制鎖存輸入信號(hào)。
在圖6-26下單擊Next按鈕后,打開(kāi)如圖6-27所示的對(duì)話(huà)框。這里的選項(xiàng)有三個(gè):OldData、NewData和Don'tCare。即當(dāng)允許同時(shí)讀寫(xiě)時(shí),是讀出新寫(xiě)入的數(shù)據(jù)(NewData)還是寫(xiě)入前的數(shù)據(jù)(OldData),還是無(wú)所謂(Don'tCare),這里選擇OldData。圖6-26設(shè)定RAM僅輸入時(shí)鐘控制
圖6-27設(shè)定在寫(xiě)入同時(shí)讀出原數(shù)據(jù)356.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用6.4.2LPM_RAM的設(shè)置和調(diào)用
在圖6-27下單擊Next按鈕后,打開(kāi)如圖6-28所示的對(duì)話(huà)框。在圖6-28中的Doyouwanttospecifytheinitialcontentofthememory欄中選中“Yes,usethisfileforthememorycontentdate”,并單擊Browse按鈕,選擇指定路徑上的初始化文件DATA7X8.mif(每次上電自動(dòng)載MIF文件)。在下面選中“AllowIn-SystemMemory…”復(fù)選框,并在TheInstanceIDofthisRAMis文本框中輸入MYRM(作ID名,用于區(qū)分多個(gè)嵌入的LPM_RAM)。這樣,可允許QuartusII通過(guò)JTAG口對(duì)下載到FPGA中的RAM進(jìn)行“在系統(tǒng)”測(cè)試和讀寫(xiě)。圖6-28設(shè)定初始化文件和允許在系統(tǒng)編輯
圖6-26/27/28的設(shè)定操作366.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用6.4.2LPM_RAM的設(shè)置和調(diào)用最后單擊圖6-28中的NEXT按鈕,再單擊Finish按鈕后完成RAM定制。調(diào)入頂層原理圖后連接好端口引腳,如圖6-29所示。圖6-29在原理圖上連接好的RAM模塊
376.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用6.4.2LPM_RAM的設(shè)置和調(diào)用圖6-29aCycloneII器件涉及LPM_RAM模塊使用的設(shè)置(未設(shè)置,編譯出錯(cuò))
應(yīng)注意的是,對(duì)于CycloneII器件,凡是涉及RAM的LPM模塊(M4K)使用,都必須做如下設(shè)置(否則,無(wú)法通過(guò)編譯):在菜單Assignments中選擇setting項(xiàng),在彈出圖6-35a對(duì)話(huà)框中選中Analysis&SynthesisSettings下的DefaultParameters項(xiàng)。在此,在Name欄鍵入CYCLONEII_SAFE_WRITE;在Defaultsetting欄鍵入VERIFIED_SAFE,并分別按Add和下方OK按鈕后關(guān)閉Settings窗口。386.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用6.4.3對(duì)LPM_RAM仿真測(cè)試現(xiàn)在對(duì)圖6-29所示的RAM模塊進(jìn)行測(cè)試,主要是了解其各信號(hào)線的功能和加載于其中的初始化文件數(shù)據(jù)是否成功。圖6-30圖6-29的RAM的仿真波形圖6-30是此模塊的仿真波形圖。地址A是從0開(kāi)始的,當(dāng)WREN=0(讀)和進(jìn)入WREN=1(寫(xiě))期間,可以讀出初始化RAM中的數(shù)據(jù);正好與圖6-20和圖6-23的數(shù)據(jù)相符;說(shuō)明初始化數(shù)據(jù)能被正常調(diào)入。寫(xiě)后又讀出新的內(nèi)容。39
【例6-7】利用時(shí)鐘的雙邊沿控制數(shù)據(jù)讀寫(xiě)的VHDL存儲(chǔ)器程序設(shè)計(jì)。
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;--此程序包括含轉(zhuǎn)換函數(shù)CONV_INTEGERlA)USEIEEE.STD_LOGIC_UNSIGNED.ALL;--此程序包包含算符重載函數(shù)
ENTITYRAM78ISPORT(CLK:INSTD_LOGIC;--定義時(shí)鐘
WREN:INSTD_LOGIC;--定義寫(xiě)允許控制
A:INSTD_LOGIC_VECTOR(6DOWNTO0);--定義RAM的7位地址輸入端口
DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);--定義RAM的8位數(shù)據(jù)輸入端口
Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--定義RAM的8位數(shù)據(jù)輸出端口
END;
接下頁(yè)6.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用6.4.4VHDL的存儲(chǔ)器描述及相關(guān)屬性
利用VHDL語(yǔ)言可以直接描述RAM/ROM等存儲(chǔ)器。例6-7是以上RAM模塊的純VHDL描述,即在程序中沒(méi)有調(diào)用或例化任何現(xiàn)成的實(shí)體模塊。40
【例6-7】利用時(shí)鐘的雙邊沿控制數(shù)據(jù)讀寫(xiě)的VHDL存儲(chǔ)器程序設(shè)計(jì)。
接上頁(yè)
ARCHITECTUREbhvOFRAM78ISTYPEG_ARRAYISARRAY(0TO127)OFSTD_LOGIC_VECTOR(7DOWNTO0);SIGNALMEM:G_ARRAY;--定義信號(hào)MEM的數(shù)據(jù)類(lèi)型為用戶(hù)新定義的類(lèi)型G_ARRAYBEGINPROCESS(CLK)BEGINIFRISING_EDGE(CLK)THENIFWREN='1'THEN--如果時(shí)鐘有上升沿出現(xiàn),且寫(xiě)使能為高電平,則
MEM(CONV_INTEGER(A))<=DIN;--RAM數(shù)據(jù)口的數(shù)據(jù)被寫(xiě)入指定地址的單元
ENDIF;ENDIF;IF(FALLING_EDGE(CLK))THEN--如果時(shí)鐘有下降沿出現(xiàn),則
Q<=MEM(CONV_INTEGER(A));--讀出存儲(chǔ)器中的數(shù)據(jù)
ENDIF;ENDPROCESS;ENDBHV;6.4.4VHDL的存儲(chǔ)器描述及相關(guān)屬性例6-7是一個(gè)利用時(shí)鐘的雙邊沿控制數(shù)據(jù)讀寫(xiě)的VHDL存儲(chǔ)器描述程序。在時(shí)鐘的上升沿(并且WREN=‘1’)將數(shù)據(jù)寫(xiě)入存儲(chǔ)器;而在同一時(shí)鐘的下降沿將存儲(chǔ)器中的數(shù)據(jù)讀出。兩邊沿不對(duì)同一信號(hào)進(jìn)行賦值可綜合。例6-7是利用用戶(hù)自定義數(shù)據(jù)類(lèi)型語(yǔ)句來(lái)實(shí)現(xiàn)存儲(chǔ)器描述的,其中還用到了數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù)CONV_INTEGER(A)(將STD邏輯矢量轉(zhuǎn)換成整數(shù)類(lèi)型)。416.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用
1.限定性數(shù)組型數(shù)據(jù)類(lèi)型定義
TYPE數(shù)組名ISARRAY(數(shù)組范圍)OF基本數(shù)據(jù)類(lèi)型;
TYPEstbISARRAY(7DOWNTO0)ofSTD_LOGIC;TYPEMATRIXISARRAY(127DOWNTO0)ofSTD_LOGIC_VECTOR(7DOWNTO0);TYPEG_ARRAYISARRAY(0TO127)OFSTD_LOGIC_VECTOR(7DOWNTO0);SIGNALMEM:G_ARRAY;6.4.5數(shù)據(jù)類(lèi)型定義語(yǔ)句由庫(kù)程序包提供的標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型有整數(shù)類(lèi)型INTEGER、布爾類(lèi)型BooLEAN、邏輯位類(lèi)型STD_LOGIC等。此外,VHDL還允許用戶(hù)自行定義新的數(shù)據(jù)類(lèi)型。在標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型的基礎(chǔ)上,由用戶(hù)定義的數(shù)據(jù)類(lèi)型可有多種;如枚舉類(lèi)型(EnumerationTypes)、整數(shù)類(lèi)型(IntegerWypes)、數(shù)組類(lèi)型(ArrayTypes)、記錄類(lèi)型(RecordTypes)、時(shí)間類(lèi)型(TtimeTypes)、實(shí)數(shù)類(lèi)型(RealTypes)等。用戶(hù)自定義數(shù)據(jù)類(lèi)型是用類(lèi)型定義語(yǔ)句TYPE和子類(lèi)型定義語(yǔ)句SUBTYPE實(shí)現(xiàn)的。
TYPE語(yǔ)句最常用的用法有如下兩種,第一種屬于數(shù)組型數(shù)據(jù)類(lèi)犁定義語(yǔ)句,第二種屬于枚舉型數(shù)據(jù)類(lèi)型定義語(yǔ)句。數(shù)組類(lèi)型又分限定性數(shù)組和非限定性數(shù)組類(lèi)型。它們的區(qū)別是,限定性數(shù)組下標(biāo)的取值范圍在數(shù)組類(lèi)型定義時(shí)就被確定了,而非限定性數(shù)組下標(biāo)的取值范圍在由數(shù)組類(lèi)型定義數(shù)組時(shí)確定。數(shù)組類(lèi)型屬?gòu)?fù)合類(lèi)型,是將一組具有相同數(shù)據(jù)類(lèi)型的元素集合在一起,作為一個(gè)對(duì)象來(lái)處理的數(shù)據(jù)類(lèi)型。
VHDL仿真器支持多維數(shù)組,VHDL綜合器通常只支持一維和二維數(shù)組。數(shù)組的元素可以是任何一種數(shù)據(jù)類(lèi)型;用以定義數(shù)組元素的下標(biāo)范圍的子句決定了數(shù)組中元素的個(gè)數(shù);以及元素的排序方向,即下標(biāo)數(shù)是由低到高,或是由高到低。如子句“0TO7”是由低到高排序的8個(gè)元素;“15DOWNTO0”是由高到低排序的16個(gè)元素。限定性數(shù)組定義語(yǔ)句格式:
“數(shù)組名”是新定義的限定性數(shù)組類(lèi)型的名稱(chēng)是由設(shè)計(jì)者自定標(biāo)識(shí)符;該標(biāo)識(shí)符將作為定義的新數(shù)據(jù)類(lèi)型之用。數(shù)組的數(shù)據(jù)類(lèi)型即為數(shù)組元素相同的數(shù)據(jù)類(lèi)型。
“數(shù)組范圍”指出數(shù)組元素的定義數(shù)量和排序方式,并以整數(shù)來(lái)表示其數(shù)組的下標(biāo)。
“基本數(shù)據(jù)類(lèi)型”定義各元素的基本數(shù)據(jù)類(lèi)型,一般都取標(biāo)準(zhǔn)的預(yù)定義數(shù)據(jù)類(lèi)型;如BIT、STD_LOGIC或INTEGER等。示例:這個(gè)數(shù)組類(lèi)型的名稱(chēng)是stb,它有8個(gè)元素,它的下標(biāo)排序(仿真顯示高位在左)是7、6、5、4、3、2、1、0。各元素的排序是stb(7)、stb(6)…stb(0);數(shù)組中的每一個(gè)元素的數(shù)據(jù)類(lèi)型都是標(biāo)準(zhǔn)邏輯位STD_LOGIC類(lèi)型(將STD_LOGIC改為STD_LOGIC_VECTOR便成為二維數(shù)組類(lèi)型
)。示例:此TYPE語(yǔ)句實(shí)際上定義了128個(gè)乘8位的矩陣數(shù)組類(lèi)型MATRIX,它包含元素8×16=128個(gè),每個(gè)元素的數(shù)據(jù)類(lèi)型都是STD_LOGIC。例6-7:第一句首先定義了一個(gè)二維的數(shù)據(jù)類(lèi)型G_ARRAY,其元素是128個(gè)乘8位。
第二條語(yǔ)句定義了信號(hào)MEM數(shù)組對(duì)象,規(guī)定MEM的數(shù)據(jù)類(lèi)是G_ARRAY。于是信號(hào)MEM有128個(gè)單元:MEM(0)、MEM(1)、…、MEM(127)。每一個(gè)單元有8個(gè)基本位元素,如MEM(0)(B7、B6、…、b0);其中每一個(gè)基本單元位,如MEM(0)(bi)的數(shù)據(jù)類(lèi)型都是標(biāo)準(zhǔn)邏輯位STD_LOGIC。于是,MEM的取值范圍是128×8(=1024個(gè)單元位)。這實(shí)際上就是一個(gè)存儲(chǔ)器,其存儲(chǔ)深度是128,對(duì)應(yīng)地址口線寬度為7;每一單元的數(shù)據(jù)寬度是8,對(duì)應(yīng)存儲(chǔ)器的數(shù)據(jù)口線寬度是8。因此這兩句語(yǔ)句是VHDL定義存儲(chǔ)器的典型語(yǔ)句。426.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用
2.非限定性數(shù)組型數(shù)據(jù)類(lèi)型定義
TYPE數(shù)組名ISARRAY(數(shù)組下標(biāo)名RANGE<>)OF數(shù)據(jù)類(lèi)型
Typebitis(‘0’,‘1’);Typebit_vectorisarray(naturalrange<>)ofbit;SIGNALaaa:bit_vector(0to9);6.4.5數(shù)據(jù)類(lèi)型定義語(yǔ)句在數(shù)組類(lèi)型定義時(shí),不說(shuō)明所定義的數(shù)組下標(biāo)的取值范圍;而在定義某一數(shù)據(jù)對(duì)象時(shí),再由該數(shù)組類(lèi)型臨時(shí)為定義的數(shù)組對(duì)象指定下標(biāo)取值范圍。這樣就可以通過(guò)同一個(gè)數(shù)組類(lèi)型定義各數(shù)組對(duì)象時(shí),各數(shù)組對(duì)象的下標(biāo)取值范圍不同。非限定性數(shù)組定義語(yǔ)句格式:
“數(shù)組名”是定義的非限定性數(shù)組類(lèi)型的取名。“數(shù)組下標(biāo)名”是以整數(shù)類(lèi)型設(shè)定的一個(gè)數(shù)組下標(biāo)名稱(chēng),其中符號(hào)“<>”是下標(biāo)范圍待定符號(hào);在數(shù)組對(duì)象定義時(shí),再填入具體的數(shù)值范圍?!皵?shù)據(jù)類(lèi)型”是數(shù)組中每一元素的數(shù)據(jù)類(lèi)型。示例:先定義一個(gè)bit基本位的枚舉數(shù)據(jù)類(lèi)型。
然后在bit_vector類(lèi)型的定義中,naturalrange<>表示元素的個(gè)數(shù)未定。其中natural是基本預(yù)定義類(lèi)型自然數(shù)類(lèi)型(取值范圍是自然數(shù)0,1,2,3,…),由bit_vector定義對(duì)象的每個(gè)元素的數(shù)據(jù)類(lèi)型為“bit”。
最后由bit_vector定義10個(gè)元素的數(shù)組aaa。43
3.枚舉型數(shù)據(jù)類(lèi)型定義
TYPE數(shù)據(jù)類(lèi)型名IS(數(shù)據(jù)類(lèi)型定義表述);
TYPEweekIS(sun,mon,tue,wed,tha,fri,sat);TYPExis(low,high);TYPEdata_busISARRAY(0T07,x)0fBIT;
TYPEm_stateIS(st0,st1,st2,st3,st4,st5);SIGNALpresent_state,next_state:m_state;6.4.5數(shù)據(jù)類(lèi)型定義語(yǔ)句6.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用
VHDL的枚舉數(shù)據(jù)類(lèi)型是一種特殊的數(shù)據(jù)類(lèi)型,它們是用文字符號(hào)來(lái)表示一組二進(jìn)制數(shù)。實(shí)際上,在VHDL中許多常用的預(yù)定義數(shù)據(jù)類(lèi)型,如位(BIT)、布爾量(BOOLEAN)、字符(CHARACTER)及STD_LOGIC等都是程序包中已定義的枚舉型數(shù)據(jù)類(lèi)型。枚舉數(shù)據(jù)類(lèi)型的一般定義格式:
“數(shù)據(jù)類(lèi)型名”就是用戶(hù)用標(biāo)識(shí)符命名的枚舉型數(shù)鋸類(lèi)型名,其用法同預(yù)定義數(shù)據(jù)類(lèi)型相同;而“數(shù)據(jù)類(lèi)型定義表述”就是具體列出所定義的類(lèi)型的表述辦法與形式,各項(xiàng)用“,”分開(kāi)。示例:首先定義x為2元素的枚舉數(shù)據(jù)類(lèi)型,然后將data_bus定義為一個(gè)有9個(gè)元素的數(shù)組類(lèi)型,其中每一元素的數(shù)據(jù)類(lèi)型都是預(yù)定義類(lèi)型BIT。示例:對(duì)于狀態(tài)機(jī),其每一狀態(tài)在實(shí)際電路中是以一組觸發(fā)器的當(dāng)前二進(jìn)制數(shù)位的組合來(lái)表示的。為了更利于閱讀、往往將表征每一狀態(tài)的二進(jìn)制數(shù)組用文字符號(hào)來(lái)代表,即所謂狀態(tài)符號(hào)化。
先定義名為m_state的6狀態(tài)的枚舉數(shù)據(jù)類(lèi)型。然后由m_state定義present_state和next_state的枚舉數(shù)據(jù)類(lèi)型的信號(hào)對(duì)象。它們的取值范圍,從st1~st5,共六種狀態(tài);而在綜合后這六種狀態(tài)代表六組唯一的二進(jìn)制數(shù)值,編碼默認(rèn)值為:st0="000",st1="001”,st2=“010",st3="011",st4="100",st5="100"。
示例:定義名為week的枚舉(含有7元素)數(shù)據(jù)類(lèi)型名。綜合時(shí),根據(jù)元素?cái)?shù)據(jù)頂該類(lèi)型的位數(shù)。類(lèi)型的元素由一組文字符號(hào)表示,而在綜合后,其中的每一文字都代表一個(gè)具體的數(shù)值,如可令sun="1010"。444.枚舉型子類(lèi)型數(shù)據(jù)類(lèi)型定義
SUBTYPE子類(lèi)型名IS基本數(shù)據(jù)類(lèi)型RANGE約束范圍;
SUBTYPEdigitsISINTEGERRANGE0to9;6.4.5數(shù)據(jù)類(lèi)型定義語(yǔ)句6.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用
枚舉類(lèi)型的子類(lèi)型定義語(yǔ)句SUBTYPE只是由語(yǔ)句TYPE所定義的原數(shù)據(jù)類(lèi)型的一個(gè)子集,它滿(mǎn)足原數(shù)據(jù)類(lèi)型的所有約束條件,原數(shù)據(jù)類(lèi)型稱(chēng)為基本數(shù)據(jù)類(lèi)型。枚舉子類(lèi)型數(shù)據(jù)類(lèi)型的一般定義格式:
“子類(lèi)型名”是用戶(hù)定義的標(biāo)識(shí)符名,其用法同預(yù)定義數(shù)據(jù)類(lèi)型相同;而“基本數(shù)據(jù)類(lèi)型”是庫(kù)程序包中提供的標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型;“約束范圍”限定了子類(lèi)型元素的值是基本類(lèi)型的子集。示例:定義INTEGER的子類(lèi)型digits,digits的值只有0~9。
事實(shí)上,在程序包STANDARD中,已有兩個(gè)預(yù)定義子類(lèi)型,即自然數(shù)類(lèi)犁(NaturalType)和正整數(shù)類(lèi)型(PositiveType),它們的基本數(shù)據(jù)類(lèi)犁都是INTEGER。
由于子類(lèi)型與其基本數(shù)據(jù)類(lèi)型屬同一數(shù)據(jù)類(lèi)型,因此屬于子類(lèi)型的和屬于基本數(shù)據(jù)類(lèi)型的,其數(shù)據(jù)對(duì)象間的賦值和被賦值可以直接進(jìn)行,不必進(jìn)行數(shù)據(jù)類(lèi)型的轉(zhuǎn)換。利用子類(lèi)型定義數(shù)據(jù)對(duì)象的好處是,除了使程序提高可讀性和易處理性外,其實(shí)質(zhì)性的好處還在于有利于提高綜合的優(yōu)化效率。這是因?yàn)榫C合器可以根據(jù)子類(lèi)型所設(shè)的約束范圍,有效地推出參與綜合的寄存器的最合適的數(shù)目等優(yōu)化措施。456.4.6存儲(chǔ)器配置文件屬性定義和結(jié)構(gòu)設(shè)置6.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用圖6-31例6-7的RAM78的RTL圖
如果對(duì)例6-7不作任何約束,直接綜合,盡管也能編譯出相應(yīng)的存儲(chǔ)器RAM,其RTL圖如圖6-3l所示,與圖6-29類(lèi)似。但它將耗用大量的邏輯資源。
圖6-32即為例6-7無(wú)約束條件下的綜合報(bào)告。其中使用了1344個(gè)邏輯宏單元,這其中的1032個(gè)觸發(fā)器被用于構(gòu)建此RAM的時(shí)序電路,而且可以斷定,其每一存儲(chǔ)單元都使用了一個(gè)D觸發(fā)器來(lái)構(gòu)建。而FPGA中的嵌入式RAM位一個(gè)沒(méi)用。466.4.6存儲(chǔ)器配置文件屬性定義和結(jié)構(gòu)設(shè)置6.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用圖6-33例6-7優(yōu)化后的編譯報(bào)告
如果限定例6-7在綜合中使用嵌入式RAM位,則資源利用率將大為改觀。方法是首先進(jìn)入圖6-18的對(duì)話(huà)框,在Existingoptionsettings欄選擇AutoRAMReplacement項(xiàng)為On。全程編譯后的報(bào)告將如圖6-33所示,其中邏輯宏單元和寄存器的耗用為0,而嵌入式RAM位的占用是1024,恰好等于例6-7的MEM的單元數(shù)。47【例6-8】利用時(shí)鐘的雙邊沿控制數(shù)據(jù)讀寫(xiě)的VHDL存儲(chǔ)器程序設(shè)計(jì)(含初始化文件調(diào)入)。
………
ARCHITECTUREbhvOFRAM78ISTYPEG_ARRAYISARRAY(0TO127)OFSTD_LOGIC_VECTOR(7DOWNTO0);SIGNALMEM:G_ARRAY;--定義信號(hào)MEM的數(shù)據(jù)類(lèi)型為用戶(hù)新定義的類(lèi)型G_ARRAY
attributeram_init_file:string;--定義字符串屬性的標(biāo)識(shí)符ram_init_file。
attributeram_init_fileofMEM:--定義標(biāo)識(shí)符ram_init_file是MEM的屬性,
SIGNALIS”data7x8.mif”;--并將字符串"data7x8.mif"初始化賦給ram_init_file。
BEGIN
………6.4.6存儲(chǔ)器配置文件屬性定義和結(jié)構(gòu)設(shè)置6.4LPM隨機(jī)存儲(chǔ)器的設(shè)置和調(diào)用
在例6-7基礎(chǔ)上增加使用存儲(chǔ)器配置初始化文件的屬性定義的編程,并將data7x8.mif放存當(dāng)前工程文件夾中,可有效實(shí)現(xiàn)存儲(chǔ)器初始化文件MIF調(diào)入的問(wèn)題。具體使用方法如例6-8(對(duì)例6-7的修改)所示。其中加入了初始化文件的屬性定義語(yǔ)句,請(qǐng)注意它們放置的位置。加入后的仿真結(jié)果與圖6-30完全相同。
使用RAM模塊比較實(shí)用的方法是調(diào)用LPM庫(kù)中現(xiàn)成的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省深圳市2025屆高三第二次診斷考試語(yǔ)文試題及答案
- 抗利尿激素分泌失調(diào)綜合征的臨床護(hù)理
- ADME/T工程細(xì)胞株的構(gòu)建調(diào)研報(bào)告
- 產(chǎn)后肚子疼的健康宣教
- 低磷性佝僂病的臨床護(hù)理
- 孕期肺結(jié)核的健康宣教
- 兒童精神分裂癥的健康宣教
- 口技公開(kāi)課課件
- 《故障的改善方法》課件
- 道德模范故事在品德教育中的應(yīng)用計(jì)劃
- 精神科疾病的精神科診斷與治療
- 酒店總經(jīng)理應(yīng)聘計(jì)劃書(shū)
- 醫(yī)療健康合作協(xié)議
- 垃圾填埋場(chǎng)環(huán)境風(fēng)險(xiǎn)評(píng)估
- 泥漿泵安全操作規(guī)程范文
- 戲劇表演社管理制度
- 水囊引產(chǎn)護(hù)理查房
- 2024屆高考語(yǔ)文 語(yǔ)言文字運(yùn)用 復(fù)習(xí)課件
- 2023年CQE客訴工程師年度總結(jié)及下年規(guī)劃
- 2023年秋季國(guó)家開(kāi)放大學(xué)-02272-數(shù)據(jù)結(jié)構(gòu)(本)期末考試題帶答案
- 有限空間消防水箱應(yīng)急預(yù)案
評(píng)論
0/150
提交評(píng)論