Hallo,
ich bin gerade dabei ein fertiges vhdl design zu synthetisieren und
möchte nun die verschiedenen ein- und ausgangssignale ihren pins
zuweisen. hat bis jetzt immer funktioniert, habe ich noch nie Probleme
dabei gehabt.
Nun ist das Tool aber der Meinung, dass ein Eingangssignal ein Takt
ist, was nicht stimmt. Das Signal ist als: << reset_in >> benannt und
vom Typ << bit >> (std_logic hatte ich auch schon versucht)
innerhalb meiner architecture wird das signal wie folgt verwendet:
--
Reset: process (reset_in) is
begin
if reset_in='1' then
run <='0';
else
run <= '1';
end if;
end process Reset;
--
da mein tool der meinung ist, das signal reset_in sei takt, kann ich es
nicht dem gewünschten pin zuweisen.
hat vielleicht irgend jemand eine idee, womit das zusammen hängen
könnte? ich arbeite mit <<libero 7>> der firma actel (falls das was
nutzt) ...
bin dankbar für jeden nützlichen gedanken/hinweis/etc.!
gruß sebastian
Einfacher wäre es so, und zwar ganz ohne Prozess: run <= not reset_in; Das erklärt aber nicht, wieso er das als Takteingang ansieht. Kann es sein das Du "run" irgendwie als Takt für ein Flip-Flop oder Latch benutzt? Poste mal den ganzen Code.
ich habe folgendes in dem betreffenden programmabschnitt:
Reset: process (reset_in) is
begin
if reset_in='1' then
run <='0';
else
run <= '1';
end if;
end process Reset;
-------------------------
process (run,clock) is
begin
if run = '1' then
systemzeit <=0;
state_ADC <= 1;
else
....ne menge anweisungen....
end if;
...einfacher wäre natürlich, reset_in direkt auszuwerten und auf run zu
verzichten, weiß auch nicht, warum ich so tat ...
Moin... ich vermute mal du wolltest viel Spass bei der Fehlersuche haben, weil sich dein ADC gerne mal asynchron zum Takt einschaltet.... -- SJ
@Sven: ich habe bisher keine Asynchronität festgestellt. kannst du dazu evtl. noch ein paar Worte mehr verlieren. Danke!
Moin... Wenn run auf 1 wechselt, startet der Process, unabhängig von Takt. -- SJ
...das ist richtig, mittlerweile sieht der Code allerdings folgender
Maßen aus:
Reset: process (reset_in) is
begin
if reset_in='0' then
run <='0';
else
run <= '1';
end if;
run_out <= run;
end process Reset;
--------------------------
process (run,clock) is
begin
if run = '0' then
systemzeit <=0;
state_ADC <= 1;
else
if rising_edge(clock) and run='1' then
case state_adc is
when 1 => ...
....
end case
end if;
end process
----------------------------
Das funktioniert. Ist zwar etwas umständlich realisiert, werd ich
bestimmt auch noch ändern.
Habe dabei vielleicht auch noch etwas übersehen?
Wieso frägst Du run nochmal auf '1' ab? Im else-Zweig kann es doch sowieso keinen anderen Wert mehr haben.
...das ist wohl war, sollte wohl so ne doppelte absicherung sein
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.