Hallo, ich hänge gerade etwas und benötige eure Hilfe. Einfache Situation: data_in : std_logic_vector(7 downto 0); data_out : std_logic_vector(7 downto 0); clk : std_logic; rst : std_logic; Nun werden die Daten von data_in modifiziert und zu einem 16bit Vector kombiniert. Dieser soll nun aber wieder über den 8bit data_out Port geschickt werden. Ich komme hierbei nicht weiter. Habe es mit einem Shiftregister probiert, was jedoch zu einem multiple drivers führte. Ich wäre euch sehr dankbar für einen neuen Ansatz. Gruß
Gast
#2279023
zeig doch mal deinen bisherigen ansatz
Frank L. schrieb: > zu einem 16bit Vector kombiniert. > Dieser soll nun aber wieder über den 8bit data_out Port geschickt werden. Da wäre dann noch ein Signal nicht ohne, das anzeigt, ob da gerade das High- oder Low-Byte ausgegeben wird... Alternativ kannst du ja auch 4 Nibbles ausgeben oder 3*6 Bit, und mit den restlichen Leitungen die Position im 16-Bit-Wort anzeigen...
Harry schrieb: > zeig doch mal deinen bisherigen ansatz
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
Es ist nicht so, dass ich nicht weiss warum mein Ansatz nicht funktioniert aber ich weiß leider auch nicht wie ich es machen könnte.
Frank L. schrieb:1 | |
2 | |
3 | |
Merk dir: die letzte Zuweisung in einem Prozess gewinnt. Frank L. schrieb: > was jedoch zu einem multiple drivers führte. Ich kann hier keine multiplen Treiber sehen... Was ist (abgesehen von der obern angesprochenen Ungereimtheit) das Problem bei diesem Code?
Lothar Miller schrieb: > Ich kann hier keine multiplen Treiber sehen...
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Ja ich weiß, Signale erhalten erst ihre Werte nach dem Prozess. Wie kann ich nun am besten das zweite Byte erst im darauffolgenden Takt ausgeben? Tipp?
Frank L. schrieb: > data_in => shifter(5), -- hier einmal Ich würde fast behaupten, data_in wäre ein IN PORT... Der treibt nichts. Frank L. schrieb: > Wie kann ich nun am besten das zweite Byte erst im darauffolgenden Takt > ausgeben? Tipp? Nimm einen Multiplexer:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
Aber wie gesagt: du siehst nicht, wo du gerade bist (High- oder Low-Byte)... :-/ Ach so, das mit dem "verzögert ausgeben"... Um wieviel verzögert? Kommen da zwischenzeitlich neue Daten?
Vielen Dank Lothar, mit dem Treiber hast du natürlich recht. Mit irgendeiner Kombo hatte ich es aber. Nun aber egal. Dein Ansatz läuft. Vielen Vielen Dank Nun ist es ja so, dass jeden Takt neue Daten rein kommen, verarbeitet werden und wieder byteweise ausgegeben werden müssen. Natürlich dauert die Verarbeitung länger als nur einen Takt und somit gehen Daten verloren.
Es soll eigentlich ein Wiederholungscode werden aber irgendwie lauf ich damit gegen den Baum gerade wenn ich eine ungerade Anzahl an Bit-Wiederholungen habe. Weißt du vielleicht Rat? Ich würde mich sehr freuen über etwas Unterstützung.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.