www.mikrocontroller.net

Forum: FPGA, VHDL & Co. großen Counter simulieren


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo alle zusammen.

Ich habe mir über einen Counter nen 50MHz Takt auf 1MHz, 0,5MHZ herunter 
getaktet.

Mein Problem besteht darin, diesen Code zu simulieren, da das sehr sehr 
lage dauert.

Kann mir da jemand nen Tipp geben, wie ich da herangehen kann?

MFG
Peter

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zeig doch einfach mal, wie du den teiler beschrieben hast.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...
signal counter : std_logic_vector (0 to 43);

begin
process(reset,clk)
begin

   if reset='0' then
      counter <= "00000000000000000000000000000000000000000000";
    elsif rising_edge(clk)then
      counter <= counter +1;

end if;
end process;
Q_0_1s <= counter(15) and counter(13) and counter(12) and counter(11) 
and counter(10) and counter(9) and counter(7) and counter(5) and 
counter(4) and counter(3) and counter(2);

Hab so einen großen Vector, damit ich auch 20s zeitverzögern kann..

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> (0 to 43)
Das kann aber ins Auge gehen...
> "00000000000000000000000000000000000000000000"
Wo ist denn hier dein Bit 0 und welches das Bit 43? LSB? MSB?
> Q_0_1s <= counter(15) and counter(13) and counter(12)....


Wenn du 20s simulieren willst, dauert das.
Da beißt keine Maus keine Faden ab ;-)


BTW:
Mach Zähler besser mit Integer, das sieht schöner aus.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
:
signal cnt : integer range 0 to 20*50000000; -- 20 sec bei 50MHz
signal counter : std_logic_vector (43 downto 0); -- DOWNTO: so werden Vektoren definiert
:
begin
process(reset,clk)
begin
   if reset='0' then
      cnt <= 0;
   elsif rising_edge(clk)then
      cnt <= cnt+1;
   end if;
end process;
:
counter <= std_logic_vector(unsigned(cnt,44));
Q_0_1s <= counter(15) and counter(13) and counter(12) and counter(11)
and counter(10) and counter(9) and counter(7) and counter(5) and
counter(4) and counter(3) and counter(2);

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK. So genau hab ich das noch garnicht betrachtet. Danke.



Was macht eigentlich "std_logic_vector(unsigned(cnt,44)"?

Ich nehme an du machst ein casting um von Integer auf std_logic__vector 
zu

kommen?!

Wie frage ich dann ein Signal bei 20sec.,oder 1 sec. ab?

MFG

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah OK!!

Hab gerade mitgeschnitten..!!!


Danke dir für deine Hilfe!!!:-)


MFG

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> std_logic_vector(unsigned(cnt,44)
Oh, ein Typo :-/

Richtig heißen muß das
 ... std_logic_vector(to_unsigned(cnt,44));
to_unsigned ist in der Standdard-Lib numeric_std definiert.
Du solltest die herstellerabhängigen signed bzw, unsigned Libs nicht 
verwenden.

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Frage: Sind 50 MHz Taktfrequenz notwendig?
Wenn die restliche Schaltung mit geringerer Clockfrequnz auskommt, 
solltest du sie verringern. Hat normalerweise auch Vorteile in der 
Leistungsaufnahme und im EMV-Verhalten.
Wenn es nicht möglich ist, kannst du in der Simulation tricksen, um die 
20 Sekunden abzukürzen. Einige Simulatoren gestatten das direkte 
Verändern von Signalwerten (forcen). Da kann man z.B. den counter 
einfach mal während der Simulation hochsetzen und somit viel Zeit 
sparen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.