axis_adder.v 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. `timescale 1 ns / 1 ps
  2. module axis_adder #
  3. (
  4. parameter integer AXIS_TDATA_WIDTH = 32,
  5. parameter AXIS_TDATA_SIGNED = "FALSE"
  6. )
  7. (
  8. // System signals
  9. input wire aclk,
  10. // Slave side
  11. output wire s_axis_a_tready,
  12. input wire [AXIS_TDATA_WIDTH-1:0] s_axis_a_tdata,
  13. input wire s_axis_a_tvalid,
  14. output wire s_axis_b_tready,
  15. input wire [AXIS_TDATA_WIDTH-1:0] s_axis_b_tdata,
  16. input wire s_axis_b_tvalid,
  17. // Master side
  18. input wire m_axis_tready,
  19. output wire [AXIS_TDATA_WIDTH-1:0] m_axis_tdata,
  20. output wire m_axis_tvalid
  21. );
  22. wire [AXIS_TDATA_WIDTH-1:0] int_tdata_wire;
  23. wire int_tready_wire, int_tvalid_wire;
  24. generate
  25. if(AXIS_TDATA_SIGNED == "TRUE")
  26. begin : SIGNED
  27. assign int_tdata_wire = $signed(s_axis_a_tdata) + $signed(s_axis_b_tdata);
  28. end
  29. else
  30. begin : UNSIGNED
  31. assign int_tdata_wire = s_axis_a_tdata + s_axis_b_tdata;
  32. end
  33. endgenerate
  34. assign int_tvalid_wire = s_axis_a_tvalid & s_axis_b_tvalid;
  35. assign int_tready_wire = int_tvalid_wire & m_axis_tready;
  36. assign s_axis_a_tready = int_tready_wire;
  37. assign s_axis_b_tready = int_tready_wire;
  38. assign m_axis_tdata = int_tdata_wire;
  39. assign m_axis_tvalid = int_tvalid_wire;
  40. endmodule