mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-30 19:22:31 +00:00 
			
		
		
		
	Added support for SystemVerilog packages with localparam definitions
This commit is contained in:
		
							parent
							
								
									3380281e15
								
							
						
					
					
						commit
						178ff3e7f6
					
				
					 7 changed files with 53 additions and 1 deletions
				
			
		|  | @ -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; } | ||||
| 
 | ||||
|  |  | |||
|  | @ -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; }; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue