Closed BYCakar closed 2 years ago
The paper is outdated and we don't have a way to update it since it was published. Please look at the documentation presentation in the README.md which should be more up to date.
The simulation model is accurate to the expected behavior.
Also, it is available at the end of a cycle, not "two cycles"... It uses the second half for the operation, so it requires two edges but not cycles.
In the documentation, at the first positive edge csb is low, at the next positive edge the data is fetched. It really requires two edges. But in the simulation, at the first positive edge csb is low, at the next positive edge there is no data, the data is fetched a positive edge later. Thus I said "two cycles". So I still think something is wrong with my simulation.
You need the csb, web, address, and data asserted before the positive edge. In your simulation it is at the positive edge which will result in a Verilog race condition. In this case, it doesn't receive it before the edge. Hope that helps.
Matt
On Tue, May 31, 2022, 16:06 BYCakar @.***> wrote:
In the documentation, at the first positive edge csb is low, at the next positive edge the data is fetched. It really requires two edges. But in the simulation, at the first positive edge csb is low, at the next positive edge there is no data, the data is fetched a positive edge later. Thus I said "two cycles". So I still think something is wrong with my simulation.
— Reply to this email directly, view it on GitHub https://github.com/VLSIDA/OpenRAM/issues/144#issuecomment-1142718976, or unsubscribe https://github.com/notifications/unsubscribe-auth/AC67SLYIQJWSZVORUOYXXHTVM2LPPANCNFSM5XO4ANDA . You are receiving this because you modified the open/close state.Message ID: @.***>
On side 59 of the documentation presentation, it shows that it uses a single positive edge...
On Tue, May 31, 2022, 19:40 Matthew Guthaus @.***> wrote:
You need the csb, web, address, and data asserted before the positive edge. In your simulation it is at the positive edge which will result in a Verilog race condition. In this case, it doesn't receive it before the edge. Hope that helps.
Matt
On Tue, May 31, 2022, 16:06 BYCakar @.***> wrote:
In the documentation, at the first positive edge csb is low, at the next positive edge the data is fetched. It really requires two edges. But in the simulation, at the first positive edge csb is low, at the next positive edge there is no data, the data is fetched a positive edge later. Thus I said "two cycles". So I still think something is wrong with my simulation.
— Reply to this email directly, view it on GitHub https://github.com/VLSIDA/OpenRAM/issues/144#issuecomment-1142718976, or unsubscribe https://github.com/notifications/unsubscribe-auth/AC67SLYIQJWSZVORUOYXXHTVM2LPPANCNFSM5XO4ANDA . You are receiving this because you modified the open/close state.Message ID: @.***>
I think I was confused by x values in the simulation, I get it now. Thanks a lot :)
Hi, I was simulating my design and I realized there might be a mismatch between verilog simulation code and the description in OpenRAM paper.
According to this figure, read and write data are available one cycle after the operation, like most of the synchronous RAMs do.
In verilog simulation, read data is available two cycles after the read. I think the last always block below causes this in verilog code.
I think unblocking assignment causes the simulation to wait an additional cycle which causes a mismatch. I am probably missing something, maybe not driving some signals properly, but I need to use SRAM macros like described in OpenRAM paper. How can I fix this?