-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathrggen_bit_field_w01trg.sv
42 lines (39 loc) · 1.05 KB
/
rggen_bit_field_w01trg.sv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
module rggen_bit_field_w01trg #(
parameter bit TRIGGER_VALUE = '0,
parameter int WIDTH = 1
)(
input logic i_clk,
input logic i_rst_n,
rggen_bit_field_if.bit_field bit_field_if,
input logic [WIDTH-1:0] i_value,
output logic [WIDTH-1:0] o_trigger
);
logic [WIDTH-1:0] trigger;
assign bit_field_if.read_data = i_value;
assign bit_field_if.value = trigger;
assign o_trigger = trigger;
always_ff @(posedge i_clk, negedge i_rst_n) begin
if (!i_rst_n) begin
trigger <= '0;
end
else if (bit_field_if.valid) begin
trigger <= get_trigger(
bit_field_if.write_mask, bit_field_if.write_data
);
end
else if (trigger != '0) begin
trigger <= '0;
end
end
function automatic logic [WIDTH-1:0] get_trigger(
logic [WIDTH-1:0] mask,
logic [WIDTH-1:0] write_data
);
if (TRIGGER_VALUE) begin
return mask & write_data;
end
else begin
return mask & (~write_data);
end
endfunction
endmodule