Forum: FPGA, VHDL & Co. read-during-write RAM warning


von Martin O. (ossi-2)


Lesenswert?

Bei mir kommt folgendes Stück Code im Design vor:
1
always @(posedge AWGclk) begin
2
  if(serviceUartRXctrlStrobe)  
3
    begin
4
    if("S"==RXchar)  begin ram[WriteAddress]<=WriteData ; end 
5
    end
6
   else 
7
    begin 
8
    counter<=counter+1'd1 ;
9
    dac902<=ram[counter] ;
10
    end
11
  end
Es wird das "ram" geschrieben und gelesen.
Ich erhalte die folgende Warnung:

Warning (276020): Inferred RAM node "ram_rtl_0" from synchronous design 
logic.  Pass-through logic has been added to match the read-during-write 
behavior of the original design.

Jetzt weiss ich aber, dass kein "read during write" stattfinden kann, 
weil das "write" im if-block ist, und der "Read" im else-Block. Wie muss 
ich das schreiben damit Quartus keine Warnung mehr liefert?

von VHDL hotline (Gast)


Lesenswert?

Die Warnung sagt nicht, dass du read-during-write machst, sondern dass 
das Tool versucht das beschriebene Verhalten für diesen Fall abzubilden. 
Und das sieht bei dir so aus, dass du beim Schreiben mit der 
Schreibadresse nicht den Leseausgang beeinflusst. Schreibst du mehrmals 
hintereinander, bleibt der Ausgang gleich, da braucht es also ein 
Register mit read_enable am Ausgang, und das macht das Tool.

von Markus F. (mfro)


Lesenswert?

Hier lesen:

https://www.intel.com/content/www/us/en/programmable/documentation/ntt1529445293791.html#mwh1409959583140

Das Kapitel "Check Read-During-Write Behavior" und 
"ramstyle="no_rw_check" " dürfte dich interessieren.

von Martin O. (ossi-2)


Lesenswert?

@Markus F
Das war genau was ich suchte. Problem gelöst und was dazugelernt.
Besten Dank

von VHDL Polizei (Gast)


Lesenswert?

Martin O. schrieb:
> Jetzt weiss ich aber, dass kein "read during write" stattfinden kann,

Dann kannst Du das auch ignorieren. Die Notwendigekeit, sich darüber 
Gedanken zu machen, entsteht ja nur, wenn solche Zugriffe auf vorkommen.

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
Noch kein Account? Hier anmelden.