Skip to content

Commit 2175442

Browse files
author
David Lavoie-Boutin
committed
Finish comments and change radix
1 parent 2121d13 commit 2175442

File tree

3 files changed

+211
-57
lines changed

3 files changed

+211
-57
lines changed

PROC/TEST2.tcl

Lines changed: 34 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -7,43 +7,38 @@ sim:/PROCv2/id_reset\
77
sim:/PROCv2/if_reset\
88
sim:/PROCv2/mem_reset
99

10-
add wave -group "IF in buffers" sim:/PROCv2/if_pc_in_buffer\
11-
sim:/PROCv2/if_pc_sel_in_buffer\
12-
sim:/PROCv2/if_pc_enable_in_buffer
10+
add wave -group "IF in buffers" -radix unsigned sim:/PROCv2/if_pc_in_buffer\
11+
-radix binary sim:/PROCv2/if_pc_sel_in_buffer\
12+
-radix binary sim:/PROCv2/if_pc_enable_in_buffer
1313

14-
add wave -group "IF out signals" sim:/PROCv2/if_pc_out\
15-
sim:/PROCv2/if_inst_out
14+
add wave -group "IF out signals" -radix unsigned sim:/PROCv2/if_pc_out\
15+
-radix binary sim:/PROCv2/if_inst_out
1616

17-
add wave -group "ID in buffers" sim:/PROCv2/id_inst_in_buffer\
17+
add wave -group "ID in buffers" -radix binary sim:/PROCv2/id_inst_in_buffer\
1818
sim:/PROCv2/id_wenable_in_buffer\
19-
sim:/PROCv2/id_reg_add_in_buffer\
20-
sim:/PROCv2/id_reg_data_in_buffer\
21-
sim:/PROCv2/id_pc_in_buffer
19+
-radix unsigned sim:/PROCv2/id_reg_add_in_buffer\
20+
-radix binary sim:/PROCv2/id_reg_data_in_buffer\
21+
-radix unsigned sim:/PROCv2/id_pc_in_buffer
2222

23-
add wave -group "ID out signals" sim:/PROCv2/id_pc_out\
23+
add wave -group "ID out signals" -radix unsigned sim:/PROCv2/id_pc_out\
2424
-radix alu sim:/PROCv2/id_alu_op_out\
25-
sim:/PROCv2/id_r1_out\
26-
sim:/PROCv2/id_r2_out\
27-
sim:/PROCv2/id_imm_out\
28-
sim:/PROCv2/id_dest_regadd_out\
29-
sim:/PROCv2/id_loaden_out\
25+
-radix decimal sim:/PROCv2/id_r1_out\
26+
-radix decimal sim:/PROCv2/id_r2_out\
27+
-radix decimal sim:/PROCv2/id_imm_out\
28+
-radix unsigned sim:/PROCv2/id_dest_regadd_out\
29+
-radix binary sim:/PROCv2/id_loaden_out\
3030
sim:/PROCv2/id_storeen_out\
3131
sim:/PROCv2/id_useimm_out\
3232
sim:/PROCv2/id_branch_out\
3333
sim:/PROCv2/id_byte_out\
3434
sim:/PROCv2/id_WB_enable_out
3535

36-
add wave -group "Comaprator signals" sim:/procv2/IDstage/reg_comparator/value1\
37-
sim:/procv2/IDstage/reg_comparator/value2\
38-
sim:/procv2/IDstage/reg_comparator/ctl\
39-
sim:/procv2/IDstage/reg_comparator/taken
40-
41-
add wave -group "EX in buffers" sim:/PROCv2/ex_r1_in_buffer\
42-
sim:/PROCv2/ex_r2_in_buffer\
43-
sim:/PROCv2/ex_imm_in_buffer\
44-
sim:/PROCv2/ex_dest_regadd_in_buffer\
45-
sim:/PROCv2/ex_alu_op_in_buffer\
46-
sim:/PROCv2/ex_ALUData1_selector0_in_buffer\
36+
add wave -group "EX in buffers" -radix decimal sim:/PROCv2/ex_r1_in_buffer\
37+
-radix decimal sim:/PROCv2/ex_r2_in_buffer\
38+
-radix decimal sim:/PROCv2/ex_imm_in_buffer\
39+
-radix unsigned sim:/PROCv2/ex_dest_regadd_in_buffer\
40+
-radix alu sim:/PROCv2/ex_alu_op_in_buffer\
41+
-radix binary sim:/PROCv2/ex_ALUData1_selector0_in_buffer\
4742
sim:/PROCv2/ex_ALUData1_selector1_in_buffer\
4843
sim:/PROCv2/ex_ALUData2_selector0_in_buffer\
4944
sim:/PROCv2/ex_ALUData2_selector1_in_buffer\
@@ -54,45 +49,29 @@ sim:/PROCv2/ex_stall_in_buffer0\
5449
sim:/PROCv2/ex_byte_in_buffer\
5550
sim:/PROCv2/ex_WB_enable_in_buffer
5651

