ActivePortSelector.v 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 10:02:35 04/20/2020
  7. // Design Name:
  8. // Module Name: mult_module
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //
  21. //////////////////////////////////////////////////////////////////////////////////
  22. module ActivePortSelector
  23. #(
  24. parameter PortsNum = 4
  25. )
  26. (
  27. input Rst_i,
  28. input Mod_i,
  29. input [PortsNum-1:0] Ctrl_i,
  30. output reg [PortsNum-1:0] Ctrl_o
  31. );
  32. //================================================================================
  33. // LOCALPARAM
  34. //================================================================================
  35. localparam LutNum = 2**PortsNum;
  36. localparam PortsNone = 4'b0000;
  37. localparam Ports_1 = 4'b0001;
  38. localparam Ports_2 = 4'b0010;
  39. localparam Ports_21 = 4'b0011;
  40. localparam Ports_3 = 4'b0100;
  41. localparam Ports_31 = 4'b0101;
  42. localparam Ports_32 = 4'b0110;
  43. localparam Ports_321 = 4'b0111;
  44. localparam Ports_4 = 4'b1000;
  45. localparam Ports_41 = 4'b1001;
  46. localparam Ports_42 = 4'b1010;
  47. localparam Ports_421 = 4'b1011;
  48. localparam Ports_43 = 4'b1100;
  49. localparam Ports_431 = 4'b1101;
  50. localparam Ports_432 = 4'b1110;
  51. localparam Ports_4321 = 4'b1111;
  52. //================================================================================
  53. // REG/WIRE
  54. //================================================================================
  55. wire [PortsNum-1:0] Lut [LutNum-1:0];
  56. //================================================================================
  57. // ASSIGNMENTS
  58. //================================================================================
  59. assign Lut [0] = ~(4'b0000);
  60. assign Lut [1] = ~({3'b000,Mod_i});
  61. assign Lut [2] = ~({2'b00,Mod_i,1'b0});
  62. assign Lut [3] = ~({2'b00,Mod_i,Mod_i});
  63. assign Lut [4] = ~({1'b0,Mod_i,2'b0});
  64. assign Lut [5] = ~({1'b0,Mod_i,1'b0,Mod_i});
  65. assign Lut [6] = ~({1'b0,Mod_i,Mod_i,1'b0});
  66. assign Lut [7] = ~({1'b0,Mod_i,Mod_i,Mod_i});
  67. assign Lut [8] = ~({Mod_i,3'b000});
  68. assign Lut [9] = ~({Mod_i,2'b00,Mod_i});
  69. assign Lut [10] = ~({Mod_i,1'b0,Mod_i,1'd0});
  70. assign Lut [11] = ~({Mod_i,1'b0,Mod_i,Mod_i});
  71. assign Lut [12] = ~({Mod_i,Mod_i,2'b00});
  72. assign Lut [13] = ~({Mod_i,Mod_i,1'b0,Mod_i});
  73. assign Lut [14] = ~({Mod_i,Mod_i,Mod_i,1'b0});
  74. assign Lut [15] = ~({Mod_i,Mod_i,Mod_i,Mod_i});
  75. //================================================================================
  76. // CODING
  77. always @(*) begin
  78. if (!Rst_i) begin
  79. case (Ctrl_i)
  80. PortsNone: begin
  81. Ctrl_o = Lut[0];
  82. end
  83. Ports_1: begin
  84. Ctrl_o = Lut[1];
  85. end
  86. Ports_2: begin
  87. Ctrl_o = Lut[2];
  88. end
  89. Ports_21: begin
  90. Ctrl_o = Lut[3];
  91. end
  92. Ports_3: begin
  93. Ctrl_o = Lut[4];
  94. end
  95. Ports_31: begin
  96. Ctrl_o = Lut[5];
  97. end
  98. Ports_32: begin
  99. Ctrl_o = Lut[6];
  100. end
  101. Ports_321: begin
  102. Ctrl_o = Lut[7];
  103. end
  104. Ports_4: begin
  105. Ctrl_o = Lut[8];
  106. end
  107. Ports_41: begin
  108. Ctrl_o = Lut[9];
  109. end
  110. Ports_42: begin
  111. Ctrl_o = Lut[10];
  112. end
  113. Ports_421: begin
  114. Ctrl_o = Lut[11];
  115. end
  116. Ports_43: begin
  117. Ctrl_o = Lut[12];
  118. end
  119. Ports_431: begin
  120. Ctrl_o = Lut[13];
  121. end
  122. Ports_432: begin
  123. Ctrl_o = Lut[14];
  124. end
  125. Ports_4321: begin
  126. Ctrl_o = Lut[15];
  127. end
  128. endcase
  129. end else begin
  130. Ctrl_o = 4'd0;
  131. end
  132. end
  133. endmodule