1. 程式人生 > >Xilinx ISE使用流程(從新建專案到模擬執行)-之一

Xilinx ISE使用流程(從新建專案到模擬執行)-之一

          最近在忙著做畢業設計(計算機專業,非電子專業),從小就喜歡電子技術,但由於之前沒有接觸過FPGA,所以特意跑書店買了一本《Xilinx FPGA數字設計》一書,這本書同時用VHDLVerilog HDL兩種語言講解,使用的示例非常簡潔明瞭,是一本非常適合入門的圖。我在學習VHDL的時候,發現網上資料很少,所有決定把自己所學的知識和心得分享給廣大網友,以便初學FPGA的同學們可以快速掌握Xilinx ISE工具的應用。

        注意:閱讀本篇文章需要數位電路和C語言等語言基礎,本篇文章的程式碼示例出自《Xilinx FPGA數字設計》,請大家尊重版權。我使用的Xilinx

版本為ISE 14.2

       1、         新建專案

單擊File->New Project,彈出New Project Wizard嚮導介面。在Namel一欄中輸入gatelocation目錄選擇D:\vhdl\simple1\gateworking Directory選擇D:\vhdl\simple1\gateTop-level source type:選擇HDL,即硬體描述語言

       

         單擊Next,選擇晶片型號和封裝等,其中,晶片大家可以選擇自己喜歡的,Synthesis Tool(綜合工具)選擇XST (VHDL/Verilog)

Simluator(模擬工具)選擇ISim (VHDL/Verilog),當然你也可以選擇Modesim工具,Preferred Language(偏好語言)選擇VHDLVHDL Source Analysis StandardVHDL語言分析標準)選擇VHDL-200X

     單擊Next,進入Project Summary頁面,單擊Finish,這一節我就不截圖了。

進入程式主介面,我們可以看到一個空檢視(Empty View),如下圖:

        接下來我們要新增原始碼了,在Hierarchy(層級)面板中選中XC6SLX16-3CSG324節點,右鍵單擊New Source

選單,彈出New Source wizard嚮導介面,選中VHDL Module樹節點,在右側的File name輸入gate。如下圖:

單擊Next按鈕,在Port Name列中輸入a,b,z三個變數,Direction(方向)選擇:a,b選擇inz選擇out,並選中Bus複選框,MSB(最高有效位)為5LSB(最低有效位)為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,證明我們的程式是正確的。如下圖: