OpenCores
URL https://opencores.org/ocsvn/pipelined_fixed_point_elementary_functions/pipelined_fixed_point_elementary_functions/trunk

Subversion Repositories pipelined_fixed_point_elementary_functions

[/] [pipelined_fixed_point_elementary_functions/] [trunk/] [ibniz/] [ibniz_units.v] - Rev 5

Compare with Previous | Blame | View Log

 
`define MAX(a,b) ( (a)>(b)? (a):(b) )
 
module Ibniz_generator1 ( clk, rst, ena, T_in, X_in, Y_in, V_out );
 
input clk;
input rst;
input ena;
input wire signed [31:0] T_in;
input wire signed [31:0] X_in;
input wire signed [31:0] Y_in;
output reg [31:0] V_out;
 
wire [31:0] XxY= X_in^Y_in;
 
always@(posedge clk or posedge rst)
begin
	if ( rst )
	begin
	end
	else if ( ena )
	begin
	//	**
//		XY <=((XX_in * YY_in)>>>16);
//		V_out<= ( XY * (TT_in))>>>16;
	//	^x7r+Md8r& (xor exch ror(7) +   )
		V_out= XxY+ (T_in>>7) + (T_in<<(32-7));
	end
end
endmodule
 
module Ibniz_generator2 ( clk, rst, ena, T_in, X_in, Y_in, V_out, dbg_out );
 
input clk;
input rst;
input ena;
input wire signed [31:0] T_in;
input wire signed [31:0] X_in;
input wire signed [31:0] Y_in;
output reg [31:0] V_out;
output reg [63:0] dbg_out;
 
wire signed [47:0] XY= Y_in+X_in+(X_in>>>6);
wire signed [31:0] d_out;
 
wire done;
 
div_pipelined div1( clk, {T_in, 16'h0}, (/*XY[31]?-XY:*/XY), d_out );
 
//defparam div1.BITS= 48;
 
always@(posedge clk or posedge rst)
begin
	if ( rst )
	begin
	end
	else if ( ena )
	begin
//		if (done)
		begin
		//	+/
			V_out<= d_out;
			dbg_out[31:0]<= X_in+Y_in;
			dbg_out[63:32]<= T_in>>>16;
		end
//		else
//			V_out<= V_out>>>1;
	end
end
endmodule
 
////============================= PERLIN NOISE ===================================
 
 
//module Ibniz_generator7d ( clk, rst, ena, T_in, X_in, Y_in, V_out, dbg_out );
//
//`define NSCALE 14
//
//input clk;
//input rst;
//input ena;
//input wire signed [31:0] T_in;
//input wire signed [31:0] X_in;
//input wire signed [31:0] Y_in;
//output reg [31:0] V_out;
//output reg [63:0] dbg_out;
//
//wire signed [31:0] XX= (X_in>>>`NSCALE);
//wire signed [31:0] YY= (Y_in>>>`NSCALE);
//reg signed [31:0] GX00;
//reg signed [31:0] GY00;
//reg signed [31:0] GX01;
//reg signed [31:0] GY01;
//reg signed [31:0] GX10;
//reg signed [31:0] GY10;
//reg signed [31:0] GX11;
//reg signed [31:0] GY11;
//reg signed [31:0] rx00;
//reg signed [31:0] ry00;
//reg signed [31:0] rx01;
//reg signed [31:0] ry01;
//reg signed [31:0] rx10;
//reg signed [31:0] ry10;
//reg signed [31:0] rx11;
//reg signed [31:0] ry11;
//reg signed [31:0] r00;
//reg signed [31:0] r10;
//reg signed [31:0] r01;
//reg signed [31:0] r11;
//wire signed [31:0] _MX= (X_in - (XX<<<`NSCALE));//& (T_in[24]?(-1):((32'h1<<<`NSCALE) - 1));
//wire signed [31:0] _MY= (Y_in - (YY<<<`NSCALE));//& (T_in[24]?(-1):((32'h1<<<`NSCALE) - 1));
//reg signed [31:0] __MX;
//reg signed [31:0] __MY;
//reg signed [31:0] MX;
//reg signed [31:0] MY;
//reg signed [31:0] v1;
//reg signed [31:0] v2;
//reg signed [31:0] v3;
//reg signed [31:0] v4;
//wire signed [31:0] d_out;
//
//wire done;
//
////defparam div1.BITS= 48;
//
//always@(posedge clk or posedge rst)
//begin
//	if ( rst )
//	begin
//	end
//	else if ( ena )
//	begin
////		if (done)
//		begin
//		//	+/
//		  GX00<= XX * 16'h7353 + YY * 16'hacd7 ;
////		  GY00<= XX * 16'ha689 + YY * 16'h7335;
//		  GX01<= XX * 16'h7353 + (YY+1) * 16'hacd7 ;
////		  GY01<= XX * 16'ha689 + (YY+1) * 16'h7335;
//		  GX10<= (XX+1) * 16'h7353 + YY * 16'hacd7 ;
////		  GY10<= (XX+1) * 16'ha689 + YY * 16'h7335;
//		  GX11<= (XX+1) * 16'h7353 + (YY+1) * 16'hacd7 ;
////		  GY11<= (XX+1) * 16'ha689 + (YY+1) * 16'h7335;
//			rx00 <=  GX00[15] ? 0 : GX00[14] ? 1 : -1;
//			ry00 <= ~GX00[15] ? 0 : GX00[14] ? 1 : -1;
//			r00 <= rx00*(_MX) + ry00*_MY;
//			rx01 <=  GX01[15] ? 0 : GX01[14] ? 1 : -1;
//			ry01 <= ~GX01[15] ? 0 : GX01[14] ? 1 : -1;
//			r01 <= rx01*_MX + ry01*(_MY - (32'sh1<<<(`NSCALE)) );
//			rx10 <=  GX10[15] ? 0 : GX10[14] ? 1 : -1;
//			ry10 <= ~GX10[15] ? 0 : GX10[14] ? 1 : -1;
//			r10 <= rx10*(_MX - (32'sh1<<<(`NSCALE)) ) + ry10*_MY;
//			rx11 <=  GX11[15] ? 0 : GX11[14] ? 1 : -1;
//			ry11 <= ~GX11[15] ? 0 : GX11[14] ? 1 : -1;
//			r11 <= rx11*(_MX - (32'sh1<<<(`NSCALE)) ) + ry11*(_MY - (32'sh1<<<(`NSCALE)) );
//
//         __MX<= (_MX*_MX);
//         __MY<= (_MY*_MY);
//         MX<= (3*__MX - 2*_MX*(__MX>>>`NSCALE))>>>`NSCALE;
//         MY<= (3*__MY - 2*_MY*(__MY>>>`NSCALE))>>>`NSCALE;
//
//			v1 <= (r10 * MX + r00 * ((32'sh1<<<(`NSCALE)) - MX))>>>`NSCALE;
//			v2 <= (r11 * MX + r01 * ((32'sh1<<<(`NSCALE)) - MX))>>>`NSCALE;
////			V_out <= (((32'sh1<<<(`NSCALE))+v1)<<<(15-`NSCALE) );
//			V_out <= (((32'sh1<<<(`NSCALE))+v2 * MY + v1 * ((32'sh1<<<(`NSCALE)) - MY))>>>`NSCALE)<<<(15-`NSCALE);
//			
//			//			v1<= rx00 * MX + ry00 * MY;
////			v2<= rx01 * (16'h0040 - MX) + ry01 * MY;
////			v3<= rx10 * MX + ry10 * (16'h0040 - MY);
////			v4<= rx11 * (16'h0040 - MX) + ry11 * (16'h0040 - MY);
////			V_out<= (v1+v2+v3+v4);
//		end
//	end
//end
//endmodule
 
