mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Merge pull request #2441 from YosysHQ/dave/nexus_dsp_sim
nexus: Add DSP simulation model
This commit is contained in:
		
						commit
						c8d809897f
					
				
					 3 changed files with 573 additions and 250 deletions
				
			
		|  | @ -377,3 +377,567 @@ module DPR16X4( | |||
| 			mem[WAD] <= DI; | ||||
| 	assign DO = mem[RAD]; | ||||
| endmodule | ||||
| 
 | ||||
| // Used for all the DSP models to reduce duplication
 | ||||
| module OXIDE_DSP_REG #( | ||||
| 	parameter W = 18, | ||||
| 	parameter USED = "REGISTER", | ||||
| 	parameter RESETMODE = "SYNC" | ||||
| ) ( | ||||
| 	input CLK, CE, RST, | ||||
| 	input [W-1:0] D, | ||||
| 	output reg [W-1:0] Q | ||||
| ); | ||||
| 	generate | ||||
| 		if (USED == "BYPASS") | ||||
| 			always @* Q = D; | ||||
| 		else if (USED == "REGISTER") begin | ||||
| 			initial Q = 0; | ||||
| 			if (RESETMODE == "ASYNC") | ||||
| 				always @(posedge CLK, posedge RST) begin | ||||
| 					if (RST) | ||||
| 						Q <= 0; | ||||
| 					else if (CE) | ||||
| 						Q <= D; | ||||
| 				end | ||||
| 			else if (RESETMODE == "SYNC") | ||||
| 				always @(posedge CLK) begin | ||||
| 					if (RST) | ||||
| 						Q <= 0; | ||||
| 					else if (CE) | ||||
| 						Q <= D; | ||||
| 				end | ||||
| 		end | ||||
| 	endgenerate | ||||
| endmodule | ||||
| 
 | ||||
| module OXIDE_DSP_SIM #( | ||||
| 	// User facing parameters
 | ||||
| 	parameter REGINPUTA = "BYPASS", | ||||
| 	parameter REGINPUTB = "BYPASS", | ||||
| 	parameter REGINPUTC = "BYPASS", | ||||
| 	parameter REGADDSUB = "BYPASS", | ||||
| 	parameter REGLOADC = "BYPASS", | ||||
| 	parameter REGLOADC2 = "BYPASS", | ||||
| 	parameter REGCIN = "BYPASS", | ||||
| 	parameter REGPIPELINE = "BYPASS", | ||||
| 	parameter REGOUTPUT = "BYPASS", | ||||
| 	parameter GSR = "ENABLED", | ||||
| 	parameter RESETMODE = "SYNC", | ||||
| 	// Internally used parameters
 | ||||
| 	parameter A_WIDTH = 36, | ||||
| 	parameter B_WIDTH = 36, | ||||
| 	parameter C_WIDTH = 36, | ||||
| 	parameter Z_WIDTH = 72, | ||||
| 	parameter PREADD_USED = 0, | ||||
| 	parameter ADDSUB_USED = 0 | ||||
| ) ( | ||||
| 	input [A_WIDTH-1:0] A, | ||||
| 	input [B_WIDTH-1:0] B, | ||||
| 	input [C_WIDTH-1:0] C, | ||||
| 	input SIGNEDA, | ||||
| 	input SIGNEDB, | ||||
| 	input SIGNEDC, | ||||
| 	input CIN, | ||||
| 	input LOADC, | ||||
| 	input ADDSUB, | ||||
| 	input CLK, | ||||
| 	input CEA, CEB, CEC, CEPIPE, CECTRL, CECIN, CEOUT, | ||||
| 	input RSTA, RSTB, RSTC, RSTPIPE, RSTCTRL, RSTCIN, RSTOUT, | ||||
| 	output wire [Z_WIDTH-1:0] Z | ||||
| ); | ||||
| 	 | ||||
| 	localparam M_WIDTH = (A_WIDTH+B_WIDTH); | ||||
| 
 | ||||
| 	/******** REGISTERS ********/ | ||||
| 
 | ||||
| 	wire [M_WIDTH-1:0] pipe_d, pipe_q; | ||||
| 	wire [Z_WIDTH-1:0] z_d; | ||||
| 
 | ||||
| 	wire [A_WIDTH-1:0] a_r; | ||||
| 	wire [B_WIDTH-1:0] b_r; | ||||
| 	wire [C_WIDTH-1:0] c_r, c_r2; | ||||
| 	wire asgd_r, bsgd_r, csgd_r, csgd_r2; | ||||
| 
 | ||||
| 	wire addsub_r, addsub_r2, cin_r, cin_r2, sgd_r, sgd_r2; | ||||
| 	wire loadc_r, loadc_r2; | ||||
| 
 | ||||
| 	OXIDE_DSP_REG #(A_WIDTH+1, REGINPUTA, RESETMODE) a_reg(CLK, CEA, RSTA, {SIGNEDA, A}, {asgd_r, a_r}); | ||||
| 	OXIDE_DSP_REG #(B_WIDTH+1, REGINPUTB, RESETMODE) b_reg(CLK, CEB, RSTB, {SIGNEDB, B}, {bsgd_r, b_r}); | ||||
| 	OXIDE_DSP_REG #(C_WIDTH+1, REGINPUTC, RESETMODE) c_reg(CLK, CEC, RSTC, {SIGNEDC, C}, {csgd_r, c_r}); | ||||
| 
 | ||||
