mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Implemented indexed part selects
This commit is contained in:
		
							parent
							
								
									c4c299eb5a
								
							
						
					
					
						commit
						92035fb38e
					
				
					 4 changed files with 19 additions and 3 deletions
				
			
		
							
								
								
									
										3
									
								
								README
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								README
									
										
									
									
									
								
							|  | @ -291,9 +291,6 @@ Roadmap / Large-scale TODOs | ||||||
|    - VlogHammer: http://www.clifford.at/yosys/vloghammer.html |    - VlogHammer: http://www.clifford.at/yosys/vloghammer.html | ||||||
|    - yosys-bigsim: https://github.com/cliffordwolf/yosys-bigsim |    - yosys-bigsim: https://github.com/cliffordwolf/yosys-bigsim | ||||||
| 
 | 
 | ||||||
| - Missing Verilog-2005 features to be implemented soon: |  | ||||||
|   - Indexed part selects |  | ||||||
| 
 |  | ||||||
| - Technology mapping for real-world applications | - Technology mapping for real-world applications | ||||||
|    - Add "mini synth script" feature to techmap pass |    - Add "mini synth script" feature to techmap pass | ||||||
|    - Add const-folding via cell parameters to techmap pass |    - Add const-folding via cell parameters to techmap pass | ||||||
|  |  | ||||||
|  | @ -249,6 +249,9 @@ supply1 { return TOK_SUPPLY1; } | ||||||
| "<<<" { return OP_SSHL; } | "<<<" { return OP_SSHL; } | ||||||
| ">>>" { return OP_SSHR; } | ">>>" { return OP_SSHR; } | ||||||
| 
 | 
 | ||||||
|  | "+:" { return TOK_POS_INDEXED; } | ||||||
|  | "-:" { return TOK_NEG_INDEXED; } | ||||||
|  | 
 | ||||||
| "/*" { BEGIN(COMMENT); } | "/*" { BEGIN(COMMENT); } | ||||||
| <COMMENT>.    /* ignore comment body */ | <COMMENT>.    /* ignore comment body */ | ||||||
| <COMMENT>\n   /* ignore comment body */ | <COMMENT>\n   /* ignore comment body */ | ||||||
|  |  | ||||||
|  | @ -104,6 +104,7 @@ static void free_attr(std::map<std::string, AstNode*> *al) | ||||||
| %token TOK_GENERATE TOK_ENDGENERATE TOK_GENVAR | %token TOK_GENERATE TOK_ENDGENERATE TOK_GENVAR | ||||||
| %token TOK_SYNOPSYS_FULL_CASE TOK_SYNOPSYS_PARALLEL_CASE | %token TOK_SYNOPSYS_FULL_CASE TOK_SYNOPSYS_PARALLEL_CASE | ||||||
| %token TOK_SUPPLY0 TOK_SUPPLY1 TOK_TO_SIGNED TOK_TO_UNSIGNED | %token TOK_SUPPLY0 TOK_SUPPLY1 TOK_TO_SIGNED TOK_TO_UNSIGNED | ||||||
|  | %token TOK_POS_INDEXED TOK_NEG_INDEXED | ||||||
| 
 | 
 | ||||||
| %type <ast> wire_type range non_opt_range expr basic_expr concat_list rvalue lvalue lvalue_concat_list | %type <ast> wire_type range non_opt_range expr basic_expr concat_list rvalue lvalue lvalue_concat_list | ||||||
| %type <string> opt_label tok_prim_wrapper hierarchical_id | %type <string> opt_label tok_prim_wrapper hierarchical_id | ||||||
|  | @ -336,6 +337,16 @@ non_opt_range: | ||||||
| 		$$->children.push_back($2); | 		$$->children.push_back($2); | ||||||
| 		$$->children.push_back($4); | 		$$->children.push_back($4); | ||||||
| 	} | | 	} | | ||||||
|  | 	'[' expr TOK_POS_INDEXED expr ']' { | ||||||
|  | 		$$ = new AstNode(AST_RANGE); | ||||||
|  | 		$$->children.push_back(new AstNode(AST_SUB, new AstNode(AST_ADD, $2->clone(), $4), AstNode::mkconst_int(1, true))); | ||||||
|  | 		$$->children.push_back(new AstNode(AST_ADD, $2, AstNode::mkconst_int(0, true))); | ||||||
|  | 	} | | ||||||
|  | 	'[' expr TOK_NEG_INDEXED expr ']' { | ||||||
|  | 		$$ = new AstNode(AST_RANGE); | ||||||
|  | 		$$->children.push_back(new AstNode(AST_ADD, $2, AstNode::mkconst_int(0, true))); | ||||||
|  | 		$$->children.push_back(new AstNode(AST_SUB, new AstNode(AST_ADD, $2->clone(), AstNode::mkconst_int(1, true)), $4)); | ||||||
|  | 	} | | ||||||
| 	'[' expr ']' { | 	'[' expr ']' { | ||||||
| 		$$ = new AstNode(AST_RANGE); | 		$$ = new AstNode(AST_RANGE); | ||||||
| 		$$->children.push_back($2); | 		$$->children.push_back($2); | ||||||
|  |  | ||||||
							
								
								
									
										5
									
								
								tests/simple/partsel.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								tests/simple/partsel.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | ||||||
|  | module test001(input [2:0] idx, input [31:0] data, output [3:0] slice_up, slice_down); | ||||||
|  | wire [5:0] offset = idx << 2; | ||||||
|  | assign slice_up = data[offset +: 4]; | ||||||
|  | assign slice_down = data[offset + 3 -: 4]; | ||||||
|  | endmodule | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue