mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-30 19:22:31 +00:00 
			
		
		
		
	Add new $check cell to represent assertions with a message.
				
					
				
			This commit is contained in:
		
							parent
							
								
									e1a59ba80b
								
							
						
					
					
						commit
						c7bf0e3b8f
					
				
					 12 changed files with 516 additions and 306 deletions
				
			
		|  | @ -102,6 +102,7 @@ struct CellTypes | |||
| 		setup_type(ID($specify3), {ID::EN, ID::SRC, ID::DST, ID::DAT}, pool<RTLIL::IdString>(), true); | ||||
| 		setup_type(ID($specrule), {ID::EN_SRC, ID::EN_DST, ID::SRC, ID::DST}, pool<RTLIL::IdString>(), true); | ||||
| 		setup_type(ID($print), {ID::EN, ID::ARGS, ID::TRG}, pool<RTLIL::IdString>()); | ||||
| 		setup_type(ID($check), {ID::A, ID::EN, ID::ARGS, ID::TRG}, pool<RTLIL::IdString>()); | ||||
| 		setup_type(ID($set_tag), {ID::A, ID::SET, ID::CLR}, {ID::Y}); | ||||
| 		setup_type(ID($get_tag), {ID::A}, {ID::Y}); | ||||
| 		setup_type(ID($overwrite_tag), {ID::A, ID::SET, ID::CLR}, pool<RTLIL::IdString>()); | ||||
|  |  | |||
|  | @ -88,6 +88,7 @@ X(equiv_merged) | |||
| X(equiv_region) | ||||
| X(extract_order) | ||||
| X(F) | ||||
| X(FLAVOR) | ||||
| X(FORMAT) | ||||
| X(force_downto) | ||||
| X(force_upto) | ||||
|  |  | |||
|  | @ -1068,6 +1068,12 @@ namespace { | |||
| 				error(__LINE__); | ||||
| 		} | ||||
| 
 | ||||
| 		std::string param_string(const RTLIL::IdString &name) | ||||
| 		{ | ||||
| 			param(name); | ||||
| 			return cell->parameters.at(name).decode_string(); | ||||
| 		} | ||||
| 
 | ||||
| 		void port(const RTLIL::IdString& name, int width) | ||||
| 		{ | ||||
| 			auto it = cell->connections_.find(name); | ||||
|  | @ -1747,6 +1753,22 @@ namespace { | |||
| 				return; | ||||
| 			} | ||||
| 
 | ||||
| 			if (cell->type == ID($check)) { | ||||
| 				std::string flavor = param_string(ID(FLAVOR)); | ||||
| 				if (!(flavor == "assert" || flavor == "assume" || flavor == "live" || flavor == "fair" || flavor == "cover")) | ||||
| 					error(__LINE__); | ||||
| 				param(ID(FORMAT)); | ||||
| 				param_bool(ID::TRG_ENABLE); | ||||
| 				param(ID::TRG_POLARITY); | ||||
| 				param(ID::PRIORITY); | ||||
| 				port(ID::A, 1); | ||||
| 				port(ID::EN, 1); | ||||
| 				port(ID::TRG, param(ID::TRG_WIDTH)); | ||||
| 				port(ID::ARGS, param(ID::ARGS_WIDTH)); | ||||
| 				check_expected(); | ||||
| 				return; | ||||
| 			} | ||||
| 
 | ||||
| 			if (cell->type == ID($_BUF_))    { port(ID::A,1); port(ID::Y,1); check_expected(); return; } | ||||
| 			if (cell->type == ID($_NOT_))    { port(ID::A,1); port(ID::Y,1); check_expected(); return; } | ||||
| 			if (cell->type == ID($_AND_))    { port(ID::A,1); port(ID::B,1); port(ID::Y,1); check_expected(); return; } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue