Replies: 2 comments
-
|
I don't think there is a way to tell module sync_ram_tdp #(parameter DATA_WIDTH=8, ADDRESS_WIDTH=10)
(input wire clk_a, clk_b,
input wire write_enable_a, write_enable_b,
input wire read_enable_a, read_enable_b,
input wire [DATA_WIDTH-1:0] write_data_a, write_data_b,
input wire [ADDRESS_WIDTH-1:0] addr_a, addr_b,
output reg [DATA_WIDTH-1:0] read_data_a, read_data_b);
localparam WORD = (DATA_WIDTH-1);
localparam DEPTH = (2**ADDRESS_WIDTH-1);
reg [WORD:0] mem [0:DEPTH];
always @(posedge clk_a) begin
if (write_enable_a)
mem[addr_a] <= write_data_a;
else
read_data_a <= mem[addr_a];
end
always @(posedge clk_b) begin
if (write_enable_b)
mem[addr_b] <= write_data_b;
else
read_data_b <= mem[addr_b];
end
endmodule // sync_ram_tdpRunning Even with 64b x 32B that completes in under a second (mind you memories that large do crash in other places, but The major problem here is that I don't think there is any way to do an asynchronous full memory reset in Yosys (and honestly even a synchronous full memory reset would probably cause issues in wire clk_r = RD_CLK_POLARITY ? RD_CLK : ~RD_CLK;
wire en_r = RD_CLK_ENABLE ? RD_EN : 1'b1;
always @(posedge clk_r) begin
if (en_r) begin
// ..
end
end |
Beta Was this translation helpful? Give feedback.
-
|
Also FYI that the Yosys Discourse is the preferred place to ask questions like this :) |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
I want to have a large memory that isn't synthesized, but the CLI seems to imply that its doing considerable work inside. The invocation of
hierarchyresults in a warning which I do not expect.My workaround is to use the commented out define, and then mark the used wires as
(*keep*).Is there a way to instruct Yosys to not elaborate blackboxes?
This prints
Here are the files
v2f_programmable_ram.v
fabric.v
Beta Was this translation helpful? Give feedback.
All reactions