mikrocontroller.net

Forum: FPGA, VHDL & Co. Vergleichsoperation


Autor: VHDL-Beginner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tag zusammen,

ich habe ein Problem und brauche dringend eure Hilfe. Ich möchte ein
Modul in VHDL schreiben, welches von aussen zwei mal 24-Bit
Daten(stellen Zahlen dar.) bekommt.
Input: feste Zahl, sich ändernde Zahl, Reset
Output: Zahl_grösser_gleich
Die einen 24-Bit sind fest vorgegeben, die anderen ändern sich ständig.
Die Daten liegen parallel an. D.h. an 48 Pins liegen die Eingangsdaten.
Nun möchte ich einen Vergleich dieser Daten untereinander machen. Wenn
die sich nun ändernde Zahl grösser als die fest vorgegebene Zahl ist,
soll das Modul den Vergleich stoppen und ein Ausgangssignal auf High
legen.
Erst durch ein Reset soll ein neuer Vergleich beginnen, wobei das
Ausgangssignal wieder auf Low heruntergesetzt wird.

Würde mich freuen, wenn Ihr mir helfen könnt.

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
process(clk)
if rising_edge(clk) then


if variable_input > fester_input then output <= '1';
fertig.

Autor: Daniel R. (daniel_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, bin ums Versehen vorzeitig auf Absenden gekommen.
Hier nochmal richtig:

process(clk)
if rising_edge(clk) then
    if reset = '1' then
       output <= '0';
    else
    if variable_input > fester_input then output <= '1';
    end if;
    end if;
end if;
end process;

Autor: VHDL-Beginner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wow super schnelle Antwort :)

Danke!

Eine andere Frage: Muss man in VHDL nicht jedes Bit einzeln
vergleichen?

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@beginner

nein muß man nicht. auch addition/subtraktion und multiplikation müssen
nicht bit-weise durchgeführt werden (wäre auch etwas schwierig :-))

gruß
rene

Autor: Daniel R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier nal den kompletten Quellcode:

entity vergleich is
port(
  clk,reset  : in std_logic;
  festwert  : in std_logic_vector(23 downto 0);
  variabler_wert  : in std_logic_vector(23 downto 0);
  q    : out std_logic
    );
end vergleich;


architecture behavioral of vergleich is


process(clk)
if rising_edge(clk) then
  if reset = '1' then
    q <= '0';
  else
    if variabler_wert > festwert then q <= '1';
    end if;
  end if;
end if;
end process;
end behavioral;

Bit und Bytebruch

Daniel

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.