Advertisement
Guest User

Untitled

a guest
Jan 11th, 2020
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `default_nettype none
  2.  
  3. module test (
  4.     input  wire [63:0] in,
  5.     output reg  out
  6. );
  7.  
  8.     genvar i;
  9.  
  10.     wire [65:0] in_full = {2'b00, in};
  11.  
  12.     (* keep="true" *) reg  [11:0] lvl1_toomany;
  13.     (* keep="true" *) reg  [11:0] lvl1_any;
  14.  
  15.     (* keep="true" *) reg  [ 3:0] lvl2_toomany;
  16.     (* keep="true" *) reg  [ 1:0] lvl2_any;
  17.  
  18.     // Level 1
  19.     generate
  20.         for (i=0; i<11; i=i+1)
  21.         begin
  22.             always @(*)
  23.             begin
  24.                 // At least one ?
  25.                 lvl1_any[i] = |in_full[6*i+:6];
  26.  
  27.                 // Too many ?
  28.                 case (in_full[6*i+:6])
  29.                     6'b000000: lvl1_toomany[i] = 1'b0;
  30.                     6'b100000: lvl1_toomany[i] = 1'b0;
  31.                     6'b010000: lvl1_toomany[i] = 1'b0;
  32.                     6'b001000: lvl1_toomany[i] = 1'b0;
  33.                     6'b000100: lvl1_toomany[i] = 1'b0;
  34.                     6'b000010: lvl1_toomany[i] = 1'b0;
  35.                     6'b000001: lvl1_toomany[i] = 1'b0;
  36.                     default:   lvl1_toomany[i] = 1'b1;
  37.                 endcase
  38.             end
  39.         end
  40.     endgenerate
  41.  
  42.     assign lvl1_toomany[11] = 1'b0;
  43.     assign lvl1_any[11] = 1'b0;
  44.  
  45.     // Level 2
  46.     generate
  47.         for (i=0; i<2; i=i+1)
  48.         begin
  49.             always @(*)
  50.             begin
  51.                 // At least one ?
  52.                 lvl2_any[i] = |lvl1_any[6*i+:6];
  53.  
  54.                 // Too many ?
  55.                 case (lvl1_any[6*i+:6])
  56.                     6'b000000: lvl2_toomany[i] = 1'b0;
  57.                     6'b100000: lvl2_toomany[i] = 1'b0;
  58.                     6'b010000: lvl2_toomany[i] = 1'b0;
  59.                     6'b001000: lvl2_toomany[i] = 1'b0;
  60.                     6'b000100: lvl2_toomany[i] = 1'b0;
  61.                     6'b000010: lvl2_toomany[i] = 1'b0;
  62.                     6'b000001: lvl2_toomany[i] = 1'b0;
  63.                     default:   lvl2_toomany[i] = 1'b1;
  64.                 endcase
  65.  
  66.                 lvl2_toomany[2+i] = |lvl1_toomany[6*i+:6];
  67.             end
  68.         end
  69.     endgenerate
  70.  
  71.     // Level 3
  72.     always @(*)
  73.         out = (|lvl2_toomany || lvl2_any == 2'b11);
  74.  
  75. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement