mirror of https://github.com/YosysHQ/yosys.git
parent
039f4f48d5
commit
a23d9409e7
|
@ -52,6 +52,18 @@ struct OptMemPass : public Pass {
|
||||||
int total_count = 0;
|
int total_count = 0;
|
||||||
for (auto module : design->selected_modules()) {
|
for (auto module : design->selected_modules()) {
|
||||||
for (auto &mem : Mem::get_selected_memories(module)) {
|
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()) {
|
if (mem.wr_ports.empty() && mem.inits.empty()) {
|
||||||
mem.remove();
|
mem.remove();
|
||||||
total_count++;
|
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