intraPE1.v
Upload User: abszbd2002
Upload Date: 2020-10-12
Package Size: 33407k
Code Size: 2k
Development Platform:

VHDL

  1. module intraPE1 (clk,reset_n,in0,in1,in2,in3,IsShift,IsStore,IsClip,full_bypass,round_value,shift_len,
  2. PE_out_reg,PE_out,sum_out);
  3. input clk,reset_n;
  4. input [15:0] in0,in1,in2,in3;
  5. input IsShift;
  6. input IsStore;
  7. input IsClip;
  8. input full_bypass;
  9. input [4:0] round_value;
  10. input [2:0] shift_len;
  11. reg shift_reg,store_reg,clip_reg,bypass_reg;
  12. reg [4:0] value_reg;
  13. reg [2:0] len_reg;
  14. output [15:0] PE_out_reg;
  15. output [7:0] PE_out;
  16. output [15:0] sum_out;
  17. // reg [15:0] sum_out;
  18. reg [15:0] PE_out_reg;
  19. // reg [7:0] PE_out;
  20. reg [15:0] in0_reg,in1_reg,in2_reg,in3_reg;
  21. wire [15:0] sum1;
  22. wire [15:0] sum2;
  23. wire [16:0] round_tmp;
  24. wire [15:0] round_out;
  25. wire [7:0] clip_out;
  26. always @ (posedge clk)
  27. if (reset_n== 1'b0)
  28. begin
  29. shift_reg <= 1'b0;
  30. store_reg <= 1'b0;
  31. clip_reg <= 1'b0;
  32. bypass_reg <= 1'b0;
  33. value_reg <= 5'b0;
  34. len_reg <= 3'b0;
  35.     end
  36. else
  37. begin
  38. shift_reg <= IsShift;
  39. store_reg <= IsStore;
  40. clip_reg <= IsClip;
  41. bypass_reg <= full_bypass;
  42. value_reg <= round_value;
  43. len_reg <= shift_len;
  44. end
  45. always @ (posedge clk)
  46. if(reset_n == 1'b0)
  47. begin
  48. in0_reg <= 16'b0;
  49. in1_reg <= 16'b0;
  50. in2_reg <= 16'b0;
  51. in3_reg <= 16'b0;
  52. end
  53. else
  54. begin
  55. in0_reg <= in0;
  56. in1_reg <= in1;
  57. in2_reg <= in2;
  58. in3_reg <= in3;
  59. end
  60. assign sum1 = (bypass_reg)? 0:(in0_reg + in1_reg);
  61. assign sum2 = (bypass_reg)? 0:((shift_reg)? {in2_reg[14:0],1'b0}:(in2_reg + in3_reg));
  62. assign sum_out = (bypass_reg)? 0:(sum1 + sum2);
  63. // always @ (posedge clk)
  64. // if (reset_n == 1'b0)
  65. // sum_out <= 16'b0;
  66. // else
  67. // begin
  68. // if (bypass_reg)
  69. // sum_out <= 16'b0;
  70. // else sum_out <= sum1+sum2;
  71. // end
  72. always @ (posedge clk)
  73. if (reset_n == 1'b0)
  74. PE_out_reg <= 0;
  75. else if (store_reg)
  76. PE_out_reg <= sum_out;
  77. assign round_tmp = sum_out + value_reg;
  78. assign round_out = round_tmp >> len_reg;
  79. assign clip_out = (clip_reg)? ((round_out[15] == 1'b1)? 8'd0:((round_out[15:8] == 0)? round_out[7:0]:8'd255))
  80.   :round_out[7:0];
  81. assign PE_out = (bypass_reg)? in0_reg[7:0]:clip_out;
  82. /* always @ (posedge clk)
  83. if (reset_n ==1'b0)
  84. PE_out <= 8'b0;
  85. else
  86. begin
  87. if (bypass_reg)
  88. PE_out <= in0_reg[7:0];
  89. else PE_out <= clip_out;
  90. end*/
  91. endmodule