Forum: FPGA, VHDL & Co. Signaleingang ungewollt als CLK erkannt


von Sebastian J. (Gast)


Lesenswert?

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

von Xenu (Gast)


Lesenswert?

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.

von Sebastian J. (Gast)


Lesenswert?

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 ...

von Sven J. (svenj)


Lesenswert?

Moin...

ich vermute mal du wolltest viel Spass bei der Fehlersuche haben, weil
sich dein ADC gerne mal asynchron zum Takt einschaltet....

--
 SJ

von Sebastian J. (Gast)


Lesenswert?

@Sven: ich habe bisher keine Asynchronität festgestellt. kannst du dazu
evtl. noch ein paar Worte mehr verlieren. Danke!

von Sven Johannes (Gast)


Lesenswert?

Moin...

Wenn run auf 1 wechselt, startet der Process, unabhängig von Takt.

--
 SJ

von Sebastian J. (Gast)


Lesenswert?

...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?

von Xenu (Gast)


Lesenswert?

Wieso frägst Du run nochmal auf '1' ab?
Im else-Zweig kann es doch sowieso keinen anderen Wert mehr haben.

von Sebastian J. (Gast)


Lesenswert?

...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
Noch kein Account? Hier anmelden.