Difference between revisions of "EDK tutorial 3"

From ift
(New page: == VHDL design i ISE 7.1 for virtex-4 == En enkel steg-for-steg veiledning til implementasjon av en RS232 transmitter på en virtex-4 FPGA Dette er en kort introduksjon til Xilinx ISE og...)
 
m
 
Line 3: Line 3:
 
En enkel steg-for-steg veiledning til implementasjon av en RS232 transmitter på en virtex-4 FPGA
 
En enkel steg-for-steg veiledning til implementasjon av en RS232 transmitter på en virtex-4 FPGA
  
Dette er en kort introduksjon til Xilinx ISE og vhdl design i EDK. Vi tar utgangspunkt i det samme prototypekortet (DS-BD-V4LX25MB) som i turtorail 1 og 2. Målet er å lage en enkelt RS232 transmitter som sender koden på DIP-bryterene til en terminal på PC'en. Du vil trenge hyperterminal eller et annet tilsvarende program til å lese COM porten på PC'en.  
+
Dette er en kort introduksjon til Xilinx ISE og vhdl design i EDK. Vi tar utgangspunkt i det samme prototypekortet (DS-BD-V4LX25MB) som i turtorail 1 og 2. Målet er å lage en enkelt RS232 transmitter som sender koden på DIP-bryterene til en terminal på PC'en. Du vil trenge hyperterminal eller et annet tilsvarende program til å lese COM porten på PC'en.
  
 
=== Lage nytt prosjekt ===
 
=== Lage nytt prosjekt ===
Line 11: Line 11:
 
[[Image:EDK_XPS_30.jpg]]
 
[[Image:EDK_XPS_30.jpg]]
  
Du vil nå få opp et vindu hvor du kan velge hviken FPGA du vil bruke, samt vertøyvalg. Sett "Device Family" til Virtex4, "Device" til "xc4vlx25", "Package" til "ff668" og "Speed Grade til -10". "Synthesis Tool" settes til "XST", "Simulator" til "ISE simulator" og simuleringsspråk settes til VHDL. Trykk så "Next".
+
Du vil nå få opp et vindu hvor du kan velge hviken FPGA du vil bruke, samt vertøyvalg. Sett "Device Family" til Virtex4, "Device" til "xc4vlx25", "Package" til "ff668" og "Speed Grade til -10". "Synthesis Tool" settes til "XST", "Simulator" til "ISE simulator" og simuleringsspråk settes til VHDL. Trykk så "Next".
  
 
[[Image:EDK_XPS_31.jpg]]
 
[[Image:EDK_XPS_31.jpg]]
Line 29: Line 29:
 
Du får nå opp et vindu med et samendrag av kildefilen din. Trykk "Finish". Du kommer nå tilbake til vinduet hvor du kan legge til kildefiler. Trykk "Next".
 
Du får nå opp et vindu med et samendrag av kildefilen din. Trykk "Finish". Du kommer nå tilbake til vinduet hvor du kan legge til kildefiler. Trykk "Next".
  
