| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- `timescale 1 ns / 1 ps
- module axis_trigger #
- (
- parameter integer AXIS_TDATA_WIDTH = 32,
- parameter AXIS_TDATA_SIGNED = "FALSE"
- )
- (
- // System signals
- input wire aclk,
- input wire pol_data,
- input wire [AXIS_TDATA_WIDTH-1:0] msk_data,
- input wire [AXIS_TDATA_WIDTH-1:0] lvl_data,
- output wire trg_flag,
- // Slave side
- output wire s_axis_tready,
- input wire [AXIS_TDATA_WIDTH-1:0] s_axis_tdata,
- input wire s_axis_tvalid
- );
- reg [1:0] int_comp_reg;
- wire int_comp_wire;
- generate
- if(AXIS_TDATA_SIGNED == "TRUE")
- begin : SIGNED
- assign int_comp_wire = $signed(s_axis_tdata & msk_data) >= $signed(lvl_data);
- end
- else
- begin : UNSIGNED
- assign int_comp_wire = (s_axis_tdata & msk_data) >= lvl_data;
- end
- endgenerate
- always @(posedge aclk)
- begin
- if(s_axis_tvalid)
- begin
- int_comp_reg <= {int_comp_reg[0], int_comp_wire};
- end
- end
- assign s_axis_tready = 1'b1;
- assign trg_flag = s_axis_tvalid & (pol_data ^ int_comp_reg[0]) & (pol_data ^ ~int_comp_reg[1]);
- endmodule
|