| 	OXIDE_DSP_REG #(M_WIDTH, REGPIPELINE, RESETMODE) pipe_reg(CLK, CEPIPE, RSTPIPE, pipe_d, pipe_q); | ||||
| 
 | ||||
| 	OXIDE_DSP_REG #(2, REGADDSUB, RESETMODE) addsub_reg(CLK, CECTRL, RSTCTRL, {SIGNEDA, ADDSUB}, {sgd_r, addsub_r}); | ||||
| 	OXIDE_DSP_REG #(1, REGLOADC, RESETMODE) loadc_reg(CLK, CECTRL, RSTCTRL, LOADC, loadc_r); | ||||
| 	OXIDE_DSP_REG #(2, REGPIPELINE, RESETMODE) addsub2_reg(CLK, CECTRL, RSTCTRL, {sgd_r, addsub_r}, {sgd_r2, addsub_r2}); | ||||
| 	OXIDE_DSP_REG #(1, REGLOADC2, RESETMODE) loadc2_reg(CLK, CECTRL, RSTCTRL, loadc_r, loadc_r2); | ||||
| 
 | ||||
| 	OXIDE_DSP_REG #(1, REGCIN, RESETMODE) cin_reg(CLK, CECIN, RSTCIN, CIN, cin_r); | ||||
| 	OXIDE_DSP_REG #(1, REGPIPELINE, RESETMODE) cin2_reg(CLK, CECIN, RSTCIN, cin_r, cin_r2); | ||||
| 
 | ||||
| 	OXIDE_DSP_REG #(C_WIDTH+1, REGPIPELINE, RESETMODE) c2_reg(CLK, CEC, RSTC, {csgd_r, c_r}, {csgd_r2, c_r2}); | ||||
| 
 | ||||
| 	OXIDE_DSP_REG #(Z_WIDTH, REGOUTPUT, RESETMODE) z_reg(CLK, CEOUT, RSTOUT, z_d, Z); | ||||
| 
 | ||||
| 	/******** PREADDER ********/ | ||||
| 
 | ||||
| 	wire [B_WIDTH-1:0] mult_b; | ||||
| 	wire mult_b_sgd; | ||||
| 
 | ||||
| 	generate | ||||
| 		if (PREADD_USED) begin | ||||
| 			assign mult_b = (b_r + c_r); | ||||
| 			assign mult_b_sgd = (bsgd_r | csgd_r); | ||||
| 		end else begin | ||||
| 			assign mult_b = b_r; | ||||
| 			assign mult_b_sgd = bsgd_r; | ||||
| 		end | ||||
| 	endgenerate | ||||
| 
 | ||||
| 	/******** MULTIPLIER ********/ | ||||
| 
 | ||||
| 	// sign extend operands if needed
 | ||||
