diff options
Diffstat (limited to 'techlibs/ice40')
| -rw-r--r-- | techlibs/ice40/abc_hx.box | 8 | ||||
| -rw-r--r-- | techlibs/ice40/abc_lp.box | 8 | ||||
| -rw-r--r-- | techlibs/ice40/abc_u.box | 8 | ||||
| -rw-r--r-- | techlibs/ice40/cells_sim.v | 19 | ||||
| -rw-r--r-- | techlibs/ice40/ice40_opt.cc | 9 | 
5 files changed, 25 insertions, 27 deletions
| diff --git a/techlibs/ice40/abc_hx.box b/techlibs/ice40/abc_hx.box index c0ea742e2..3ea70bc91 100644 --- a/techlibs/ice40/abc_hx.box +++ b/techlibs/ice40/abc_hx.box @@ -3,11 +3,11 @@  # NB: Inputs/Outputs must be ordered alphabetically  #     (with exceptions for carry in/out) -# Inputs: A B CI +# Inputs: A B I0 I3 CI  # Outputs: O CO  #   (NB: carry chain input/output must be last  #        input/output and have been moved there  #        overriding the alphabetical ordering) -$__ICE40_FULL_ADDER 1 1 3 2 -400 379 316 -259 231 126 +$__ICE40_CARRY_WRAPPER 1 1 5 2 +400 379 449 316 316 +259 231 -   -   126 diff --git a/techlibs/ice40/abc_lp.box b/techlibs/ice40/abc_lp.box index d73b6d649..473e92fe9 100644 --- a/techlibs/ice40/abc_lp.box +++ b/techlibs/ice40/abc_lp.box @@ -3,11 +3,11 @@  # NB: Inputs/Outputs must be ordered alphabetically  #     (with exceptions for carry in/out) -# Inputs: A B CI +# Inputs: A B I0 I3 CI  # Outputs: O CO  #   (NB: carry chain input/output must be last  #        input/output and have been moved there  #        overriding the alphabetical ordering) -$__ICE40_FULL_ADDER 1 1 3 2 -589 558 465 -675 609 186  +$__ICE40_CARRY_WRAPPER 1 1 5 2 +589 558 661 465 465 +675 609 -   -   186 diff --git a/techlibs/ice40/abc_u.box b/techlibs/ice40/abc_u.box index 42d666051..f00e247b8 100644 --- a/techlibs/ice40/abc_u.box +++ b/techlibs/ice40/abc_u.box @@ -3,11 +3,11 @@  # NB: Inputs/Outputs must be ordered alphabetically  #     (with exceptions for carry in/out) -# Inputs: A B CI +# Inputs: A B I0 I3 CI  # Outputs: O CO  #   (NB: carry chain input/output must be last  #        input/output and have been moved there  #        overriding the alphabetical ordering) -$__ICE40_FULL_ADDER 1 1 3 2 -1231 1205 874 -675  609  278 +$__ICE40_CARRY_WRAPPER 1 1 5 2 +1231 1205 1285 874 874 +675  609  -    -   278 diff --git a/techlibs/ice40/cells_sim.v b/techlibs/ice40/cells_sim.v index c7f3bdad2..2a7487f6b 100644 --- a/techlibs/ice40/cells_sim.v +++ b/techlibs/ice40/cells_sim.v @@ -142,15 +142,16 @@ module SB_CARRY (output CO, input I0, I1, CI);  endmodule  (* abc_box_id = 1, lib_whitebox *) -module \$__ICE40_FULL_ADDER ( +module \$__ICE40_CARRY_WRAPPER (  	(* abc_carry *)  	output CO,  	output O, -	input A, -	input B, +	input A, B,  	(* abc_carry *) -	input CI +	input CI, +	input I0, I3  ); +	parameter LUT = 0;  	SB_CARRY carry (  		.I0(A),  		.I1(B), @@ -158,16 +159,12 @@ module \$__ICE40_FULL_ADDER (  		.CO(CO)  	);  	SB_LUT4 #( -		//         I0: 1010 1010 1010 1010 -		//         I1: 1100 1100 1100 1100 -		//         I2: 1111 0000 1111 0000 -		//         I3: 1111 1111 0000 0000 -		.LUT_INIT(16'b 0110_1001_1001_0110) +		.LUT_INIT(LUT)  	) adder ( -		.I0(1'b0), +		.I0(I0),  		.I1(A),  		.I2(B), -		.I3(CI), +		.I3(I3),  		.O(O)  	);  endmodule diff --git a/techlibs/ice40/ice40_opt.cc b/techlibs/ice40/ice40_opt.cc index d5106b805..ea56d3f4d 100644 --- a/techlibs/ice40/ice40_opt.cc +++ b/techlibs/ice40/ice40_opt.cc @@ -84,7 +84,7 @@ static void run_ice40_opts(Module *module)  			continue;  		} -		if (cell->type == "$__ICE40_FULL_ADDER") +		if (cell->type == "$__ICE40_CARRY_WRAPPER")  		{  			SigSpec non_const_inputs, replacement_output;  			int count_zeros = 0, count_ones = 0; @@ -114,16 +114,17 @@ static void run_ice40_opts(Module *module)  				optimized_co.insert(sigmap(cell->getPort("\\CO")[0]));  				module->connect(cell->getPort("\\CO")[0], replacement_output);  				module->design->scratchpad_set_bool("opt.did_something", true); -				log("Optimized $__ICE40_FULL_ADDER cell back to logic (without SB_CARRY) %s.%s: CO=%s\n", +				log("Optimized $__ICE40_CARRY_WRAPPER cell back to logic (without SB_CARRY) %s.%s: CO=%s\n",  						log_id(module), log_id(cell), log_signal(replacement_output));  				cell->type = "$lut"; -				cell->setPort("\\A", { State::S0, inbit[0], inbit[1], inbit[2] }); +				cell->setPort("\\A", { cell->getPort("\\I0"), inbit[0], inbit[1], cell->getPort("\\I3") });  				cell->setPort("\\Y", cell->getPort("\\O"));  				cell->unsetPort("\\B");  				cell->unsetPort("\\CI"); +				cell->unsetPort("\\I0"); +				cell->unsetPort("\\I3");  				cell->unsetPort("\\CO");  				cell->unsetPort("\\O"); -				cell->setParam("\\LUT", RTLIL::Const::from_string("0110100110010110"));  				cell->setParam("\\WIDTH", 4);  			}  			continue; | 