57-
58-
add wave -group "EX out signals" sim:/PROCv2/ex_ALU_result_out\
59-
sim:/PROCv2/ex_dest_regadd_out\
60-
sim:/PROCv2/ex_loaden_out\
52+
add wave -group "EX out signals" -radix decimal sim:/PROCv2/ex_ALU_result_out\
53+
-radix unsigned sim:/PROCv2/ex_dest_regadd_out\
54+
-radix binary sim:/PROCv2/ex_loaden_out\
6155
sim:/PROCv2/ex_storeen_out\
6256
sim:/PROCv2/ex_mem_data_out\
6357
sim:/PROCv2/ex_byte_out\
6458
sim:/PROCv2/ex_WB_enable_out
6559

66-
add wave -group "MEM in buffers" sim:/PROCv2/mem_data_in_buffer\
67-
sim:/PROCv2/mem_address_in_buffer\
68-
sim:/PROCv2/mem_access_write_in_buffer\
60+
add wave -group "MEM in buffers" -radix decimal sim:/PROCv2/mem_data_in_buffer\
61+
-radix unsigned sim:/PROCv2/mem_address_in_buffer\
62+
-radix binary sim:/PROCv2/mem_access_write_in_buffer\
6963
sim:/PROCv2/mem_byte_in_buffer\
7064
sim:/PROCv2/mem_WB_enable_in_buffer\
71-
sim:/PROCv2/mem_WB_address_in_buffer
72-
73-
74-
add wave -group "MEM out signals" sim:/PROCv2/mem_WB_enable_out\
75-
sim:/PROCv2/mem_WB_address_out\
76-
sim:/PROCv2/mem_WB_data_out
77-
78-
add wave -group "WB in buffers" sim:/PROCv2/wb_WB_enable_in_buffer\
79-
sim:/PROCv2/wb_WB_address_in_buffer\
80-
sim:/PROCv2/wb_WB_data_in_buffer
65+
-radix unsigned sim:/PROCv2/mem_WB_address_in_buffer
8166

82-
add wave -group "EX" sim:/PROCv2/EXstage/sRS\
83-
sim:/PROCv2/EXstage/A1\
84-
sim:/PROCv2/EXstage/X1\
85-
sim:/PROCv2/EXstage/RSD\
86-
sim:/PROCv2/EXstage/sRT\
87-
sim:/PROCv2/EXstage/sRES\
88-
sim:/PROCv2/EXstage/arg2
8967

90-
add wave -position end sim:/procv2/EXstage/mux1/A
91-
add wave -position end sim:/procv2/EXstage/mux1/X
92-
add wave -position end sim:/procv2/EXstage/mux1/ctl
68+
add wave -group "MEM out signals" -radix binary sim:/PROCv2/mem_WB_enable_out\
69+
-radix unsigned sim:/PROCv2/mem_WB_address_out\
70+
-radix decimal sim:/PROCv2/mem_WB_data_out
9371

94-
add wave -position 6 sim:/procv2/IDstage/branch_dest
95-
add wave -position 5 sim:/procv2/IDstage/branch_taken_internal
72+
add wave -group "WB in buffers" -radix binary sim:/PROCv2/wb_WB_enable_in_buffer\
73+
-radix unsigned sim:/PROCv2/wb_WB_address_in_buffer\
74+
-radix decimal sim:/PROCv2/wb_WB_data_in_buffer
9675
}
9776
;
9877

