-
Notifications
You must be signed in to change notification settings - Fork 2
/
PCIM.v
executable file
·73 lines (63 loc) · 3.15 KB
/
PCIM.v
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 16:08:29 08/11/2017
// Design Name:
// Module Name: PCIM
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module PCIM(
output [23:0] ins,
output [7:0] Current_Address,
input [7:0] jmp_loc,
input pc_mux_sel,
input Stall,
input Stall_pm,
input reset,
input clk
);
/////////////////////////////////////////////////////////Declarations/////////////////////////////////////////////////////////////////////////////////////////////////////
wire [7:0] CAJ, CAR, Hold_Address_temp, Next_Address_temp;
wire [23:0] PM_out, ins_pm;
wire [23:0] ins_prv_temp;
reg [7:0] Hold_Address, Next_Address;
reg [23:0] ins_prv;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////Program Memory//////////////////////////////////////////////////////////////////////////////////////////////////
Program_Memory pm1(
.clka(clk), // input clk
.addra(Current_Address), // input [7 : 0] Current_Address
.douta(PM_out) // output [23 : 0] PM_out
);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////Combinational block//////////////////////////////////////////////////////////////////////////////////////////////
assign CAJ = (Stall) ? Hold_Address : Next_Address;
assign CAR = (pc_mux_sel) ? jmp_loc : CAJ;
assign Current_Address = (reset) ? CAR : 8'b0000_0000;
assign ins_pm = (Stall_pm) ? ins_prv : PM_out;
assign ins = (reset) ? ins_pm : 24'b0000_0000_0000_0000_0000_0000;
assign ins_prv_temp = (reset) ? ins : 24'b0000_0000_0000_0000_0000_0000;
assign Hold_Address_temp = (reset) ? Current_Address : 8'b0000_0000;
assign Next_Address_temp = (reset) ? Current_Address + 8'b0000_0001 : 8'b0000_0000;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////Sequential block////////////////////////////////////////////////////////////////////////////////////////////////
always @ (posedge clk)
begin
ins_prv <= ins_prv_temp;
Hold_Address <= Hold_Address_temp;
Next_Address <= Next_Address_temp;
end
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
endmodule