Aus VHDL-Code das Zeitdiagramm zeichnen

Neue Frage »

Auf diesen Beitrag antworten »
deppensido Aus VHDL-Code das Zeitdiagramm zeichnen

hallo,

beim Üben bin ich auf folgende Aufgabe gestoßen, bei der man den Zeitverlauf von A(0), A(1) und A(2) in ein Zeitdiagramm einzeichnen soll, wobei das clk und das rst Signal vorgegeben ist. Im folgenden der Code:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Toplevel_A is
port( CLK, RST : in std_logic;
A : out std_logic_vector(2 downto 0));
end entity;
architecture Behavioral of Toplevel_A is
signal sr : std_logic_vector(2 downto 0);
signal invert : std_logic;
begin
A <= sr;
invert <= not sr(0);
process(CLK,RST) begin
if RST = '1' then
sr <= "000";
elsif CLK'event and CLK = '1' then
sr <= invert & sr(2) & sr(1);
end if;
end process;
end architecture;


ich verstehe nun folgende Zeile nicht
code:
1:
sr <= invert & sr(2) & sr(1);

was genau passiert da?

Vielen Dank im voraus.
 
Auf diesen Beitrag antworten »
eulerscheZahl

sr ist ein Vektor aus 3 Variablen (2 downto 0).
mit
sr <= neues_sr2 & neues_sr1 & neues_sr0;
kann das sr befüllt werden.
invert an erster Stelle sorgt dafür, dass das neue sr2 das negierte alte sr0 ist.
sr(2) & sr(1) verschiebt die anderen beiden Werte.

Ich habe die Simulation nachbearbeitet: gleichfarbige Signale hängen durch verschieben/invertieren wie oben beschrieben voneinander ab.
Auf diesen Beitrag antworten »
deppensido

hallo,

ich versteh es ehrlich gesagt immer noch nicht. Bei der ersten Positiven Taktflanke ist ja invert = 1, sr(2) = 0 und sr(1) = 0 und A bekommt die Werte:
A(2) = 1 (von invert) A(1) = 0 (von sr(2) und A(0) = 0 (von sr(0). Aber bei der nächsten steigenden Taktflanke bleibt A(2) = 1, obwohl invert doch 0 wird und A(1) und A(0) müssten doch 0 bleiben, weil sr(2) und sr(1) auch jeweils 0 bleiben. Was heißt dabei: "sr(2) & sr(1) verschiebt die anderen beiden Werte."
Ich konnte leider auch durch den Signalverlauf das nicht nachvollziehen. Sorry, aber manchmal tu ich mich echt schwer sowas zu verstehen.

Grüße
Auf diesen Beitrag antworten »
eulerscheZahl

Zitat:
Aber bei der nächsten steigenden Taktflanke bleibt A(2) = 1, obwohl invert doch 0 wird

Darüber solltest du nochmal nachdenken:
invert ist not sr(0), das invertierte Signal kam aber erst bei s(2) an. s(0) ist immernoch 0, die Variable invert ist daher weiterhin 1. Das ändert sich erst, wenn eben jene 1 über s(2) und s(1) bis zu s(0) vorgedrungen ist.

Du musst dich nicht entschuldigen, wenn du etwas nicht sofort verstehst, dafür ist das Forum ja da. So ist es mir lieber, als wenn ich mir die Zeit nehme und dann trotz Unklarheiten keine Nachfrage mehr kommt, da hätte ich es dann auch gleich bleiben lassen können smile
 
Auf diesen Beitrag antworten »
deppensido

danke für die Hilfe. Ich hab es mir jetzt noch mal Schritt für Schritt aufgeschrieben, was passiert und hab es dann hinbekommen. Ich kam da im Kopf nicht so richtig mit, aber wenn man sich die Schritte nacheinander aufschreibt klappt es dann recht zügig. Ein weiterer Fehler bei mir war auch, dass ich den Logic_Vector (2 downto 0) so gelesen habe (A(0),A(1),A(2)) anstatt (A(2),A(1),A(0)) also genau umgekehrt gedacht. Habe auch nochmal ähnliche Aufgaben geübt und diese dann auch recht schnell hinbekommen. Ziel bei diesen Aufgaben ist es ja das Zeitdiagramm zu zeichnen.
Nochmals Vielen Dank!

Grüße
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »