summaryrefslogtreecommitdiff
path: root/rtl/core/control/issue.sv
blob: 6ad27f76ec393c8c65e019943b5c5c4ab92b64b8 (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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
`include "core/uarch.sv"

module core_control_issue
(
	input  logic           clk,

	input  datapath_decode dec,
	input  ptr             fetch_insn_pc,

	input  ctrl_cycle      next_cycle,
	input  logic           next_bubble,

`ifdef VERILATOR
	input  word            insn,
`endif

	output logic           issue,
	                       undefined,
	output ptr             pc,
	                       pc_visible,
	                       next_pc_visible
);

	assign issue = next_cycle == ISSUE && dec.execute && !next_bubble;
	assign next_pc_visible = fetch_insn_pc + 2;

	always_ff @(posedge clk)
		if(next_cycle == ISSUE) begin
			undefined <= dec.undefined;

`ifdef VERILATOR
			if(dec.undefined)
				$display("[core] undefined insn: [0x%08x] %08x", fetch_insn_pc << 2, insn);
`endif

			pc <= fetch_insn_pc;
			pc_visible <= next_pc_visible;
		end

	initial begin
		pc = 0;
		pc_visible = 2;
		undefined = 0;
	end

endmodule