| 	wire [M_WIDTH-1:0] mult_a_ext = {{(M_WIDTH-A_WIDTH){asgd_r ? a_r[A_WIDTH-1] : 1'b0}}, a_r}; | ||||
| 	wire [M_WIDTH-1:0] mult_b_ext = {{(M_WIDTH-B_WIDTH){mult_b_sgd ? mult_b[B_WIDTH-1] : 1'b0}}, mult_b}; | ||||
| 
 | ||||
| 	wire [M_WIDTH-1:0] mult_m = mult_a_ext * mult_b_ext; | ||||
| 
 | ||||
| 	/******** ACCUMULATOR ********/ | ||||
| 
 | ||||
| 	wire [Z_WIDTH-1:0] m_ext; | ||||
| 
 | ||||
| 	generate | ||||
| 		if (ADDSUB_USED) begin | ||||
| 			assign pipe_d = mult_m; | ||||
| 			assign m_ext = {{(Z_WIDTH-M_WIDTH){sgd_r2 ? pipe_q[M_WIDTH-1] : 1'b0}}, pipe_q}; | ||||
| 			assign z_d = (loadc_r2 ? c_r2 : Z) + cin_r2 + (addsub_r2 ? -m_ext : m_ext);   | ||||
| 		end else begin | ||||
| 			assign z_d = mult_m; | ||||
| 		end | ||||
| 	endgenerate | ||||
| 
 | ||||
| 
 | ||||
| endmodule | ||||
| 
 | ||||
| module MULT9X9 #( | ||||
| 	parameter REGINPUTA = "REGISTER", | ||||
| 	parameter REGINPUTB = "REGISTER", | ||||
| 	parameter REGOUTPUT = "REGISTER", | ||||
| 	parameter GSR = "ENABLED", | ||||
| 	parameter RESETMODE = "SYNC" | ||||
| ) ( | ||||
| 	input [8:0] A, | ||||
| 	input [8:0] B, | ||||
| 	input CLK, | ||||
| 	input CEA, | ||||
| 	input RSTA, | ||||
| 	input CEB, | ||||
| 	input RSTB, | ||||
| 	input SIGNEDA, | ||||
| 	input SIGNEDB, | ||||
| 	input RSTOUT, | ||||
| 	input CEOUT, | ||||
| 	output [17:0] Z | ||||
| ); | ||||
| 	OXIDE_DSP_SIM #( | ||||
| 		.REGINPUTA(REGINPUTA), | ||||
| 		.REGINPUTB(REGINPUTB), | ||||
| 		.REGOUTPUT(REGOUTPUT), | ||||
| 		.GSR(GSR), | ||||
| 		.RESETMODE(RESETMODE), | ||||
| 
 | ||||
| 		.A_WIDTH(9), | ||||
| 		.B_WIDTH(9), | ||||
| 		.Z_WIDTH(18), | ||||
| 		.PREADD_USED(0), | ||||
| 		.ADDSUB_USED(0) | ||||
| 	) dsp_i ( | ||||
| 		.A(A), .B(B), | ||||
| 		.CLK(CLK), | ||||
| 		.CEA(CEA), .RSTA(RSTA), | ||||
| 		.CEB(CEB), .RSTB(RSTB), | ||||
| 		.SIGNEDA(SIGNEDA), .SIGNEDB(SIGNEDB), | ||||
| 		.RSTOUT(RSTOUT), .CEOUT(CEOUT), | ||||
| 		.Z(Z) | ||||
| 	); | ||||
| endmodule | ||||
| 
 | ||||
| module MULT18X18 #( | ||||
| 	parameter REGINPUTA = "REGISTER", | ||||
| 	parameter REGINPUTB = "REGISTER", | ||||
| 	parameter REGOUTPUT = "REGISTER", | ||||
| 	parameter GSR = "ENABLED", | ||||
| 	parameter RESETMODE = "SYNC" | ||||
| ) ( | ||||
| 	input [17:0] A, | ||||
| 	input [17:0] B, | ||||
| 	input CLK, | ||||
| 	input CEA, | ||||
| 	input RSTA, | ||||
| 	input CEB, | ||||
| 	input RSTB, | ||||
| 	input SIGNEDA, | ||||
| 	input SIGNEDB, | ||||
| 	input RSTOUT, | ||||
| 	input CEOUT, | ||||
| 	output [35:0] Z | ||||
| ); | ||||
| 	OXIDE_DSP_SIM #( | ||||
| 		.REGINPUTA(REGINPUTA), | ||||
| 		.REGINPUTB(REGINPUTB), | ||||
| 		.REGOUTPUT(REGOUTPUT), | ||||
| 		.GSR(GSR), | ||||
| 		.RESETMODE(RESETMODE), | ||||
| 
 | ||||
| 		.A_WIDTH(18), | ||||
| 		.B_WIDTH(18), | ||||
| 		.Z_WIDTH(36), | ||||
| 		.PREADD_USED(0), | ||||
| 		.ADDSUB_USED(0) | ||||
| 	) dsp_i ( | ||||
| 		.A(A), .B(B), | ||||
| 		.CLK(CLK), | ||||
| 		.CEA(CEA), .RSTA(RSTA), | ||||
| 		.CEB(CEB), .RSTB(RSTB), | ||||
| 		.SIGNEDA(SIGNEDA), .SIGNEDB(SIGNEDB), | ||||
| 		.RSTOUT(RSTOUT), .CEOUT(CEOUT), | ||||
| 		.Z(Z) | ||||
| 	); | ||||
| endmodule | ||||
| 
 | ||||
| module MULT18X36 #( | ||||
| 	parameter REGINPUTA = "REGISTER", | ||||
| 	parameter REGINPUTB = "REGISTER", | ||||
| 	parameter REGOUTPUT = "REGISTER", | ||||
| 	parameter GSR = "ENABLED", | ||||
| 	parameter RESETMODE = "SYNC" | ||||
| ) ( | ||||
| 	input [17:0] A, | ||||
| 	input [35:0] B, | ||||
| 	input CLK, | ||||
| 	input CEA, | ||||
| 	input RSTA, | ||||
| 	input CEB, | ||||
| 	input RSTB, | ||||
| 	input SIGNEDA, | ||||
| 	input SIGNEDB, | ||||
| 	input RSTOUT, | ||||
| 	input CEOUT, | ||||
| 	output [53:0] Z | ||||
| ); | ||||
| 	OXIDE_DSP_SIM #( | ||||
| 		.REGINPUTA(REGINPUTA), | ||||
| 		.REGINPUTB(REGINPUTB), | ||||
| 		.REGOUTPUT(REGOUTPUT), | ||||
| 		.GSR(GSR), | ||||
| 		.RESETMODE(RESETMODE), | ||||
| 
 | ||||
| 		.A_WIDTH(18), | ||||
| 		.B_WIDTH(36), | ||||
| 		.Z_WIDTH(54), | ||||
| 		.PREADD_USED(0), | ||||
| 		.ADDSUB_USED(0) | ||||
| 	) dsp_i ( | ||||
| 		.A(A), .B(B), | ||||
| 		.CLK(CLK), | ||||
| 		.CEA(CEA), .RSTA(RSTA), | ||||
| 		.CEB(CEB), .RSTB(RSTB), | ||||
| 		.SIGNEDA(SIGNEDA), .SIGNEDB(SIGNEDB), | ||||
| 		.RSTOUT(RSTOUT), .CEOUT(CEOUT), | ||||
| 		.Z(Z) | ||||
| 	); | ||||
| endmodule | ||||
| 
 | ||||
| module MULT36X36 #( | ||||
| 	parameter REGINPUTA = "REGISTER", | ||||
| 	parameter REGINPUTB = "REGISTER", | ||||
| 	parameter REGOUTPUT = "REGISTER", | ||||
| 	parameter GSR = "ENABLED", | ||||
| 	parameter RESETMODE = "SYNC" | ||||
| ) ( | ||||
| 	input [35:0] A, | ||||
| 	input [35:0] B, | ||||
| 	input CLK, | ||||
| 	input CEA, | ||||
| 	input RSTA, | ||||
| 	input CEB, | ||||
| 	input RSTB, | ||||
| 	input SIGNEDA, | ||||
| 	input SIGNEDB, | ||||
| 	input RSTOUT, | ||||
| 	input CEOUT, | ||||
| 	output [71:0] Z | ||||
| ); | ||||
| 	OXIDE_DSP_SIM #( | ||||
| 		.REGINPUTA(REGINPUTA), | ||||
| 		.REGINPUTB(REGINPUTB), | ||||
| 		.REGOUTPUT(REGOUTPUT), | ||||
| 		.GSR(GSR), | ||||
| 		.RESETMODE(RESETMODE), | ||||
| 
 | ||||
| 		.A_WIDTH(36), | ||||
| 		.B_WIDTH(36), | ||||
| 		.Z_WIDTH(72), | ||||
| 		.PREADD_USED(0), | ||||
| 		.ADDSUB_USED(0) | ||||
| 	) dsp_i ( | ||||
| 		.A(A), .B(B), | ||||
| 		.CLK(CLK), | ||||
| 		.CEA(CEA), .RSTA(RSTA), | ||||
| 		.CEB(CEB), .RSTB(RSTB), | ||||
| 		.SIGNEDA(SIGNEDA), .SIGNEDB(SIGNEDB), | ||||
| 		.RSTOUT(RSTOUT), .CEOUT(CEOUT), | ||||
| 		.Z(Z) | ||||
| 	); | ||||
| endmodule | ||||
| 
 | ||||
| 
 | ||||
| module MULTPREADD9X9 #( | ||||
| 	parameter REGINPUTA = "REGISTER", | ||||
| 	parameter REGINPUTB = "REGISTER", | ||||
| 	parameter REGINPUTC = "REGISTER", | ||||
| 	parameter REGOUTPUT = "REGISTER", | ||||
| 	parameter GSR = "ENABLED", | ||||
| 	parameter RESETMODE = "SYNC" | ||||
| ) ( | ||||
| 	input [8:0] A, | ||||
| 	input [8:0] B, | ||||
| 	input [8:0] C, | ||||
| 	input CLK, | ||||
| 	input CEA, | ||||
| 	input RSTA, | ||||
| 	input CEB, | ||||
| 	input RSTB, | ||||
| 	input CEC, | ||||
| 	input RSTC, | ||||
| 	input SIGNEDA, | ||||
| 	input SIGNEDB, | ||||
| 	input SIGNEDC, | ||||
| 	input RSTOUT, | ||||
| 	input CEOUT, | ||||
| 	output [17:0] Z | ||||
| ); | ||||
| 	OXIDE_DSP_SIM #( | ||||
| 		.REGINPUTA(REGINPUTA), | ||||
| 		.REGINPUTB(REGINPUTB), | ||||
| 		.REGINPUTC(REGINPUTC), | ||||
| 		.REGOUTPUT(REGOUTPUT), | ||||
| 		.GSR(GSR), | ||||
| 		.RESETMODE(RESETMODE), | ||||
| 
 | ||||
