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

📄 rasterizer_11_07_2008_18_46.v

📁 Implementation of GPU (Graphics Processing Unit) that rendered triangle based models. Our goal was t
💻 V
📖 第 1 页 / 共 2 页
字号:
//`define box 5'd9
//
//module Rasterizer(clk, reset, x1, y1, x2, y2, x3, y3, pixelOut, out_pixel_x, out_pixel_y, stall, done);
//
//input clk;
//input reset;
//input stall;
//
//input wire signed[8:0] x1, x2, x3, y1, y2, y3;
//
//output wire pixelOut;
//assign pixelOut = (reset & ~done) | (state == 5'd7 && ((p3[17] == 0 && c3[17] == 1 && p3 > -c3) || (p3[17] == 0 && c3[17] == 0) || (p3[17] == 1 && c3[17] == 0 && c3 > -p3) || (p3[17] != c3[17] && p3 == -c3)));
//
//output [9:0] out_pixel_x;
//output [9:0] out_pixel_y;
//
//reg [4:0] state;
//output reg done;
//reg [17:0] c1, c2, c3;
//reg [4:0] i,j;
//reg [17:0] p1, p2, p3;
//
//parameter exit = 5'd15;
//
//wire signed[17:0] wire1, wire2, wire3;
//wire signed [8:0] in1a, in1b, in2a, in2b;
//
//wire [8:0] xmin, ymin;
//assign xmin = (x1 <= x2 & x1 <= x3) ? x1 : (x2 <= x1 & x2 <= x3) ? x2 : x3;
//assign ymin = (y1 <= y2 & y1 <= y3) ? y1 : (y2 <= y1 & y2 <= y3) ? y2 : y3;
//
//assign in1a = 	(state == 5'd1 || state == 5'd4) ? (y1-y2) : 
//				(state == 5'd2 || state == 5'd5) ? (y3-y1) : 
//				(state == 5'd3 || state == 5'd6) ? (y2-y3) : 0;
//				
//assign in1b = 	(state == 5'd1 ) ? x1-xmin : 
//				(state == 5'd2 ) ? x3-xmin : 
//				(state == 5'd3 ) ? x2-xmin : 
//				(state == 5'd4 ) ? i  :
//				(state == 5'd5 ) ? i  :
//				(state == 5'd6 ) ? i  : 0;
//				
//assign in2a = 	(state == 5'd1 || state == 5'd4) ? (x1-x2) : 
//				(state == 5'd2 || state == 5'd5) ? (x3-x1) : 
//				(state == 5'd3 || state == 5'd6) ? (x2-x3) : 0;
//								
//assign in2b = 	(state == 5'd1 ) ? y1-ymin : 
//				(state == 5'd2 ) ? y3-ymin : 
//				(state == 5'd3 ) ? y2-ymin : 
//				(state == 5'd4 ) ? j  :
//				(state == 5'd5 ) ? j  :
//				(state == 5'd6 ) ? j  : 0;
//
//
//signed_mult_2 mult2(.a(in1a), .b(in1b), .out(wire1));
//signed_mult_2 mult3(.a(in2a), .b(in2b), .out(wire2));
//
//
//assign wire3 = wire1 - wire2;
//
//assign out_pixel_x = xmin + i;
//assign out_pixel_y = 240 - (ymin + j);
//
///* Note: vertice inputs are normalized to bounding box, where (0,0) is
//bottom left corner*/
//always@(posedge clk) begin
//if (stall)
//	begin
//		i <= i;
//        j <= j;
//        c1 <= c1;
//        c2 <= c2;
//        c3 <= c3;
//        state <= state;
//        p1 <= p1;
//        p2 <= p2;
//        p3 <= p3;
//        
//        done <= done;
//	end
//else
//begin
//if(reset) begin
//	state <= 5'd0;
//	i <= 5'd0;
//	j <= 5'd0;
//	done <= 1'b0;
//end
//else begin
//    /* Go through each pixel and compare to the three equations */
//    case(state)
//        0:
//        begin
//            i <= 0;
//            j <= 0;
//            c1 <= 0;
//            c2 <= 0;
//            c3 <= 0;
//            p1 <= 0;
//            p2 <= 0;
//            p3 <= 0;
//            done <= 1'b0;
//            state <= 5'd1;
//        end
//        1:
//        begin
//            c1 <= -wire3; /*(y1-y2)*x1 - (x1-x2)*y1;*/
//            state <= 5'd2;
//        end
//        2:
//        begin
//            c2 <= -wire3; //(y3-y1)*x3 - (x3-x1)*y3;
//            state <= 5'd3;
//        end
//        3:
//        begin
//            c3 <= -wire3; //(y2-y3)*x2 - (x2-x3)*y2;
//            state <= 5'd4;
//        end
//        4:
//        begin
//			p1 <= wire3; //(y1-y2)*i - (x1-x2)*j;
//			state <= 5'd5;
//			//pixelOut <= 1'b0;
//		end
//        5:
//        begin
//			if( (p1[17] == 0 && c1[17] == 1 && p1 > -c1) || (p1[17] == 0 && c1[17] == 0) || (p1[17] == 1 && c1[17] == 0 && c1 > -p1) || (p1[17] != c1[17] && p1 == -c1)) begin
//                state <= 5'd6;
//                p2 <= wire3; //(y3-y1)*i - (x3-x1)*j;
//            end
//            else begin
//            //pixelOut <= 1'b0;
//				if(i == 5'd9 && j == 5'd9)
//					state <= exit;
//                else begin
//					if(i < 5'd9)
//						i <= i + 5'd1;
//					else begin
//						j <= j + 5'd1;
//						i <= 5'd0;
//					end
//					state <= 5'd4;
//				end
//			end
//        end
//        6:
//        begin
//            if( (p2[17] == 0 && c2[17] == 1 && p2 > -c2) || (p2[17] == 0 && c2[17] == 0) || (p2[17] == 1 && c2[17] == 0 && c2 > -p2) || (p2[17] != c2[17] && p2 == -c2))
//            begin
//				p3 <= wire3; //(y2-y3)*i - (x2-x3)*j;
//                state <= 5'd7;
//            end
//            else begin
//            //pixelOut <= 1'b0;
//				if(i == 5'd9 && j == 5'd9)
//					state <= exit;
//                else begin
//					if(i < 5'd9)
//						i <= i + 5'd1;
//					else begin
//						j <= j + 5'd1;
//						i <= 5'd0;
//					end
//					state <= 5'd4;
//				end
//			end
//        end
//        7:
//        begin
////            if( p3[16:0] > c3[16:0] )
////                pixelOut <= 1'b1;
////            else
////                pixelOut <= 1'b0;
//
//			if(i == 5'd9 && j == 5'd9)
//				state <= exit;
//            else begin
//				if(i < 5'd9)
//					i <= i + 5'd1;
//				else begin
//					j <= j + 5'd1;
//					i <= 5'd0;
//				end
//				state <= 5'd4;
//			end
//		end
//        exit:
//        begin
//            done <= 1'b1;
//            //state <= 5'd0;
//            //i <= 5'd0;
//            //j <= 5'd0;
//        end
//	endcase
//end //else
//end //else
//end //always
//
//endmodule
//
//
//////// NEED TO PASS A WRITE ENABLE OUT FOR THE SRAM
////
////
////module Rasterizer	(
////						clock,
////						reset,
////						
////						vertex1_x,
////						vertex1_y, 
////						
////						vertex2_x, 
////						vertex2_y, 
////						
////						vertex3_x, 
////						vertex3_y, 
////						
////						out_fragment_x, 
////						out_fragment_y, 
////						fragment_c,
////						
////						stallOUT,
////						stallIN,
////						
////						out
////					);
////			
////output [26:0] out;
////wire [26:0] out;
////
////assign out = fragment_x;
////					
////input clock;
////input reset;
////
////input signed[26:0] vertex1_x;
////input signed[26:0] vertex1_y;
////
////input signed[26:0] vertex2_x;
////input signed[26:0] vertex2_y;
////
////input signed[26:0] vertex3_x;
////input signed[26:0] vertex3_y;
////
////output [9:0] out_fragment_x;
////output [9:0] out_fragment_y;
////output [15:0] fragment_c;
////
////wire [9:0] out_fragment_x;
////wire [9:0] out_fragment_y;
////
////assign out_fragment_x = {2'b00, fragment_x[26:19]};
////assign out_fragment_y = {2'b00, fragment_y[26:19]};
////
////reg signed[26:0] fragment_x;
////reg signed[26:0] fragment_y;
////reg signed[15:0] fragment_c;
////
////input stallIN;
////wire stallIN;
////
////output stallOUT;
////reg stallOUT;
////
////reg [1:0] setup_counter;
////
////reg signed[26:0] xMin, xMax;
////reg signed[26:0] yMin, yMax;
////
////wire signed [26:0] r_minus_r3_x, r_minus_r3_y;
////
////wire signed [26:0] x1_x3, x2_x3, y1_y3, y2_y3;
////
////wire signed [26:0] det1, det2;
////reg signed [26:0] det;
////
////wire signed [26:0] lambda1, lambda2, lambda3;
////
////wire signed [26:0] a,b,d,e;
////reg signed [26:0] c,f;
////
////assign r_minus_r3_x = (fragment_x - vertex3_x) ;
////assign r_minus_r3_y = (fragment_y - vertex3_y) ;
////
////assign x1_x3 = (vertex1_x - vertex3_x) ;
////assign x2_x3 = (vertex2_x - vertex3_x) ;
////
////assign y1_y3 = (vertex1_y - vertex3_y) ;
////assign y2_y3 = (vertex2_y - vertex3_y) ;
////
////signed_mult_8 s1(det1, x1_x3, y2_y3);
////signed_mult_8 s2(det2, x2_x3, y1_y3);
////
////signed_mult_8 s3(a, y2_y3, r_minus_r3_x);
////signed_mult_8 s4(b, x2_x3, r_minus_r3_y);
////
////signed_mult_8 s5(d, y1_y3, r_minus_r3_x);
////signed_mult_8 s6(e, x1_x3, r_minus_r3_y);
////
////signed_mult_8 s7(lambda1, c, 27'b100000000000001100000000000);//27'b000000010000000000000000000 / det);
////signed_mult_8 s8(lambda2, f, 27'b100000000000001100000000000);//27'b000000010000000000000000000 / det);
////
////assign lambda3 = 27'b000000010000000000000000000 - lambda1 - lambda2;
////
////always @(posedge clock)
////begin
////	if (reset)
////	begin
////		stallOUT <= 1'b0;
////		
////		fragment_x <= 27'd0;
////		fragment_y <= 27'd0;
////		fragment_c <= 16'b0;
////		
////		xMin <= 10'b0;
////		xMax <= 10'b0;
////		
////		yMin <= 10'b0;
////		yMax <= 10'b0;
////		
////		setup_counter <= 2'b00;
////		
////		det <= 0;
////		c <= 0;
////		f <= 0;
////	end
////	
////	else if (stallOUT & !stallIN)
////	begin
////		if (setup_counter == 2'b00)
////		begin
////			det <= det1 - det2;
////			
////			c <= a - b;
////			f <= e - d;
////		
////			setup_counter <= 2'b01;
////		end
////		
////		else
////		begin
////			c <= c;
////			f <= f;
////			det <= det;
////			
////			setup_counter <= 2'b00;
////	
////			if (fragment_y <= yMax)
////			begin
////				if (fragment_x < xMax)
////				begin
////					fragment_x <= fragment_x + 27'b000000010000000000000000000;
////					fragment_y <= fragment_y;
////				end
////				
////				else
////				begin
////					fragment_y <= fragment_y + 27'b000000010000000000000000000;
////					fragment_x <= xMin;
////				end
////				
////				if (lambda1 > 0 & lambda2 > 0 & lambda3 > 0)
////					fragment_c <= 16'b0000000000111111;
////				else
////				//HERE WE NEED TO PASS OUT NOT TO WRITE TO SRAM
////					fragment_c <= 16'b0;
////					
////				stallOUT <= 1'b1;
////						
////				xMin <= xMin;
////				xMax <= xMax;
////			
////				yMin <= yMin;
////				yMax <= yMax;
////			end
////			
////			else
////			begin
////				//HERE WE NEED TO PASS OUT NOT TO WRITE TO SRAM
////				stallOUT <= 1'b0;
////				
////				fragment_x <= fragment_x;
////				fragment_y <= fragment_y;
////				fragment_c <= 16'b0;
////		
////				xMin <= xMin;
////				xMax <= xMax;
////		
////				yMin <= yMin;
////				yMax <= yMax;
////			end
////		end
////	end
////	
////	else if (stallOUT & stallIN)
////	begin
////		stallOUT <= stallOUT;
////		fragment_x <= fragment_x;
////		fragment_y <= fragment_y;
////		fragment_c <= fragment_c;
////		
////		xMin <= xMin;
////		xMax <= xMax;
////		
////		yMin <= yMin;
////		yMax <= yMax;
////		
////		setup_counter <= setup_counter;
////		
////		c <= c;
////		f <= f;

⌨️ 快捷键说明

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