module Ibniz_generator3 ( clk, rst, ena, T_in, X_in, Y_in, V_out );
 
input clk;
input rst;
input ena;
input wire signed [31:0] T_in;
input wire signed [31:0] X_in;
input wire signed [31:0] Y_in;
output reg [31:0] V_out;
 
always@(posedge clk or posedge rst)
begin
	if ( rst )
	begin
	end
	else if ( ena )
	begin
		//	**
		V_out= ((((X_in>>>4) * (Y_in>>>4))>>>8) * (T_in>>>16));
	end
end
endmodule
 
module Ibniz_generator4 ( clk, rst, ena, T_in, X_in, Y_in, V_out );
 
input clk;
input rst;
input ena;
input wire signed [31:0] T_in;
input wire signed [31:0] X_in;
input wire signed [31:0] Y_in;
output reg [31:0] V_out;
 
always@(posedge clk or posedge rst)
begin
	if ( rst )
	begin
	end
	else if ( ena )
	begin
		//	&*
		V_out= (X_in & Y_in) * (T_in>>>16);
	end
end
endmodule
 
 
 
//
 
 
//
////============================= FLOOR+CEIL ===================================
module Ibniz_generator7 ( clk, rst, ena, T_in, _X_in, Y_in, V_out, dbg_out );
 