| 		.A_WIDTH(9), | ||||
| 		.B_WIDTH(9), | ||||
| 		.C_WIDTH(9), | ||||
| 		.Z_WIDTH(18), | ||||
| 		.PREADD_USED(1), | ||||
| 		.ADDSUB_USED(0) | ||||
| 	) dsp_i ( | ||||
| 		.A(A), .B(B), .C(C), | ||||
| 		.CLK(CLK), | ||||
| 		.CEA(CEA), .RSTA(RSTA), | ||||
| 		.CEB(CEB), .RSTB(RSTB), | ||||
| 		.CEC(CEC), .RSTC(RSTC), | ||||
| 		.SIGNEDA(SIGNEDA), .SIGNEDB(SIGNEDB), .SIGNEDC(SIGNEDC), | ||||
| 		.RSTOUT(RSTOUT), .CEOUT(CEOUT), | ||||
| 		.Z(Z) | ||||
| 	); | ||||
| endmodule | ||||
| 
 | ||||
| 
 | ||||
| module MULTPREADD18X18 #( | ||||
| 	parameter REGINPUTA = "REGISTER", | ||||
| 	parameter REGINPUTB = "REGISTER", | ||||
| 	parameter REGINPUTC = "REGISTER", | ||||
| 	parameter REGOUTPUT = "REGISTER", | ||||
| 	parameter GSR = "ENABLED", | ||||
| 	parameter RESETMODE = "SYNC" | ||||
| ) ( | ||||
| 	input [17:0] A, | ||||
| 	input [17:0] B, | ||||
| 	input [17:0] C, | ||||
| 	input CLK, | ||||
| 	input CEA, | ||||
| 	input RSTA, | ||||
| 	input CEB, | ||||
| 	input RSTB, | ||||
| 	input CEC, | ||||
| 	input RSTC, | ||||
| 	input SIGNEDA, | ||||
| 	input SIGNEDB, | ||||
| 	input SIGNEDC, | ||||
| 	input RSTOUT, | ||||
| 	input CEOUT, | ||||
| 	output [35:0] Z | ||||
| ); | ||||
| 	OXIDE_DSP_SIM #( | ||||
| 		.REGINPUTA(REGINPUTA), | ||||
| 		.REGINPUTB(REGINPUTB), | ||||
| 		.REGINPUTC(REGINPUTC), | ||||
| 		.REGOUTPUT(REGOUTPUT), | ||||
| 		.GSR(GSR), | ||||
| 		.RESETMODE(RESETMODE), | ||||
| 
 | ||||
