Hallo, eine kleine Anfängerfrage hätte ich. Als Bsp.: am Eingäng liegt erst _1 an dann kommt die Taktflanke und diese sollen einglesen werden. im nächsten Takt liegt dann schon _2 an und soll eingelesen werden. a_1=1 a_2=1 b_1=0 b_2=0 und als ergebnis hätte ich dann gerne z.B. c=10 10 wie bewerkstellige ich das das ich 2 Eingänge gleichzeitig getaktet auslese und nacheinander mir die anliegenden signale ausgeben lasse? Vielen Dank für Ihre Hilfe!
sneuser schrieb: > wie bewerkstellige ich das das ich 2 Eingänge gleichzeitig getaktet > auslese und nacheinander mir die anliegenden signale ausgeben lasse? Mit einem 2 Bit breiten Schieberegister?
1 | port ( clk : in std_logic; |
2 | inp : in std_logic_vector(1 downto 0); |
3 | outp : out std_logic_vector(3 downto 0) |
4 | );
|
5 | :
|
6 | signal a,b : std_logic_vector(1 downto 0); |
7 | signal c : std_logic_vector(3 downto 0); |
8 | :
|
9 | process begin |
10 | wait until rising_edge(clk); |
11 | a <= inp; |
12 | b <= a; |
13 | end process; |
14 | |
15 | c <= b & a; |
16 | outp <= c; |
17 | :
|
Allerdings mußt du dir noch Gedanken zur Synchronisierung machen, damit du weißt, bei welchem Takt die richtigen 2 Bit eingelesen wurden...
es wird ja pro takt immer ein crump eingelesen und "durchgedrückt" inwiefern meinst du synchroniesierung? du meinst quasi das er nicht die ganze zeit druchschiebt? sondern nur auf abruf wenn ich es haben möchte? dann müsste ich mir ein signal generieren das sagt ab hier einlesen. also so in der art wie ein sof und eof müsste ich mir genieren oder halt ein signal das so lange high ist so lang wie ich werte einlesen und seriell durchschieben möchte? kann ich mir das erstellte serielle signal dann auch in einem byte abspeichern wenn ich 8 bits eingelesen habe? bleibt es mir dann wenn c als signal deklariert ist zeitlich erhalten oder müsste ich dann dies in einen speicher ablegen? könnte ich dann ein fifo nehmen? ist ja dann wie ein schieberegister oder? oder wäre es besser bei vielen einzulesenden daten einen anderen speicher zu nehmen? danke für die schnelle antwort!
sneuser schrieb: > kann ich mir das erstellte serielle signal dann auch in einem byte > abspeichern wenn ich 8 bits eingelesen habe? Sicher. > bleibt es mir dann wenn c als signal deklariert ist zeitlich erhalten > oder müsste ich dann dies in einen speicher ablegen? Ob ein Signal speichert oder nicht, das liegt allein an der Beschreibung: wenn da ein Takt involviert ist, dann bedeutet das Flipflop und damit Speicher... > es wird ja pro takt immer ein crump eingelesen und "durchgedrückt" > inwiefern meinst du synchroniesierung? Wie willst du wissen, wann die 4 Bits von C gültig sind? Mal angenommen, du hast pro Takt die Sequenz 00, 01, 10, 11 an den Eingängen. Dann sieht der Ausgang C so aus 0000, 0001, 0110, 1011 und nur das 2. und das 4. Bitmuster wäre eigentlich "gültig"... > könnte ich dann ein fifo nehmen? ist ja dann wie ein schieberegister oder? Ja. > oder wäre es besser bei vielen einzulesenden > daten einen anderen speicher zu nehmen? Anhand der VHDL-Beschreibung ist noch überhaupt nicht festgelegt, wie das Ganze letztlich implementiert wird...
Lothar Miller schrieb: >> es wird ja pro takt immer ein crump eingelesen und "durchgedrückt" > >> inwiefern meinst du synchroniesierung? > > Wie willst du wissen, wann die 4 Bits von C gültig sind? > > Mal angenommen, du hast pro Takt die Sequenz 00, 01, 10, 11 an den > > Eingängen. Dann sieht der Ausgang C so aus 0000, 0001, 0110, 1011 und > > nur das 2. und das 4. Bitmuster wäre eigentlich "gültig"... aber ich dachte jetzt wenn ich 10, 10 anliegn hab kommt 1010 für c raus. wieso kommt denn nun in deinem beispiel dieser c ausgang zustanden? nach deiner erklärung wäre ich da jetzt von ausgegangen das 0001 und 1011 rauskommt. oder wie bekomme ich sonst parallel anliegende daten in einen seriellen "datenstrom" oder missverstehe ich grad etwas?
sneuser schrieb: > nach deiner erklärung wäre ich da jetzt von ausgegangen > das 0001 und 1011 rauskommt. Tja, Pech. Drum habe ich dich drauf hingewiesen. Simulier das einfach mal... In meinem Code wird nicht unterschieden, welcher der "erste" oder der "zweite" Taktimpuls ist. Wie denn auch? sneuser schrieb: > oder wie bekomme ich sonst parallel anliegende daten in einen seriellen > "datenstrom" oder missverstehe ich grad etwas? Du machst hier gerade die andere Richtung: seriell ankommende Daten werden zusammengefasst und parallel ausgegeben... sneuser schrieb: > aber ich dachte jetzt wenn ich 10, 10 anliegn hab kommt 1010 für c raus. Mal langsam zum Mitschreiben: clk ^ ^ ^ ^ ^ ^(^= steigende Flanke) inp 00 10 10 11 11 00 a uu 00 10 10 11 11 00 b uu uu 00 10 10 11 11 C uuuu uu00 0010 1010 1011 1111 1100
Lothar Miller schrieb: >> aber ich dachte jetzt wenn ich 10, 10 anliegn hab kommt 1010 für c raus. > > Mal langsam zum Mitschreiben: > > clk ^ ^ ^ ^ ^ ^(^= steigende Flanke) > > inp 00 10 10 11 11 00 > > a uu 00 10 10 11 11 00 > > b uu uu 00 10 10 11 11 > > C uuuu uu00 0010 1010 1011 1111 1100 Okay ich glaube das habe ich verstanden das beim durchschieben da werte zusammenkommen die ich eigentlich nicht haben will. Und wie kann ich diese dann ausmerzen? also wie achte ich auf die richtige Synchronisierung? Gut das du das sagst ich hab die ganze Zeit gedacht ich mach parallel zu seriell. Aber ist es dann ein Datenstrom? also wenn c=0010 1011 usw ausgebe? ich bin nämlich am überlegen wie ich die daten von meinem ethernet mac weiter verwenden kann. dieso kommen nämlich mit 2 signalen rein und diese muss ich ja in einen bitstream bzw möchte ich in einem bitstream einlesen und speichern. Da es sich hierbei um ein RMII handelt kommen nur RXD0 und RXD1 rein und werden mit 50MHz reingetaktet und nicht wie bei MII 4 Bit auf einmal mit 25MHz. WIe fasse ich diese dann zusammen. Ist der weg da dann richtig mit den Schieberegistern? Vielen Dank nochmal hast mir einige Ahhhs und Ooohs verschafft ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.