PROC/processor.tcl

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
proc AddWaves {} {
2+
;#Add waves we're interested in to the Wave window
3+
4+
add wave -group "Control Signals" sim:/PROCv2/clk\
5+
sim:/PROCv2/ex_reset\
6+
sim:/PROCv2/id_reset\
7+
sim:/PROCv2/if_reset\
8+
sim:/PROCv2/mem_reset
9+
10+
add wave -group "IF in buffers" -radix unsigned sim:/PROCv2/if_pc_in_buffer\
11+
-radix binary sim:/PROCv2/if_pc_sel_in_buffer\
12+
-radix binary sim:/PROCv2/if_pc_enable_in_buffer
13+
14+
add wave -group "IF out signals" -radix unsigned sim:/PROCv2/if_pc_out\
15+
-radix binary sim:/PROCv2/if_inst_out
16+
17+
add wave -group "ID in buffers" -radix binary sim:/PROCv2/id_inst_in_buffer\
18+
sim:/PROCv2/id_wenable_in_buffer\
19+
-radix unsigned sim:/PROCv2/id_reg_add_in_buffer\
20+
-radix binary sim:/PROCv2/id_reg_data_in_buffer\
21+
-radix unsigned sim:/PROCv2/id_pc_in_buffer
22+
23+
add wave -group "ID out signals" -radix unsigned sim:/PROCv2/id_pc_out\
24+
-radix alu sim:/PROCv2/id_alu_op_out\
25+
-radix decimal sim:/PROCv2/id_r1_out\
26+
-radix decimal sim:/PROCv2/id_r2_out\
27+
-radix decimal sim:/PROCv2/id_imm_out\
28+
-radix unsigned sim:/PROCv2/id_dest_regadd_out\
29+
-radix binary sim:/PROCv2/id_loaden_out\
30+
sim:/PROCv2/id_storeen_out\
31+
sim:/PROCv2/id_useimm_out\
32+
sim:/PROCv2/id_branch_out\
33+
sim:/PROCv2/id_byte_out\
34+
sim:/PROCv2/id_WB_enable_out
35+
36+
add wave -group "EX in buffers" -radix decimal sim:/PROCv2/ex_r1_in_buffer\
37+
-radix decimal sim:/PROCv2/ex_r2_in_buffer\
38+
-radix decimal sim:/PROCv2/ex_imm_in_buffer\
39+
-radix unsigned sim:/PROCv2/ex_dest_regadd_in_buffer\
40+
-radix alu sim:/PROCv2/ex_alu_op_in_buffer\
41+
-radix binary sim:/PROCv2/ex_ALUData1_selector0_in_buffer\
42+
sim:/PROCv2/ex_ALUData1_selector1_in_buffer\
43+
sim:/PROCv2/ex_ALUData2_selector0_in_buffer\
44+
sim:/PROCv2/ex_ALUData2_selector1_in_buffer\
45+
sim:/PROCv2/ex_loaden_in_buffer\
46+
sim:/PROCv2/ex_storeen_in_buffer\
47+
sim:/PROCv2/ex_stall_in_buffer\
48+
sim:/PROCv2/ex_stall_in_buffer0\
49+
sim:/PROCv2/ex_byte_in_buffer\
50+
sim:/PROCv2/ex_WB_enable_in_buffer
51+
52+
add wave -group "EX out signals" -radix decimal sim:/PROCv2/ex_ALU_result_out\
53+
-radix unsigned sim:/PROCv2/ex_dest_regadd_out\
54+
-radix binary sim:/PROCv2/ex_loaden_out\
55+
sim:/PROCv2/ex_storeen_out\
56+
sim:/PROCv2/ex_mem_data_out\
57+
sim:/PROCv2/ex_byte_out\
58+
sim:/PROCv2/ex_WB_enable_out
59+
60+
add wave -group "MEM in buffers" -radix decimal sim:/PROCv2/mem_data_in_buffer\
61+
-radix unsigned sim:/PROCv2/mem_address_in_buffer\
62+
-radix binary sim:/PROCv2/mem_access_write_in_buffer\
63+
sim:/PROCv2/mem_byte_in_buffer\
64+
sim:/PROCv2/mem_WB_enable_in_buffer\
65+
-radix unsigned sim:/PROCv2/mem_WB_address_in_buffer
66+
67+
68+
add wave -group "MEM out signals" -radix binary sim:/PROCv2/mem_WB_enable_out\
69+
-radix unsigned sim:/PROCv2/mem_WB_address_out\
70+
-radix decimal sim:/PROCv2/mem_WB_data_out
71+
72+
add wave -group "WB in buffers" -radix binary sim:/PROCv2/wb_WB_enable_in_buffer\
73+
-radix unsigned sim:/PROCv2/wb_WB_address_in_buffer\
74+
-radix decimal sim:/PROCv2/wb_WB_data_in_buffer
75+
}
76+
;
77+
78+
proc runsim {} {
79+
vsim PROCv2
80+
81+
AddWaves
82+
;#run 1 ns
83+
force -deposit /PROCv2/if_pc_enable_in_buffer 0 0 ns
84+
force -deposit /PROCv2/MEMstage/mem_access_write 0 0
85+
force -deposit /PROCv2/MEMstage/data_in "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" 0
86+
force -deposit /PROCv2/MEMstage/data_out "00000000000000000000000000000000" 0
87+
force -deposit /PROCv2/MEMstage/address_in "00000000000000000000000000000000" 0
88+
force -deposit /PROCv2/MEMstage/byte 0 0
89+
90+
GenerateCPUClock
91+
92+
force -deposit /PROCv2/reset 0 0
93+
94+
95+
loadInstructions
96+
run 1 ns
97+
force -deposit /PROCv2/if_pc_in_buffer "00000000000000000000000000110000" 0
98+
force -deposit /PROCv2/if_pc_enable_in_buffer 1 0 ns
99+
force -deposit /PROCv2/reset 1 1
100+
run 10 ns
101+
102+
}
103+
104+
proc loadInstructions {} {
105+
force -deposit PROCv2/IFstage/instruction_memory/initialize 0 0 ns, 1 1 ns, 0 2 ns
106+
;#run 1 ns ;#Force signals to update right away
107+
}
108+
109+
proc GenerateCPUClock {} {
110+
force -deposit /PROCv2/clock 0 0 ns, 1 0.5 ns -repeat 1 ns
111+
}
112+
113+
proc RadixDefine {} {
114+
radix define alu {
115+
4'b0000 "ADD",
116+
4'b0001 "AND",
117+
4'b0010 "DIV",
118+
4'b0011 "EQUALS",
119+
4'b0100 "LUI",
120+
4'b0101 "MFHI",
121+
4'b0110 "MFLO",
122+
4'b0111 "MULT",
123+
4'b1000 "NOR",
124+
4'b1001 "OR",
125+
4'b1010 "SLL",
126+
4'b1011 "SLT",
127+
4'b1100 "SRA",
128+
4'b1101 "SRL",
129+
4'b1110 "SUB",
130+
4'b1111 "XOR"
131+
}
132+
133+
radix define br_ctl {
134+
2'b00 "NO",
135+
2'b01 "EQ",
136+
2'b10 "NE",
137+
2'b11 "J"
138+
}
139+
}
140+
141+
142+
proc Init {} {
143+
vlib work
144+
145+
#Compile
146+
vcom Memory_in_Byte.vhd
147+
vcom memory_arbiter_lib.vhd
148+
vcom Main_Memory.vhd
149+
vcom memory_constants.vhd
150+
vcom Data_Mem.vhd
151+
vcom PC.vhd
152+
vcom MEM.vhd
153+
vcom fetch.vhd
154+
vcom shifter.vhd
155+
vcom comparator.vhd
156+
vcom Register.vhd
157+
vcom decode.vhd
158+
vcom ALU.vhd
159+
vcom mux41.vhd
160+
vcom EX.vhd
161+
vcom PROCv2.vhd
162+
163+
RadixDefine
164+
}

