mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Merge pull request #805 from eddiehung/dff_init
write_verilog to write initial statement for initial flop state
This commit is contained in:
		
						commit
						2a8e5bf953
					
				
					 4 changed files with 76 additions and 2 deletions
				
			
		|  | @ -1310,6 +1310,15 @@ void dump_cell(std::ostream &f, std::string indent, RTLIL::Cell *cell) | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if (reg_ct.count(cell->type) && cell->hasPort("\\Q")) { | ||||
| 		std::stringstream ss; | ||||
| 		dump_reg_init(ss, cell->getPort("\\Q")); | ||||
| 		if (!ss.str().empty()) { | ||||
| 			f << stringf("%sinitial %s.Q", indent.c_str(), cell_name.c_str()); | ||||
| 			f << ss.str(); | ||||
| 			f << ";\n"; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void dump_conn(std::ostream &f, std::string indent, const RTLIL::SigSpec &left, const RTLIL::SigSpec &right) | ||||
|  |  | |||
							
								
								
									
										42
									
								
								tests/simple/dff_init.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								tests/simple/dff_init.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | |||
| module dff0_test(n1, n1_inv, clk); | ||||
|   input clk; | ||||
|   output n1; | ||||
|   reg n1 = 32'd0; | ||||
|   output n1_inv; | ||||
|   always @(posedge clk) | ||||
|       n1 <= n1_inv; | ||||
|   assign n1_inv = ~n1; | ||||
| endmodule | ||||
| 
 | ||||
| module dff1_test(n1, n1_inv, clk); | ||||
|   input clk; | ||||
|   (* init = 32'd1 *) | ||||
|   output n1; | ||||
|   reg n1 = 32'd1; | ||||
|   output n1_inv; | ||||
|   always @(posedge clk) | ||||
|       n1 <= n1_inv; | ||||
|   assign n1_inv = ~n1; | ||||
| endmodule | ||||
| 
 | ||||
| module dff0a_test(n1, n1_inv, clk); | ||||
|   input clk; | ||||
|   (* init = 32'd0 *) // Must be consistent with reg initialiser below | ||||
|   output n1; | ||||
|   reg n1 = 32'd0; | ||||
|   output n1_inv; | ||||
|   always @(posedge clk) | ||||
|       n1 <= n1_inv; | ||||
|   assign n1_inv = ~n1; | ||||
| endmodule | ||||
| 
 | ||||
| module dff1a_test(n1, n1_inv, clk); | ||||
|   input clk; | ||||
|   (* init = 32'd1 *) // Must be consistent with reg initialiser below | ||||
|   output n1; | ||||
|   reg n1 = 32'd1; | ||||
|   output n1_inv; | ||||
|   always @(posedge clk) | ||||
|       n1 <= n1_inv; | ||||
|   assign n1_inv = ~n1; | ||||
| endmodule | ||||
							
								
								
									
										21
									
								
								tests/simple_defparam/run-test.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										21
									
								
								tests/simple_defparam/run-test.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| OPTIND=1 | ||||
| seed=""    # default to no seed specified | ||||
| while getopts "S:" opt | ||||
| do | ||||
|     case "$opt" in | ||||
| 	S) arg="${OPTARG#"${OPTARG%%[![:space:]]*}"}" # remove leading space | ||||
| 	   seed="SEED=$arg" ;; | ||||
|     esac | ||||
| done | ||||
| shift "$((OPTIND-1))" | ||||
| 
 | ||||
| # check for Icarus Verilog | ||||
| if ! which iverilog > /dev/null ; then | ||||
|   echo "$0: Error: Icarus Verilog 'iverilog' not found." | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| cp ../simple/*.v . | ||||
| exec ${MAKE:-make} -f ../tools/autotest.mk $seed *.v EXTRA_FLAGS="-B \"-defparam\"" | ||||
|  | @ -28,7 +28,7 @@ if [ ! -f $toolsdir/cmp_tbdata -o $toolsdir/cmp_tbdata.c -nt $toolsdir/cmp_tbdat | |||
| 	( set -ex; ${CC:-gcc} -Wall -o $toolsdir/cmp_tbdata $toolsdir/cmp_tbdata.c; ) || exit 1 | ||||
| fi | ||||
| 
 | ||||
| while getopts xmGl:wkjvref:s:p:n:S:I:-: opt; do | ||||
| while getopts xmGl:wkjvref:s:p:n:S:I:B:-: opt; do | ||||
| 	case "$opt" in | ||||
| 		x) | ||||
| 			use_xsim=true ;; | ||||
|  | @ -65,6 +65,8 @@ while getopts xmGl:wkjvref:s:p:n:S:I:-: opt; do | |||
| 			include_opts="$include_opts -I $OPTARG" | ||||
| 			xinclude_opts="$xinclude_opts -i $OPTARG" | ||||
| 			minclude_opts="$minclude_opts +incdir+$OPTARG" ;; | ||||
|         B) | ||||
| 			backend_opts="$backend_opts $OPTARG" ;; | ||||
| 		-) | ||||
| 			case "${OPTARG}" in | ||||
| 			    xfirrtl) | ||||
|  | @ -82,7 +84,7 @@ while getopts xmGl:wkjvref:s:p:n:S:I:-: opt; do | |||
| 				;; | ||||
| 			esac;; | ||||
| 		*) | ||||
| 			echo "Usage: $0 [-x|-m] [-G] [-w] [-k] [-j] [-v] [-r] [-e] [-l libs] [-f frontend] [-s script] [-p cmdstring] [-n iters] [-S seed] [-I incdir] [--xfirrtl FIRRTL test exclude file] [--firrtl2verilog command to generate verilog from firrtl] verilog-files\n" >&2 | ||||
| 			echo "Usage: $0 [-x|-m] [-G] [-w] [-k] [-j] [-v] [-r] [-e] [-l libs] [-f frontend] [-s script] [-p cmdstring] [-n iters] [-S seed] [-I incdir] [-B backend_opt] [--xfirrtl FIRRTL test exclude file] [--firrtl2verilog command to generate verilog from firrtl] verilog-files\n" >&2 | ||||
| 			exit 1 | ||||
| 	esac | ||||
| done | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue