CPLD/VHD 淡江大學電機系微處理機實
大綱 CPLD 簡介與市場現狀 EDA 工具 -MAX+plusII 圖形設計快速入門 -Graphic 圖形編輯的階層式設計 霹靂燈實習 文書設計快速入門 -VHDL Graphic 與 VHDL 整合
CPLD 簡介與市場現
PLD 簡介
可程式化元件的內部連線 CPLD FPGA
CPLD 架構 以 Altera MAX7000 系列之基於乘積項 (Product-Term) 的 PLD 內部架構 這種 PLD 可分為三塊架構..宏單元 (Macrocell), 可編程連線 (PIA) 和
可編 Marocell 架構 乘積項陣列 可編程選擇開關
基於乘積項結構的 CPLD 邏輯實現範 f ( A B) C D ( A C D) ( B C D)
每個 LAB 由 FPGA 架構 -Altera FLEX10K 內部結構
EAB 內部構造
LAB 內部構造
邏輯單元 (LE) 內部結構
基於 LUT 結構的 FPGA 邏輯實現範例 A,B,C,D 由 FPGA 晶片的 IOE 進入 PIA, 然後作為 LUT 的位址線位址查找到相對應的數值作為輸出 直接利用 LUT 後面 D 型正反器來實現 D 型正反器 CLK 由 I/O 腳輸入後進入晶片內部的 clock 專用通道, 直接連接器的 clock 端 正反器的輸出與 I/O 腳相連, 把結果輸出到晶片 IOE
FPGA/CPLD 設計流程 Design Ideas Detailed Design Functional Simulation Device Programming Timing Simulation Implementation (P&R) FPGA CPLD t pd =22.1ns f max =47.1MHz
可程式化元件 我們可隨時利用 download cable 或 hardware programmer 下載實驗板上的 FPGA/CPLD 來驗證我們的設計
FPGA/CPLD 應用 Digital Video Techologies FPGA/CPLD Test / Measurement Robot
FPGA/CPLD 市場現況 This Course 供應商產品最新開 Altera Xilinx Lattice Actel MAX, FLEX, APEX, Stratix, Cyclone, MAXII website: http://www.altera.com XC9500, CoolRunner, Spartan, Virtex website: http://www.xilinx.com ispxpld, ispmach, ispxpga, ORCA website: http://www.latticesemi.com ex, SX, MX, Axcelerator, ProASIC website: http://www.actel.com MAX+plu QuartusII ISE 7.1i isplever Libero IDE
EDA 工具 -MAX+plu
MAX+plus II MAX+PLUS II Text Editor MAX+PLUS II Waveform Editor MAX+PLUS II Floorplan Editor Design Entry MAX+PLUS II Graphic Editor MAX+PLUS II Symbol Editor Project Verification CNF Extractor SNF Extractor Netlist Writer MAX+PLUS II Message Processor & Hierarchy Display Project Processing MAX+PLUS II Compiler Database Builder Partitioner Design Doctor Logic Synthesize Fitter Assembler Device Programming MAX+PLUS II Simulator MAX+PLUS II Timing Analyzer MAX+PLUS II Waveform Editor MAX+PLUS II Programmer
MAX+plus II --- Design Entry
MAX+plus II --- Project Processing
MAX+plus II --- Project Verification
MAX+plus II --- Device Programmin
實驗平台 --- FPT-3 採用 Altera CPLD 的 MAX7000S 系列元件 EPM7064SLC44-10 EEPROM 架構的 PLD 5V 工作電壓 可支援 1250 個邏輯閘,64 個 LCs 可使用 32 個 I/O 系統電源 :5 伏特直流 輸出介面 系統時脈 :1.8432MHz LED( 低電位驅動 ) ISP 燒錄介面輸入介面 邏輯準位指撥開關 2 位數七段顯示器 ( 共陽極動 ) 1 組高效能蜂鳴器 4 組負脈衝無段式按鍵開關
實驗平台 --- LP-2900
實驗平台 --- LP-2900 採用 Altera FLEX10K 系列元件 EPF10K10TC144-4 支援大約 10000 閘的設計 下載資料至 FPGA 元件的方式 ByteBlaster 下載 ( 使用 PC 的 LPT Port) EPROM 下載 ( 須先將資料燒錄至 EPROM) 使用 PrintPort 下載 準備 *.sof 檔案 ( 編譯後會自動產生 ) 執行 :MAX+Plus2->Programmer->File->Select Program F 範例 : C:\Leap-2900\*.sof 使用 EPROM 下載 將 *.hex 檔案燒綠至 EPROM 中 將 EPROM 置入 AU3 IC 座 按 RESET 鍵一次
圖形設計快速入門 Graphic
圖形設計快速入門 1/7 File New, 選擇圖形編輯檔 (Gra Editor file)
圖形設計快速入門 2/7 File Save as, 將編輯檔案命名 halfadd.gdf 存入指定的資料夾中 ( 不可將檔放於根目錄下, 且資料夾名稱不可以為中文
圖形設計快速入門 3/7 File Project Set Project to Cu File, 將專案 (project) 名稱設定成與現在所的檔案名稱一致
在視窗中用滑鼠左鍵快速連或 Symbol Enter S 出現 Enter Symbol 的對話窗 圖形設計快速入門 4/7 選擇..\maxplus2\max2lib\prim 元件庫內的邏
圖形設計快速入門 5/7 輸入 xor and2 input 及 output 等 symbol
細線代表一般線, 粗線則是 圖形設計快速入門 6/7 元件腳位的連線 繪圖工具列可供使用者選擇使用 腳位的線條連接可在起點按住 ( 此時會出現十字形游標 ), 拖曳到適當的位置放開即可完
圖形設計快速入門 7/7 輸入與輸出腳位的命名 以滑鼠左鍵點選 PIN_NAME 的地方, 當文字部黑色編輯方塊時即可重新輸入字元或更改檔名中每一個輸入輸出腳位都應有一個獨立的名稱
檔案的編繹 1/2 儲存 檢查和簡易編繹 File Project Save & Check
檔案的編繹 2/2 進行簡易的編繹 Processing Functional SNF Extractor 在 Compiler 視窗下按 Start
功能編譯處理程序 Compiler Netlist Extractor 產生.cnf 檔, 檢查程式是否正確 Database Builder 建構節點名稱資料庫 Functional SNF Extractor 產生提供功能模擬使用之.snf 檔
電路的功能模擬 1/6 開啟一個新的檔案 File New Waveform Editor file 儲存檔名, 選擇 File 將該 Waveform 檔存於所建立夾裡, 檔名與專案名稱相同 ( *.scf)
電路的功能模擬 2/6 設定模擬時間 File End Time 設定格線間距 Options Grid Size 顯示格線 Options Show Grid
電路的功能模擬 3/6 輸入所欲分析的電路節點 Node Enter Nodes from SNF
電路的功能模擬 4/6 放大波形縮小波形將整體波形放入畫面中將選取區設定為 Low 訊號將選取區設定為 High 訊號將選取區設定為 Unknown 訊號將選取區設定為高組抗訊號將選取區波形反向自動時脈產生鈕自動計數產生鈕設定選取區之群組值設定選取區之狀態值
電路的功能模擬 5/6 輸入腳位的波形定義 使用視窗左側工具列來協助完成我們想要的數位形式 ; 首先將要設定的區域選取, 這時候會形成一段標示反白的區域, 再選擇工具列裡所要的數位脈衝 (High 或 Lo 即可完成輸入訊號波形的設定
電路的功能模擬 6/6 執行模擬 Max+plusII Simulator, 按下 Start
時序分析器 (Timing Analyzer) 的使 重新編繹 File Project Save & Check 在 Processing 下取消 Functional SNF Extractor 的勾選完整的編繹, 此時時序的模擬結果便會加入延遲的因素考量
時序分析器 (Timing Analyzer) 的使 MAX+plusII Timing Analyer 按下 Delay Matrix 下的 Start 鈕即可得到所有節點之間的延遲分析結果
時序編譯處理程序 Compiler Netlist Extractor and Database Builder 檢查程式語法與建立電路描述檔資料庫 Logic Synthesizer 電路合成與電路最佳化 Partitioner and Fitter 執行電路佈局與繞線演算法, 產生.rpt 檔 Timing SNF Extractor 產生提供時序模擬使用之.snf 檔 Assembler 產生供元件下載用之檔案
建立電路符號檔 File Create Default Symbol File Edit Symbol
平面配置與晶片規劃 1/4 選取晶片型號 Assign Device MAX7000S EPM7064SLC44-10 取消 Show Only Fastest Speed Grades 選項以顯示更多
平面配置與晶片規劃 2/4 再作一次完整的編繹程序 點選 rpt 文件圖示以開啟 halfadd.rpt 檔案
平面配置與晶片規劃 3/4 MAX+plusII Floorplan Editor Layout Device View Layout Current Assignments Floorplan ( 或是透過視窗左邊的工具列點選 )
平面配置與晶片規劃 4/4 29 31 X Y 設計積體電路外觀示意圖與晶片腳位配置 完成腳位配置後必須再作一次完整的編繹程序 EPM7064SLC 以滑鼠拖曳的方式將各接腳依規劃需求拖到晶片的 I/O 腳位
程式下載與測試 1/3 開啟 programmer 視窗 MAX+plus II Programmer Programming hardware is not installed 警示視窗
程式下載與測試 2/3 Options Hardware Setup, 選取 Hardw Type 至 ByteBlaster(MV), 點選 OK
程式下載與測試 3/3 選擇所欲燒錄的.pof 檔 (halfadd.pof) File Select Programming File 按下 Program 以執行程式下載動作
圖形設計快速入門 --- FPT-3 驗證 SUM Carry XY
圖形編輯的階層式設
Carry 圖形編輯的階層式設計 1/4 以半加器和 OR 閘建構全加器 Full Adder U1 Half Adder U2 Half Adder X Y Sum U3 Z
圖形編輯的階層式設計 2/4 開啟新的圖形編輯檔案, 加入兩個 halfadd 這前所建立的 Symbol 與一個 or2 邏輯閘
圖形編輯的階層式設計 3/4 完成元件間的連線關係, 並修改腳位名稱 將檔案存成 fulladd.gdf, 並將專案名稱設定成與檔名一致, 進行程式編繹與功能模擬
圖形編輯的階層式設計 4/4 選取晶片型號 MAX7000S EPM7064SLC44-10 腳位配置 輸入腳位輸出 X 29(dip1) SUM Y 31(dip2) Carry Z 33(dip3) 程式下載與測試
圖形編輯的階層式設計 --- FPT-3 驗證 SUM Carry XYZ
直接套用 MAX+plus II 中的 74 系列元 介紹如何直接使用 MAX+plus II 所提供的 Macro Fun 元件庫來繪製電路圖 從 Help Old-Style Macrofunctions 線上資的資料中, 我們可以查看元件的詳細規格
74138 解碼器元件的使用
繪製電路圖與功能模擬
霹靂燈實習
霹靂燈實習 1/3 完成一個具有重置 右旋 左旋等功能之霹靂燈實習 1. 輸入 74292( 除頻器 ) 4count(4 位元上 / 下數計數器 ) 74138( 碼器 ) vcc gnd not input 及 output 等 symbol
霹靂燈實習 2/3 2. 完成連線與腳位的命名 3. 儲存檔案 (led.gdf)
霹靂燈實習 3/3 4. 選取晶片型號 MAX7000S EPM7064SLC44-10 5. 腳位配置 輸入腳位輸出 CLK 43(clk) L1 RST 37(PS1) L2 6. 程式編譯 下載與測試 DnUp 29(SW1) L3 L4 L5 L6 L7 L8
文書設計快速入門 VHDL
VHDL 快速入門
A simple example 8-bit compar --An Example VHDL Code library IEEE; use IEEE.std_logic_1164.all; entity cmp8 is port( A: in std_logic_vector(7 downto 0); B: in std_logic_vector(7 downto 0); EQ: out std_logic); end Cmp8; architecture dataflow of cmp8 is begin eq <= 1 when (a = b) else 0 ; end dataflow; 不分大小寫 註解 : '--' 敘述結尾 : 等號 : '<=' 使用者定義名 字母 數字 需由字母開 不分大小寫 不能使用 V 最後字元不 兩個 _ 不
VHDL 五大元素 Entity Block 的 I/O 規格 Architecture block 的內部電路 可同時存在多個 Configuration 決定那一個 architecture 被使用 Package Package body Arch1 (version 1) Entity Arch2 (version 2
第一元素 Entity Entity Name Entity NAND2 is port (A, B : in std_logic; Z : out std_logic); Data Type end nand2; I/O Direction A B NAND2 Z
I/O Direction IN OUT INOUT BUFFER
Basic Data Type Bit BIT_VECTOR (0 TO 7) STD_LOGIC STD_LOGIC_VECTOR (15 DOWNTO 0)
第二元素 NAND2 architecture Architecture Structure of NAND2 is signal C : std_logic; begin U0 : and2x1 port map (A, B, C); U1 : invx1 port map (C, Z); end Structure; A B And (and2x1) NAND2 C Invert (invx U0 U1
第二元素 NAND2 architecture Architecture DataFlow of NAND2 is begin Z <= A nand B; -- concurrent statement end DataFlow;
第二元素 AND2 architecture # Architecture RTL of NAND2 is begin process(a, B) begin if (A= 1 ) and (B= 1 ) then --sequential statem Z<= 0 ; else Z<= 1 ; end if; end process; end RTL;
第三元素 Configuration Configuration cfg_nand2 of NAND2 is for RTL end for; end cfg_nand2; A B RTL Z
Recall Entity a IS XXX END a; ARCHITECTURE b Of a IS BEGIN XXX END b; CONFIGURATION c OF a IS FOR b END FOR; END c;
第四 五元素 Package Package Declarations Package Bodies Constant Declarations Subprograms Type Declarations Component Declarations
Package Package EXAMPLE is type BYTE is range 0 to 255; subtype NIBBLE is BYTE range 0 to 15; constant BYTE_FF: BYTE:=255; signal ADDEND: NIBBLE; component BYTE_ADDER port(a,b: in BYTE; C: out BYTE; OVERFLOW: out BOOLEAN); end component; function MY_FUNCTION(A: in BYTE) return BYTE; end [EXAMPLE];
Using Package library IEEE; use IEEE.std_logic_1164.ALL; use IEEE.numeric_std.ALL; use IEEE.std_logic_arith.ALL; use IEEE.std_logic_unsigned.ALL; use IEEE.std_logic_signed.ALL; - - Library WORK; use WORK.EXAMPLE.ALL; entity... architecture...
文書設計快速入門 --- 霹靂燈實習 top_vhd.vhd clk_div.vhd counter.vhd decoder.vhd CLK 除頻器 計數器 3 對 8 解碼器 10Mhz 10hz 3 8 RST DnUp
文書設計快速入門 1/4 File New, 選擇文書編輯檔 (Text Editor file) File Save as, 將編輯檔案命名為 clk_div.vhd 存入資料夾中
文書設計快速入門 2/4 完成除頻器之 VHDL 程式 可改變除頻的倍數
文書設計快速入門 3/4 File Project Set Project to Current File, 將專 (project) 名稱設定成與現在所編輯的檔案名稱一致 File Project Save and Check, 儲存檔案並檢語法
文書設計快速入門 4/4 確定程式語法無誤 進行簡易的編繹
電路的功能模擬 1/7 開啟一個新的 Waveform Editor, 並將 clk_in clk_o cnt1 信號加入, 並儲存為 clk_div.scf 檔
電路的功能模擬 2/7 Option Grid Size, 將單位時間長度設定
電路的功能模擬 3/7 File End Time, 將模擬時間設定為 10
電路的功能模擬 4/7 點選 clk_in 使其反白, 並按下 Clock 圖示以產生
電路的功能模擬 5/7 點選功能模擬圖示以完成模擬動作
電路的功能模擬 6/7 點選圖示將畫面顯示成整體時間長度
電路的功能模擬 7/7 將畫面放大, 可驗證出 clk_out 的頻率為 clk_in 除以 1
計數器程式碼 --------------------------------------------------------------------- -- 實驗名稱 : 霹靂燈實習 -- 檔案名稱 :counter.vhd -- 功能 :3 位元上 / 下數計數器 -- 日期 :2004.02.10 --------------------------------------------------------------------- library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity counter is port( CLK : in std_logic; RST : in std_logic; DnUp : in std_logic; CNT : out std_logic_vector(2 downto 0) ); end counter; process (CLK,RST,DnUp) begin if RST = '0' then cnt1 <= "000"; elsif CLK'event and CLK='1' then if DnUp='1' then cnt1 <= cnt1-1; else cnt1 <= cnt1 + 1; end if; end if; end process; CNT <= cnt1; end a; architecture a of counter is signal cnt1 : std_logic_vector(2 downto 0); begin
3 對 8 解碼器程式碼 --------------------------------------------------------------------- -- 實驗名稱 : 霹靂燈實習 -- 檔案名稱 :decoder.vhd -- 功能 :3 對 8 解碼器 -- 日期 :2004.02.10 --------------------------------------------------------------------- library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity decoder is port( A : in std_logic; B : in std_logic; C : in std_logic; Y : out std_logic_vector(7 downto 0) ); end decoder; architecture a of decoder is signal XIN : std_logic_vector(2 downt begin XIN <= C & B & A; with XIN select Y <= "00000001" when "000", "00000010" when "001", "00000100" when "010", "00001000" when "011", "00010000" when "100", "00100000" when "101", "01000000" when "110", "10000000" when "111", "00000000" when others; end a;
主程式程式碼 ---------------------------------------------------------------- -- 實驗名稱 : 霹靂燈實習 -- 檔案名稱 :top_vhdl.vhd -- 功能 : 霹靂燈主程式 -- 日期 :2004.02.10 ---------------------------------------------------------------- library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity top_vhdl is port( CLK : in std_logic; RST : in std_logic; DnUp : in std_logic; L : out std_logic_vector(8 downto 1); LED_COM : out std_logic ); end top_vhdl; architecture a of top_vhdl is component clk_div generic(divisor:integer:=1000000); port( clk_in : in std_logic; clk_out: buffer std_logic ); end component; 將專案名稱設定為主程式名稱 --- component counter port( CLK : in std_logic; RST : in std_logic; DnUp : in std_logic; CNT : out std_logic_vector(2 downto 0) ); end component; component decoder port( A : in std_logic; B : in std_logic; C : in std_logic; Y : out std_logic_vector(7 downto 0) ); end component; signal clk_10hz : std_logic; signal CNT_t : std_logic_vector(2 downto 0); begin LED_COM <= '1'; U1 : clk_div port map(clk,clk_10hz); U2 : counter port map(clk_10hz,rst,dnup,cnt_ U3 : decoder port map(cnt_t(0),cnt_t(1),cnt_t end a;
檔案的編繹與驗證 選取晶片型號 MAX7000S EPM7064SLC44-10 腳位配置 輸入腳位輸出 CLK 43(clk) L1 RST 37(PS1) L2 程式編譯 下載與測試 DnUp 29(SW1) L3 L4 L5 L6 L7 L8
Graphic 與 VHDL 整合 開啟新的圖形設計檔 (Graphic Editor), 可將 VHDL 編譯後的 S 入並加以連線, 以完成整合 Graphic 與 VHDL 之系統設計
Graphic 與 VHDL 整合 完成以下之電路連線後並儲存檔案為 top_graphic.g 將專案名稱設定為 top_graphic 並完成系統編譯與驗
參考資料 陳慶逸 林柏辰編著,VHDL 數位電路實習與專題設文魁資訊,2005
Click below to find more Mipaper at www.lcis.com.tw Mipaper at www.lcis.com.tw