⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calcmvnormal_11_25_2008.v

📁 Implementation of GPU (Graphics Processing Unit) that rendered triangle based models. Our goal was t
💻 V
字号:
module calcMvNormal
	(
			input clk, input reset,
			input wire [17:0] xu,	input wire [17:0] yu,	input wire [17:0] zu,
			input wire [17:0] xv,	input wire [17:0] yv,	input wire [17:0] zv,
			input wire [17:0] xw,	input wire [17:0] yw,	input wire [17:0] zw,
			input wire [17:0]  x, 	input wire [17:0]  y, 	input wire [17:0]  z,
			output wire [17:0] Out0,
			output wire [17:0] Out1,
			output wire [17:0] Out2,
			output reg done
	);
	
	
	/* Matrix multiplication to find Mv * Vertex Matrix
	
				MV			Vertices
	[	xu	yu	zu	]		[x]
	[	xv	yv	zv	]		[y]
	[	xw	yw	zw	]		[z]
	*/

	wire [17:0] xu_x, xv_y, xw_z, yu_x, yv_y, yw_z, zu_x, zv_y, zw_z, sum0, sum1, sum2;
	reg [17:0] xu_xr, xv_yr, yu_xr, yv_yr, zu_xr, zv_yr, xw_zr, yw_zr, zw_zr, sum0r, sum1r, sum2r;
	reg [4:0] state;
	
	/*1st cycle */
	fpmult instg(xu_x, xu, x);//xu*x
	fpmult insth(xv_y, xv, y);//xv*y
	fpmult insti(xw_z, xw, z);//xw*z
	
	fpmult instj(yu_x, yu, x);//yu*x
	fpmult instk(yv_y, yv, y);//yv*y
	fpmult instl(yw_z, yw, z);//yw*z

	fpmult instm(zu_x, zu, x);//zu*x
	fpmult instn(zv_y, zv, y);//zv*y
	fpmult insto(zw_z, zw, z);//zw*z
		
	/* 2nd Cycle */
	fpadd instp(sum0, xu_xr, xv_yr);//xu*x + xv*y
	fpadd instq(sum1, yu_xr, yv_yr);//yu*x + yv*y
	fpadd instr(sum2, zu_xr, zv_yr);//zu*x + zv*y

	/* 3rd Cycle */
	fpadd instt(Out0, sum0r, xw_zr);//xu_xv(sum0) + xw*z
	fpadd instu(Out1, sum1r, yw_zr);//yu_yv(sum1) + yw*z
	fpadd instv(Out2, sum2r, zw_zr);//zu_zv(sum2) + zw*z


parameter exit = 5'd15;

	always@(posedge clk) begin
		if(reset) begin
			xu_xr <= 18'b0;
			xv_yr <= 18'b0;
			yu_xr <= 18'b0;
			yv_yr <= 18'b0;
			zu_xr <= 18'b0;
			zv_yr <= 18'b0;
			xw_zr <= 18'b0;
			yw_zr <= 18'b0;
			zw_zr <= 18'b0;
			sum0r <= 18'b0;
			sum1r <= 18'b0;
			sum2r <= 18'b0;
			state <= 5'd0;
			done  <= 1'b0;
		end
		else begin
			case(state)
				0: begin
					xu_xr <= xu_x;
					xv_yr <= xv_y;
					yu_xr <= yu_x;
					yv_yr <= yv_y;
					zu_xr <= zu_x;
					zv_yr <= zv_y;
					xw_zr <= xw_z;
					yw_zr <= yw_z;
					zw_zr <= zw_z;					
					state <= 5'd1;
					done <= 1'b0;
				end
				1: begin
					sum0r <= sum0;
					sum1r <= sum1;
					sum2r <= sum2;
					state <= 5'd2;
					done <= 1'b0;
				end
				2: begin
					state <= exit;
					done <= 1'b0;
				end
				exit: begin
					done <= 1'b1;
				end
			endcase
		end
	end
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -