mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-19 04:13:39 +00:00
Merge branch 'master' into struct
This commit is contained in:
commit
0d3f7ea011
154 changed files with 4100 additions and 2459 deletions
|
@ -48,16 +48,18 @@ USING_YOSYS_NAMESPACE
|
|||
using namespace AST;
|
||||
using namespace VERILOG_FRONTEND;
|
||||
|
||||
#define YYSTYPE FRONTEND_VERILOG_YYSTYPE
|
||||
#define YYLTYPE FRONTEND_VERILOG_YYLTYPE
|
||||
|
||||
YOSYS_NAMESPACE_BEGIN
|
||||
namespace VERILOG_FRONTEND {
|
||||
std::vector<std::string> fn_stack;
|
||||
std::vector<int> ln_stack;
|
||||
YYLTYPE real_location;
|
||||
YYLTYPE old_location;
|
||||
}
|
||||
YOSYS_NAMESPACE_END
|
||||
|
||||
#define YYSTYPE FRONTEND_VERILOG_YYSTYPE
|
||||
#define YYLTYPE FRONTEND_VERILOG_YYLTYPE
|
||||
|
||||
#define SV_KEYWORD(_tok) \
|
||||
if (sv_mode) return _tok; \
|
||||
log("Lexer warning: The SystemVerilog keyword `%s' (at %s:%d) is not "\
|
||||
|
@ -73,9 +75,6 @@ YOSYS_NAMESPACE_END
|
|||
#define YY_INPUT(buf,result,max_size) \
|
||||
result = readsome(*VERILOG_FRONTEND::lexin, buf, max_size)
|
||||
|
||||
YYLTYPE real_location;
|
||||
YYLTYPE old_location;
|
||||
|
||||
#define YY_USER_ACTION \
|
||||
old_location = real_location; \
|
||||
real_location.first_line = real_location.last_line; \
|
||||
|
@ -128,7 +127,9 @@ static bool isUserType(std::string &s)
|
|||
%x BASED_CONST
|
||||
|
||||
%%
|
||||
int comment_caller;
|
||||
// Initialise comment_caller to something to avoid a "maybe undefined"
|
||||
// warning from GCC.
|
||||
int comment_caller = INITIAL;
|
||||
|
||||
<INITIAL,SYNOPSYS_TRANSLATE_OFF>"`file_push "[^\n]* {
|
||||
fn_stack.push_back(current_filename);
|
||||
|
|
|
@ -886,7 +886,19 @@ task_func_port:
|
|||
albuf = $1;
|
||||
astbuf1 = $2;
|
||||
astbuf2 = checkRange(astbuf1, $3);
|
||||
} wire_name | wire_name;
|
||||
} wire_name |
|
||||
{
|
||||
if (!astbuf1) {
|
||||
if (!sv_mode)
|
||||
frontend_verilog_yyerror("task/function argument direction missing");
|
||||
albuf = new dict<IdString, AstNode*>;
|
||||
astbuf1 = new AstNode(AST_WIRE);
|
||||
current_wire_rand = false;
|
||||
current_wire_const = false;
|
||||
astbuf1->is_input = true;
|
||||
astbuf2 = NULL;
|
||||
}
|
||||
} wire_name;
|
||||
|
||||
task_func_body:
|
||||
task_func_body behavioral_stmt |
|
||||
|
@ -2299,49 +2311,56 @@ assert_property:
|
|||
};
|
||||
|
||||
simple_behavioral_stmt:
|
||||
lvalue '=' delay expr {
|
||||
AstNode *node = new AstNode(AST_ASSIGN_EQ, $1, $4);
|
||||
attr lvalue '=' delay expr {
|
||||
AstNode *node = new AstNode(AST_ASSIGN_EQ, $2, $5);
|
||||
ast_stack.back()->children.push_back(node);
|
||||
SET_AST_NODE_LOC(node, @1, @4);
|
||||
SET_AST_NODE_LOC(node, @2, @5);
|
||||
append_attr(node, $1);
|
||||
} |
|
||||
lvalue TOK_INCREMENT {
|
||||
AstNode *node = new AstNode(AST_ASSIGN_EQ, $1, new AstNode(AST_ADD, $1->clone(), AstNode::mkconst_int(1, true)));
|
||||
attr lvalue TOK_INCREMENT {
|
||||
AstNode *node = new AstNode(AST_ASSIGN_EQ, $2, new AstNode(AST_ADD, $2->clone(), AstNode::mkconst_int(1, true)));
|
||||
ast_stack.back()->children.push_back(node);
|
||||
SET_AST_NODE_LOC(node, @1, @2);
|
||||
SET_AST_NODE_LOC(node, @2, @3);
|
||||
append_attr(node, $1);
|
||||
} |
|
||||
lvalue TOK_DECREMENT {
|
||||
AstNode *node = new AstNode(AST_ASSIGN_EQ, $1, new AstNode(AST_SUB, $1->clone(), AstNode::mkconst_int(1, true)));
|
||||
attr lvalue TOK_DECREMENT {
|
||||
AstNode *node = new AstNode(AST_ASSIGN_EQ, $2, new AstNode(AST_SUB, $2->clone(), AstNode::mkconst_int(1, true)));
|
||||
ast_stack.back()->children.push_back(node);
|
||||
SET_AST_NODE_LOC(node, @1, @2);
|
||||
SET_AST_NODE_LOC(node, @2, @3);
|
||||
append_attr(node, $1);
|
||||
} |
|
||||
lvalue OP_LE delay expr {
|
||||
AstNode *node = new AstNode(AST_ASSIGN_LE, $1, $4);
|
||||
attr lvalue OP_LE delay expr {
|
||||
AstNode *node = new AstNode(AST_ASSIGN_LE, $2, $5);
|
||||
ast_stack.back()->children.push_back(node);
|
||||
SET_AST_NODE_LOC(node, @1, @4);
|
||||
SET_AST_NODE_LOC(node, @2, @5);
|
||||
append_attr(node, $1);
|
||||
};
|
||||
|
||||
// this production creates the obligatory if-else shift/reduce conflict
|
||||
behavioral_stmt:
|
||||
defattr | assert | wire_decl | param_decl | localparam_decl | typedef_decl |
|
||||
non_opt_delay behavioral_stmt |
|
||||
simple_behavioral_stmt ';' | ';' |
|
||||
hierarchical_id attr {
|
||||
simple_behavioral_stmt ';' |
|
||||
attr ';' {
|
||||
free_attr($1);
|
||||
} |
|
||||
attr hierarchical_id {
|
||||
AstNode *node = new AstNode(AST_TCALL);
|
||||
node->str = *$1;
|
||||
delete $1;
|
||||
node->str = *$2;
|
||||
delete $2;
|
||||
ast_stack.back()->children.push_back(node);
|
||||
ast_stack.push_back(node);
|
||||
append_attr(node, $2);
|
||||
append_attr(node, $1);
|
||||
} opt_arg_list ';'{
|
||||
ast_stack.pop_back();
|
||||
} |
|
||||
TOK_MSG_TASKS attr {
|
||||
attr TOK_MSG_TASKS {
|
||||
AstNode *node = new AstNode(AST_TCALL);
|
||||
node->str = *$1;
|
||||
delete $1;
|
||||
node->str = *$2;
|
||||
delete $2;
|
||||
ast_stack.back()->children.push_back(node);
|
||||
ast_stack.push_back(node);
|
||||
append_attr(node, $2);
|
||||
append_attr(node, $1);
|
||||
} opt_arg_list ';'{
|
||||
ast_stack.pop_back();
|
||||
} |
|
||||
|
@ -2438,8 +2457,6 @@ behavioral_stmt:
|
|||
ast_stack.pop_back();
|
||||
};
|
||||
|
||||
;
|
||||
|
||||
unique_case_attr:
|
||||
/* empty */ {
|
||||
$$ = false;
|
||||
|
@ -2534,7 +2551,7 @@ gen_case_item:
|
|||
} case_select {
|
||||
case_type_stack.push_back(0);
|
||||
SET_AST_NODE_LOC(ast_stack.back(), @2, @2);
|
||||
} gen_stmt_or_null {
|
||||
} gen_stmt_block {
|
||||
case_type_stack.pop_back();
|
||||
ast_stack.pop_back();
|
||||
};
|
||||
|
@ -2626,7 +2643,10 @@ module_gen_body:
|
|||
/* empty */;
|
||||
|
||||
gen_stmt_or_module_body_stmt:
|
||||
gen_stmt | module_body_stmt;
|
||||
gen_stmt | module_body_stmt |
|
||||
attr ';' {
|
||||
free_attr($1);
|
||||
};
|
||||
|
||||
// this production creates the obligatory if-else shift/reduce conflict
|
||||
gen_stmt:
|
||||
|
@ -2648,7 +2668,7 @@ gen_stmt:
|
|||
AstNode *block = new AstNode(AST_GENBLOCK);
|
||||
ast_stack.back()->children.push_back(block);
|
||||
ast_stack.push_back(block);
|
||||
} gen_stmt_or_null {
|
||||
} gen_stmt_block {
|
||||
ast_stack.pop_back();
|
||||
} opt_gen_else {
|
||||
SET_AST_NODE_LOC(ast_stack.back(), @1, @7);
|
||||
|
@ -2698,11 +2718,8 @@ gen_stmt_block:
|
|||
ast_stack.pop_back();
|
||||
};
|
||||
|
||||
gen_stmt_or_null:
|
||||
gen_stmt_block | ';';
|
||||
|
||||
opt_gen_else:
|
||||
TOK_ELSE gen_stmt_or_null | /* empty */ %prec FAKE_THEN;
|
||||
TOK_ELSE gen_stmt_block | /* empty */ %prec FAKE_THEN;
|
||||
|
||||
expr:
|
||||
basic_expr {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue