Fixed simulation with icarus verilog and removed another driver conflict
This commit is contained in:
parent
4a5df9c74e
commit
9947517693
90
system/biu.v
90
system/biu.v
@ -101,14 +101,10 @@ always @(posedge clock) begin
|
||||
write <= 1;
|
||||
sane <= 0;
|
||||
biu_state <= `BIU_RESET1;
|
||||
/* verilator lint_off BLKSEQ */
|
||||
FIFO_start = `L1_CACHE_SIZE'b0;
|
||||
FIFO_end = `L1_CACHE_SIZE'b0;
|
||||
/* verilator lint_on BLKSEQ */
|
||||
FIFO_start <= `L1_CACHE_SIZE'b0;
|
||||
FIFO_end <= `L1_CACHE_SIZE'b0;
|
||||
end else if ( jump_req ) begin
|
||||
/* verilator lint_off BLKSEQ */
|
||||
FIFO_start = FIFO_end ;
|
||||
/* verilator lint_on BLKSEQ */
|
||||
FIFO_start <= FIFO_end ;
|
||||
INSTRUCTION_ADDRESS <= { 4'b0 , ADDRESS_INPUT };
|
||||
INSTRUCTION_LOCATION <= ADDRESS_INPUT;
|
||||
func <= 1;
|
||||
@ -125,9 +121,7 @@ always @(posedge clock) begin
|
||||
IOMEM <= MEM_OR_IO;
|
||||
biu_state <= (Wbit==0) ? `BIU_PUT_BYTE : (ADDRESS_INPUT[0:0]?`BIU_PUT_UNALIGNED_16BIT_DATA:`BIU_PUT_ALIGNED_16BIT_DATA) ;
|
||||
INSTRUCTION_ADDRESS <= {4'b0,INSTRUCTION_LOCATION} ;
|
||||
/* verilator lint_off BLKSEQ */
|
||||
FIFO_end=FIFO_start;
|
||||
/* verilator lint_on BLKSEQ */
|
||||
FIFO_end<=FIFO_start;
|
||||
end else if ( read_request ) begin
|
||||
func<=0;
|
||||
DATA_ADDRESS <= { 4'b0 , ADDRESS_INPUT };
|
||||
@ -155,23 +149,17 @@ always @(posedge clock) begin
|
||||
/*************** INSTRUCTION FIFO READ ***************/
|
||||
`BIU_READ: begin
|
||||
if(INSTRUCTION_ADDRESS[0:0]==0 && FIFO_SIZE<{{(`L1_CACHE_SIZE-1){1'b1}},1'b0})begin
|
||||
/* verilator lint_off BLKSEQ */
|
||||
INPUT_FIFO[FIFO_end] = external_data_bus_read[7:0];
|
||||
INPUT_FIFO[FIFO_end+`L1_CACHE_SIZE'd1] = external_data_bus_read[15:8];
|
||||
FIFO_end = FIFO_end+`L1_CACHE_SIZE'd2;
|
||||
/* verilator lint_on BLKSEQ */
|
||||
INPUT_FIFO[FIFO_end] <= external_data_bus_read[7:0];
|
||||
INPUT_FIFO[FIFO_end+`L1_CACHE_SIZE'd1] <= external_data_bus_read[15:8];
|
||||
FIFO_end <= FIFO_end+`L1_CACHE_SIZE'd2;
|
||||
INSTRUCTION_ADDRESS <= INSTRUCTION_ADDRESS+20'd2;
|
||||
end else if(INSTRUCTION_ADDRESS[0:0]==0)begin
|
||||
/* verilator lint_off BLKSEQ */
|
||||
INPUT_FIFO[FIFO_end] = external_data_bus_read[7:0];
|
||||
FIFO_end = FIFO_end+`L1_CACHE_SIZE'd1;
|
||||
/* verilator lint_on BLKSEQ */
|
||||
INPUT_FIFO[FIFO_end] <= external_data_bus_read[7:0];
|
||||
FIFO_end <= FIFO_end+`L1_CACHE_SIZE'd1;
|
||||
INSTRUCTION_ADDRESS <= INSTRUCTION_ADDRESS+20'd1;
|
||||
end else begin
|
||||
/* verilator lint_off BLKSEQ */
|
||||
INPUT_FIFO[FIFO_end] = external_data_bus_read[15:8];
|
||||
FIFO_end = FIFO_end+`L1_CACHE_SIZE'd1;
|
||||
/* verilator lint_on BLKSEQ */
|
||||
INPUT_FIFO[FIFO_end] <= external_data_bus_read[15:8];
|
||||
FIFO_end <= FIFO_end+`L1_CACHE_SIZE'd1;
|
||||
INSTRUCTION_ADDRESS <= INSTRUCTION_ADDRESS+20'd1;
|
||||
end
|
||||
biu_state <= `BIU_NEXT_ACTION;
|
||||
@ -279,8 +267,8 @@ always @(posedge clock) begin
|
||||
end
|
||||
`BIU_RESET2: begin
|
||||
/* verilator lint_off BLKSEQ */
|
||||
FIFO_start = `L1_CACHE_SIZE'b0;
|
||||
FIFO_end = `L1_CACHE_SIZE'b0;
|
||||
FIFO_start <= `L1_CACHE_SIZE'b0;
|
||||
FIFO_end <= `L1_CACHE_SIZE'b0;
|
||||
/* verilator lint_on BLKSEQ */
|
||||
biu_state <= `BIU_NEXT_ACTION;
|
||||
INSTRUCTION_ADDRESS <= 20'h0FFF0;
|
||||
@ -293,34 +281,9 @@ always @(posedge clock) begin
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
wire [2:0] Isize;
|
||||
InstrSize InstrSize({INSTRUCTION[31:24],INSTRUCTION[21:19]},Isize);
|
||||
/**** UPDATE VALID_INSTRUCTION ****/
|
||||
|
||||
`ifdef INCLUDE_EARLY_CALC_CIRUIT
|
||||
wire [2:0] fifoIsize;
|
||||
wire Isit1;
|
||||
InstrSize fifoInstrSize({INPUT_FIFO[FIFO_start][7:0],INPUT_FIFO[FIFO_start+`L1_CACHE_SIZE'd1][5:3]},fifoIsize);
|
||||
Is1 Is1(INPUT_FIFO[FIFO_start][7:0],Isit1);
|
||||
`endif
|
||||
|
||||
`ifdef DOUBLE_INSTRUCTION_LOAD
|
||||
wire [2:0] fifoIsize2;
|
||||
InstrSize fifoInstrSize2(
|
||||
{ INPUT_FIFO[FIFO_start+{{`L1_CACHE_SIZE-3{1'b0}},fifoIsize}][7:0], INPUT_FIFO[FIFO_start+{{`L1_CACHE_SIZE-3{1'b0}},fifoIsize}+`L1_CACHE_SIZE'd1][5:3]}
|
||||
,fifoIsize2
|
||||
);
|
||||
`endif
|
||||
|
||||
always @( valid_instruction_ack ) begin
|
||||
/* verilator lint_off BLKSEQ */
|
||||
FIFO_start = FIFO_start + {{`L1_CACHE_SIZE-3{1'b0}},Isize};
|
||||
/* verilator lint_on BLKSEQ */
|
||||
INSTRUCTION_LOCATION <= INSTRUCTION_LOCATION + {13'd0,Isize};
|
||||
end
|
||||
|
||||
always @( FIFO_start or FIFO_end ) begin
|
||||
if(jump_req==1)begin
|
||||
VALID_INSTRUCTION <= 0;
|
||||
end else if(sane==1) begin
|
||||
@ -396,4 +359,29 @@ always @( FIFO_start or FIFO_end ) begin
|
||||
end
|
||||
end
|
||||
|
||||
wire [2:0] Isize;
|
||||
InstrSize InstrSize({INSTRUCTION[31:24],INSTRUCTION[21:19]},Isize);
|
||||
|
||||
`ifdef INCLUDE_EARLY_CALC_CIRUIT
|
||||
wire [2:0] fifoIsize;
|
||||
wire Isit1;
|
||||
InstrSize fifoInstrSize({INPUT_FIFO[FIFO_start][7:0],INPUT_FIFO[FIFO_start+`L1_CACHE_SIZE'd1][5:3]},fifoIsize);
|
||||
Is1 Is1(INPUT_FIFO[FIFO_start][7:0],Isit1);
|
||||
`endif
|
||||
|
||||
`ifdef DOUBLE_INSTRUCTION_LOAD
|
||||
wire [2:0] fifoIsize2;
|
||||
InstrSize fifoInstrSize2(
|
||||
{ INPUT_FIFO[FIFO_start+{{`L1_CACHE_SIZE-3{1'b0}},fifoIsize}][7:0], INPUT_FIFO[FIFO_start+{{`L1_CACHE_SIZE-3{1'b0}},fifoIsize}+`L1_CACHE_SIZE'd1][5:3]}
|
||||
,fifoIsize2
|
||||
);
|
||||
`endif
|
||||
|
||||
always @( valid_instruction_ack ) begin
|
||||
/* verilator lint_off BLKSEQ */
|
||||
FIFO_start <= FIFO_start + {{`L1_CACHE_SIZE-3{1'b0}},Isize};
|
||||
/* verilator lint_on BLKSEQ */
|
||||
INSTRUCTION_LOCATION <= INSTRUCTION_LOCATION + {13'd0,Isize};
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
Loading…
Reference in New Issue
Block a user