Neste vindu lar deg legge til ferdige kilderfiler. Ta filene [[Media:rs232_clk.vhd">rs232_clk.vhd</a> og [[Media:rs232_tx.vhd">rs232_tx.vhd</a> og last dem ned på maskinen din.  
+
Neste vindu lar deg legge til ferdige kilderfiler. Ta filene [[Media:rs232_clk.vhd">rs232_clk.vhd</a> og [[Media:rs232_tx.vhd">rs232_tx.vhd</a> og last dem ned på maskinen din.
 
<pre>
 
<pre>
 
---------------------------------
 
---------------------------------
Line 42: Line 42:
  
 
entity rs232_clk is
 
entity rs232_clk is
  port( clk      :  in    std_logic;  --main clk 100MHz
+
port( clk      :  in    std_logic;  --main clk 100MHz
        reset    :  in    std_logic;  --global reset
+
reset    :  in    std_logic;  --global reset
        clk_tx    :  inout std_logic;  --sendeklokke 16*baudrate
+
clk_tx    :  inout std_logic;  --sendeklokke 16*baudrate
        bit_send  :  out  std_logic); --pulstog 1*baudrate
+
bit_send  :  out  std_logic); --pulstog 1*baudrate
 
end rs232_clk;
 
end rs232_clk;
  
 
architecture Behavioral of rs232_clk is
 
architecture Behavioral of rs232_clk is
 
--interne tellere
 
--interne tellere
  signal clk_teller_1 : std_logic_vector(0 to 8);
+
signal clk_teller_1 : std_logic_vector(0 to 8);
  signal clk_teller_2 : std_logic_vector(0 to 3);
+
signal clk_teller_2 : std_logic_vector(0 to 3);
  
 
begin
 
begin
Line 60: Line 60:
 
-- 100MHz/(9600*32) = 325 = 101000101--
 
-- 100MHz/(9600*32) = 325 = 101000101--
 
---------------------------------------
 
---------------------------------------
  process (clk)
+
process (clk)
  begin
+
begin
  if clk'event and clk='1' then
+
if clk'event and clk='1' then
      if reset = '1' then
+
if reset = '1' then
        clk_teller_1 <= clk_teller_1 + 1;
+
clk_teller_1 <= clk_teller_1 + 1;
        if clk_teller_1 = "101000101" then
+
if clk_teller_1 = "101000101" then
            clk_tx <= not clk_tx;
+
clk_tx <= not clk_tx;
            clk_teller_1 <= "000000000";
+
clk_teller_1 <= "000000000";
        end if;
+
end if;
      else
+
else
        clk_teller_1 <= "000000000";
+
clk_teller_1 <= "000000000";
      end if;
+
end if;
  end if;
+
end if;
  end process;
+
end process;
  
 
---------------------------------------
 
---------------------------------------
Line 80: Line 80:
 
--    som baudraten                  --
 
--    som baudraten                  --
 
---------------------------------------
 
---------------------------------------
  process (reset, clk_tx)
+
process (reset, clk_tx)
  begin  
+
begin
      if reset = '0' then
+
if reset = '0' then
        bit_send  <= '0';
+
bit_send  <= '0';
        clk_teller_2 <= "0000";
+
clk_teller_2 <= "0000";
      elsif rising_edge(clk_tx) then
+
elsif rising_edge(clk_tx) then
        clk_teller_2 <= clk_teller_2 + 1;
+
clk_teller_2 <= clk_teller_2 + 1;
        if clk_teller_2 = "1111" then
+
if clk_teller_2 = "1111" then
            bit_send <= '1';
+
bit_send <= '1';
        elsif clk_teller_2 = "0000" then
+
elsif clk_teller_2 = "0000" then
            bit_send <= '0';
+
bit_send <= '0';
        end if;
+
end if;
      end if;
+
end if;
  end process;
+
end process;
  
 
end Behavioral;
 
end Behavioral;
Line 110: Line 110:
  
 
entity rs232_tx is
 
entity rs232_tx is
  port( clk_tx  :  in  std_logic;  --clk 16 * baudrateklokke
+
port( clk_tx  :  in  std_logic;  --clk 16 * baudrateklokke
        reset    :  in  std_logic;  --global reset
+
reset    :  in  std_logic;  --global reset
        bit_send :  in  std_logic;  --pulstog 1*baudrate
+
bit_send :  in  std_logic;  --pulstog 1*baudrate
        send    :  in  std_logic;  --starter transmitt
+
send    :  in  std_logic;  --starter transmitt
        data    :  in  std_logic_vector(7 downto 0); --data som skal sendes
+
data    :  in  std_logic_vector(7 downto 0); --data som skal sendes
        tx      :  out  std_logic;  --transmittpinne
+
tx      :  out  std_logic;  --transmittpinne
        opptatt  :  out  std_logic); --sender opptatt signal
+
opptatt  :  out  std_logic); --sender opptatt signal
 
end rs232_tx;
 
end rs232_tx;
  
 
architecture Behavioral of rs232_tx is
 
architecture Behavioral of rs232_tx is
  type tilstander is (idle, start_sending, sender, stop_send);
+
type tilstander is (idle, start_sending, sender, stop_send);
  signal sende_data :      tilstander := idle;
+
signal sende_data :      tilstander := idle;
  signal transmitt_buffer : std_logic_vector(9 downto 0); --transmitt buffer (10 bit)
+
signal transmitt_buffer : std_logic_vector(9 downto 0); --transmitt buffer (10 bit)
  signal transmitt_data :   std_logic_vector(7 downto 0);  --inneholder databyte som skal sendes
+
signal transmitt_data :   std_logic_vector(7 downto 0);  --inneholder databyte som skal sendes
  signal bit_teller:        integer := 9;
+
signal bit_teller:        integer := 9;
 
begin
 
begin
  
Line 130: Line 130:
 
--senderutine for rs232--
 
--senderutine for rs232--
 
-------------------------
 
-------------------------
  sender_rs232: process (reset, clk_tx)
+
sender_rs232: process (reset, clk_tx)
  begin
+
begin
      if reset='0' then
+
if reset='0' then
        opptatt <= '0';
+
opptatt <= '0';
        sende_data <= idle;
+
sende_data <= idle;
        transmitt_buffer <= (others=> '1');
+
transmitt_buffer <= (others=> '1');
      elsif rising_edge(clk_tx) then
+
elsif rising_edge(clk_tx) then
        case sende_data  is
+
case sende_data  is
            when idle =>
+
when idle =>
              if send = '0' then
+
if send = '0' then
                  transmitt_data <= data;
+
transmitt_data <= data;
                  opptatt <= '1';
+
opptatt <= '1';
                  sende_data <= start_sending;
+
sende_data <= start_sending;
              else
+
else
                  opptatt <= '0';
+
opptatt <= '0';
              end if;
+
end if;
  
            when start_sending =>
+
when start_sending =>
              if bit_send = '1' then
+
if bit_send = '1' then
                  sende_data <= sender;
+
sende_data <= sender;
                  bit_teller <= 9;
+
bit_teller <= 9;
                  transmitt_buffer <= '1' & transmitt_data & '0';
+
transmitt_buffer <= '1' & transmitt_data & '0';
              end if;
+
end if;
  
            when sender =>
+
when sender =>
              if bit_send = '1' then
+
if bit_send = '1' then
                  bit_teller <= bit_teller - 1;
+
bit_teller <= bit_teller - 1;
                  transmitt_buffer <= '1' & transmitt_buffer(transmitt_buffer'high downto 1);
+
transmitt_buffer <= '1' & transmitt_buffer(transmitt_buffer'high downto 1);
                  if bit_teller = 1 then
+
if bit_teller = 1 then
                    sende_data <= stop_send;
+
sende_data <= stop_send;
                  end if;
+
end if;
              end if;
+
end if;
  
            when stop_send =>
+
when stop_send =>
              if bit_send = '1' then
+
if bit_send = '1' then
                  sende_data <= idle;
+
sende_data <= idle;
              end if;
+
end if;
  
            When others =>
+
When others =>
              sende_data <= idle;
+
sende_data <= idle;
+
 
        end case;
+
end case;
      end if;
+
end if;
  end process;
+
end process;
  tx <= transmitt_buffer(0);
+
tx <= transmitt_buffer(0);
 
end Behavioral;
 
end Behavioral;
 
</pre>
 
</pre>
Line 190: Line 190:
 
<pre>
 
<pre>
 
--legger til komponenter
 
--legger til komponenter
  component rs232_clk
+
component rs232_clk
      port ( clk              : in    std_logic;
+
port ( clk              : in    std_logic;
            reset            : in    std_logic;
+
reset            : in    std_logic;
            clk_tx          : out  std_logic;  
+
clk_tx          : out  std_logic;
            bit_send        : out  std_logic);
+
bit_send        : out  std_logic);
  end component;
+
end component;
  
  component rs232_tx
+
component rs232_tx
      port ( clk_tx          : in    std_logic;
+
port ( clk_tx          : in    std_logic;
            reset            : in    std_logic;
+
reset            : in    std_logic;
            bit_send        : in    std_logic;
+
bit_send        : in    std_logic;
            send            : in    std_logic;
+
send            : in    std_logic;
            data            : in    std_logic_vector(7 downto 0);
+
data            : in    std_logic_vector(7 downto 0);
            tx              : out  std_logic;
+
tx              : out  std_logic;
            opptatt          : out  std_logic);
+
opptatt          : out  std_logic);
  end component;
+
end component;
  
 
--definere interne signaler
 
--definere interne signaler
  signal bit_send  : std_logic;
+
signal bit_send  : std_logic;
  signal clk_tx    : std_logic;            
+
signal clk_tx    : std_logic;
 
</pre>
 
</pre>
  
Line 216: Line 216:
 
<pre>
 
<pre>
 
-- kobler klokke og tx signaler til rs232_main entity sig.
 
-- kobler klokke og tx signaler til rs232_main entity sig.
  klokke_gen: rs232_clk
+
klokke_gen: rs232_clk
      port map( clk,
+
port map( clk,
                reset,
+
reset,
                clk_tx,  
+
clk_tx,
                bit_send);
+
bit_send);
  
  transmitt: rs232_tx
+
transmitt: rs232_tx
      port map( clk_tx,
+
port map( clk_tx,
                reset,
+
reset,
                bit_send,
+
bit_send,
                send,
+
send,
                data,
+
data,
                tx,
+
tx,
                opptatt);
+
opptatt);
 
</pre>
 
</pre>
  
Line 268: Line 268:
  
 
=== Sythesisering og Implementering ===
 
=== Sythesisering og Implementering ===
+
 
 
Neste steg blir å Synthesiserer og implementere deisgnet vårt. Marker igjen filen RS232_main.vhd i "Module View" vinduet og dobbeltklikk på "Genreate Programming File" i "Process View". Du vil nå få generert en bit fil som kan lastes over i FPGA'en.
 
Neste steg blir å Synthesiserer og implementere deisgnet vårt. Marker igjen filen RS232_main.vhd i "Module View" vinduet og dobbeltklikk på "Genreate Programming File" i "Process View". Du vil nå få generert en bit fil som kan lastes over i FPGA'en.
  
=== Programering og testing ===
+
=== Programmering og testing ===
  
 
Vi skal nå programmere FPGA'en. Sørg for at det er strøm på kortet og at programmeringsadapterert er koblet til. Start også hyperterminal med med en baudrate på 9600kbps. Gå til "Process View" og dobeltklikk på "Configure Device(iMPACT). Du åpner nå iMPACT programmet. På spørsmålom konfigurerig velg "Boundary-Scan mode". I neste vindu velger du automatisk tilkobling. Trykk så "Finish". iMPACT vil nå automatisk sjekke hvor mange og hvilke type FPGA'er som er koblet til programmeringsadapterert. Du vil få et vindu som sier at en enhet er funnet. Trykk "Ok". Du får nå opp et vindu der du blir bedt om å tilordne en new configureringsfil. Velg filen rs232_main.bit. Du får nå opp en advarsel. Ignorer denne og trykk "Ok". Høyreklikk på bildet av Virtex4 og velg "porgram...". Trykk så "Ok". Du vil nå programere FPGA'en.
 
Vi skal nå programmere FPGA'en. Sørg for at det er strøm på kortet og at programmeringsadapterert er koblet til. Start også hyperterminal med med en baudrate på 9600kbps. Gå til "Process View" og dobeltklikk på "Configure Device(iMPACT). Du åpner nå iMPACT programmet. På spørsmålom konfigurerig velg "Boundary-Scan mode". I neste vindu velger du automatisk tilkobling. Trykk så "Finish". iMPACT vil nå automatisk sjekke hvor mange og hvilke type FPGA'er som er koblet til programmeringsadapterert. Du vil få et vindu som sier at en enhet er funnet. Trykk "Ok". Du får nå opp et vindu der du blir bedt om å tilordne en new configureringsfil. Velg filen rs232_main.bit. Du får nå opp en advarsel. Ignorer denne og trykk "Ok". Høyreklikk på bildet av Virtex4 og velg "porgram...". Trykk så "Ok". Du vil nå programere FPGA'en.

Latest revision as of 09:20, 2 March 2009

VHDL design i ISE 7.1 for virtex-4

En enkel steg-for-steg veiledning til implementasjon av en RS232 transmitter på en virtex-4 FPGA

Dette er en kort introduksjon til Xilinx ISE og vhdl design i EDK. Vi tar utgangspunkt i det samme prototypekortet (DS-BD-V4LX25MB) som i turtorail 1 og 2. Målet er å lage en enkelt RS232 transmitter som sender koden på DIP-bryterene til en terminal på PC'en. Du vil trenge hyperterminal eller et annet tilsvarende program til å lese COM porten på PC'en.

Lage nytt prosjekt

Start programmet "Project Navigator" under "Xilinx ISE 7.1i" menyen. Når du starter opp vil forrige prosjekt automatisk ligge der hvist noen har brukt ISE før deg. I tilfelle så lukker du prosjektet ved å velge "Close Project" under "File" menyen. Fra "file" menyen velger du så "New Project". Du vil nå få opp et vindu hvor du kan navngi prosjektet og velge plasering. Kall prosjektet "RS232" og finn en passende plasering for prosjektkatalogen. "Top Level Module Type" setter du til VHD. Trykk så "Next"

File:EDK XPS 30.jpg

Du vil nå få opp et vindu hvor du kan velge hviken FPGA du vil bruke, samt vertøyvalg. Sett "Device Family" til Virtex4, "Device" til "xc4vlx25", "Package" til "ff668" og "Speed Grade til -10". "Synthesis Tool" settes til "XST", "Simulator" til "ISE simulator" og simuleringsspråk settes til VHDL. Trykk så "Next".

File:EDK XPS 31.jpg

Du vil nå få opp ett vindu hvor du har muligheten til å få generert en kildefil til prosjektet. Trykk på "New Source".

File:EDK XPS 32.jpg

Velg "VHDL Module" og gi den navnet "RS232_main". Pass på at boksen "Add to Project" er merket og trykk "Next".

File:EDK XPS 33.jpg

Du kan nå legge til porter. Legg inn portene; clk, reset og send som "in". Legg til data som "in" og sett MSB til 7 og LSB til 0. Legg til port tx og opptatt som "out". Trykk så "Next".

File:EDK XPS 34.jpg

Du får nå opp et vindu med et samendrag av kildefilen din. Trykk "Finish". Du kommer nå tilbake til vinduet hvor du kan legge til kildefiler. Trykk "Next".

Neste vindu lar deg legge til ferdige kilderfiler. Ta filene [[Media:rs232_clk.vhd">rs232_clk.vhd</a> og [[Media:rs232_tx.vhd">rs232_tx.vhd</a> og last dem ned på maskinen din.

---------------------------------
--Tor Aleksander Birk Danielsen--
--     klokke til RS232        --
--        10.04.2005           --
---------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity rs232_clk is
port( 	clk       :  in    std_logic;  --main clk 100MHz
reset     :  in    std_logic;  --global reset
clk_tx    :  inout std_logic;  --sendeklokke 16*baudrate
bit_send  :  out   std_logic); --pulstog 1*baudrate
end rs232_clk;

architecture Behavioral of rs232_clk is
--interne tellere
signal clk_teller_1 : std_logic_vector(0 to 8);
signal clk_teller_2 : std_logic_vector(0 to 3);

begin

---------------------------------------
--lage klokkefrekvens på 16xbaudraten--
--   clk/(budrate*16) = tellerverdi*2--
-- 100MHz/(9600*32) = 325 = 101000101--
---------------------------------------
process (clk)
begin
if clk'event and clk='1' then
if reset = '1' then
clk_teller_1 <= clk_teller_1 + 1;
if clk_teller_1 = "101000101" then
clk_tx <= not clk_tx;
clk_teller_1 <= "000000000";
end if;
else
clk_teller_1 <= "000000000";
end if;
end if;
end process;

---------------------------------------
--lage 1/16 puls av clk_tx til sender--
--    dvs pulstog med samme frekvens --
--    som baudraten                  --
---------------------------------------
process (reset, clk_tx)
begin
if reset = '0' then
bit_send  <= '0';
clk_teller_2 <= "0000";
elsif rising_edge(clk_tx) then
clk_teller_2 <= clk_teller_2 + 1;
if clk_teller_2 = "1111" then
bit_send <= '1';
elsif	 clk_teller_2 = "0000" then
bit_send <= '0';
end if;
end if;
end process;

end Behavioral;
---------------------------------
--Tor Aleksander Birk Danielsen--
--       sender RS232          --
--        10.04.2005           --
---------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity rs232_tx is
port( clk_tx   :  in   std_logic;  --clk 16 * baudrateklokke
reset    :  in   std_logic;  --global reset
bit_send :  in   std_logic;  --pulstog 1*baudrate
send     :  in   std_logic;  --starter transmitt
data     :  in   std_logic_vector(7 downto 0); --data som skal sendes
tx       :  out  std_logic;  --transmittpinne
opptatt  :  out  std_logic); --sender opptatt signal
end rs232_tx;

architecture Behavioral of rs232_tx is
type 	 tilstander is (idle, start_sending, sender, stop_send);
signal sende_data :       tilstander := idle;
signal transmitt_buffer : std_logic_vector(9 downto 0); 	--transmitt buffer (10 bit)
signal transmitt_data : 	  std_logic_vector(7 downto 0);   	--inneholder databyte som skal sendes
signal bit_teller:        integer := 9;
begin

-------------------------
--senderutine for rs232--
-------------------------
sender_rs232: process (reset, clk_tx)
begin
if reset='0' then
opptatt <= '0';
sende_data <= idle;
transmitt_buffer <= (others=> '1');
elsif rising_edge(clk_tx) then
case sende_data  is
when idle =>
if send = '0' then
transmitt_data <= data;
opptatt <= '1';
sende_data <= start_sending;
else
opptatt <= '0';
end if;

when start_sending =>
if bit_send = '1' then
sende_data <= sender;
bit_teller <= 9;
transmitt_buffer <= '1' & transmitt_data & '0';
end if;

when sender =>
if bit_send	= '1' then
bit_teller <= bit_teller - 1;
transmitt_buffer <= '1' & transmitt_buffer(transmitt_buffer'high downto 1);
if bit_teller = 1 then
sende_data <= stop_send;
end if;
end if;

when stop_send =>
if bit_send = '1' then
sende_data <= idle;
end if;

When others =>
sende_data <= idle;

end case;
end if;
end process;
tx <= transmitt_buffer(0);
end Behavioral;

Trykk så "Add Source" og legg begge filene til prosjektet. På spørsmål om filtype velg "VHDL design file". Trykk så "Next".

File:EDK XPS 35.jpg

Du vil nå få opp et sammendrag av prosjektet ditt. Trykk "Finish" og prosjektet vil bli generert.

Lage koden

Vi har nå en main fil samt en fil med klokkekode og en fil med transisjonskode. Neste steg bli å inkludere klokken og senderen i hovedfilene vår. Dobbeltklikk på filen "RS232_main.vhd" under "Module View" for å åpne filen for editering. Legg til følgende kodebit mellom "architecture .." og "begin":

--legger til komponenter
component rs232_clk
port ( clk              : in    std_logic;
reset            : in    std_logic;
clk_tx           : out   std_logic;
bit_send         : out   std_logic);
end component;

component rs232_tx
port ( clk_tx           : in    std_logic;
reset            : in    std_logic;
bit_send         : in    std_logic;
send             : in    std_logic;
data             : in    std_logic_vector(7 downto 0);
tx               : out   std_logic;
opptatt          : out   std_logic);
end component;

--definere interne signaler
signal bit_send   : std_logic;
signal clk_tx     : std_logic;

Etter begin legges følgende kodebit inn:

-- kobler klokke og tx signaler til rs232_main entity sig.
klokke_gen: rs232_clk
port map( clk,
reset,
clk_tx,
bit_send);

transmitt: rs232_tx
port map( clk_tx,
reset,
bit_send,
send,
data,
tx,
opptatt);

Filen Media:RS232_main.vhd kan lastes ned ferdig hvis du er usikker på om du har lagt inn koden korrekt. Når du er ferdig med å redigere main filen tar du å lagrer prosjektet. Neste steg blir å test om koden er korekt. I "prosess View" vinduet går du til "Design Utilities" og dobbelklikker på "Check Syntax for Simulation". Har du gjort alt korekt skal du ikke få noen feilmelding nå. I "Module view" kan du også se at RS232_clk og RS232_tx har blitt underordnet RS232_main.

Legge til pinner

Neste steg er å legge til "user constraints" som i vårt tilfelle betyr å definere hvilke pinner som skal til hviken port. I "Module View" menyen markerer du filen RS232_main.vhd da det er denne filen du ønsker å legge "User Constraints" til. Når filen er markert går du til "Prosess View" vinduet og velger "User Constraints" menyen. Dobbeltklikk på "Assign Package Pins". Du vil nå få spørsmål om du vil legge til en UCF fil til prosjektet. Trykk "Yes". Du får nå opp et nytt vindu. I "Design Object List" vinduet har du en oversikt over alle IO porter i prosjektet ditt. Vi skal nå legge inn pinnr i "Loc" til hver av portene. Legg til følgene:

File:EDK XPS 36.jpg

Når du er ferdig lagrer du og avslutter hele 2Xilinx Pace" vinduet. Du har nå fått generert en UCF fil til prosjektet ditt som inneholder følgende:

#PACE: Start of Constraints generated by PACE

#PACE: Start of PACE I/O Pin Assignments
NET "clk"  LOC = "B13"  ;
NET "data<0>"  LOC = "AD11"  ;
NET "data<1>"  LOC = "AC12"  ;
NET "data<2>"  LOC = "AC13"  ;
NET "data<3>"  LOC = "AD13"  ;
NET "data<4>"  LOC = "AC14"  ;
NET "data<5>"  LOC = "AD14"  ;
NET "data<6>"  LOC = "AC15"  ;
NET "data<7>"  LOC = "AB7"  ;
NET "opptatt"  LOC = "AE9"  ;
NET "reset"  LOC = "AB9"  ;
NET "send"  LOC = "AA11"  ;
NET "tx"  LOC = "T7"  ;

#PACE: Start of PACE Area Constraints

#PACE: Start of PACE Prohibit Constraints

#PACE: End of Constraints generated by PACE

Sythesisering og Implementering

Neste steg blir å Synthesiserer og implementere deisgnet vårt. Marker igjen filen RS232_main.vhd i "Module View" vinduet og dobbeltklikk på "Genreate Programming File" i "Process View". Du vil nå få generert en bit fil som kan lastes over i FPGA'en.

Programmering og testing

Vi skal nå programmere FPGA'en. Sørg for at det er strøm på kortet og at programmeringsadapterert er koblet til. Start også hyperterminal med med en baudrate på 9600kbps. Gå til "Process View" og dobeltklikk på "Configure Device(iMPACT). Du åpner nå iMPACT programmet. På spørsmålom konfigurerig velg "Boundary-Scan mode". I neste vindu velger du automatisk tilkobling. Trykk så "Finish". iMPACT vil nå automatisk sjekke hvor mange og hvilke type FPGA'er som er koblet til programmeringsadapterert. Du vil få et vindu som sier at en enhet er funnet. Trykk "Ok". Du får nå opp et vindu der du blir bedt om å tilordne en new configureringsfil. Velg filen rs232_main.bit. Du får nå opp en advarsel. Ignorer denne og trykk "Ok". Høyreklikk på bildet av Virtex4 og velg "porgram...". Trykk så "Ok". Du vil nå programere FPGA'en.

File:EDK XPS 37.jpg

Hvis du nå trykker "Push2" bryteren vil du få bittmønsteret til DIP-bryterene oversendt til hyperterminal som ASCII kode. Du har nå suksessfult laget og implementert VHDL kode med ISE.