mirror of https://github.com/YosysHQ/yosys.git
parent
039f4f48d5
commit
a23d9409e7
|
@ -52,6 +52,18 @@ struct OptMemPass : public Pass {
|
|||
int total_count = 0;
|
||||
for (auto module : design->selected_modules()) {
|
||||
for (auto &mem : Mem::get_selected_memories(module)) {
|
||||
bool changed = false;
|
||||
for (auto &port : mem.wr_ports) {
|
||||
if (port.en.is_fully_zero()) {
|
||||
port.removed = true;
|
||||
changed = true;
|
||||
total_count++;
|
||||
}
|
||||
}
|
||||
if (changed) {
|
||||
mem.emit();
|
||||
}
|
||||
|
||||
if (mem.wr_ports.empty() && mem.inits.empty()) {
|
||||
mem.remove();
|
||||
total_count++;
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
read_verilog << EOT
|
||||
|
||||
module top(...);
|
||||
|
||||
input clk;
|
||||
input [3:0] wa;
|
||||
input [15:0] wd;
|
||||
input [3:0] ra;
|
||||
output [15:0] rd;
|
||||
|
||||
reg [15:0] mem[0:15];
|
||||
|
||||
integer i;
|
||||
reg x;
|
||||
|
||||
always @(posedge clk) begin
|
||||
for (i = 0; i < 2; i = i + 1) begin
|
||||
x = i == 1;
|
||||
if (x)
|
||||
mem[wa] <= wd;
|
||||
end
|
||||
end
|
||||
|
||||
assign rd = mem[ra];
|
||||
|
||||
endmodule
|
||||
|
||||
EOT
|
||||
|
||||
proc
|
||||
opt
|
||||
select -assert-count 2 t:$memwr
|
||||
opt_mem
|
||||
select -assert-count 1 t:$memwr
|
Loading…
Reference in New Issue