aboutsummaryrefslogtreecommitdiffstats
path: root/tests/opt/opt_mem_feedback.ys
diff options
context:
space:
mode:
authorMarcelina Koƛcielnicka <mwk@0x04.net>2021-05-25 15:17:29 +0200
committerMarcelina Koƛcielnicka <mwk@0x04.net>2021-05-25 15:59:41 +0200
commit5628f5a88fa49c126af0149e302a8292229ab9df (patch)
tree302ebeeb17d5ad6ca87bb145d885fdeb4c0dd25a /tests/opt/opt_mem_feedback.ys
parent4858721637fc5d6ae6d7e0fb0489e0cec8bb388b (diff)
downloadyosys-5628f5a88fa49c126af0149e302a8292229ab9df.tar.gz
yosys-5628f5a88fa49c126af0149e302a8292229ab9df.tar.bz2
yosys-5628f5a88fa49c126af0149e302a8292229ab9df.zip
opt_mem_feedback: Respect write port priority.
Diffstat (limited to 'tests/opt/opt_mem_feedback.ys')
-rw-r--r--tests/opt/opt_mem_feedback.ys47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/opt/opt_mem_feedback.ys b/tests/opt/opt_mem_feedback.ys
index 6a68921c3..56078ec27 100644
--- a/tests/opt/opt_mem_feedback.ys
+++ b/tests/opt/opt_mem_feedback.ys
@@ -140,3 +140,50 @@ memory_map
design -save postopt
equiv_opt -assert -run prepare: :
+
+
+
+design -reset
+
+# Tricky case: legit feedback path, but priority needs to be preserved.
+
+read_verilog << EOT
+
+module top(...);
+
+input clk;
+input sel;
+input [3:0] wa1;
+input [3:0] wa2;
+input [15:0] wd1;
+input [3:0] ra;
+output [15:0] rd;
+
+reg [15:0] mem [0:15];
+
+always @(posedge clk) begin
+ mem[wa1] <= sel ? wd1 : mem[wa1];
+ mem[wa2] <= mem[wa2];
+end
+
+assign rd = mem[ra];
+
+endmodule
+
+EOT
+
+hierarchy -auto-top
+proc
+opt_clean
+
+design -save start
+memory_map
+design -save preopt
+
+design -load start
+opt_mem_feedback
+select -assert-count 1 t:$memrd
+memory_map
+design -save postopt
+
+equiv_opt -assert -run prepare: :