Forum: FPGA, VHDL & Co. FPGA Pin zuweisen


von D. E. (eschlair)


Lesenswert?

Frage von einem Anfänger:

Habe ein Spartan-3A. Wie weise ich die Portnamen den Pins des FPGA's zu?

Welche Files müssen erstellt werden, damit ein Programm auf einem FPGA 
läuft? egal wenns auch nur ein Blinker ist.


Bin um jede Antwort dankbar!

mfg

von Tom (Gast)


Lesenswert?

Wenn Du einen Spartan hast nehme ich an Du nutzt das WebPack von Xilinx.

Wenn Du dort als erstes dein Top-Level-Design anklickst und dann in dem 
kleinen Fenster links in der Mitte ("Processes for"-Fenster) das Plus 
vor "user constraints" anklickst und in dem sich aufklappenden Menü auf 
"Assign package Pins" gehst bekommst Du ein Tool wo Du die Ports Deinen 
Pins zuweisen kannst.

(Hierbei wird eine UCF Datei erzeugt, die man, wenn man das will, auch 
manuell erstellen könnte)


Um Dein Design dann in den FPGA zu bringen musst Du (wieder im 
"Processes for"-Fenster) "generate programming file" starten. Dann wird 
ein BIT-File erzeugt welches du mit impact auf den FPGA laden kannst.

von D. E. (eschlair)


Lesenswert?

richtig; Xilinx, iMPACT

Dann ist eine ucf-Datei zwingend, damit das Programm läuft? Habe die 
ucf-datei erstellt...gerade etwas überfordert.

von Falk B. (falk)


Lesenswert?

@ Dave E. (eschlair)

>Habe ein Spartan-3A. Wie weise ich die Portnamen den Pins des FPGA's zu?

Entweder "old school" per UCF (eine Datei im Projektverzeichnis) oder 
über PACE, ein Programm zur Pinzuweisung.

>Welche Files müssen erstellt werden, damit ein Programm auf einem FPGA
>läuft? egal wenns auch nur ein Blinker ist.

VHDL Source
UCF mit Pinzuweisungen

Daraus macht dann ISE im Synthesedurchlauf ein *.bit File, welches per 
IMPACT ins FPGA geladen werden kann.

MfG
Falk

von FPGAküchle (Gast)


Lesenswert?


von D. E. (eschlair)


Lesenswert?

Nun habe ich so ein .ucf erstellt - mithilfe der Spartan-Doku.

Es gibt mir nun jedoch 2 Fehler an:

ERROR:Parsers:11 - Encountered unrecognized constraint while parsing.
ERROR:NgdBuild:19 - Errors found while parsing constraint file 
"test.ucf".


Könnte jemand überprüfen, ob die .ucf-Datei ansatzweise stimmt? wäre 
sehr nett!

code im Anhang, .ucf anschliessend:

// Template UCF file created by the Project Navigator
#PINLOCK_BEGIN
#
NET "CLK_50MHZ" LOC = "E12"| IOSTANDARD = LVCMOS33 ;
NET "CI" LOC = "V8" | IOSTANDARD = LVTTL | PULLUP ;
NET "RESET" LOC = "U10"| IOSTANDARD = LVTTL | PULLUP ;
NET COUNTOUT<0> LOC = "W21" | IOSTANDARD = LVTTL | SLEW = QUIETIO | 
DRIVE = 4 ;
NET COUNTOUT<1> LOC = "Y22" | IOSTANDARD = LVTTL | SLEW = QUIETIO | 
DRIVE = 4 ;
NET COUNTOUT<2> LOC = "V20" | IOSTANDARD = LVTTL | SLEW = QUIETIO | 
DRIVE = 4 ;
NET COUNTOUT<3> LOC = "V19" | IOSTANDARD = LVTTL | SLEW = QUIETIO | 
DRIVE = 4 ;
NET COUNTOUT<4> LOC = "U19" | IOSTANDARD = LVTTL | SLEW = QUIETIO | 
DRIVE = 4 ;
NET COUNTOUT<5> LOC = "U20" | IOSTANDARD = LVTTL | SLEW = QUIETIO | 
DRIVE = 4 ;
NET COUNTOUT<6> LOC = "T19" | IOSTANDARD = LVTTL | SLEW = QUIETIO | 
DRIVE = 4 ;
NET COUNTOUT<7> LOC = "R20" | IOSTANDARD = LVTTL | SLEW = QUIETIO | 
DRIVE = 4 ;
#PINLOCK_END




-> edit:

sorry die Datei will es nicht laden...


entity test is
    Port ( CLK : in  STD_LOGIC;
           RESET : in  STD_LOGIC;
           CI : in  STD_LOGIC;
           COUNTOUT : out  STD_LOGIC_VECTOR (7 downto 0));
end test;

architecture Behavioral of test is

signal count: std_logic_vector(7 downto 0);

begin

von Falk B. (falk)


Lesenswert?

@ Dave E. (eschlair)

>Könnte jemand überprüfen, ob die .ucf-Datei ansatzweise stimmt? wäre
>sehr nett!

Ich sehe erstmal keinen Fehler.

Bei deinem VHDL fehlt der Inhalt, dann können auch keine Pins zugewiesen 
werden.
Machs mal eher so.
1
entity test is
2
    Port ( CLK : in  STD_LOGIC;
3
           RESET : in  STD_LOGIC;
4
           CI : in  STD_LOGIC;
5
           COUNTOUT : out  STD_LOGIC_VECTOR (7 downto 0));
6
end test;
7
8
architecture Behavioral of test is
9
10
signal count: std_logic_vector(7 downto 0);
11
12
begin
13
14
process(clk)
15
begin
16
  if reset ='0' then
17
    count <= "0000000";
18
  elsif rising_edge(clk) then
19
    if ci='1' then
20
      count <= count +1;
21
    end if;
22
  end if;
23
end process;
24
25
countout <= count;
26
27
end.

MFG
Falk

von D. E. (eschlair)


Lesenswert?

hier wäre mal der Rest des Programmes (habe ihn extra weggelassen):
1
begin
2
   process (CLK, RESET,CI)
3
4
  begin
5
     if RESET ='1' then
6
        count <= "00000000";
7
     elsif CI='1' then
8
           if  CLK'event and CLK='1' then
9
                   
10
      if count = "11111111" then
11
        count <= "00000000";
12
        else
13
                   count <= count + 1;                       
14
               end if;            
15
           end if;
16
     end if;
17
  
18
  COUNTOUT <= not(count);
19
  
20
  end process;
21
22
end Behavioral;


deinen Code habe ich mal ausprobiert (end mit ";" und count <= "0000000" 
8 nullen). Dennoch sind die 2 Fehler da.

ERROR:Parsers:11 - Encountered unrecognized constraint while parsing.
ERROR:NgdBuild:19 - Errors found while parsing constraint file
"test.ucf".


was ist "count", eine Variable?!?

mfg

von Ralf (Gast)


Lesenswert?

Hallo,

du hast in der entity "clk" definiert.
Im UCF File steht aber "clk_50MHz".

Gruß

Ralf

von D. E. (eschlair)


Lesenswert?

YEEEAAAAAHHHH!

Mein erstes Programm auf dem ersten FPGA!! :)

Vielen Dank an die, die mir da geholfen haben!


Aber jetzt geht das programmieren erst richtig los.

Also nochmals vielen Dank!

mfg
dave

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.