Made the simulation stop at an unrecognised instruction or other error
This commit is contained in:
parent
fc4ecdb8d2
commit
fd31eb704c
@ -11,7 +11,7 @@ assign out = (sel == 'b00) ? in1 :
|
|||||||
in4;
|
in4;
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
module processor ( input clock, input reset , output reg [19:0] external_address_bus, inout [15:0] external_data_bus,output reg read, output reg write, output reg HALT);
|
module processor ( input clock, input reset, output reg [19:0] external_address_bus, inout [15:0] external_data_bus,output reg read, output reg write, output reg HALT,output reg ERROR);
|
||||||
|
|
||||||
/*** Global Definitions ***/
|
/*** Global Definitions ***/
|
||||||
// State
|
// State
|
||||||
@ -35,7 +35,6 @@ always @(negedge reset) begin
|
|||||||
@(posedge clock);
|
@(posedge clock);
|
||||||
state=`PROC_HALT_STATE;
|
state=`PROC_HALT_STATE;
|
||||||
ProgCount=0;//TODO: Reset Vector
|
ProgCount=0;//TODO: Reset Vector
|
||||||
EXCEPTION=0;
|
|
||||||
HALT=0;
|
HALT=0;
|
||||||
reg_read=1;
|
reg_read=1;
|
||||||
reg_write=1;
|
reg_write=1;
|
||||||
@ -48,8 +47,6 @@ always @(negedge reset) begin
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
reg EXCEPTION;
|
|
||||||
|
|
||||||
/*** ALU and EXEC stage logic ***/
|
/*** ALU and EXEC stage logic ***/
|
||||||
|
|
||||||
//Architectural Register file
|
//Architectural Register file
|
||||||
@ -91,7 +88,7 @@ ADDER16 ADDER16_1(ADDER16_1A,ADDER16_1B,ALU_OUT,ADDER16_1O,ADDER16_1C);
|
|||||||
|
|
||||||
/*** Processor stages ***/
|
/*** Processor stages ***/
|
||||||
|
|
||||||
`define invalid_instruction state=`PROC_IF_STATE_ENTRY;EXCEPTION=1;
|
`define invalid_instruction state=`PROC_IF_STATE_ENTRY;ERROR=1;
|
||||||
|
|
||||||
always @(negedge clock) begin
|
always @(negedge clock) begin
|
||||||
case(state)
|
case(state)
|
||||||
@ -132,7 +129,7 @@ always @(posedge clock) begin
|
|||||||
`PROC_HALT_STATE:begin
|
`PROC_HALT_STATE:begin
|
||||||
end
|
end
|
||||||
`PROC_IF_STATE_ENTRY:begin
|
`PROC_IF_STATE_ENTRY:begin
|
||||||
EXCEPTION=0;
|
ERROR=0;
|
||||||
external_address_bus <= ProgCount;
|
external_address_bus <= ProgCount;
|
||||||
read <= 0;
|
read <= 0;
|
||||||
write <= 1;
|
write <= 1;
|
||||||
@ -268,7 +265,7 @@ always @(posedge clock) begin
|
|||||||
`PROC_EX_STATE_ENTRY:begin
|
`PROC_EX_STATE_ENTRY:begin
|
||||||
reg_data=ADDER16_1O;
|
reg_data=ADDER16_1O;
|
||||||
state=`PROC_EX_STATE_EXIT;
|
state=`PROC_EX_STATE_EXIT;
|
||||||
EXCEPTION=0;
|
ERROR=0;
|
||||||
end
|
end
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
|
@ -7,8 +7,9 @@ reg clk_enable;
|
|||||||
wire [19:0]address_bus;
|
wire [19:0]address_bus;
|
||||||
wire [15:0]data_bus;
|
wire [15:0]data_bus;
|
||||||
wire rd,wr,romcs,HALT;
|
wire rd,wr,romcs,HALT;
|
||||||
|
wire ERROR;
|
||||||
|
|
||||||
processor p(clock,reset,address_bus,data_bus,rd,wr,HALT);
|
processor p(clock,reset,address_bus,data_bus,rd,wr,HALT,ERROR);
|
||||||
rom bootrom(address_bus,data_bus,rd,romcs);
|
rom bootrom(address_bus,data_bus,rd,romcs);
|
||||||
|
|
||||||
`define CPU_SPEED 1000
|
`define CPU_SPEED 1000
|
||||||
@ -36,6 +37,13 @@ always @(posedge HALT) begin
|
|||||||
$finish;
|
$finish;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
always @(posedge ERROR) begin
|
||||||
|
$display("PROCESSOR RUN INTO AN ERROR.\nCycles run for: %d",cycles);
|
||||||
|
$writememh("memdump.txt", bootrom.memory);
|
||||||
|
#(`CPU_SPEED) //Just for the waveform
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
|
||||||
always @(posedge clock)begin
|
always @(posedge clock)begin
|
||||||
if(reset==1)
|
if(reset==1)
|
||||||
cycles=cycles+1;
|
cycles=cycles+1;
|
||||||
|
Loading…
Reference in New Issue
Block a user