diff options
| author | Clifford Wolf <clifford@clifford.at> | 2016-06-19 15:48:40 +0200 | 
|---|---|---|
| committer | Clifford Wolf <clifford@clifford.at> | 2016-06-19 15:48:40 +0200 | 
| commit | 9bca8ccd40d70b6f6ad218cb9b1ae7dd4d3e8e68 (patch) | |
| tree | 74840e34ae02c49884e81916eb81be4fd93c006d /frontends/verilog | |
| parent | ca91bccb6b03a0b098f80bf14b55a1444eef73c0 (diff) | |
| parent | a8200a773fb8cf2ce2d8793716b62e01c97dd731 (diff) | |
| download | yosys-9bca8ccd40d70b6f6ad218cb9b1ae7dd4d3e8e68.tar.gz yosys-9bca8ccd40d70b6f6ad218cb9b1ae7dd4d3e8e68.tar.bz2 yosys-9bca8ccd40d70b6f6ad218cb9b1ae7dd4d3e8e68.zip | |
Merge branch 'sv_packages' of https://github.com/rubund/yosys
Diffstat (limited to 'frontends/verilog')
| -rw-r--r-- | frontends/verilog/verilog_lexer.l | 4 | ||||
| -rw-r--r-- | frontends/verilog/verilog_parser.y | 29 | 
2 files changed, 33 insertions, 0 deletions
| diff --git a/frontends/verilog/verilog_lexer.l b/frontends/verilog/verilog_lexer.l index 69a8ddaad..107a2dfdd 100644 --- a/frontends/verilog/verilog_lexer.l +++ b/frontends/verilog/verilog_lexer.l @@ -141,6 +141,8 @@ YOSYS_NAMESPACE_END  "endfunction"  { return TOK_ENDFUNCTION; }  "task"         { return TOK_TASK; }  "endtask"      { return TOK_ENDTASK; } +"package"      { SV_KEYWORD(TOK_PACKAGE); } +"endpackage"   { SV_KEYWORD(TOK_ENDPACKAGE); }  "parameter"    { return TOK_PARAMETER; }  "localparam"   { return TOK_LOCALPARAM; }  "defparam"     { return TOK_DEFPARAM; } @@ -351,6 +353,8 @@ import[ \t\r\n]+\"(DPI|DPI-C)\"[ \t\r\n]+function[ \t\r\n]+ {  "<<<" { return OP_SSHL; }  ">>>" { return OP_SSHR; } +"::"  { SV_KEYWORD(TOK_PACKAGESEP); } +  "+:" { return TOK_POS_INDEXED; }  "-:" { return TOK_NEG_INDEXED; } diff --git a/frontends/verilog/verilog_parser.y b/frontends/verilog/verilog_parser.y index f95849133..b46cdd38f 100644 --- a/frontends/verilog/verilog_parser.y +++ b/frontends/verilog/verilog_parser.y @@ -102,6 +102,7 @@ static void free_attr(std::map<std::string, AstNode*> *al)  %token <string> TOK_STRING TOK_ID TOK_CONST TOK_REALVAL TOK_PRIMITIVE  %token ATTR_BEGIN ATTR_END DEFATTR_BEGIN DEFATTR_END  %token TOK_MODULE TOK_ENDMODULE TOK_PARAMETER TOK_LOCALPARAM TOK_DEFPARAM +%token TOK_PACKAGE TOK_ENDPACKAGE TOK_PACKAGESEP  %token TOK_INPUT TOK_OUTPUT TOK_INOUT TOK_WIRE TOK_REG  %token TOK_INTEGER TOK_SIGNED TOK_ASSIGN TOK_ALWAYS TOK_INITIAL  %token TOK_BEGIN TOK_END TOK_IF TOK_ELSE TOK_FOR TOK_WHILE TOK_REPEAT @@ -155,6 +156,7 @@ design:  	task_func_decl design |  	param_decl design |  	localparam_decl design | +	package design |  	/* empty */;  attr: @@ -212,6 +214,14 @@ hierarchical_id:  	TOK_ID {  		$$ = $1;  	} | +	hierarchical_id TOK_PACKAGESEP TOK_ID { +		if ($3->substr(0, 1) == "\\") +			*$1 += "::" + $3->substr(1); +		else +			*$1 += "::" + *$3; +		delete $3; +		$$ = $1; +	} |  	hierarchical_id '.' TOK_ID {  		if ($3->substr(0, 1) == "\\")  			*$1 += "." + $3->substr(1); @@ -311,6 +321,25 @@ module_arg:  		do_not_require_port_stubs = true;  	}; +package: +	attr TOK_PACKAGE TOK_ID { +		AstNode *mod = new AstNode(AST_PACKAGE); +		ast_stack.back()->children.push_back(mod); +		ast_stack.push_back(mod); +		current_ast_mod = mod; +		mod->str = *$3; +		append_attr(mod, $1); +	} ';' package_body TOK_ENDPACKAGE { +		ast_stack.pop_back(); +		current_ast_mod = NULL; +	}; + +package_body: +	package_body package_body_stmt |; + +package_body_stmt: +	localparam_decl; +  non_opt_delay:  	'#' '(' expr ')' { delete $3; } |  	'#' '(' expr ':' expr ':' expr ')' { delete $3; delete $5; delete $7; }; | 
