Hallo Leute! Ich habe im Buch VHDL-Synthese folgendes Beispiel: ... ... shift_full: process begin for i in shw downto 1 loop temp(i-1)<='0'; end loop; wait; end process shift_full; ... ... Laut Buch erzeugt dieser Prozess ein temporäres Signal TEMP, welches nur Nullen enthält. So wie ich das verstanden habe, sollen diesem Signal zwecks Initialisierung Nullen zugewiesen werden. Danach soll der Prozess einfach stehenbleiben und nicht mehr durchlaufen. Doch das Synthesize-Werkzeug hat etwas dagegen und meldet folgendes: Error: Bad condition in wait statement, or only one clock per process. Warum funktioniert das nicht, so wie es im Beispiel angegeben ist und wie kann man dies umgehen? Ich benutze die XILINX-Umgebung 7.1i Bitte helft mir. Tschüss Martin B
Imo ist der Auszug oben richtig, bei Erreichen des wait statements (und Abarbeitung der Schleife) sollte er stehen bleiben. Da dort keine Kondition steht, muss der Fehler an anderer Stelle sein. Richtige Zeilen Nummer des Fehlers erwischt? shw und temp sind signale, diese sind irgendwo in der architecture bereits deklariert. D.h. von "Laut Buch erzeugt dieser Prozess ein temporäres Signal TEMP" kann keine Rede sein. I.A. initialisert man seine Signale it sinnvollen Werten. Die Schleife wird in Hardware (parallel) durch das Simu/Synthese Tool gewandelt, auch wenn Du es sequentiell schreibst. Die Processe werden ebenfalls parallel ausgeführt, auch wenn Du sie ebenfalls seq. schreibts - immer im Hinterkopf behalten, Du beschreibst ein "TTL Grab" Hardware. Kann es sein, dass Du uns nicht alles gezeigt hast? Viele Grüße Olaf
oops, wer lesen kann ist klar im Vorteil. Bei der Synthese gibt es kein wait! Nur in der Simu. Also Modelsim anwerfen! Viele Grüße Olaf
Das lustige dabei ist, dass der Autor aber von Synthese schreibt: Dieses interne Signal (temp) wird während der Synthese heraus optimiert, da die Schiebeweite ein statischer Wert ist und die Anzahl der hineinzuschiebenden Nullen somit feststeht. In diesem Sinne ist die Empfindlichkeitsliste völlig ohne Bedeutung, sodass diese weggelassen wurde. Tschüss, Martin
>Bei der Synthese gibt es kein wait!
Freilich gibt es das, hier z.B. ein Flip-Flop:
process
begin
wait until rising_edge(clk);
reg <= data_in;
end process;
Ich weiß, das wait until funktioniert auch, aber dieses wait am Schluss eben nicht.
>Ich weiß, das wait until funktioniert auch, aber dieses wait am Schluss >eben nicht. Ich habe ja auch auf opes Beitrag geantwortet, und nicht auf Deinen. Ich verstehe Dein Problem auch nicht ganz, was genau willst Du denn eigentlich machen? Wenn Du eine Signal mit lauter Nullen willst, wieso schreibst Du dann nicht einfach "temp <= (others => '0')"?
Das ist eine gute Frage. Keine Ahnung, warum das der Autor in diesem Buch so umständlich macht. Aber danke, das ist ein guter Denkanstoß. Zur Info stelle ich hier mal das ganze Programm rein, so wie es im Buch steht: -- Parametrisiertes Scheiberegister entity param is generic(width:natural:=4; -- Registerbreite shw : natural := 2); -- Schiebeweite port(clk,load,r_l: in bit; din : in bit_vector(width-1 downto 0); yout:out bit_vector(width-1 downto 0)); end param; architecture Behavioral of param is signal yint:bit_vector(width-1 downto 0); signal temp:bit_vector(shw-1 downto 0); begin shift_full: process begin for i in shw downto 1 loop temp(i-1) <='0'; end loop; wait; end process shift_full; syn_shift: process (clk) begin if clk='1' and clk'event then if load='1' then yint <= din; elsif r_l='0' then -- links schieben yint<=yint(width-1-shw downto 0) & temp; else -- rechts schieben yint<=temp&yint(width-1 downto shw); end if; end if; end process syn_shift; yout<=yint; end Behavioral; Gruß, Martin
@Xenu: yep, hast Recht; immer diese Ausnahmen ;-) ich bezog wait nur auf zeitl. Dinge.
1 | wait until rising_edge(clk); |
und [vhdl] if risinge_edge(clk) then ...[vhdl] sind gleichwertig. Wie so vieles in VHDL gleichwertige Konstrukte hat, frei nach dem Motto: Viele Wege führen nach Rom. Viele Grüße Olaf
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.