axis_pulse_generator.v 952 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. `timescale 1 ns / 1 ps
  2. module axis_pulse_generator
  3. (
  4. input wire aclk,
  5. input wire aresetn,
  6. // Slave side
  7. input wire [63:0] s_axis_tdata,
  8. input wire s_axis_tvalid,
  9. output wire s_axis_tready,
  10. // Master side
  11. output wire [15:0] m_axis_tdata,
  12. output wire m_axis_tvalid,
  13. input wire m_axis_tready
  14. );
  15. reg [31:0] int_cntr_reg;
  16. wire int_enbl_wire, int_tready_wire;
  17. assign int_enbl_wire = |int_cntr_reg;
  18. assign int_tready_wire = ~int_enbl_wire;
  19. always @(posedge aclk)
  20. begin
  21. if(~aresetn)
  22. begin
  23. int_cntr_reg <= 32'd0;
  24. end
  25. else if(int_enbl_wire)
  26. begin
  27. int_cntr_reg <= int_cntr_reg - 1'b1;
  28. end
  29. else if(s_axis_tvalid)
  30. begin
  31. int_cntr_reg <= s_axis_tdata[63:32];
  32. end
  33. end
  34. assign s_axis_tready = int_tready_wire;
  35. assign m_axis_tdata = s_axis_tdata[15:0];
  36. assign m_axis_tvalid = int_tready_wire & s_axis_tvalid;
  37. endmodule