| 		.A_WIDTH(18), | ||||
| 		.B_WIDTH(18), | ||||
| 		.C_WIDTH(18), | ||||
| 		.Z_WIDTH(36), | ||||
| 		.PREADD_USED(1), | ||||
| 		.ADDSUB_USED(0) | ||||
| 	) dsp_i ( | ||||
| 		.A(A), .B(B), .C(C), | ||||
| 		.CLK(CLK), | ||||
| 		.CEA(CEA), .RSTA(RSTA), | ||||
| 		.CEB(CEB), .RSTB(RSTB), | ||||
| 		.CEC(CEC), .RSTC(RSTC), | ||||
| 		.SIGNEDA(SIGNEDA), .SIGNEDB(SIGNEDB), .SIGNEDC(SIGNEDC), | ||||
| 		.RSTOUT(RSTOUT), .CEOUT(CEOUT), | ||||
| 		.Z(Z) | ||||
| 	); | ||||
| endmodule | ||||
| 
 | ||||
| 
 | ||||
| module MULTADDSUB18X18 #( | ||||
| 	parameter REGINPUTA = "REGISTER", | ||||
| 	parameter REGINPUTB = "REGISTER", | ||||
| 	parameter REGINPUTC = "REGISTER", | ||||
| 	parameter REGADDSUB = "REGISTER", | ||||
| 	parameter REGLOADC = "REGISTER", | ||||
| 	parameter REGLOADC2 = "REGISTER", | ||||
| 	parameter REGCIN = "REGISTER", | ||||
| 	parameter REGPIPELINE = "REGISTER", | ||||
| 	parameter REGOUTPUT = "REGISTER", | ||||
| 	parameter GSR = "ENABLED", | ||||
| 	parameter RESETMODE = "SYNC" | ||||
| ) ( | ||||
| 	input [17:0] A, | ||||
| 	input [17:0] B, | ||||
| 	input [53:0] C, | ||||
|     input CLK, | ||||
|     input CEA, | ||||
|     input RSTA, | ||||
|     input CEB, | ||||
|     input RSTB, | ||||
|     input CEC, | ||||
|     input RSTC, | ||||
|     input SIGNED, | ||||
|     input RSTPIPE, | ||||
|     input CEPIPE, | ||||
|     input RSTCTRL, | ||||
|     input CECTRL, | ||||
|     input RSTCIN, | ||||
|     input CECIN, | ||||
|     input LOADC, | ||||
|     input ADDSUB, | ||||
|     output [53:0] Z, | ||||
|     input RSTOUT, | ||||
|     input CEOUT, | ||||
|     input CIN | ||||
| ); | ||||
| 	OXIDE_DSP_SIM #( | ||||
| 		.REGINPUTA(REGINPUTA), | ||||
| 		.REGINPUTB(REGINPUTB), | ||||
| 		.REGINPUTC(REGINPUTC), | ||||
| 		.REGADDSUB(REGADDSUB), | ||||
| 		.REGLOADC(REGLOADC), | ||||
| 		.REGLOADC2(REGLOADC2), | ||||
| 		.REGCIN(REGCIN), | ||||
| 		.REGPIPELINE(REGPIPELINE), | ||||
| 		.REGOUTPUT(REGOUTPUT), | ||||
| 		.GSR(GSR), | ||||
| 		.RESETMODE(RESETMODE), | ||||
| 
 | ||||
| 		.A_WIDTH(18), | ||||
| 		.B_WIDTH(18), | ||||
| 		.C_WIDTH(54), | ||||
| 		.Z_WIDTH(54), | ||||
| 		.PREADD_USED(0), | ||||
| 		.ADDSUB_USED(1) | ||||
| 	) dsp_i ( | ||||
| 		.A(A), .B(B), .C(C), | ||||
| 		.CLK(CLK), | ||||
| 		.CEA(CEA), .RSTA(RSTA), | ||||
| 		.CEB(CEB), .RSTB(RSTB), | ||||
| 		.CEC(CEC), .RSTC(RSTC), | ||||
| 		.CEPIPE(CEPIPE), .RSTPIPE(RSTPIPE), | ||||
| 		.CECTRL(CECTRL), .RSTCTRL(RSTCTRL), | ||||
| 		.CECIN(CECIN), .RSTCIN(RSTCIN), | ||||
| 		.CIN(CIN), .LOADC(LOADC), .ADDSUB(ADDSUB), | ||||
| 		.SIGNEDA(SIGNED), .SIGNEDB(SIGNED), .SIGNEDC(SIGNED), | ||||
| 		.RSTOUT(RSTOUT), .CEOUT(CEOUT), | ||||
| 		.Z(Z) | ||||
| 	); | ||||
| endmodule | ||||
| 
 | ||||
| 
 | ||||
