Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module ate(clk,reset,pix_data,bin,threshold);
  2. input clk;
  3. input reset;
  4. input [7:0] pix_data;
  5. output bin;
  6. output [7:0] threshold;
  7. reg [7:0] threshold;
  8. reg bin;
  9.  
  10. reg [7:0] data [63:0]; 
  11. reg [6:0]counter; //reg [5:0]counter;
  12. reg [7:0]min0;
  13. reg [7:0]max0; //min, max is 16進位
  14. reg [4:0]block;  //reg [6:0] block_count;  block is 24(01100)
  15. integer i; 
  16.    
  17.     always@(posedge clk or posedge reset)
  18.     begin
  19.         if(reset)
  20.         begin
  21.             block <= 5'd0;
  22.         end
  23.         else
  24.             begin
  25.                 if((counter == 7'd63)&&(block == 5'd5))
  26.                 begin
  27.                     block <= 5'd0;
  28.                 end
  29.                 else if(counter == 7'd63)
  30.                 begin
  31.                     block <= block + 5'd1;
  32.                 end
  33.             end
  34.     end
  35.    
  36.     always@(posedge clk or posedge reset)
  37.     begin
  38.         if(reset)
  39.         begin
  40.             counter <= 7'd0;
  41.         end
  42.         else
  43.         begin
  44.             counter <= counter + 7'd1;
  45.         end
  46.     end
  47.    
  48.     always@(posedge clk or posedge reset)
  49.     begin
  50.         if(reset)
  51.         begin
  52.             for(i = 0; i < 65; i = i + 1)
  53.             begin
  54.                 data[i] <= 8'd0;
  55.             end
  56.         end
  57.         else
  58.         begin
  59.             data[counter] <= pix_data;
  60.         end
  61.     end
  62.    
  63.     always@(posedge clk or posedge reset)
  64.     begin
  65.         if(reset)
  66.         begin
  67.             max0 <= 8'd0;
  68.         end
  69.         else
  70.         begin
  71.            if(counter == 7'd0)
  72.            begin
  73.               max0 <= pix_data;
  74.            end
  75.             else if(max0 < pix_data)
  76.             begin
  77.                 max0 <= pix_data;
  78.             end
  79.         end
  80.     end
  81.    
  82.     always@(posedge clk or posedge reset)
  83.     begin
  84.         if(reset)
  85.         begin
  86.             min0 <= 8'hff;
  87.         end
  88.         else
  89.         begin
  90.            if(counter == 7'd0)
  91.            begin
  92.               min0 <= pix_data;
  93.            end
  94.             else if(min0 > pix_data)
  95.             begin
  96.                 min0 <= pix_data;
  97.             end
  98.         end
  99.     end
  100.  
  101.     //output
  102.     wire dout;
  103.     wire [7:0]avg;
  104.     wire [7:0]thout;
  105.     wire [8:0]sum;
  106.    
  107.     assign sum = {1'b0, min0} + {1'b0, max0};
  108.     assign avg = (sum[0]) ? (sum + 9'd01) >> 1 : sum >> 1;
  109.     assign dout = (((block == 5'd1)||(block == 5'd0))) ? 1'b0 :
  110.                   ((counter == 7'd0)&&(data[0] >= avg)) ? 1'b1 :
  111.                   ((counter != 7'd0)&&(data[counter] >= threshold)) ? 1'b1 : 1'b0;
  112.                  
  113.                  
  114.     assign thout = (((block == 5'd1)||(block == 5'd0))) ? 8'd0 : avg;
  115.    
  116.     always@(posedge clk or posedge reset)
  117.     begin
  118.         if(reset)
  119.         begin
  120.             bin <= 1'b0;
  121.         end
  122.         else
  123.         begin
  124.             bin <= dout;
  125.         end
  126.     end
  127.    
  128.     always@(posedge clk or posedge reset)
  129.     begin
  130.         if(reset)
  131.         begin
  132.             threshold <= 8'd0;
  133.         end
  134.         else
  135.         begin
  136.             if(counter == 7'd0)
  137.             begin
  138.                 threshold <= thout;
  139.             end
  140.         end
  141.     end
  142.    
  143. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement