25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 

106 satır
3.8 KiB

  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company: BITSILICA PVT LTD
  4. // Design Name:PBCH_POLAR_ENCODER_IP
  5. // Module Name: PBCH_POLAR_ENCODER_IP
  6. // Project Name: POLAR IP
  7. // Description: The PBCH_POLAR_ENCODER IP is interfaced with AXI4 Stream DIN
  8. // Slave and DOUT Master interfaces.
  9. //////////////////////////////////////////////////////////////////////////////////
  10. `include "PBCH_Defines.vh"
  11. `define Dx_WIDTH 32 // Dx_WIDTH => DIN_WIDTH / DOUT_WIDTH => AXI4-Stream Interface
  12. `define PDCCH 0
  13. module PBCH_POLAR_ENCODER_IP(
  14. /**************************************************************/
  15. // Global Signals
  16. input logic reset_n, // Active Low Reset
  17. input logic core_clk, // Core Clock
  18. /**************************************************************/
  19. // AXI4 DIN Stream Interface
  20. input logic [`Dx_WIDTH - 1 : 0] s_axis_din_tdata,
  21. input logic s_axis_din_tvalid,
  22. input logic s_axis_din_tlast,
  23. output logic DIN_TREADY,
  24. /**************************************************************/
  25. // AXI4 DOUT Stream Interface
  26. input logic s_axis_dout_tready,
  27. output logic [`Dx_WIDTH - 1 : 0] DOUT_TDATA,
  28. output logic DOUT_TVALID,
  29. output logic DOUT_TLAST
  30. );
  31. logic [`Dx_WIDTH - 1 : 0] m_axis_din_tdata;
  32. logic [`G - 1 : 0] msg_o;
  33. logic [9:0] global_count;
  34. logic done;
  35. S_AXIS #
  36. (.C_S_AXIS_TDATA_WIDTH(`Dx_WIDTH)
  37. ) DIN_STREAM
  38. (.S_AXIS_ACLK(core_clk),
  39. .S_AXIS_ARESETN(reset_n),
  40. .S_AXIS_TREADY(DIN_TREADY),
  41. .M_AXIS_TDATA(m_axis_din_tdata), // Output from Stream
  42. .S_AXIS_TDATA(s_axis_din_tdata), // Input from Stream
  43. .S_AXIS_TLAST(s_axis_din_tlast),
  44. .S_AXIS_TVALID(s_axis_din_tvalid),
  45. .tready_in(done)
  46. );
  47. POLAR_ENCODER
  48. #(.PBCH(`PBCH), // Broadcast Channel enable
  49. .A(`A), // Message width A if no segmentation needed, A'=A/2 if segmentation is needed.
  50. .G(`G) // Length of output
  51. ) PBCH
  52. (.clock_i(core_clk), // input clock signal
  53. .reset_ni(reset_n), // input reset
  54. .msg_i(m_axis_din_tdata), // input message bits
  55. .msg_o(msg_o) // output bits
  56. );
  57. always_ff@(posedge core_clk)
  58. if(!reset_n)
  59. global_count <= 0;
  60. else if(global_count <= 'd525)
  61. global_count <= global_count + 1'b1;
  62. else
  63. global_count <= 0;
  64. assign done = (reset_n == 0)||(global_count =='d524) ? 1'b1 : 1'b0;
  65. DOUT_M_AXIS #
  66. (
  67. // Width of S_AXIS address bus. The slave accepts the read and write addresses of width C_M_AXIS_TDATA_WIDTH.
  68. .C_M_AXIS_TDATA_WIDTH(`Dx_WIDTH),
  69. .C_S_AXIS_TDATA_WIDTH(`G),
  70. .DEPTH(27),
  71. .C_M_START_COUNT(2)) DOUT_STREAM
  72. (
  73. // Global ports
  74. .M_AXIS_ACLK(core_clk),
  75. .M_AXIS_ARESETN(reset_n),
  76. // Master Stream Ports. TVALID indicates that the master is driving a valid transfer, A transfer takes place when both TVALID and TREADY are asserted.
  77. .M_AXIS_TVALID(DOUT_TVALID),
  78. // TDATA is the primary payload that is used to provide the data that is passing across the interface from the master.
  79. .M_AXIS_TDATA(DOUT_TDATA),
  80. // TLAST indicates the boundary of a packet.
  81. .M_AXIS_TLAST(DOUT_TLAST),
  82. // TREADY indicates that the slave can accept a transfer in the current cycle.
  83. .M_AXIS_TREADY(s_axis_dout_tready),
  84. // Input from PBCH Encoder Core of Width 864 bits
  85. .S_AXIS_TDATA(msg_o),
  86. // Input from PBCH Encoder Core
  87. .DONE(done)
  88. );
  89. endmodule