Signaleingang ungewollt als CLK erkannt

Gast #388252
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
Gast #388253
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.
Gast #388254
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 ...
Gast #388258
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren