Bugfix in name resolution with generate blocks

This commit is contained in:
Clifford Wolf 2014-01-30 14:52:46 +01:00
parent 672229eda5
commit 4df7e03ec9
2 changed files with 25 additions and 1 deletions

View File

@ -1478,7 +1478,7 @@ void AstNode::expand_genblock(std::string index_var, std::string prefix, std::ma
for (size_t i = 0; i < children.size(); i++) {
AstNode *child = children[i];
if (child->type != AST_FUNCTION && child->type != AST_TASK)
if (child->type != AST_FUNCTION && child->type != AST_TASK && child->type != AST_PREFIX)
child->expand_genblock(index_var, prefix, name_map);
}

24
tests/simple/carryadd.v Normal file
View File

@ -0,0 +1,24 @@
module carryadd(a, b, y);
parameter WIDTH = 8;
input [WIDTH-1:0] a, b;
output [WIDTH-1:0] y;
genvar i;
generate
for (i = 0; i < WIDTH; i = i+1) begin:STAGE
wire IN1 = a[i], IN2 = b[i];
wire C, Y;
if (i == 0)
assign C = IN1 & IN2, Y = IN1 ^ IN2;
else
assign C = (IN1 & IN2) | ((IN1 | IN2) & STAGE[i-1].C),
Y = IN1 ^ IN2 ^ STAGE[i-1].C;
assign y[i] = Y;
end
endgenerate
// assert property (y == a + b);
endmodule