sv: fix support wire and var data type modifiers

This commit is contained in:
Zachary Snow 2021-01-20 09:15:48 -07:00
parent 4762cc06c6
commit 006c18fc11
3 changed files with 65 additions and 9 deletions

View File

@ -664,28 +664,33 @@ wire_type_token:
astbuf3->children.push_back(new AstNode(AST_WIRETYPE));
astbuf3->children.back()->str = *$1;
} |
TOK_WIRE {
} |
TOK_WOR {
astbuf3->is_wor = true;
} |
TOK_WAND {
astbuf3->is_wand = true;
} |
// wires
TOK_WIRE {
} |
TOK_WIRE logic_type {
} |
// regs
TOK_REG {
astbuf3->is_reg = true;
} |
TOK_LOGIC {
astbuf3->is_logic = true;
TOK_VAR TOK_REG {
astbuf3->is_reg = true;
} |
// logics
TOK_VAR {
astbuf3->is_logic = true;
} |
TOK_INTEGER {
astbuf3->is_reg = true;
astbuf3->range_left = 31;
astbuf3->range_right = 0;
astbuf3->is_signed = true;
TOK_VAR logic_type {
astbuf3->is_logic = true;
} |
logic_type {
astbuf3->is_logic = true;
} |
TOK_GENVAR {
astbuf3->type = AST_GENVAR;
@ -695,6 +700,15 @@ wire_type_token:
astbuf3->range_right = 0;
};
logic_type:
TOK_LOGIC {
} |
TOK_INTEGER {
astbuf3->range_left = 31;
astbuf3->range_right = 0;
astbuf3->is_signed = true;
};
non_opt_range:
'[' expr ':' expr ']' {
$$ = new AstNode(AST_RANGE);

View File

@ -0,0 +1,33 @@
`define TEST(kwd) \
kwd kwd``_1; \
kwd kwd``_2; \
initial kwd``_1 = 1; \
assign kwd``_2 = 1;
`define TEST_VAR(kwd) \
var kwd var_``kwd``_1; \
var kwd var_``kwd``_2; \
initial var_``kwd``_1 = 1; \
assign var_``kwd``_2 = 1;
`define TEST_WIRE(kwd) \
wire kwd wire_``kwd``_1; \
wire kwd wire_``kwd``_2; \
initial wire_``kwd``_1 = 1; \
assign wire_``kwd``_2 = 1;
module top;
`TEST(wire) // wire assigned in a block
`TEST(reg) // reg assigned in a continuous assignment
`TEST(logic)
`TEST(integer)
`TEST_VAR(reg) // reg assigned in a continuous assignment
`TEST_VAR(logic)
`TEST_VAR(integer)
`TEST_WIRE(logic) // wire assigned in a block
`TEST_WIRE(integer) // wire assigned in a block
endmodule

View File

@ -0,0 +1,9 @@
logger -expect warning "wire '\\wire_1' is assigned in a block" 1
logger -expect warning "reg '\\reg_2' is assigned in a continuous assignment" 1
logger -expect warning "reg '\\var_reg_2' is assigned in a continuous assignment" 1
logger -expect warning "wire '\\wire_logic_1' is assigned in a block" 1
logger -expect warning "wire '\\wire_integer_1' is assigned in a block" 1
read_verilog -sv wire_and_var.sv