1 | vChipSel_M0 := 'U';
|
2 | vChipSel_M1 := 'U';
|
Sowas ist auf realer Hardware mit Verlaub Blödsinn. Woher soll denn da
ein U kommen? Wie soll sich das elektrisch von einer 1 oder 0
unterscheiden? Aber: Glück gehabt: der Synthesizer ignoriert solche
Konstrukte und gibt bestenfalls eine gut gemeinte Info aus...
1 | variable vSCL_M0 : STD_ULOGIC := 'U';
|
2 | variable vSCL_M1 : STD_ULOGIC := 'U';
|
Das ist unnötig, weil VHDL das sowieso tut: ein nicht initialisiertes
Signal (Variable) nimmt automatisch den 'left Wert an. Und bei std_logic
ist 'left = 'U'.
Abed D. schrieb:
> Ist es überhaupt sinvoll 272 Bits als register zu verwenden
Wenn du Platz hast...
> oder ist es besser den BlockRam zu verwenden.
Eigentlich nicht, denn dann vergeudest du den ganzen Block für die paar
Bits...
> Eigentlich wollte ich es nich kompliziert machen.
Du hast schon einen komplizierten Ansatz und den dann auch noch
kompliziert aufgebaut... :-o
Und der Hauptfehler in deinem Design ist, aus einem Single Master Bus
(das ist SPI nämlich) einen Multi Master Bus zu machen. Wozu brauchst du
überhaupt 2 Master? Bei SPI wird IMMER gleichzeitig gesendet UND
empfangen. Wenn dann also der Slave an den Master was zu übertragen
hätte, dann muß er nur eine zusätzliche Leitung als
Übertragungsanforderung setzen, und daraufhin beginnt der Master eine
Übertragung.
BTW: warum std_Ulogic und nicht std_logic?
BTW2: warum die vielen Variablen?
Lies mal den Beitrag "Variable vs Signal"
Tilo Lutz schrieb:
> Auch wenn ich noch nicht so viel mit VHDL gemacht habe, hört es sich für
> mich so an, dass die Probleme durch die unterschiedlichen Clock Domains
> verursacht wird.
Das ist auch hier der Fall:
1 | if SCL_M0 = '1' and vSCL_M0 = '0' then
|
Da wird direkt auf dem asynchronen Eingangspin gelesen.
Und dann passiert z.B. sowas:
http://www.lothar-miller.de/s9y/categories/35-Einsynchronisieren
Und daraus resultierend das:
http://www.lothar-miller.de/s9y/archives/64-State-Machine-mit-asynchronem-Eingang.html
> Als Lösung wird oft ein asynchrones FIFO empfohlen.
Als Lösung empfehle ich ein geeignetes Konzept. HIER wird ein Fifo
nichts helfen können, denn einmal dient ja ein externer Takt als
Schiebetakt (wenn Slave), und einmal ein interner (wenn Master). Das
geht nicht gut.