axis_trigger.v 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. `timescale 1 ns / 1 ps
  2. module axis_trigger #
  3. (
  4. parameter integer AXIS_TDATA_WIDTH = 32,
  5. parameter AXIS_TDATA_SIGNED = "FALSE"
  6. )
  7. (
  8. // System signals
  9. input wire aclk,
  10. input wire pol_data,
  11. input wire [AXIS_TDATA_WIDTH-1:0] msk_data,
  12. input wire [AXIS_TDATA_WIDTH-1:0] lvl_data,
  13. output wire trg_flag,
  14. // Slave side
  15. output wire s_axis_tready,
  16. input wire [AXIS_TDATA_WIDTH-1:0] s_axis_tdata,
  17. input wire s_axis_tvalid
  18. );
  19. reg [1:0] int_comp_reg;
  20. wire int_comp_wire;
  21. generate
  22. if(AXIS_TDATA_SIGNED == "TRUE")
  23. begin : SIGNED
  24. assign int_comp_wire = $signed(s_axis_tdata & msk_data) >= $signed(lvl_data);
  25. end
  26. else
  27. begin : UNSIGNED
  28. assign int_comp_wire = (s_axis_tdata & msk_data) >= lvl_data;
  29. end
  30. endgenerate
  31. always @(posedge aclk)
  32. begin
  33. if(s_axis_tvalid)
  34. begin
  35. int_comp_reg <= {int_comp_reg[0], int_comp_wire};
  36. end
  37. end
  38. assign s_axis_tready = 1'b1;
  39. assign trg_flag = s_axis_tvalid & (pol_data ^ int_comp_reg[0]) & (pol_data ^ ~int_comp_reg[1]);
  40. endmodule