mikrocontroller.net

Forum: FPGA, VHDL & Co. 4 Bit Zähler


Autor: Mo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich will hier einen 4 Bit Zähler mit Reset verwirklichen, aber es kommt 
immer wieder der gleiche Error.

LED_out[3] is constantly driven from multiple places.

Wie kann Ich mein Programm ändern ?

Autor: user (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du schreibst von 2 Prozessen auf das gleiche Signal
    LED<=LED_in; --hier wird geschrieben
und
    counter:process(ClkLeft,DIR)
  begin
    if rising_edge(ClkLeft) then
      if DIR = '1' then
        case LED is
          when"0000"=>LED<="0001"; --hier wird geschrieben

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mo schrieb:
> Wie kann Ich mein Programm ändern ?
Vorneweg: die Sensitivliste deiner Beschreibung muss hier eigentlich nur 
den Takt enthalten. DIR ist unnötig, denn der Prozess mus bei einer 
Änderung von DIR nicht neu berechnet werden:
  counter:process(ClkLeft,DIR)
Als Tipp: die Sensitivliste ist ausschließlich für den Simulator 
relevant. Der Synthesizer nimmt "automatisch" fehlende signale dazu oder 
lässt überflüssige weg. Allerdings passt bei einer falschen 
Sensitivliste das Simulationsergebnis nicht mehr unbedingt zum 
Syntheseergebnis und damit zum Verhalten der Hardware.

> Wie kann Ich mein Programm ändern ?
Sieh dir an, wie ein asynchroner Reset üblicherweise beschrieben wird. 
Du findest das in jedem beliebigen VHDL-Buch:
  counter:process(ClkLeft,RES)
  
  begin
    if RES = '1' then
       LED<="0000";
    elsif rising_edge(ClkLeft) then 
      
      if DIR = '1' then
:
:
Damit ist dann auch der "Reset-Prozess" unnötig.

Deinen 4-Bit-Zähler würde ich übrigens so schreiben:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

-- use work.all;               -- unnötig, weil soweiso im Projekt
-- library machxo2;            -- unnötig, weil hier nicht verwendet
-- use machxo2.components.all;

entity bit is 
  port( 
    ClkLeft: in std_logic;
    LED_in: in std_logic_vector(3 downto 0);
    DIR: in std_logic; 
    LED_out: out std_logic_vector(3 downto 0)
    );
end entity bit; 

architecture behaviour of bit is 
signal counter: unsigned(3 downto 0):="0000"; 
begin 
  
  counter:process(ClkLeft,RES)
  begin
    if RES = '1' then
      counter <= "0000";
    elsif rising_edge(ClkLeft) then 
      
      if DIR = '1' then 
        counter <= counter + '1';
      else 
        counter <= counter - '1';
      end if; 
    end if;
  end process counter; 
  
  LED_out <= std_logic_vector(counter);
end architecture behaviour;


Mo schrieb:
> tic<= tic + 1;
> tic zählt ja die positiven Signale der Clk
Dieser tic "zählt" die steigenden Flanken vom Takt.

Ein Tipp: du musst an deiner Wortwahl arbeiten. Mit deiner derzeitigen 
Semantik verwirrst du Gesprächspartner. Dass die Signale zudem beliebige 
Namen haben, die nichts über ihre Funktion aussagen, verwirrt zudem. 
Und wenn sie an jeder Schnittstelle ihren Namen wechseln, macht das 
die Sache nicht besser...

Mo schrieb:
> plan.JPG
Screenshots besser als (nicht verlustbehaftete) PNG-Datei anhängen. Bei 
JPEGs werden Screenshots dank der Komprimierung automatisch "unscharf" 
mit verwaschenen Linien und Kanten.

: Bearbeitet durch Moderator

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.

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