| module MULTADDSUB36X36 #( | ||||
| 	parameter REGINPUTA = "REGISTER", | ||||
| 	parameter REGINPUTB = "REGISTER", | ||||
| 	parameter REGINPUTC = "REGISTER", | ||||
| 	parameter REGADDSUB = "REGISTER", | ||||
| 	parameter REGLOADC = "REGISTER", | ||||
| 	parameter REGLOADC2 = "REGISTER", | ||||
| 	parameter REGCIN = "REGISTER", | ||||
| 	parameter REGPIPELINE = "REGISTER", | ||||
| 	parameter REGOUTPUT = "REGISTER", | ||||
| 	parameter GSR = "ENABLED", | ||||
| 	parameter RESETMODE = "SYNC" | ||||
| ) ( | ||||
| 	input [35:0] A, | ||||
| 	input [35:0] B, | ||||
| 	input [107:0] C, | ||||
|     input CLK, | ||||
|     input CEA, | ||||
|     input RSTA, | ||||
|     input CEB, | ||||
|     input RSTB, | ||||
|     input CEC, | ||||
|     input RSTC, | ||||
|     input SIGNED, | ||||
|     input RSTPIPE, | ||||
|     input CEPIPE, | ||||
|     input RSTCTRL, | ||||
|     input CECTRL, | ||||
|     input RSTCIN, | ||||
|     input CECIN, | ||||
|     input LOADC, | ||||
|     input ADDSUB, | ||||
|     output [107:0] Z, | ||||
|     input RSTOUT, | ||||
|     input CEOUT, | ||||
|     input CIN | ||||
| ); | ||||
| 	OXIDE_DSP_SIM #( | ||||
| 		.REGINPUTA(REGINPUTA), | ||||
| 		.REGINPUTB(REGINPUTB), | ||||
| 		.REGINPUTC(REGINPUTC), | ||||
| 		.REGADDSUB(REGADDSUB), | ||||
| 		.REGLOADC(REGLOADC), | ||||
| 		.REGLOADC2(REGLOADC2), | ||||
| 		.REGCIN(REGCIN), | ||||
| 		.REGPIPELINE(REGPIPELINE), | ||||
| 		.REGOUTPUT(REGOUTPUT), | ||||
| 		.GSR(GSR), | ||||
| 		.RESETMODE(RESETMODE), | ||||
| 
 | ||||
