FPGA至簡設計實例
前言
一、項目背景
1. IP核概述
IP 核(Intellectual Property core)指的是知識產權核或知識產權模塊,其是具有特定電路功能的硬件描述語言程序,在EDA技術開發中具有十分重要的地位。美國著名的Dataquest咨詢公司將 半導體產業的IP定義為“用于ASIC或FPGA中的預先設計好的電路功能模塊”。
在數字電路中IP(知識產權)核非常常用,其將FIR濾波器、SDRAM控制器、PCI接口等比 較復雜的功能模塊設計成可修改參數的模塊,這些模塊會像應用程序一樣公開給設計者們使用。在進 行復雜的工程中如果需要這些技術,設計者就可以調用對應IP 核后補充工程所需參數,就可將其運 用到設計中。隨著CPLD/FPGA的規模越來越大,設計也變得越來越復雜,設計者的主要任務則是在 規定的時間周期內完成復雜的設計。而IP核的調用可以避免重復勞動,從而大大減輕工程師的負擔, 因此使用IP核成為了一大發展趨勢,與此同時,IP核的重用大大縮短了產品上市時間。
利用IP核設計的電子系統具有引用方便的特點且很易于修改基本元件的功能。一般來說,具有 復雜功能和商業價值的IP核具有知識產權,盡管目前IP核的市場活動還不規范,但是仍有許多集成 電路設計公司從事IP核的設計、開發和營銷工作。
IP 核具有三種不同的存在形式:HDL語言形式,網表形式、版圖形式。IP內核可以在不同的硬 件描述級實現,由此產生了三類IP 內核:軟核、固核和硬核。這種分類主要依據產品交付的方式, 而這三種IP內核實現方法也各具特色。
軟核是用 VHDL 等硬件描述語言描述的功能塊,但其并不涉及用哪些具體電路元件來實現這些 功能。軟IP通常是以硬件描述語言HDL源文件的形式出現,其應用開發過程與普通HDL的設計十 分相似,只是所需的開發硬軟件環境比較昂貴。軟IP 的設計周期短,設計投入少,且不涉及物理實 現,因此為后續的設計留有較大的發揮空間,同時也增大了IP的靈活性和適應性。其主要缺點是軟I P在一定程度上使后續工序無法適應整體設計,從而需要一定程度的修正,在性能上也不可能獲得全 面的優化。軟核是以源代碼的形式提供,盡管源代碼可以采用加密方法,但其知識產權保護問題依然 不容忽視。
硬核提供設計階段最終階段產品:掩膜。這種硬核以經過完全的布局布線的網表形式提供,既具有可預見性,同時還可以針對特定工藝或購買商進行功耗和尺寸上的優化。盡管由于缺乏靈活性而導 致硬核可移植性差,但由于其無須提供寄存器轉移級(RTL)文件,因而更易于實現IP保護。
固核則是軟核和硬核的折中。目前應用于FPGA的IP內核大多數均為軟核,其有助于用戶調節 參數并增強可復用性。軟核通常以加密形式提供,這樣一來用戶無法獲取實際的 RTL,但其布局和 布線十分靈活。在這些加密的軟核中,如果對內核進行了參數化,那么通過頭文件或圖形用戶接口(G UI)用戶可以方便地進行參數操作。而對于那些對時序要求嚴格的內核(如PCI接口內核),可預布線特 定信號或分配特定的布線資源從而滿足其時序要求,這一部分的內核就可歸類為固核。由于內核是預 先設計的代碼模塊,其建立(setup)、保持時間和握手信號都可能是固定的,因此其它電路的設計時都 必須考慮如何與該內核正確地進行接口。如果內核具有固定布局或部分固定的布局,那么這還可能影 響其它電路的布局。
2. ROM IP核
目前現有的大多數FPGA都有內嵌塊RAM(Block RAM),可以將其靈活地配置成單端口RAM(D PRAM,Single Port RAM)、雙端口RAM(DPRAM,Double Ports RAM)、偽雙端口RAM(Pseudo DPRAM)、CAM(Content Addressable Memory)和 FIFO 等常用的存儲結構。其實在FPGA中并沒 有專用的ROM硬件資源,實現ROM的思路是對RAM賦予初值后保持該初值。
Altera 的器件內部提供了各種存儲器模塊(RAM、ROM 或雙口 RAM),可以在設計中使用M egaWizard Plug-In Manager,執行“Tools”后利用“MegaWizard Plug-In Manager”菜單命令來 創建所需要的存儲器模塊。此外,也可以使用 Altera 提供的宏功能模塊 LPM_ROM 來創建存儲器 模塊。每個 ROM 模塊有 clock(時鐘)、address(地址)這兩個輸入信號和一個 q(值)輸出信 號。在每個時鐘上升沿,ROM 讀出地址信號指定存儲單元中的信號值并將其輸出。ROM 內的值通 過加載 MIF (Memory Initialization File,存儲器初始化文件)來實現。
當設計中使用了器件內部的存儲器模塊時,需要對存儲器模塊進行初始化。在 Quartus Ⅱ中, 存儲器初始化文件可以使用兩種格式:Intel Hex 格式(.hex)或 Altera 存儲器初始化格式(.mif)。 其中mif 文件是 Altera 存儲器類器件初始化的專用文件格式,文件內容為地址與值的對應表,該表 規定了存儲器單元的初始值。
如果 ROM 要存儲的內容比較少或者很有規律,這種情況下可以執行【File】|【New?】菜單 命令,創建mif文件并編輯其內容。如果已經存在bmp格式的圖片,則可以使用本書提供的BmpTo Mif 軟件,利用現有的bmp格式圖片生成mif文件。該軟件使用方法非常簡單,但是需要注意要適當 調整原圖片的大小,這一操作可以通過Windows 自帶的畫圖程序、Photoshop 等各種圖形編輯軟件 修改實現。BmpToMif 軟件可以將 bmp 圖片轉為 mif 文件,即將黑白圖片轉換為單色mif文件,將 彩色圖片轉換為三色mif 文件,也可以將二進制文件轉為mif文件,如將中英文點陣字庫轉換為mif 文件。
3. 圖片轉成初始化文件
上文中提到過:在創建mif 文件時,若已經存在bmp格式圖片則可以使用軟件工具BmpToMif 來將bmp的圖片轉換為mif文件。下面介紹其具體操作,BmpToMif的軟件界面如下圖所示。
點擊打開圖片后選擇一幅bmp格式的圖片。這里需要注意的是,由于受開發板上FPGA資源的 限制,圖片的大小不能超過320*240。如果圖片大小不是320*240,建議使用“畫圖”或者“photos hop”等軟件將圖片大小更改為320*240。
將bmp圖片轉換為mif文件的過程如下:
1. 點擊“圖像”選項卡;
2. 點擊“打開圖片”后選擇一幅圖片,本案例中選擇一幅大小為320*240、格式為bmp的圖片, 文件名為“mdy_logo.bmp”;
3. 在“顏色類型”中根據需要選擇“黑白”或“彩色”,本案例中將選用黑白模式;
4. 若為黑白圖,在“黑白選項”中選擇“黑色為1”或“白色為1”,注意如果是黑白圖片,生 成ROM要選擇字長為“1”;
5. 若為彩色圖,在“彩色選項”中選擇“單