4 Bit Zähler

Gast #5694955
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 ?
Angehängte Dateien:
Gast #5694957
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
Moderator (Firma: Titel) Persönliche Seite #5695021
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:
1
  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:
1
  counter:process(ClkLeft,RES)
2
  
3
  begin
4
    if RES = '1' then
5
       LED<="0000";
6
    elsif rising_edge(ClkLeft) then 
7
      
8
      if DIR = '1' then
9
:
10
:
Damit ist dann auch der "Reset-Prozess" unnötig.

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

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

9
entity bit is 
10
  port( 
11
    ClkLeft: in std_logic;
12
    LED_in: in std_logic_vector(3 downto 0);
13
    DIR: in std_logic; 
14
    LED_out: out std_logic_vector(3 downto 0)
15
    );
16
end entity bit; 
17

18
architecture behaviour of bit is 
19
signal counter: unsigned(3 downto 0):="0000"; 
20
begin 
21
  
22
  counter:process(ClkLeft,RES)
23
  begin
24
    if RES = '1' then
25
      counter <= "0000";
26
    elsif rising_edge(ClkLeft) then 
27
      
28
      if DIR = '1' then 
29
        counter <= counter + '1';
30
      else 
31
        counter <= counter - '1';
32
      end if; 
33
    end if;
34
  end process counter; 
35
  
36
  LED_out <= std_logic_vector(counter);
37
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.
Angehängte Dateien:

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.