| 		.A_WIDTH(36), | ||||
| 		.B_WIDTH(36), | ||||
| 		.C_WIDTH(108), | ||||
| 		.Z_WIDTH(108), | ||||
| 		.PREADD_USED(0), | ||||
| 		.ADDSUB_USED(1) | ||||
| 	) dsp_i ( | ||||
| 		.A(A), .B(B), .C(C), | ||||
| 		.CLK(CLK), | ||||
| 		.CEA(CEA), .RSTA(RSTA), | ||||
| 		.CEB(CEB), .RSTB(RSTB), | ||||
| 		.CEC(CEC), .RSTC(RSTC), | ||||
| 		.CEPIPE(CEPIPE), .RSTPIPE(RSTPIPE), | ||||
| 		.CECTRL(CECTRL), .RSTCTRL(RSTCTRL), | ||||
| 		.CECIN(CECIN), .RSTCIN(RSTCIN), | ||||
| 		.CIN(CIN), .LOADC(LOADC), .ADDSUB(ADDSUB), | ||||
| 		.SIGNEDA(SIGNED), .SIGNEDB(SIGNED), .SIGNEDC(SIGNED), | ||||
| 		.RSTOUT(RSTOUT), .CEOUT(CEOUT), | ||||
| 		.Z(Z) | ||||
| 	); | ||||
| endmodule | ||||
|  |  | |||
|  | @ -74,20 +74,20 @@ devices = [ | |||
|         Cell("M18X36"), | ||||
|         Cell("MIPI"), | ||||
|         Cell("MULT18"), | ||||
|         Cell("MULT18X18"), | ||||
|         Cell("MULT18X36"), | ||||
| #        Cell("MULT18X18"), | ||||
| #        Cell("MULT18X36"), | ||||
|         Cell("MULT36"), | ||||
|         Cell("MULT36X36"), | ||||
| #        Cell("MULT36X36"), | ||||
|         Cell("MULT9"), | ||||
|         Cell("MULT9X9"), | ||||
|         Cell("MULTADDSUB18X18"), | ||||
| #        Cell("MULT9X9"), | ||||
| #        Cell("MULTADDSUB18X18"), | ||||
|         Cell("MULTADDSUB18X18WIDE"), | ||||
|         Cell("MULTADDSUB18X36"), | ||||
|         Cell("MULTADDSUB36X36"), | ||||
| #        Cell("MULTADDSUB18X36"), | ||||
| #        Cell("MULTADDSUB36X36"), | ||||
|         Cell("MULTADDSUB9X9WIDE"), | ||||
|         Cell("MULTIBOOT", keep=True), | ||||
|         Cell("MULTPREADD18X18"), | ||||
|         Cell("MULTPREADD9X9"), | ||||
| #        Cell("MULTPREADD18X18"), | ||||
| #        Cell("MULTPREADD9X9"), | ||||
|         Cell("ODDR71"), | ||||
|         Cell("ODDRX1"), | ||||
|         Cell("ODDRX2DQS"), | ||||
|  |  | |||
|  | @ -2114,46 +2114,6 @@ module MULT18 (...); | |||
|     input ROUNDEN; | ||||
| endmodule | ||||
| 
 | ||||
| module MULT18X18 (...); | ||||
|     parameter REGINPUTA = "REGISTER"; | ||||
|     parameter REGINPUTB = "REGISTER"; | ||||
|     parameter REGOUTPUT = "REGISTER"; | ||||
|     parameter GSR = "ENABLED"; | ||||
|     parameter RESETMODE = "SYNC"; | ||||
|     input [17:0] A; | ||||
|     input [17:0] B; | ||||
|     input CLK; | ||||
|     input CEA; | ||||
|     input RSTA; | ||||
|     input CEB; | ||||
|     input RSTB; | ||||
|     input SIGNEDA; | ||||
|     input SIGNEDB; | ||||
|     input RSTOUT; | ||||
|     input CEOUT; | ||||
|     output [35:0] Z; | ||||
| endmodule | ||||
| 
 | ||||
| module MULT18X36 (...); | ||||
|     parameter REGINPUTA = "REGISTER"; | ||||
|     parameter REGINPUTB = "REGISTER"; | ||||
|     parameter REGOUTPUT = "REGISTER"; | ||||
|     parameter GSR = "ENABLED"; | ||||
|     parameter RESETMODE = "SYNC"; | ||||
|     input [17:0] A; | ||||
|     input [35:0] B; | ||||
|     input CLK; | ||||
|     input CEA; | ||||
|     input RSTA; | ||||
|     input CEB; | ||||
|     input RSTB; | ||||
|     input SIGNEDA; | ||||
|     input SIGNEDB; | ||||
|     input RSTOUT; | ||||
|     input CEOUT; | ||||
|     output [53:0] Z; | ||||
| endmodule | ||||
| 
 | ||||
| module MULT36 (...); | ||||
|     parameter MULT36X36 = "ENABLED"; | ||||
|     input [72:0] PH72; | ||||
|  | @ -2162,26 +2122,6 @@ module MULT36 (...); | |||
|     output [71:0] PMH72; | ||||
| endmodule | ||||
| 
 | ||||
| module MULT36X36 (...); | ||||
|     parameter REGINPUTA = "REGISTER"; | ||||
|     parameter REGINPUTB = "REGISTER"; | ||||
|     parameter REGOUTPUT = "REGISTER"; | ||||
|     parameter GSR = "ENABLED"; | ||||
|     parameter RESETMODE = "SYNC"; | ||||
|     input [35:0] A; | ||||
|     input [35:0] B; | ||||
|     input CLK; | ||||
|     input CEA; | ||||
|     input RSTA; | ||||
|     input CEB; | ||||
|     input RSTB; | ||||
|     input SIGNEDA; | ||||
|     input SIGNEDB; | ||||
|     input RSTOUT; | ||||
|     input CEOUT; | ||||
|     output [71:0] Z; | ||||
| endmodule | ||||
| 
 | ||||
| module MULT9 (...); | ||||
|     parameter SIGNEDSTATIC_EN = "DISABLED"; | ||||
|     parameter ASIGNED_OPERAND_EN = "DISABLED"; | ||||
|  | @ -2215,63 +2155,6 @@ module MULT9 (...); | |||
|     input RSTP; | ||||
| endmodule | ||||
| 
 | ||||
| module MULT9X9 (...); | ||||
|     parameter REGINPUTA = "REGISTER"; | ||||
|     parameter REGINPUTB = "REGISTER"; | ||||
|     parameter REGOUTPUT = "REGISTER"; | ||||
|     parameter GSR = "ENABLED"; | ||||
|     parameter RESETMODE = "SYNC"; | ||||
|     input [8:0] A; | ||||
|     input [8:0] B; | ||||
|     input CLK; | ||||
|     input CEA; | ||||
|     input RSTA; | ||||
|     input CEB; | ||||
|     input RSTB; | ||||
|     input SIGNEDA; | ||||
|     input SIGNEDB; | ||||
|     input RSTOUT; | ||||
|     input CEOUT; | ||||
|     output [17:0] Z; | ||||
| endmodule | ||||
| 
 | ||||
| module MULTADDSUB18X18 (...); | ||||
|     parameter REGINPUTA = "REGISTER"; | ||||
|     parameter REGINPUTB = "REGISTER"; | ||||
|     parameter REGINPUTC = "REGISTER"; | ||||
|     parameter REGADDSUB = "REGISTER"; | ||||
|     parameter REGLOADC = "REGISTER"; | ||||
|     parameter REGLOADC2 = "REGISTER"; | ||||
|     parameter REGCIN = "REGISTER"; | ||||
|     parameter REGPIPELINE = "REGISTER"; | ||||
|     parameter REGOUTPUT = "REGISTER"; | ||||
|     parameter GSR = "ENABLED"; | ||||
|     parameter RESETMODE = "SYNC"; | ||||
|     input [17:0] A; | ||||
|     input [17:0] B; | ||||
|     input [53:0] C; | ||||
|     input CLK; | ||||
|     input CEA; | ||||
|     input RSTA; | ||||
|     input CEB; | ||||
|     input RSTB; | ||||
|     input CEC; | ||||
|     input RSTC; | ||||
|     input SIGNED; | ||||
|     input RSTPIPE; | ||||
|     input CEPIPE; | ||||
|     input RSTCTRL; | ||||
|     input CECTRL; | ||||
|     input RSTCIN; | ||||
|     input CECIN; | ||||
|     input LOADC; | ||||
|     input ADDSUB; | ||||
|     output [53:0] Z; | ||||
|     input RSTOUT; | ||||
|     input CEOUT; | ||||
|     input CIN; | ||||
| endmodule | ||||
| 
 | ||||
| module MULTADDSUB18X18WIDE (...); | ||||
|     parameter REGINPUTAB0 = "REGISTER"; | ||||
|     parameter REGINPUTAB1 = "REGISTER"; | ||||
|  | @ -2311,80 +2194,6 @@ module MULTADDSUB18X18WIDE (...); | |||
|     input [1:0] ADDSUB; | ||||
| endmodule | ||||
| 
 | ||||
| module MULTADDSUB18X36 (...); | ||||
|     parameter REGINPUTA = "REGISTER"; | ||||
|     parameter REGINPUTB = "REGISTER"; | ||||
|     parameter REGINPUTC = "REGISTER"; | ||||
|     parameter REGADDSUB = "REGISTER"; | ||||
|     parameter REGLOADC = "REGISTER"; | ||||
|     parameter REGLOADC2 = "REGISTER"; | ||||
|     parameter REGCIN = "REGISTER"; | ||||
|     parameter REGPIPELINE = "REGISTER"; | ||||
|     parameter REGOUTPUT = "REGISTER"; | ||||
|     parameter GSR = "ENABLED"; | ||||
|     parameter RESETMODE = "SYNC"; | ||||
|     input [17:0] A; | ||||
|     input [35:0] B; | ||||
|     input [53:0] C; | ||||
|     input CLK; | ||||
|     input CEA; | ||||
|     input RSTA; | ||||
|     input CEB; | ||||
|     input RSTB; | ||||
|     input CEC; | ||||
|     input RSTC; | ||||
|     input RSTCTRL; | ||||
|     input CECTRL; | ||||
|     input RSTCIN; | ||||
|     input CECIN; | ||||
|     input SIGNED; | ||||
|     input RSTPIPE; | ||||
|     input CEPIPE; | ||||
|     input RSTOUT; | ||||
|     input CEOUT; | ||||
|     output [53:0] Z; | ||||
|     input LOADC; | ||||
|     input ADDSUB; | ||||
|     input CIN; | ||||
| endmodule | ||||
| 
 | ||||
| module MULTADDSUB36X36 (...); | ||||
|     parameter REGINPUTA = "REGISTER"; | ||||
|     parameter REGINPUTB = "REGISTER"; | ||||
|     parameter REGINPUTC = "REGISTER"; | ||||
|     parameter REGADDSUB = "REGISTER"; | ||||
|     parameter REGLOADC = "REGISTER"; | ||||
|     parameter REGLOADC2 = "REGISTER"; | ||||
|     parameter REGCIN = "REGISTER"; | ||||
|     parameter REGPIPELINE = "REGISTER"; | ||||
|     parameter REGOUTPUT = "REGISTER"; | ||||
|     parameter GSR = "ENABLED"; | ||||
|     parameter RESETMODE = "SYNC"; | ||||
|     input [35:0] A; | ||||
|     input [35:0] B; | ||||
|     input [107:0] C; | ||||
|     input CLK; | ||||
|     input CEA; | ||||
|     input RSTA; | ||||
|     input CEB; | ||||
|     input RSTB; | ||||
|     input CEC; | ||||
|     input RSTC; | ||||
|     input RSTCTRL; | ||||
|     input CECTRL; | ||||
|     input RSTCIN; | ||||
|     input CECIN; | ||||
|     input SIGNED; | ||||
|     input RSTPIPE; | ||||
|     input CEPIPE; | ||||
|     input RSTOUT; | ||||
|     input CEOUT; | ||||
|     output [107:0] Z; | ||||
|     input LOADC; | ||||
|     input ADDSUB; | ||||
|     input CIN; | ||||
| endmodule | ||||
| 
 | ||||
| module MULTADDSUB9X9WIDE (...); | ||||
|     parameter REGINPUTAB0 = "REGISTER"; | ||||
|     parameter REGINPUTAB1 = "REGISTER"; | ||||
|  | @ -2438,56 +2247,6 @@ module MULTIBOOT (...); | |||
|     input [31:0] MSPIMADDR; | ||||
| endmodule | ||||
| 
 | ||||
| module MULTPREADD18X18 (...); | ||||
|     parameter REGINPUTA = "REGISTER"; | ||||
|     parameter REGINPUTB = "REGISTER"; | ||||
|     parameter REGINPUTC = "REGISTER"; | ||||
|     parameter REGOUTPUT = "REGISTER"; | ||||
|     parameter GSR = "ENABLED"; | ||||
|     parameter RESETMODE = "SYNC"; | ||||
|     input [17:0] A; | ||||
|     input [17:0] B; | ||||
|     input [17:0] C; | ||||
|     input CLK; | ||||
|     input CEA; | ||||
|     input RSTA; | ||||
|     input CEB; | ||||
|     input RSTB; | ||||
|     input CEC; | ||||
|     input RSTC; | ||||
|     input SIGNEDA; | ||||
|     input SIGNEDB; | ||||
|     input SIGNEDC; | ||||
|     input RSTOUT; | ||||
|     input CEOUT; | ||||
|     output [35:0] Z; | ||||
| endmodule | ||||
| 
 | ||||
| module MULTPREADD9X9 (...); | ||||
|     parameter REGINPUTA = "REGISTER"; | ||||
|     parameter REGINPUTB = "REGISTER"; | ||||
|     parameter REGINPUTC = "REGISTER"; | ||||
|     parameter REGOUTPUT = "REGISTER"; | ||||
|     parameter GSR = "ENABLED"; | ||||
|     parameter RESETMODE = "SYNC"; | ||||
|     input [8:0] A; | ||||
|     input [8:0] B; | ||||
|     input [8:0] C; | ||||
|     input CLK; | ||||
|     input CEA; | ||||
|     input RSTA; | ||||
|     input CEB; | ||||
|     input RSTB; | ||||
|     input CEC; | ||||
|     input RSTC; | ||||
|     input SIGNEDA; | ||||
|     input SIGNEDB; | ||||
|     input SIGNEDC; | ||||
|     input RSTOUT; | ||||
|     input CEOUT; | ||||
|     output [17:0] Z; | ||||
| endmodule | ||||
| 
 | ||||
| module ODDR71 (...); | ||||
|     parameter GSR = "ENABLED"; | ||||
|     input D0; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue