summaryrefslogtreecommitdiff
path: root/rtl/core/psr.sv
blob: 30bb3206659a505c62f683f743abde8e75787c82 (plain)
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
`include "core/uarch.sv"

module core_psr
(
	input  logic     clk,
	                 update_flags,
	                 alu_v_valid,
	input  psr_flags alu_flags,

	output psr_flags flags
);

	psr_flags cpsr_flags;

	always_comb begin
		flags = cpsr_flags;

		if(update_flags) begin
			flags = alu_flags;
			if(~alu_v_valid)
				flags.v = cpsr_flags.v;
		end
	end

	always_ff @(posedge clk)
		cpsr_flags <= flags;

	initial cpsr_flags = 4'b0000;

endmodule