Xilinx ISE使用流程(從新建專案到模擬執行)-之一
最近在忙著做畢業設計(計算機專業,非電子專業),從小就喜歡電子技術,但由於之前沒有接觸過FPGA,所以特意跑書店買了一本《Xilinx FPGA數字設計》一書,這本書同時用VHDL和Verilog HDL兩種語言講解,使用的示例非常簡潔明瞭,是一本非常適合入門的圖。我在學習VHDL的時候,發現網上資料很少,所有決定把自己所學的知識和心得分享給廣大網友,以便初學FPGA的同學們可以快速掌握Xilinx ISE工具的應用。
注意:閱讀本篇文章需要數位電路和C語言等語言基礎,本篇文章的程式碼示例出自《Xilinx FPGA數字設計》,請大家尊重版權。我使用的Xilinx
1、 新建專案
單擊File->New Project,彈出New Project Wizard嚮導介面。在Namel一欄中輸入gate,location目錄選擇D:\vhdl\simple1\gate,working Directory選擇D:\vhdl\simple1\gate,Top-level source type:選擇HDL,即硬體描述語言
單擊Next,選擇晶片型號和封裝等,其中,晶片大家可以選擇自己喜歡的,Synthesis Tool(綜合工具)選擇XST (VHDL/Verilog)
單擊Next,進入Project Summary頁面,單擊Finish,這一節我就不截圖了。
進入程式主介面,我們可以看到一個空檢視(Empty View),如下圖:
接下來我們要新增原始碼了,在Hierarchy(層級)面板中選中XC6SLX16-3CSG324節點,右鍵單擊New Source
單擊Next按鈕,在Port Name列中輸入a,b,z三個變數,Direction(方向)選擇:a,b選擇in,z選擇out,並選中Bus複選框,MSB(最高有效位)為5,LSB(最低有效位)為0,如下圖所示:
單擊Next後,再單擊Finish,這一節我也不截圖了。ISE會自動彈出gate.vhd原始碼編輯器,我們在41行輸入如下程式碼(我貼的是全部的程式碼):
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 15:31:41 04/10/2016
-- Design Name:
-- Module Name: gate - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity gate is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
z : out STD_LOGIC_VECTOR (5 downto 0));
end gate;
architecture Behavioral of gate is
begin
z(0)<=a and b;--與閘電路,將輸入a和輸入b進行與運算,賦值給z(0)
z(1)<=a nand b;--與非閘電路,將輸入a和輸入b進行與非運算,賦值給z(1)
z(2)<=a or b;--或閘電路,將輸入a和輸入b進行或運算,賦值給z(2)
z(3)<=a nor b;--或非閘電路,將輸入a和輸入b進行或非運算,賦值給z(3)
z(4)<=a xor b;--異或閘電路,將輸入a和輸入b進行異或運算,賦值給z(4)
z(5)<=a xnor b;--異或非閘電路,將輸入a和輸入b進行異或非運算,賦值給z(5)
end Behavioral;
儲存程式碼。接下來進行綜合,綜合主要是語法檢查,編譯和對映,雙擊No Processes Running視窗中的Syntesize – XST,如果有語法錯誤則需要解決語法錯誤。
接下來進行模擬,測試我們的程式是否正確。切換到Simulation視窗,選中gate節點,右鍵New Source選單,選擇VHDL Test Bench,在File Name中輸入Test,如下圖
單擊下一步,選擇gate,單擊下一步,選擇Finish完成。將60,71-92行的程式碼刪掉。
重新新增如下程式碼:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY test IS
END test;
ARCHITECTURE behavior OF test IS
-- 閘電路呼叫宣告(UUT)
COMPONENT gate
PORT(
a : IN std_logic;
b : IN std_logic;
z : OUT std_logic_vector(5 downto 0)
);
END COMPONENT;
--輸入訊號
signal a : std_logic := '0';
signal b : std_logic := '0';
--輸出訊號
signal z : std_logic_vector(5 downto 0);
-- No clocks detected in port list. Replace <clock> below with
-- appropriate port name
BEGIN
-- 呼叫閘電路
uut: gate PORT MAP (
a => a,
b => b,
z => z
);
--設定輸入訊號
init:process begin
a<='0';
b<='0';
wait for 100 ns;
a<='0';
b<='1';
wait for 100 ns;
a<='1';
b<='0';
wait for 100 ns;
a<='1';
b<='1';
wait for 100 ns;
end process;
END behavior;
看完這些程式碼,我不禁佩服這本書的作者,將如此簡單易學的示例搬出來,這也是這本書非常出色的地方。超讚!
選中gate節點,然後點選Simulate Behavioral Model (模擬行為型行),如下圖:
ISE自動彈出信真介面,單擊按鈕縮小波形視窗,直到出現下圖
波形說明:當a=0,b=0時,Z(0)是與門輸出,為0,Z(1)是與非閘電路,為1,Z(2)是或閘電路,為0,Z(3)是或非閘電路,輸出為1,Z(4)異或閘電路,為0,Z(5)是異或非閘電路,為1,故波形輸出由高到低為101010,證明我們的程式是正確的。如下圖: