mirror of https://github.com/YosysHQ/yosys.git
Fix elaboration of whole memory words used as indices
This commit is contained in:
parent
af457ce8d0
commit
750831e3e0
|
@ -3451,7 +3451,14 @@ replace_fcall_later:;
|
||||||
if (current_scope[str]->children[0]->isConst())
|
if (current_scope[str]->children[0]->isConst())
|
||||||
newNode = current_scope[str]->children[0]->clone();
|
newNode = current_scope[str]->children[0]->clone();
|
||||||
}
|
}
|
||||||
else if (at_zero && current_scope.count(str) > 0 && (current_scope[str]->type == AST_WIRE || current_scope[str]->type == AST_AUTOWIRE)) {
|
else if (at_zero && current_scope.count(str) > 0) {
|
||||||
|
AstNode *node = current_scope[str];
|
||||||
|
if (node->type == AST_WIRE || node->type == AST_AUTOWIRE || node->type == AST_MEMORY)
|
||||||
|
newNode = mkconst_int(0, sign_hint, width_hint);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case AST_MEMRD:
|
||||||
|
if (at_zero) {
|
||||||
newNode = mkconst_int(0, sign_hint, width_hint);
|
newNode = mkconst_int(0, sign_hint, width_hint);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
00 04 08 0c
|
||||||
|
10 14 18 1c
|
||||||
|
20 24 28 2c
|
||||||
|
30 34 38 3c
|
|
@ -0,0 +1,21 @@
|
||||||
|
`define DATA 64'h492e5c4d7747e032
|
||||||
|
|
||||||
|
`define GATE(n, expr) \
|
||||||
|
module gate``n(sel, out); \
|
||||||
|
input wire [3:0] sel; \
|
||||||
|
output wire out; \
|
||||||
|
reg [63:0] bits; \
|
||||||
|
reg [5:0] ptrs[15:0]; \
|
||||||
|
initial bits = `DATA; \
|
||||||
|
initial $readmemh("memory_word_as_index.data", ptrs); \
|
||||||
|
assign out = expr; \
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
`GATE(1, bits[ptrs[sel]])
|
||||||
|
`GATE(2, bits[ptrs[sel][5:0]])
|
||||||
|
`GATE(3, bits[ptrs[sel]+:1])
|
||||||
|
|
||||||
|
module gold(sel, out);
|
||||||
|
input wire [3:0] sel;
|
||||||
|
output wire out = `DATA >> (sel * 4);
|
||||||
|
endmodule
|
|
@ -0,0 +1,23 @@
|
||||||
|
read_verilog memory_word_as_index.v
|
||||||
|
|
||||||
|
hierarchy
|
||||||
|
proc
|
||||||
|
memory
|
||||||
|
flatten
|
||||||
|
opt -full
|
||||||
|
|
||||||
|
equiv_make gold gate1 equiv
|
||||||
|
equiv_simple
|
||||||
|
equiv_status -assert
|
||||||
|
|
||||||
|
delete equiv
|
||||||
|
|
||||||
|
equiv_make gold gate2 equiv
|
||||||
|
equiv_simple
|
||||||
|
equiv_status -assert
|
||||||
|
|
||||||
|
delete equiv
|
||||||
|
|
||||||
|
equiv_make gold gate3 equiv
|
||||||
|
equiv_simple
|
||||||
|
equiv_status -assert
|
Loading…
Reference in New Issue