Ich versuche, so etwas zu schreiben: Ich habeWie auf Kanten in immer Block warten?
[email protected](posedge bus_start)
begin
@(posedge scl) buffer[7] = sda;
@(posedge scl) buffer[6] = sda;
@(posedge scl) buffer[5] = sda;
@(posedge scl) buffer[4] = sda;
@(posedge scl) buffer[3] = sda;
@(posedge scl) buffer[2] = sda;
@(posedge scl) buffer[1] = sda;
@(posedge scl) buffer[0] = sda;
end
Aber es ist nicht nach dem Fehler synthetisierbaren.
Ich kann FSM verwenden, um dies zu lösen, aber das könnte es kompliziert machen, gibt es eine Möglichkeit, es synthetisierbar zu machen?
Nein. Dies ist Verhalten Verilog auf hoher Ebene. Es würde ein gutes Referenzmodell für eine Testbench ergeben, ist aber nicht annähernd detailliert genug, um synthetisch zu sein. Der _level of abstraction_ (Detaillierungsgrad), mit dem synthetisierbarer Code geschrieben werden muss, heißt RTL (Register Transfer Level), bei dem Sie fast manuell entscheiden, wo sich die Flip-Flops befinden und der Synthesizer die kombinatorische Logik ausfüllt. Für diese I2C-Schnittstelle benötigen Sie ein Shift-Register, Sie benötigen eine FSM, Sie benötigen wahrscheinlich einen Zähler. Siehe [Website meines Unternehmens] (https://www.doulos.com/knowhow/verilog_designers_guide/). –