Forum: FPGA, VHDL & Co. Spartan3A - Not enough free sites available


von Timo B. (Firma: MicroForge) (timob)


Lesenswert?

Hallo Leute,

ich versuche mit Hilfe der Xilix ISE 10.1 WebEdition und einem Spartan3A 
Evaluation Board einige Sensoren zu verwalten. Das klappt in meinem VHDL 
code bisher auch ganz wunderbar, jedoch bin ich jetzt plötzlich auf ein 
Problem gestoßen und komme nicht weiter:
1
ERROR:Place:836 - Not enough free sites available for the components of the following type(s).
2
      IOB     Number of Components 145     Number of Sites 138

Was sind Sites? Und warum tauchen sie in keinem Design Summary auf? Und 
wieso habe ich nur 138 davon?

Aber viel wichtiger: Wie kann ich meinen Site-Verbrauch reduzieren? Habe 
ich mit einer bestimmten Resource die notwendigen Nutzungsbedingungen 
misachtet?

Ich hoffe ihr könnt mir helfen, ich kann so nicht weiter entwickeln. 
Mein FPGA ist grademal zu 10% voll und ich benutze nur grob 25 Pins, 
wenn überhaupt.

Gruß
Timo

von Martin K. (mkohler)


Lesenswert?

Timo Birnschein wrote:
> und ich benutze nur grob 25 Pins,

Weiss das der Placer auch?
Zeig mal den Top Level deines Codes.

von Timo B. (Firma: MicroForge) (timob)


Lesenswert?

Meinst du die Entity?
1
entity LowerLegSensors is
2
  port(
3
    clk            : IN std_logic; --/C10:16MHz/ /N9:12MHz/ /T7:32kHz/
4
    rst            : IN std_logic; --/H4/
5
    -- Buttons on evaluation board
6
    btnA          : IN std_logic; --/K3:BtnA/
7
    btnB          : IN std_logic; --/H5:BtnB/ 
8
    btnC          : IN std_logic; --/L3:BtnC/
9
    
10
    led1          : OUT std_logic; --/D14/
11
    led2          : OUT std_logic; --/C16/
12
    led3          : OUT std_logic; --/C15/
13
    led4          : OUT std_logic; --/B15/
14
    
15
    -- pins for UART
16
    rx           : IN  std_logic; --/A3/
17
    tx           : OUT std_logic; --/B3/
18
    
19
    -- pins for sensor control
20
    ADNS_cs        : out std_logic;
21
    LIS_cs        : out std_logic;
22
    TC77_cs        : out std_logic;
23
    SPI_sclk        : out std_logic;
24
    SPI_mosi        : out std_logic;
25
    SPI_miso        : in  std_logic;
26
    MS_SCLK        : out std_logic;
27
    MS_CLK        : out std_logic;
28
    MS_DIN        : out std_logic;
29
    MS_DOUT        : in  std_logic;
30
    
31
    -- debugging pins
32
    spiFinished_o    : out std_logic;
33
    spiStart_o      : out std_logic;
34
    
35
    -- Sensor Storages for the Top Module
36
    deltaYTmp_o      : out std_logic_vector(7 downto 0);
37
    deltaXTmp_o      : out std_logic_vector(7 downto 0);
38
    productIDTmp_o    : out std_logic_vector(7 downto 0);
39
    revisionIDTmp_o  : out std_logic_vector(7 downto 0);
40
    motionTmp_o      : out std_logic_vector(7 downto 0);
41
42
    whoAmITmp_o      : out std_logic_vector(7 downto 0);
43
    accelXTmp_o     : out std_logic_vector(15 downto 0);
44
    accelYTmp_o     : out std_logic_vector(15 downto 0);
45
    accelZTmp_o     : out std_logic_vector(15 downto 0);
46
47
    pressTmp_o       : out std_logic_vector(15 downto 0);
48
49
    temp1Tmp_o       : out std_logic_vector(15 downto 0);
50
51
    temp2Tmp_o       : out std_logic_vector(15 downto 0)
52
  );
53
end LowerLegSensors;

von Timo B. (Firma: MicroForge) (timob)


Lesenswert?

Ah ich seh grade: Vielleicht wäre es schlau erst das TopModul zu bauen. 
Es deine Aussage hat mich auf meine ganzen Logic_Vectoren gebracht, die 
bisher jedoch nicht angeschlossen sind. Damit übergebe ich meine 
Sensordaten ins TopModul - was bisher nicht existiert. Die ganzen Sensor 
Logic_Vectoren werden aus einem Prozess heraus getrieben. Solange der 
Prozess nicht existiert kann ich synthetisieren. Ich nehme mal an, dass 
er die dann einfach wegoptimiert.

von Martin K. (mkohler)


Lesenswert?

Timo Birnschein wrote:
> Meinst du die Entity?
Ja...

Wieviele Pins brauchst du ungefähr, sagtest du? 25?
Zähl mal nach! ;-)

von Timo B. (Firma: MicroForge) (timob)


Lesenswert?

Siehe meinen Post auch um 0900 :P

Ja, Dein Tip war entscheidend :)

Vielen Dank!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Solange der Prozess nicht existiert kann ich synthetisieren.
Die Synthese klappt auch mit viel zu vielen Ports, weil die Synthese 
sich gar nicht (großartig) um das Ziel-FPGA schert.

Translate, Map und Place&Route haben dann aber Probleme: sie bekommen 
das Design nicht im FPGA unter (hier, weil zuviele IO-Ports nötig sind).

Wenn ich sowas in einem S3 PQ208 FPGA mache:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
6
entity ZuvielePorts is
7
    Port ( clk : in  STD_LOGIC;
8
           load : in  STD_LOGIC;
9
           din : in  STD_LOGIC_VECTOR (127 downto 0);
10
           dout : out  STD_LOGIC_VECTOR (127 downto 0));
11
end ZuvielePorts;
12
13
architecture Behavioral of ZuvielePorts is
14
signal counter : unsigned (127 downto 0) := (others=>'0');
15
begin
16
  process begin
17
    wait until rising_edge(clk);
18
    if (load='1') then
19
       counter <= unsigned(din);
20
    else
21
       counter <= counter+1;
22
    end if;
23
  end process;
24
  
25
  dout <= std_logic_vector(counter);
26
end Behavioral;

Dann sagt die Synthese:
1
Process "Synthesize" completed successfully

Translate sagt das selbe, denn es kann die Elemente, die die Synthese 
erzeugt hat, im FPGA wiederfinden.

Map bekommt aber Probleme, weil die IO-Pins nicht ausreichen:
1
ERROR:Pack:18 - The design is too large for the given device and package.

Fazit:
Bei einem Design ohne Top-Level sind alle Schritte nach der Synthese 
unnötig und kosten nur Rechenzeit. Nicht umsonst hat die Synthese im 
Design-Flow einen eigenen Menüpunkt.

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.