axis_gpio_reader.v 822 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. `timescale 1 ns / 1 ps
  2. module axis_gpio_reader #
  3. (
  4. parameter integer AXIS_TDATA_WIDTH = 32
  5. )
  6. (
  7. // System signals
  8. input wire aclk,
  9. inout wire [AXIS_TDATA_WIDTH-1:0] gpio_data,
  10. // Master side
  11. output wire [AXIS_TDATA_WIDTH-1:0] m_axis_tdata,
  12. output wire m_axis_tvalid
  13. );
  14. reg [AXIS_TDATA_WIDTH-1:0] int_data_reg [1:0];
  15. wire [AXIS_TDATA_WIDTH-1:0] int_data_wire;
  16. genvar j;
  17. generate
  18. for(j = 0; j < AXIS_TDATA_WIDTH; j = j + 1)
  19. begin : GPIO
  20. IOBUF gpio_iobuf (.O(int_data_wire[j]), .IO(gpio_data[j]), .I(1'b0), .T(1'b1));
  21. end
  22. endgenerate
  23. always @(posedge aclk)
  24. begin
  25. int_data_reg[0] <= int_data_wire;
  26. int_data_reg[1] <= int_data_reg[0];
  27. end
  28. assign m_axis_tdata = int_data_reg[1];
  29. assign m_axis_tvalid = 1'b1;
  30. endmodule