Hallo, ich versuche bei einem FPSLIC AT94K05 FPGA die wenigen Makrozellen so effektiv wie möglich zu nutzen. Leider scheint die Zellenstruktur nicht genrade VHDL freundlich aufgebaut zu sein. Wenn ich einen ladbaren 8 Bit Down-Counter mit Enable-Steuerung in VHDL implementiere, werden dazu 30(!) von 256 Makrozellen verbraucht. Das kann doch nicht wahr sein? Dabei habe ich die Hilfe des Makro-Generators zu rate gezogen. Dort kann man shene, wie der VHDL Konstrukt in etwa aussehen muss. Wer kann 30 Makrozellen unterbieten??? Wie? Grüsse, Hans-Dieter Schondelmaier
so sieht der Code aus: entity PH_CTRL is port ( SYSCLOCK : in std_logic; RESET : in std_logic; DATA_BUS : in std_logic_vector(7 downto 0); CONT_1_TIME : buffer unsigned(7 downto 0); LOAD : in std_logic; ENABLE : in std_logic ); end; architecture BEHAV_PH_CTRL of PH_CTRL is begin CONT_TIME : process (SYSCLOCK, RESET ) is begin if (RESET = '0') then CONT_1_TIME <= ( others => '0' ); elsif falling_edge( SYSCLOCK ) then if LOAD = '1' and ENABLE = '1' then CONT_1_TIME <= unsigned( DATA_BUS(7 downto 0)) ; else CONT_1_TIME <= CONT_1_TIME - 1; end if; end if ; end process CONT_TIME; end; Über den Datenbus kommt der Ladewert, Die CONT_1_TIME ist die aktuelle Zeit, die runtergezaehlt werden muss.
Hallo, ich kann dir nicht direkt bei deinem Problem helfen. Aber auf einem Xilinx XC95xx belegt dein Programm nur 8 Macrozellen?! Oder vergleiche ich da Äpfel mit Birnen? Gruß -=jens=-
Hallo, nein, nein, VHDL hat auch deshalb seine Daseinsberechtigung, damit man Äpfel mit Birnen vergleichen kann. Es geht um dieselbe Funktion in unterschiedlichen Bausteinen. Ich hab inzwischen aus Supportkreisen die Info, dass sich das Ganze beim FPSLIC auf 16 Zellen reduzieren lassen würde, allerdings muss man dann diesen IP Core-Macro Generator verwenden. Dieser erzeugt aber keinen VHDL-Code sondern eine Library, was für die Weiterverwendbarkeit der Sourcen in meinem Fall nicht ausreicht. Wenn man die Sache in VHDL schreibt, gehen im besten Fall gut 20 Macrozellen flöten. Drunter geht wohl nichts. Hans-Dieter
elsif falling_edge( SYSCLOCK ) then if LOAD = '1' and ENABLE = '1' then CONT_1_TIME <= unsigned( DATA_BUS(7 downto 0)) ; else CONT_1_TIME <= CONT_1_TIME - 1; end if; end if ; Was mir an dem Code auffällt: Wenn LOAD und ENABLE nicht 1 ist, dann wird runtergezählt. Auch wenn ENABLE gar nicht 1 ist. Absicht? ciao, Stefan.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.