input clk;
input rst;
input ena;
input wire signed [31:0] T_in;
input wire signed [31:0] _X_in;
wire signed [31:0] X_in= _X_in/2;
input wire signed [31:0] Y_in;
output reg [31:0] V_out;
output reg [63:0] dbg_out;
 
wire signed [31:0] d_out;
wire signed [31:0] d_del;
wire signed [31:0] Y_pos_del;
wire signed [31:0] s_out;
 
wire done;
 
wire signed [47:0] XY= X_in+Y_in;
//wire signed [47:0] X_pos= { {48{X_in[31]}}, X_in, 16'h0};
//wire signed [48:0] Y_pos= Y_in;
wire signed [47:0] X_pos= `ABS(X_in)>`ABS(Y_in) ? { {48{X_in[31]}}, X_in, 16'h0} : { {48{Y_in[31]}}, Y_in, 16'h0};
wire signed [48:0] Y_pos= `ABS(X_in)>`ABS(Y_in) ? Y_in : X_in;
 
div_pipelined div1( clk, X_pos, Y_pos, d_out );
//div_pipelined div1( clk, X_in+T_in, Y_in, d_out );
defparam div1.BITS= 24;								
 
id_pipelined   id2( clk, Y_pos, Y_pos_del );
defparam id2.DELAY= 24;								
//defparam div2.BITS= 24;								
 
//wire signed [31:0] ys_out;
//sin_pipelined sin1( clk, Y_pos, ys_out, _, _ );
//wire signed [31:0] ds_out;
//sin_pipelined sin2( clk, d_out, ds_out, _, _ );
 
wire signed [31:0] hor= -((Y_pos_del>>>5)* (T_in>>>14));
wire signed [31:0] _bright= `ABS(Y_pos_del)*2-32'hffff;
wire signed [31:0] bright= (_bright>>>8)*(_bright>>>8);
reg signed [31:0] bright2;
 
always@(posedge clk or posedge rst)
begin
	if ( rst )
	begin
	end
	else if ( ena )
	begin
//		if (done)
		begin
		//	//
			bright2 <= (bright>>>8)*(bright>>>8);
//			V_out<=  d_out^(Y_pos+ ((X_in+Y_in<0) ? (T_in>>>10):-(T_in>>>10)));//(	(X_in<<<16 <0 != (Y_in<<<16 <0))	) ? 0 : 32'haaaaaaaa;
			V_out<=  (bright*(d_out[15:0]^hor[18:3])>>16) 
						| (d_out[16]^hor[20] ? 32'h80000000:0) 
						| (d_out[17]^hor[21] ? 32'h00800000:0)
						| (d_out[18]^hor[22] ? 32'h40000000:0) 
						| (Y_pos_del==Y_in ? 32'h00400000:0);//(	(X_in<<<16 <0 != (Y_in<<<16 <0))	) ? 0 : 32'haaaaaaaa;
			dbg_out[31:0]<= X_in+Y_in;
			dbg_out[63:32]<= T_in>>>16;
		end
//		else
//			V_out<= V_out>>>1;
	end
end
endmodule
 
//============================= MATH TEST ===================================
//module Ibniz_generator7h ( clk, rst, ena, T_in, X_in, Y_in, V_out, dbg_out );
//
//input clk;
//input rst;
//input ena;
//input wire signed [31:0] T_in;
//input wire signed [31:0] X_in;
//input wire signed [31:0] Y_in;
//output reg [31:0] V_out;
//output reg [63:0] dbg_out;
//
//wire signed [31:0] d_out;
//exp_pipelined exp1( clk, (X_in)<<<4, d_out );
//
//
//always@(posedge clk or posedge rst)
//begin
//	if ( rst )
//	begin
//	end
//	else if ( ena )
//	begin
//		begin
//			V_out<= (	(d_out > (Y_in<<<10))	) ? 0 : 32'haaaaaaaa;
//			dbg_out[63:32]<= T_in>>>16;
//		end
//	end
//end
//endmodule
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.