axis_variable.v 892 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. `timescale 1 ns / 1 ps
  2. module axis_variable #
  3. (
  4. parameter integer AXIS_TDATA_WIDTH = 32
  5. )
  6. (
  7. // System signals
  8. input wire aclk,
  9. input wire aresetn,
  10. input wire [AXIS_TDATA_WIDTH-1:0] cfg_data,
  11. // Master side
  12. input wire m_axis_tready,
  13. output wire [AXIS_TDATA_WIDTH-1:0] m_axis_tdata,
  14. output wire m_axis_tvalid
  15. );
  16. reg [AXIS_TDATA_WIDTH-1:0] int_tdata_reg;
  17. reg int_tvalid_reg;
  18. always @(posedge aclk)
  19. begin
  20. if(~aresetn)
  21. begin
  22. int_tdata_reg <= {(AXIS_TDATA_WIDTH){1'b0}};
  23. int_tvalid_reg <= 1'b0;
  24. end
  25. else
  26. begin
  27. int_tdata_reg <= cfg_data;
  28. int_tvalid_reg <= (int_tdata_reg != cfg_data) | (int_tvalid_reg & ~m_axis_tready);
  29. end
  30. end
  31. assign m_axis_tdata = int_tdata_reg;
  32. assign m_axis_tvalid = int_tvalid_reg;
  33. endmodule