README.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Author:
55
- Wei-Di Chang
66
- David Lavoie-Boutin
77
- Muhammad Ali Lashari
8-
- Sitara Sherrif
8+
- Sitara Sheriff
99

1010
VHDL description of a 5-stage mips pipeline implementing early branch resolution, forwarding and hazard detection. This processor was implemented as a project deliverable for ECSE 425, Computer Organisation and Architecture.
1111

@@ -97,8 +97,19 @@ Simply feed the proper signals from EX and MEM back to the register file in the
9797
1. Assemble the program to a binary file.
9898
2. Rename that compiled file to `Init.dat`
9999
3. Move that file in the project folder with the processor
100-
4. Run the test script `processor.tcl`
100+
4. Source the test script `processor.tcl`
101+
5. Initialise the simulation with the command `Init`
102+
6. Run the simulation with the command `runsim`
103+
101104

102105
The script will load the instruction content in `Init.dat` inside the instruction memory, it will compile all the components and start the simulation.
103106

104107
**You might need to change the run duration to make sure you run the processor long enough.**
108+
109+
The input and output of each stage are grouped together, with the clock in the control signal group.
110+
111+
## Current Problems
112+
113+
The secondairy branch `hazard_detection` implements the general mechanics for hazard detection, but thoroug testing has proven inconclusive for many tests. This will be corrected in the next release.
114+
115+
The fibonachi program with integrated stalls will work for now as a replacement.

0 commit comments

Comments
 (0)