RenHao

triangle

Mar 9th, 2015
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module triangle (clk, reset, nt, xi, yi, busy, po, xo, yo);
  2. input clk, reset, nt;
  3. input [2:0] xi, yi;
  4. output reg busy, po;
  5. output [2:0] xo, yo;
  6.  
  7. reg [2:0] X[2:0];
  8. reg [2:0] Y[2:0];
  9. reg [2:0] X_ptr, Y_ptr;
  10. reg [3:0] state;
  11.  
  12. wire [7:0] r1, r2;
  13.  
  14. assign xo = X_ptr;
  15. assign yo = Y_ptr;
  16.  
  17. assign  r1=(X_ptr-X[0]+3'h1)*(Y[2]-Y[0]);  
  18.               // x1 - (x + 1)  
  19. assign  r2=(X[2]-X[0])*(Y_ptr - Y[0]);   
  20.  
  21. always@(posedge clk or posedge reset) begin
  22.     if(reset) begin
  23.         {X[2],X[1],X[0]} <= 9'h0;
  24.         {Y[2],Y[1],Y[0]} <= 9'h0;
  25.         busy <= 1'h0;
  26.         po <= 1'h0;
  27.         X_ptr <= 3'h0;
  28.         Y_ptr <= 3'h0;
  29.         state <= 4'h0;
  30.     end
  31.  
  32.     else begin
  33.         case(state)
  34.         4'h0:
  35.         begin
  36.             if(nt) begin
  37.                 X[0] <= xi;
  38.                 Y[0] <= yi;
  39.                 X_ptr <= xi[0];
  40.                 Y_ptr <= yi[0];
  41.                 busy <= 1'h1;
  42.                 state <= 4'h1;
  43.             end
  44.         end
  45.        
  46.         4'h1:
  47.         begin
  48.             X[1] <= xi;
  49.             Y[1] <= yi;
  50.             state <= 4'h2;     
  51.         end
  52.        
  53.         4'h2:
  54.         begin
  55.             X[2] <= xi;
  56.             Y[2] <= yi;
  57.             po <= 1'h1;
  58.             state <= 4'h3;     
  59.         end
  60.        
  61.         4'h3:  
  62.         begin
  63.             if( (X_ptr==X[2]) & (Y_ptr==Y[2]))
  64.             begin
  65.                 state <= 4'h4;
  66.                 po <= 1'h0;            
  67.             end        
  68.            
  69.             else if (X_ptr == X[1])
  70.             begin
  71.                 po <= 1'h0;
  72.                 X_ptr <= X[0];
  73.                 Y_ptr <= Y_ptr+3'h1;
  74.             end
  75.            
  76.             else
  77.             begin
  78.                 po <= (r1 >= r2)?1'h1:1'h0; // if the point is now locate at left of scale
  79.                 X_ptr <= X_ptr+3'h1;
  80.             end            
  81.         end
  82.        
  83.         4'h4:
  84.         begin
  85.             busy <= 1'h0;
  86.             state <= 4'h0;         
  87.         end        
  88.                
  89.         endcase
  90.     end
  91. end
  92. endmodule
Advertisement
Add Comment
Please, Sign In to add comment