checkpoint: Added icache struct
This commit is contained in:
BIN
rtl/._VX_fetch.v
Normal file
BIN
rtl/._VX_fetch.v
Normal file
Binary file not shown.
BIN
rtl/._VX_front_end.v
Normal file
BIN
rtl/._VX_front_end.v
Normal file
Binary file not shown.
BIN
rtl/._VX_generic_register.v
Normal file
BIN
rtl/._VX_generic_register.v
Normal file
Binary file not shown.
BIN
rtl/._buses.vh
Normal file
BIN
rtl/._buses.vh
Normal file
Binary file not shown.
@@ -1,25 +1,42 @@
|
|||||||
|
`include "buses.vh"
|
||||||
|
|
||||||
`include "VX_define.v"
|
`include "VX_define.v"
|
||||||
|
|
||||||
module VX_f_d_reg (
|
module VX_f_d_reg (
|
||||||
input wire clk,
|
input wire clk,
|
||||||
input wire reset,
|
input wire reset,
|
||||||
input wire[31:0] in_instruction,
|
|
||||||
input wire in_valid[`NT_M1:0],
|
input wire in_valid[`NT_M1:0],
|
||||||
input wire[31:0] in_curr_PC,
|
|
||||||
input wire in_fwd_stall,
|
input wire in_fwd_stall,
|
||||||
input wire in_freeze,
|
input wire in_freeze,
|
||||||
input wire in_clone_stall,
|
input wire in_clone_stall,
|
||||||
input wire[`NW_M1:0] in_warp_num,
|
|
||||||
|
|
||||||
output wire[31:0] out_instruction,
|
output wire[31:0] out_instruction,
|
||||||
output wire[31:0] out_curr_PC,
|
output wire[31:0] out_curr_PC,
|
||||||
output wire out_valid[`NT_M1:0],
|
output wire out_valid[`NT_M1:0],
|
||||||
output wire[`NW_M1:0] out_warp_num
|
output wire[`NW_M1:0] out_warp_num,
|
||||||
|
/* verilator lint_off UNUSED */
|
||||||
|
input wire[31:0] in_instruction,
|
||||||
|
input wire[31:0] in_curr_PC,
|
||||||
|
input wire[`NW_M1:0] in_warp_num,
|
||||||
|
input fe_inst_meta_de_t fe_inst_meta_fd
|
||||||
|
/* verilator lint_on UNUSED */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// genvar index;
|
||||||
// always @(posedge clk) begin
|
// always @(posedge clk) begin
|
||||||
// $display("Fetch Inst: %d\tDecode Inst: %d", in_instruction, out_instruction);
|
// // $display("in_instruction: %x\tfe_inst_meta_fd.instruction: %x",in_instruction, fe_inst_meta_fd.instruction);
|
||||||
|
// $error("finally");
|
||||||
|
// assert (in_instruction == fe_inst_meta_fd.instruction);
|
||||||
|
// assert (in_curr_PC == fe_inst_meta_fd.inst_pc);
|
||||||
|
// assert (in_warp_num == fe_inst_meta_fd.warp_num);
|
||||||
|
// for (index = 0; index <= `NT_M1; index = index + 1) assert (in_valid[index] == fe_inst_meta_fd.valid[index]);
|
||||||
|
// end
|
||||||
|
|
||||||
|
// var match;
|
||||||
|
// always @(*) begin
|
||||||
|
// match = ;
|
||||||
|
// if (!match)
|
||||||
|
// $display("in_instruction: %x, fe_inst_meta_fd.instruction: %x",in_instruction ,fe_inst_meta_fd.instruction);
|
||||||
// end
|
// end
|
||||||
|
|
||||||
reg[31:0] instruction;
|
reg[31:0] instruction;
|
||||||
@@ -29,9 +46,6 @@ module VX_f_d_reg (
|
|||||||
|
|
||||||
integer reset_cur_thread = 0;
|
integer reset_cur_thread = 0;
|
||||||
|
|
||||||
// always @(in_instruction) begin
|
|
||||||
// $display("in_instruction: %h",in_instruction);
|
|
||||||
// end
|
|
||||||
|
|
||||||
always @(posedge clk or posedge reset) begin
|
always @(posedge clk or posedge reset) begin
|
||||||
if(reset) begin
|
if(reset) begin
|
||||||
@@ -50,6 +64,11 @@ module VX_f_d_reg (
|
|||||||
valid <= in_valid;
|
valid <= in_valid;
|
||||||
curr_PC <= in_curr_PC;
|
curr_PC <= in_curr_PC;
|
||||||
warp_num <= in_warp_num;
|
warp_num <= in_warp_num;
|
||||||
|
|
||||||
|
// instruction <= fe_inst_meta_fd.instruction;
|
||||||
|
// valid <= fe_inst_meta_fd.valid;
|
||||||
|
// curr_PC <= fe_inst_meta_fd.inst_pc;
|
||||||
|
// warp_num <= fe_inst_meta_fd.warp_num;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ module VX_fetch (
|
|||||||
input wire[31:0] in_jal_dest,
|
input wire[31:0] in_jal_dest,
|
||||||
input wire in_interrupt,
|
input wire in_interrupt,
|
||||||
input wire in_debug,
|
input wire in_debug,
|
||||||
input wire[31:0] in_instruction,
|
|
||||||
input wire in_thread_mask[`NT_M1:0],
|
input wire in_thread_mask[`NT_M1:0],
|
||||||
input wire in_change_mask,
|
input wire in_change_mask,
|
||||||
input wire[`NW_M1:0] in_decode_warp_num,
|
input wire[`NW_M1:0] in_decode_warp_num,
|
||||||
@@ -23,14 +22,17 @@ module VX_fetch (
|
|||||||
input wire in_wspawn,
|
input wire in_wspawn,
|
||||||
input wire[31:0] in_wspawn_pc,
|
input wire[31:0] in_wspawn_pc,
|
||||||
input wire in_ebreak,
|
input wire in_ebreak,
|
||||||
|
input icache_response_t icache_response,
|
||||||
|
|
||||||
|
output icache_request_t icache_request,
|
||||||
output wire[31:0] out_instruction,
|
output wire[31:0] out_instruction,
|
||||||
output wire out_delay,
|
output wire out_delay,
|
||||||
output wire[`NW_M1:0] out_warp_num,
|
output wire[`NW_M1:0] out_warp_num,
|
||||||
output wire[31:0] out_curr_PC,
|
output wire[31:0] out_curr_PC,
|
||||||
output wire out_valid[`NT_M1:0],
|
output wire out_valid[`NT_M1:0],
|
||||||
output wire out_ebreak,
|
output wire out_ebreak,
|
||||||
output wire[`NW_M1:0] out_which_wspawn
|
output wire[`NW_M1:0] out_which_wspawn,
|
||||||
|
output fe_inst_meta_de_t fe_inst_meta_fd
|
||||||
);
|
);
|
||||||
|
|
||||||
reg stall;
|
reg stall;
|
||||||
@@ -95,34 +97,34 @@ module VX_fetch (
|
|||||||
|
|
||||||
`ifdef ONLY
|
`ifdef ONLY
|
||||||
|
|
||||||
wire warp_zero_change_mask = in_change_mask && (in_decode_warp_num == 0);
|
// wire warp_zero_change_mask = in_change_mask && (in_decode_warp_num == 0);
|
||||||
wire warp_zero_jal = in_jal && (in_memory_warp_num == 0);
|
// wire warp_zero_jal = in_jal && (in_memory_warp_num == 0);
|
||||||
wire warp_zero_branch = in_branch_dir && (in_memory_warp_num == 0);
|
// wire warp_zero_branch = in_branch_dir && (in_memory_warp_num == 0);
|
||||||
wire warp_zero_stall = stall || (warp_num != 0);
|
// wire warp_zero_stall = stall || (warp_num != 0);
|
||||||
wire warp_zero_wspawn = (0 == 0) ? 0 : (in_wspawn && ((warp_state+1) == 0));
|
// wire warp_zero_wspawn = (0 == 0) ? 0 : (in_wspawn && ((warp_state+1) == 0));
|
||||||
wire[31:0] warp_zero_wspawn_pc = in_wspawn_pc;
|
// wire[31:0] warp_zero_wspawn_pc = in_wspawn_pc;
|
||||||
wire warp_zero_remove = remove_warp && (in_decode_warp_num == 0);
|
// wire warp_zero_remove = remove_warp && (in_decode_warp_num == 0);
|
||||||
|
|
||||||
// always @(*) begin : proc_
|
// // always @(*) begin : proc_
|
||||||
// if (warp_zero_remove) $display("4Removing warp: %h", 0);
|
// // if (warp_zero_remove) $display("4Removing warp: %h", 0);
|
||||||
// end
|
// // end
|
||||||
|
|
||||||
VX_warp VX_Warp(
|
// VX_warp VX_Warp(
|
||||||
.clk (clk),
|
// .clk (clk),
|
||||||
.reset (reset),
|
// .reset (reset),
|
||||||
.stall (warp_zero_stall),
|
// .stall (warp_zero_stall),
|
||||||
.remove (warp_zero_remove),
|
// .remove (warp_zero_remove),
|
||||||
.in_thread_mask(in_thread_mask),
|
// .in_thread_mask(in_thread_mask),
|
||||||
.in_change_mask(warp_zero_change_mask),
|
// .in_change_mask(warp_zero_change_mask),
|
||||||
.in_jal (warp_zero_jal),
|
// .in_jal (warp_zero_jal),
|
||||||
.in_jal_dest (in_jal_dest),
|
// .in_jal_dest (in_jal_dest),
|
||||||
.in_branch_dir (warp_zero_branch),
|
// .in_branch_dir (warp_zero_branch),
|
||||||
.in_branch_dest(in_branch_dest),
|
// .in_branch_dest(in_branch_dest),
|
||||||
.in_wspawn (warp_zero_wspawn),
|
// .in_wspawn (warp_zero_wspawn),
|
||||||
.in_wspawn_pc (warp_zero_wspawn_pc),
|
// .in_wspawn_pc (warp_zero_wspawn_pc),
|
||||||
.out_PC (out_PC),
|
// .out_PC (out_PC),
|
||||||
.out_valid (out_valid)
|
// .out_valid (out_valid)
|
||||||
);
|
// );
|
||||||
|
|
||||||
`else
|
`else
|
||||||
|
|
||||||
@@ -193,13 +195,21 @@ module VX_fetch (
|
|||||||
`endif
|
`endif
|
||||||
|
|
||||||
|
|
||||||
|
assign icache_request.pc_address = out_PC;
|
||||||
|
|
||||||
assign out_curr_PC = out_PC;
|
assign out_curr_PC = out_PC;
|
||||||
assign out_warp_num = warp_num;
|
assign out_warp_num = warp_num;
|
||||||
assign out_delay = 0;
|
assign out_delay = 0;
|
||||||
|
|
||||||
assign out_instruction = stall ? 32'b0 : in_instruction;
|
assign out_instruction = (stall) ? 32'b0 : icache_response.instruction;
|
||||||
|
|
||||||
|
assign fe_inst_meta_fd.warp_num = warp_num;
|
||||||
|
|
||||||
|
genvar index;
|
||||||
|
for (index = 0; index <= `NT_M1; index = index + 1) assign fe_inst_meta_fd.valid[index] = out_valid_var[index];
|
||||||
|
|
||||||
|
assign fe_inst_meta_fd.instruction = (stall) ? 32'b0 : icache_response.instruction;;
|
||||||
|
assign fe_inst_meta_fd.inst_pc = out_PC;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
206
rtl/VX_fetch_old.v
Normal file
206
rtl/VX_fetch_old.v
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
|
||||||
|
`include "VX_define.v"
|
||||||
|
|
||||||
|
module VX_fetch (
|
||||||
|
input wire clk,
|
||||||
|
input wire reset,
|
||||||
|
input wire in_branch_dir,
|
||||||
|
input wire in_freeze,
|
||||||
|
input wire[31:0] in_branch_dest,
|
||||||
|
input wire in_branch_stall,
|
||||||
|
input wire in_fwd_stall,
|
||||||
|
input wire in_branch_stall_exe,
|
||||||
|
input wire in_clone_stall,
|
||||||
|
input wire in_jal,
|
||||||
|
input wire[31:0] in_jal_dest,
|
||||||
|
input wire in_interrupt,
|
||||||
|
input wire in_debug,
|
||||||
|
input wire[31:0] in_instruction,
|
||||||
|
input wire in_thread_mask[`NT_M1:0],
|
||||||
|
input wire in_change_mask,
|
||||||
|
input wire[`NW_M1:0] in_decode_warp_num,
|
||||||
|
input wire[`NW_M1:0] in_memory_warp_num,
|
||||||
|
input wire in_wspawn,
|
||||||
|
input wire[31:0] in_wspawn_pc,
|
||||||
|
input wire in_ebreak,
|
||||||
|
|
||||||
|
output wire[31:0] out_instruction,
|
||||||
|
output wire out_delay,
|
||||||
|
output wire[`NW_M1:0] out_warp_num,
|
||||||
|
output wire[31:0] out_curr_PC,
|
||||||
|
output wire out_valid[`NT_M1:0],
|
||||||
|
output wire out_ebreak,
|
||||||
|
output wire[`NW_M1:0] out_which_wspawn
|
||||||
|
);
|
||||||
|
|
||||||
|
reg stall;
|
||||||
|
reg[31:0] out_PC;
|
||||||
|
|
||||||
|
reg[`NW_M1:0] warp_num;
|
||||||
|
reg[`NW_M1:0] warp_state;
|
||||||
|
reg[`NW_M1:0] warp_count;
|
||||||
|
|
||||||
|
// reg[31:0] num_ecalls;
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
warp_num = 0;
|
||||||
|
warp_state = 0;
|
||||||
|
// num_ecalls = 0;
|
||||||
|
warp_count = 1;
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
// always @(posedge clk) begin
|
||||||
|
// if (in_ebreak) begin
|
||||||
|
// num_ecalls <= num_ecalls + 1;
|
||||||
|
// $display("--------> New num_ecalls = %h", num_ecalls+1);
|
||||||
|
// end
|
||||||
|
// end
|
||||||
|
|
||||||
|
wire add_warp = in_wspawn && !in_ebreak && !in_clone_stall;
|
||||||
|
wire remove_warp = in_ebreak && !in_wspawn && !in_clone_stall;
|
||||||
|
|
||||||
|
always @(posedge clk or posedge reset) begin
|
||||||
|
if (reset || (warp_num >= warp_state) || remove_warp || add_warp) begin
|
||||||
|
warp_num <= 0;
|
||||||
|
`ifndef ONLY
|
||||||
|
end else if (!warp_glob_valid[warp_num+1]) begin
|
||||||
|
// $display("Skipping one");
|
||||||
|
warp_num <= warp_num + 2;
|
||||||
|
`endif
|
||||||
|
end else begin
|
||||||
|
warp_num <= warp_num + 1;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (add_warp) begin
|
||||||
|
warp_state <= warp_state + 1;
|
||||||
|
warp_count <= warp_count + 1;
|
||||||
|
// $display("Adding a new warp %h", warp_state+1);
|
||||||
|
end else if (remove_warp) begin // No removing, just invalidating
|
||||||
|
warp_count <= warp_count - 1;
|
||||||
|
// $display("Removing a warp %h %h", in_decode_warp_num, warp_count);
|
||||||
|
if (warp_count == 2) begin
|
||||||
|
// $display("&&&&&&&&&&&&& STATE 0");
|
||||||
|
warp_state <= 0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assign out_ebreak = (in_decode_warp_num == 0) && in_ebreak;
|
||||||
|
|
||||||
|
|
||||||
|
assign stall = in_clone_stall || in_branch_stall || in_fwd_stall || in_branch_stall_exe || in_interrupt || in_freeze || in_debug;
|
||||||
|
|
||||||
|
assign out_which_wspawn = (warp_state+1);
|
||||||
|
|
||||||
|
`ifdef ONLY
|
||||||
|
|
||||||
|
wire warp_zero_change_mask = in_change_mask && (in_decode_warp_num == 0);
|
||||||
|
wire warp_zero_jal = in_jal && (in_memory_warp_num == 0);
|
||||||
|
wire warp_zero_branch = in_branch_dir && (in_memory_warp_num == 0);
|
||||||
|
wire warp_zero_stall = stall || (warp_num != 0);
|
||||||
|
wire warp_zero_wspawn = (0 == 0) ? 0 : (in_wspawn && ((warp_state+1) == 0));
|
||||||
|
wire[31:0] warp_zero_wspawn_pc = in_wspawn_pc;
|
||||||
|
wire warp_zero_remove = remove_warp && (in_decode_warp_num == 0);
|
||||||
|
|
||||||
|
// always @(*) begin : proc_
|
||||||
|
// if (warp_zero_remove) $display("4Removing warp: %h", 0);
|
||||||
|
// end
|
||||||
|
|
||||||
|
VX_warp VX_Warp(
|
||||||
|
.clk (clk),
|
||||||
|
.reset (reset),
|
||||||
|
.stall (warp_zero_stall),
|
||||||
|
.remove (warp_zero_remove),
|
||||||
|
.in_thread_mask(in_thread_mask),
|
||||||
|
.in_change_mask(warp_zero_change_mask),
|
||||||
|
.in_jal (warp_zero_jal),
|
||||||
|
.in_jal_dest (in_jal_dest),
|
||||||
|
.in_branch_dir (warp_zero_branch),
|
||||||
|
.in_branch_dest(in_branch_dest),
|
||||||
|
.in_wspawn (warp_zero_wspawn),
|
||||||
|
.in_wspawn_pc (warp_zero_wspawn_pc),
|
||||||
|
.out_PC (out_PC),
|
||||||
|
.out_valid (out_valid)
|
||||||
|
);
|
||||||
|
|
||||||
|
`else
|
||||||
|
|
||||||
|
wire[31:0] warp_glob_pc[`NW-1:0];
|
||||||
|
wire warp_glob_valid[`NW-1:0][`NT_M1:0];
|
||||||
|
genvar cur_warp;
|
||||||
|
generate
|
||||||
|
for (cur_warp = 0; cur_warp < `NW; cur_warp = cur_warp + 1)
|
||||||
|
begin
|
||||||
|
wire warp_zero_change_mask = in_change_mask && (in_decode_warp_num == cur_warp);
|
||||||
|
wire warp_zero_jal = in_jal && (in_memory_warp_num == cur_warp);
|
||||||
|
wire warp_zero_branch = in_branch_dir && (in_memory_warp_num == cur_warp);
|
||||||
|
wire warp_zero_stall = stall || (warp_num != cur_warp);
|
||||||
|
wire warp_zero_wspawn = (cur_warp == 0) ? 0 : (in_wspawn && ((warp_state+1) == cur_warp));
|
||||||
|
wire[31:0] warp_zero_wspawn_pc = in_wspawn_pc;
|
||||||
|
wire warp_zero_remove = remove_warp && (in_decode_warp_num == cur_warp);
|
||||||
|
|
||||||
|
// always @(*) begin : proc_
|
||||||
|
// if (warp_zero_remove) $display("4Removing warp: %h", cur_warp);
|
||||||
|
// end
|
||||||
|
|
||||||
|
VX_warp VX_Warp(
|
||||||
|
.clk (clk),
|
||||||
|
.reset (reset),
|
||||||
|
.stall (warp_zero_stall),
|
||||||
|
.remove (warp_zero_remove),
|
||||||
|
.in_thread_mask(in_thread_mask),
|
||||||
|
.in_change_mask(warp_zero_change_mask),
|
||||||
|
.in_jal (warp_zero_jal),
|
||||||
|
.in_jal_dest (in_jal_dest),
|
||||||
|
.in_branch_dir (warp_zero_branch),
|
||||||
|
.in_branch_dest(in_branch_dest),
|
||||||
|
.in_wspawn (warp_zero_wspawn),
|
||||||
|
.in_wspawn_pc (warp_zero_wspawn_pc),
|
||||||
|
.out_PC (warp_glob_pc[cur_warp]),
|
||||||
|
.out_valid (warp_glob_valid[cur_warp])
|
||||||
|
);
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
|
||||||
|
|
||||||
|
reg[31:0] out_PC_var;
|
||||||
|
reg out_valid_var[`NT_M1:0];
|
||||||
|
|
||||||
|
always @(*) begin : help
|
||||||
|
integer g;
|
||||||
|
integer h;
|
||||||
|
for (g = 0; g < `NW; g = g + 1)
|
||||||
|
begin
|
||||||
|
if (warp_num == g[`NW_M1:0])
|
||||||
|
begin
|
||||||
|
out_PC_var = warp_glob_pc[g][31:0];
|
||||||
|
for (h = 0; h < `NT; h = h + 1) out_valid_var[h] = warp_glob_valid[g][h];
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assign out_PC = out_PC_var;
|
||||||
|
assign out_valid = out_valid_var;
|
||||||
|
|
||||||
|
// always @(*) begin
|
||||||
|
// if (out_valid[0]) begin
|
||||||
|
// $display("[%d] %h #%b#",out_warp_num, out_PC, out_valid);
|
||||||
|
// end
|
||||||
|
// end
|
||||||
|
|
||||||
|
`endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
assign out_curr_PC = out_PC;
|
||||||
|
assign out_warp_num = warp_num;
|
||||||
|
assign out_delay = 0;
|
||||||
|
|
||||||
|
assign out_instruction = stall ? 32'b0 : in_instruction;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
endmodule
|
||||||
16
rtl/VX_front_end.v
Normal file
16
rtl/VX_front_end.v
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
module VX_front_end (
|
||||||
|
input clk, // Clock
|
||||||
|
input reset,
|
||||||
|
input icache_response_t icache_response,
|
||||||
|
|
||||||
|
|
||||||
|
output icache_request_t icache_request,
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
endmodule
|
||||||
31
rtl/VX_generic_register.v
Normal file
31
rtl/VX_generic_register.v
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
|
||||||
|
module VX_generic_register
|
||||||
|
#(
|
||||||
|
parameter N = 1
|
||||||
|
)
|
||||||
|
(
|
||||||
|
input clk,
|
||||||
|
input reset,
|
||||||
|
input stall,
|
||||||
|
input flush,
|
||||||
|
input[N-1:0] in,
|
||||||
|
output [N-1:0] out
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
reg[N-1:0] value;
|
||||||
|
|
||||||
|
|
||||||
|
always @(posedge clk or posedge reset) begin
|
||||||
|
if (reset || flush) begin
|
||||||
|
value <= 0;
|
||||||
|
end else if (~stall) begin
|
||||||
|
value <= in;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
assign out = value;
|
||||||
|
|
||||||
|
endmodule
|
||||||
29
rtl/Vortex.v
29
rtl/Vortex.v
@@ -1,14 +1,16 @@
|
|||||||
|
|
||||||
`include "VX_define.v"
|
`include "VX_define.v"
|
||||||
|
`include "buses.vh"
|
||||||
|
|
||||||
module Vortex(
|
module Vortex(
|
||||||
input wire clk,
|
input wire clk,
|
||||||
input wire reset,
|
input wire reset,
|
||||||
input wire[31:0] fe_instruction,
|
input wire[31:0] icache_response_instruction,
|
||||||
// input wire[31:0] in_cache_driver_out_data_0,
|
output wire[31:0] icache_request_pc_address,
|
||||||
// input wire[31:0] in_cache_driver_out_data_1,
|
// input wire[31:0] icache_instruction,
|
||||||
|
// output wire icache_request_valid,
|
||||||
|
// output wire[31:0] icache_PC,
|
||||||
input wire[31:0] in_cache_driver_out_data[`NT_M1:0],
|
input wire[31:0] in_cache_driver_out_data[`NT_M1:0],
|
||||||
output wire[31:0] curr_PC,
|
|
||||||
output wire[31:0] out_cache_driver_in_address[`NT_M1:0],
|
output wire[31:0] out_cache_driver_in_address[`NT_M1:0],
|
||||||
output wire[2:0] out_cache_driver_in_mem_read,
|
output wire[2:0] out_cache_driver_in_mem_read,
|
||||||
output wire[2:0] out_cache_driver_in_mem_write,
|
output wire[2:0] out_cache_driver_in_mem_write,
|
||||||
@@ -23,8 +25,6 @@ module Vortex(
|
|||||||
// assign in_cache_driver_out_data[1] = in_cache_driver_out_data_1;
|
// assign in_cache_driver_out_data[1] = in_cache_driver_out_data_1;
|
||||||
|
|
||||||
|
|
||||||
assign curr_PC = fetch_curr_PC;
|
|
||||||
|
|
||||||
// From fetch
|
// From fetch
|
||||||
wire[31:0] fetch_instruction;
|
wire[31:0] fetch_instruction;
|
||||||
wire fetch_delay;
|
wire fetch_delay;
|
||||||
@@ -201,6 +201,14 @@ assign interrupt = 1'b0;
|
|||||||
assign total_freeze = fetch_delay || memory_delay;
|
assign total_freeze = fetch_delay || memory_delay;
|
||||||
assign out_ebreak = fetch_ebreak;
|
assign out_ebreak = fetch_ebreak;
|
||||||
|
|
||||||
|
|
||||||
|
icache_response_t icache_response_fe;
|
||||||
|
icache_request_t icache_request_fe;
|
||||||
|
fe_inst_meta_de_t fe_inst_meta_fd;
|
||||||
|
|
||||||
|
assign icache_response_fe.instruction = icache_response_instruction;
|
||||||
|
assign icache_request_pc_address = icache_request_fe.pc_address;
|
||||||
|
|
||||||
VX_fetch vx_fetch(
|
VX_fetch vx_fetch(
|
||||||
.clk (clk),
|
.clk (clk),
|
||||||
.reset (reset),
|
.reset (reset),
|
||||||
@@ -215,7 +223,6 @@ VX_fetch vx_fetch(
|
|||||||
.in_jal_dest (e_m_jal_dest),
|
.in_jal_dest (e_m_jal_dest),
|
||||||
.in_interrupt (interrupt),
|
.in_interrupt (interrupt),
|
||||||
.in_debug (debug),
|
.in_debug (debug),
|
||||||
.in_instruction (fe_instruction),
|
|
||||||
.in_thread_mask (decode_thread_mask),
|
.in_thread_mask (decode_thread_mask),
|
||||||
.in_change_mask (decode_change_mask),
|
.in_change_mask (decode_change_mask),
|
||||||
.in_decode_warp_num (decode_warp_num),
|
.in_decode_warp_num (decode_warp_num),
|
||||||
@@ -223,14 +230,17 @@ VX_fetch vx_fetch(
|
|||||||
.in_wspawn (decode_wspawn),
|
.in_wspawn (decode_wspawn),
|
||||||
.in_wspawn_pc (decode_wspawn_pc),
|
.in_wspawn_pc (decode_wspawn_pc),
|
||||||
.in_ebreak (decode_ebreak),
|
.in_ebreak (decode_ebreak),
|
||||||
|
.icache_response (icache_response_fe),
|
||||||
|
|
||||||
|
.icache_request (icache_request_fe),
|
||||||
.out_instruction (fetch_instruction),
|
.out_instruction (fetch_instruction),
|
||||||
.out_delay (fetch_delay),
|
.out_delay (fetch_delay),
|
||||||
.out_curr_PC (fetch_curr_PC),
|
.out_curr_PC (fetch_curr_PC),
|
||||||
.out_warp_num (fetch_warp_num),
|
.out_warp_num (fetch_warp_num),
|
||||||
.out_valid (fetch_valid),
|
.out_valid (fetch_valid),
|
||||||
.out_ebreak (fetch_ebreak),
|
.out_ebreak (fetch_ebreak),
|
||||||
.out_which_wspawn (fetch_which_warp)
|
.out_which_wspawn (fetch_which_warp),
|
||||||
|
.fe_inst_meta_fd (fe_inst_meta_fd)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -247,7 +257,8 @@ VX_f_d_reg vx_f_d_reg(
|
|||||||
.out_instruction(f_d_instruction),
|
.out_instruction(f_d_instruction),
|
||||||
.out_curr_PC (f_d_curr_PC),
|
.out_curr_PC (f_d_curr_PC),
|
||||||
.out_valid (f_d_valid),
|
.out_valid (f_d_valid),
|
||||||
.out_warp_num (f_d_warp_num)
|
.out_warp_num (f_d_warp_num),
|
||||||
|
.fe_inst_meta_fd(fe_inst_meta_fd)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
63
rtl/buses.vh
Normal file
63
rtl/buses.vh
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
|
||||||
|
`include "VX_define.v"
|
||||||
|
|
||||||
|
`ifndef BUSES
|
||||||
|
|
||||||
|
`define BUSES
|
||||||
|
|
||||||
|
typedef struct packed
|
||||||
|
{
|
||||||
|
// logic valid;
|
||||||
|
logic[31:0] pc_address;
|
||||||
|
} icache_request_t;
|
||||||
|
|
||||||
|
typedef struct packed
|
||||||
|
{
|
||||||
|
// logic ready;
|
||||||
|
// logic stall;
|
||||||
|
logic[31:0] instruction;
|
||||||
|
} icache_response_t;
|
||||||
|
|
||||||
|
typedef struct packed
|
||||||
|
{
|
||||||
|
logic[31:0] instruction;
|
||||||
|
logic[31:0] inst_pc;
|
||||||
|
logic[`NW_M1:0] warp_num;
|
||||||
|
logic[`NT_M1:0] valid;
|
||||||
|
|
||||||
|
} fe_inst_meta_de_t;
|
||||||
|
|
||||||
|
|
||||||
|
`endif
|
||||||
|
|
||||||
|
|
||||||
|
// wire flush = 1'b0;
|
||||||
|
// wire stall = in_fwd_stall == 1'b1 || in_freeze == 1'b1 || in_clone_stall;
|
||||||
|
|
||||||
|
|
||||||
|
// fe_inst_meta_de_t meta_out;
|
||||||
|
|
||||||
|
// VX_generic_register #(.N(72)) f_d_reg
|
||||||
|
// (
|
||||||
|
// .clk (clk),
|
||||||
|
// .reset(reset),
|
||||||
|
// .stall(stall),
|
||||||
|
// .flush(flush),
|
||||||
|
// .in ({fe_inst_meta_de}),
|
||||||
|
// .out ({meta_out})
|
||||||
|
// );
|
||||||
|
|
||||||
|
// genvar index;
|
||||||
|
// generate
|
||||||
|
// for (index = 0; index <= `NT_M1; index = index + 1) assign out_valid[index] = meta_out.valid[index];
|
||||||
|
// endgenerate
|
||||||
|
// // assign out_valid[`NT_M1:0] = meta_out.valid[`NT_M1:0];
|
||||||
|
|
||||||
|
|
||||||
|
// assign out_instruction = meta_out.instruction;
|
||||||
|
// assign out_curr_PC = meta_out.inst_pc;
|
||||||
|
// assign out_warp_num = meta_out.warp_num;
|
||||||
|
|
||||||
|
// always @(*) begin
|
||||||
|
// $display("Inst: %x, PC: %x, Valid: %x, warpNum: %x", fe_inst_meta_de.instruction, fe_inst_meta_de.inst_pc, fe_inst_meta_de.valid, fe_inst_meta_de.warp_num);
|
||||||
|
// end
|
||||||
Binary file not shown.
@@ -262,7 +262,7 @@ void VVortex::_initial__TOP__1(VVortex__Syms* __restrict vlSymsp) {
|
|||||||
vlTOPp->Vortex__DOT__vx_d_e_reg__DOT__jal = 0U;
|
vlTOPp->Vortex__DOT__vx_d_e_reg__DOT__jal = 0U;
|
||||||
vlTOPp->Vortex__DOT__vx_d_e_reg__DOT__jal_offset = 0U;
|
vlTOPp->Vortex__DOT__vx_d_e_reg__DOT__jal_offset = 0U;
|
||||||
vlTOPp->Vortex__DOT__vx_d_e_reg__DOT__warp_num = 0U;
|
vlTOPp->Vortex__DOT__vx_d_e_reg__DOT__warp_num = 0U;
|
||||||
// INITIAL at VX_fetch.v:45
|
// INITIAL at VX_fetch.v:47
|
||||||
vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_num = 0U;
|
vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_num = 0U;
|
||||||
vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_state = 0U;
|
vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_state = 0U;
|
||||||
vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_count = 1U;
|
vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_count = 1U;
|
||||||
@@ -4738,7 +4738,7 @@ void VVortex::_settle__TOP__2(VVortex__Syms* __restrict vlSymsp) {
|
|||||||
vlTOPp->Vortex__DOT__vx_decode__DOT____Vcellinp__genblk1__BRA__7__KET____DOT__VX_Context_one__in_write_data[0U]
|
vlTOPp->Vortex__DOT__vx_decode__DOT____Vcellinp__genblk1__BRA__7__KET____DOT__VX_Context_one__in_write_data[0U]
|
||||||
= vlTOPp->Vortex__DOT____Vcellinp__vx_decode__in_write_data
|
= vlTOPp->Vortex__DOT____Vcellinp__vx_decode__in_write_data
|
||||||
[0U];
|
[0U];
|
||||||
// ALWAYS at VX_fetch.v:170
|
// ALWAYS at VX_fetch.v:172
|
||||||
if ((0U == (IData)(vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_num))) {
|
if ((0U == (IData)(vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_num))) {
|
||||||
vlTOPp->Vortex__DOT__vx_fetch__DOT__out_PC_var
|
vlTOPp->Vortex__DOT__vx_fetch__DOT__out_PC_var
|
||||||
= vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_glob_pc
|
= vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_glob_pc
|
||||||
@@ -4871,7 +4871,7 @@ void VVortex::_settle__TOP__2(VVortex__Syms* __restrict vlSymsp) {
|
|||||||
vlSymsp->TOP__Vortex__DOT__vx_decode__DOT__genblk1__BRA__7__KET____DOT__VX_Context_one.in_write_data[0U]
|
vlSymsp->TOP__Vortex__DOT__vx_decode__DOT__genblk1__BRA__7__KET____DOT__VX_Context_one.in_write_data[0U]
|
||||||
= vlTOPp->Vortex__DOT__vx_decode__DOT____Vcellinp__genblk1__BRA__7__KET____DOT__VX_Context_one__in_write_data
|
= vlTOPp->Vortex__DOT__vx_decode__DOT____Vcellinp__genblk1__BRA__7__KET____DOT__VX_Context_one__in_write_data
|
||||||
[0U];
|
[0U];
|
||||||
vlTOPp->curr_PC = vlTOPp->Vortex__DOT__vx_fetch__DOT__out_PC_var;
|
vlTOPp->icache_request_pc_address = vlTOPp->Vortex__DOT__vx_fetch__DOT__out_PC_var;
|
||||||
vlTOPp->Vortex__DOT__execute_alu_result[3U] = vlTOPp->Vortex__DOT____Vcellout__vx_execute__out_alu_result
|
vlTOPp->Vortex__DOT__execute_alu_result[3U] = vlTOPp->Vortex__DOT____Vcellout__vx_execute__out_alu_result
|
||||||
[3U];
|
[3U];
|
||||||
vlTOPp->Vortex__DOT__execute_alu_result[2U] = vlTOPp->Vortex__DOT____Vcellout__vx_execute__out_alu_result
|
vlTOPp->Vortex__DOT__execute_alu_result[2U] = vlTOPp->Vortex__DOT____Vcellout__vx_execute__out_alu_result
|
||||||
@@ -6904,7 +6904,7 @@ VL_INLINE_OPT void VVortex::_settle__TOP__3(VVortex__Syms* __restrict vlSymsp) {
|
|||||||
vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_glob_valid[7U][0U]
|
vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_glob_valid[7U][0U]
|
||||||
= vlTOPp->Vortex__DOT__vx_fetch__DOT____Vcellout__genblk1__BRA__7__KET____DOT__VX_Warp__out_valid
|
= vlTOPp->Vortex__DOT__vx_fetch__DOT____Vcellout__genblk1__BRA__7__KET____DOT__VX_Warp__out_valid
|
||||||
[0U];
|
[0U];
|
||||||
// ALWAYS at VX_fetch.v:170
|
// ALWAYS at VX_fetch.v:172
|
||||||
if ((0U == (IData)(vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_num))) {
|
if ((0U == (IData)(vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_num))) {
|
||||||
vlTOPp->Vortex__DOT__vx_fetch__DOT__out_valid_var[0U]
|
vlTOPp->Vortex__DOT__vx_fetch__DOT__out_valid_var[0U]
|
||||||
= vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_glob_valid
|
= vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_glob_valid
|
||||||
@@ -11854,7 +11854,7 @@ VL_INLINE_OPT void VVortex::_sequent__TOP__6(VVortex__Syms* __restrict vlSymsp)
|
|||||||
? vlTOPp->Vortex__DOT__vx_fetch__DOT__genblk1__BRA__0__KET____DOT__VX_Warp__DOT__temp_PC
|
? vlTOPp->Vortex__DOT__vx_fetch__DOT__genblk1__BRA__0__KET____DOT__VX_Warp__DOT__temp_PC
|
||||||
: ((IData)(4U)
|
: ((IData)(4U)
|
||||||
+ vlTOPp->Vortex__DOT__vx_fetch__DOT__genblk1__BRA__0__KET____DOT__VX_Warp__DOT__temp_PC)));
|
+ vlTOPp->Vortex__DOT__vx_fetch__DOT__genblk1__BRA__0__KET____DOT__VX_Warp__DOT__temp_PC)));
|
||||||
// ALWAYS at VX_f_d_reg.v:36
|
// ALWAYS at VX_f_d_reg.v:50
|
||||||
if (vlTOPp->reset) {
|
if (vlTOPp->reset) {
|
||||||
vlTOPp->Vortex__DOT__vx_f_d_reg__DOT__curr_PC = 0U;
|
vlTOPp->Vortex__DOT__vx_f_d_reg__DOT__curr_PC = 0U;
|
||||||
} else {
|
} else {
|
||||||
@@ -11948,7 +11948,7 @@ VL_INLINE_OPT void VVortex::_sequent__TOP__6(VVortex__Syms* __restrict vlSymsp)
|
|||||||
:
|
:
|
||||||
((IData)(4U)
|
((IData)(4U)
|
||||||
+ vlTOPp->Vortex__DOT__vx_fetch__DOT__genblk1__BRA__1__KET____DOT__VX_Warp__DOT__temp_PC))));
|
+ vlTOPp->Vortex__DOT__vx_fetch__DOT__genblk1__BRA__1__KET____DOT__VX_Warp__DOT__temp_PC))));
|
||||||
// ALWAYS at VX_fetch.v:63
|
// ALWAYS at VX_fetch.v:65
|
||||||
__Vdly__Vortex__DOT__vx_fetch__DOT__warp_num =
|
__Vdly__Vortex__DOT__vx_fetch__DOT__warp_num =
|
||||||
(0xfU & (((((IData)(vlTOPp->reset) | ((IData)(vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_num)
|
(0xfU & (((((IData)(vlTOPp->reset) | ((IData)(vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_num)
|
||||||
>= (IData)(vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_state)))
|
>= (IData)(vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_state)))
|
||||||
@@ -11973,7 +11973,7 @@ VL_INLINE_OPT void VVortex::_sequent__TOP__6(VVortex__Syms* __restrict vlSymsp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ALWAYS at VX_f_d_reg.v:36
|
// ALWAYS at VX_f_d_reg.v:50
|
||||||
if (vlTOPp->reset) {
|
if (vlTOPp->reset) {
|
||||||
__Vdlyvset__Vortex__DOT__vx_f_d_reg__DOT__valid__v0 = 1U;
|
__Vdlyvset__Vortex__DOT__vx_f_d_reg__DOT__valid__v0 = 1U;
|
||||||
} else {
|
} else {
|
||||||
@@ -11994,7 +11994,7 @@ VL_INLINE_OPT void VVortex::_sequent__TOP__6(VVortex__Syms* __restrict vlSymsp)
|
|||||||
[0U];
|
[0U];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ALWAYS at VX_f_d_reg.v:36
|
// ALWAYS at VX_f_d_reg.v:50
|
||||||
if (vlTOPp->reset) {
|
if (vlTOPp->reset) {
|
||||||
vlTOPp->Vortex__DOT__vx_f_d_reg__DOT__warp_num = 0U;
|
vlTOPp->Vortex__DOT__vx_f_d_reg__DOT__warp_num = 0U;
|
||||||
} else {
|
} else {
|
||||||
@@ -12006,7 +12006,7 @@ VL_INLINE_OPT void VVortex::_sequent__TOP__6(VVortex__Syms* __restrict vlSymsp)
|
|||||||
}
|
}
|
||||||
vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_count
|
vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_count
|
||||||
= __Vdly__Vortex__DOT__vx_fetch__DOT__warp_count;
|
= __Vdly__Vortex__DOT__vx_fetch__DOT__warp_count;
|
||||||
// ALWAYSPOST at VX_f_d_reg.v:42
|
// ALWAYSPOST at VX_f_d_reg.v:56
|
||||||
if (__Vdlyvset__Vortex__DOT__vx_f_d_reg__DOT__valid__v0) {
|
if (__Vdlyvset__Vortex__DOT__vx_f_d_reg__DOT__valid__v0) {
|
||||||
vlTOPp->Vortex__DOT__vx_f_d_reg__DOT__valid[0U] = 0U;
|
vlTOPp->Vortex__DOT__vx_f_d_reg__DOT__valid[0U] = 0U;
|
||||||
vlTOPp->Vortex__DOT__vx_f_d_reg__DOT__valid[1U] = 0U;
|
vlTOPp->Vortex__DOT__vx_f_d_reg__DOT__valid[1U] = 0U;
|
||||||
@@ -12132,7 +12132,7 @@ VL_INLINE_OPT void VVortex::_sequent__TOP__6(VVortex__Syms* __restrict vlSymsp)
|
|||||||
[1U];
|
[1U];
|
||||||
vlTOPp->Vortex__DOT__f_d_valid[0U] = vlTOPp->Vortex__DOT____Vcellout__vx_f_d_reg__out_valid
|
vlTOPp->Vortex__DOT__f_d_valid[0U] = vlTOPp->Vortex__DOT____Vcellout__vx_f_d_reg__out_valid
|
||||||
[0U];
|
[0U];
|
||||||
// ALWAYS at VX_fetch.v:170
|
// ALWAYS at VX_fetch.v:172
|
||||||
if ((0U == (IData)(vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_num))) {
|
if ((0U == (IData)(vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_num))) {
|
||||||
vlTOPp->Vortex__DOT__vx_fetch__DOT__out_PC_var
|
vlTOPp->Vortex__DOT__vx_fetch__DOT__out_PC_var
|
||||||
= vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_glob_pc
|
= vlTOPp->Vortex__DOT__vx_fetch__DOT__warp_glob_pc
|
||||||
@@ -12181,7 +12181,7 @@ VL_INLINE_OPT void VVortex::_sequent__TOP__6(VVortex__Syms* __restrict vlSymsp)
|
|||||||
= vlTOPp->Vortex__DOT__f_d_valid[1U];
|
= vlTOPp->Vortex__DOT__f_d_valid[1U];
|
||||||
vlTOPp->Vortex__DOT____Vcellinp__vx_decode__in_valid[0U]
|
vlTOPp->Vortex__DOT____Vcellinp__vx_decode__in_valid[0U]
|
||||||
= vlTOPp->Vortex__DOT__f_d_valid[0U];
|
= vlTOPp->Vortex__DOT__f_d_valid[0U];
|
||||||
vlTOPp->curr_PC = vlTOPp->Vortex__DOT__vx_fetch__DOT__out_PC_var;
|
vlTOPp->icache_request_pc_address = vlTOPp->Vortex__DOT__vx_fetch__DOT__out_PC_var;
|
||||||
vlTOPp->Vortex__DOT____Vcellout__vx_decode__out_valid[3U]
|
vlTOPp->Vortex__DOT____Vcellout__vx_decode__out_valid[3U]
|
||||||
= vlTOPp->Vortex__DOT____Vcellinp__vx_decode__in_valid
|
= vlTOPp->Vortex__DOT____Vcellinp__vx_decode__in_valid
|
||||||
[3U];
|
[3U];
|
||||||
@@ -12328,7 +12328,7 @@ VL_INLINE_OPT void VVortex::_sequent__TOP__9(VVortex__Syms* __restrict vlSymsp)
|
|||||||
VL_DEBUG_IF(VL_DBG_MSGF("+ VVortex::_sequent__TOP__9\n"); );
|
VL_DEBUG_IF(VL_DBG_MSGF("+ VVortex::_sequent__TOP__9\n"); );
|
||||||
VVortex* __restrict vlTOPp VL_ATTR_UNUSED = vlSymsp->TOPp;
|
VVortex* __restrict vlTOPp VL_ATTR_UNUSED = vlSymsp->TOPp;
|
||||||
// Body
|
// Body
|
||||||
// ALWAYS at VX_f_d_reg.v:36
|
// ALWAYS at VX_f_d_reg.v:50
|
||||||
if (vlTOPp->reset) {
|
if (vlTOPp->reset) {
|
||||||
vlTOPp->Vortex__DOT__vx_f_d_reg__DOT__instruction = 0U;
|
vlTOPp->Vortex__DOT__vx_f_d_reg__DOT__instruction = 0U;
|
||||||
} else {
|
} else {
|
||||||
@@ -12336,7 +12336,7 @@ VL_INLINE_OPT void VVortex::_sequent__TOP__9(VVortex__Syms* __restrict vlSymsp)
|
|||||||
| (IData)(vlTOPp->Vortex__DOT__vx_decode__DOT__temp_out_clone_stall))))) {
|
| (IData)(vlTOPp->Vortex__DOT__vx_decode__DOT__temp_out_clone_stall))))) {
|
||||||
vlTOPp->Vortex__DOT__vx_f_d_reg__DOT__instruction
|
vlTOPp->Vortex__DOT__vx_f_d_reg__DOT__instruction
|
||||||
= ((IData)(vlTOPp->Vortex__DOT__vx_fetch__DOT__stall)
|
= ((IData)(vlTOPp->Vortex__DOT__vx_fetch__DOT__stall)
|
||||||
? 0U : vlTOPp->fe_instruction);
|
? 0U : vlTOPp->icache_response_instruction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vlTOPp->Vortex__DOT__vx_decode__DOT__is_itype =
|
vlTOPp->Vortex__DOT__vx_decode__DOT__is_itype =
|
||||||
@@ -13971,11 +13971,11 @@ void VVortex::_ctor_var_reset() {
|
|||||||
// Body
|
// Body
|
||||||
clk = VL_RAND_RESET_I(1);
|
clk = VL_RAND_RESET_I(1);
|
||||||
reset = VL_RAND_RESET_I(1);
|
reset = VL_RAND_RESET_I(1);
|
||||||
fe_instruction = VL_RAND_RESET_I(32);
|
icache_response_instruction = VL_RAND_RESET_I(32);
|
||||||
|
icache_request_pc_address = VL_RAND_RESET_I(32);
|
||||||
{ int __Vi0=0; for (; __Vi0<4; ++__Vi0) {
|
{ int __Vi0=0; for (; __Vi0<4; ++__Vi0) {
|
||||||
in_cache_driver_out_data[__Vi0] = VL_RAND_RESET_I(32);
|
in_cache_driver_out_data[__Vi0] = VL_RAND_RESET_I(32);
|
||||||
}}
|
}}
|
||||||
curr_PC = VL_RAND_RESET_I(32);
|
|
||||||
{ int __Vi0=0; for (; __Vi0<4; ++__Vi0) {
|
{ int __Vi0=0; for (; __Vi0<4; ++__Vi0) {
|
||||||
out_cache_driver_in_address[__Vi0] = VL_RAND_RESET_I(32);
|
out_cache_driver_in_address[__Vi0] = VL_RAND_RESET_I(32);
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ VL_MODULE(VVortex) {
|
|||||||
VL_OUT8(out_cache_driver_in_mem_read,2,0);
|
VL_OUT8(out_cache_driver_in_mem_read,2,0);
|
||||||
VL_OUT8(out_cache_driver_in_mem_write,2,0);
|
VL_OUT8(out_cache_driver_in_mem_write,2,0);
|
||||||
VL_OUT8(out_ebreak,0,0);
|
VL_OUT8(out_ebreak,0,0);
|
||||||
VL_IN(fe_instruction,31,0);
|
VL_IN(icache_response_instruction,31,0);
|
||||||
VL_OUT(curr_PC,31,0);
|
VL_OUT(icache_request_pc_address,31,0);
|
||||||
VL_IN(in_cache_driver_out_data[4],31,0);
|
VL_IN(in_cache_driver_out_data[4],31,0);
|
||||||
VL_OUT(out_cache_driver_in_address[4],31,0);
|
VL_OUT(out_cache_driver_in_address[4],31,0);
|
||||||
VL_OUT8(out_cache_driver_in_valid[4],0,0);
|
VL_OUT8(out_cache_driver_in_valid[4],0,0);
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ VM_PREFIX = VVortex
|
|||||||
VM_MODPREFIX = VVortex
|
VM_MODPREFIX = VVortex
|
||||||
# User CFLAGS (from -CFLAGS on Verilator command line)
|
# User CFLAGS (from -CFLAGS on Verilator command line)
|
||||||
VM_USER_CFLAGS = \
|
VM_USER_CFLAGS = \
|
||||||
|
-std=c++11 \
|
||||||
|
|
||||||
# User LDLIBS (from -LDFLAGS on Verilator command line)
|
# User LDLIBS (from -LDFLAGS on Verilator command line)
|
||||||
VM_USER_LDLIBS = \
|
VM_USER_LDLIBS = \
|
||||||
|
|||||||
Binary file not shown.
@@ -1,4 +1,5 @@
|
|||||||
// DESCRIPTION: Generated by verilator_includer via makefile
|
// DESCRIPTION: Generated by verilator_includer via makefile
|
||||||
#define VL_INCLUDE_OPT include
|
#define VL_INCLUDE_OPT include
|
||||||
#include "VVortex.cpp"
|
#include "VVortex.cpp"
|
||||||
|
#include "VVortex___024unit.cpp"
|
||||||
#include "VVortex_VX_context_slave.cpp"
|
#include "VVortex_VX_context_slave.cpp"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
VVortex__ALLcls.o: VVortex__ALLcls.cpp VVortex.cpp VVortex.h \
|
VVortex__ALLcls.o: VVortex__ALLcls.cpp VVortex.cpp VVortex.h \
|
||||||
/usr/local/Cellar/verilator/4.010/share/verilator/include/verilated.h \
|
/usr/local/Cellar/verilator/4.010/share/verilator/include/verilated.h \
|
||||||
/usr/local/Cellar/verilator/4.010/share/verilator/include/verilatedos.h \
|
/usr/local/Cellar/verilator/4.010/share/verilator/include/verilatedos.h \
|
||||||
VVortex__Syms.h VVortex_VX_context_slave.h \
|
VVortex__Syms.h VVortex___024unit.h VVortex_VX_context_slave.h \
|
||||||
VVortex_VX_context_slave.cpp
|
VVortex___024unit.cpp VVortex_VX_context_slave.cpp
|
||||||
|
|||||||
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
VVortex__ALLsup.o: VVortex__ALLsup.cpp VVortex__Syms.cpp VVortex__Syms.h \
|
VVortex__ALLsup.o: VVortex__ALLsup.cpp VVortex__Syms.cpp VVortex__Syms.h \
|
||||||
/usr/local/Cellar/verilator/4.010/share/verilator/include/verilated.h \
|
/usr/local/Cellar/verilator/4.010/share/verilator/include/verilated.h \
|
||||||
/usr/local/Cellar/verilator/4.010/share/verilator/include/verilatedos.h \
|
/usr/local/Cellar/verilator/4.010/share/verilator/include/verilatedos.h \
|
||||||
VVortex.h VVortex_VX_context_slave.h
|
VVortex.h VVortex___024unit.h VVortex_VX_context_slave.h
|
||||||
|
|||||||
Binary file not shown.
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "VVortex__Syms.h"
|
#include "VVortex__Syms.h"
|
||||||
#include "VVortex.h"
|
#include "VVortex.h"
|
||||||
|
#include "VVortex___024unit.h"
|
||||||
#include "VVortex_VX_context_slave.h"
|
#include "VVortex_VX_context_slave.h"
|
||||||
|
|
||||||
// FUNCTIONS
|
// FUNCTIONS
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
// INCLUDE MODULE CLASSES
|
// INCLUDE MODULE CLASSES
|
||||||
#include "VVortex.h"
|
#include "VVortex.h"
|
||||||
|
#include "VVortex___024unit.h"
|
||||||
#include "VVortex_VX_context_slave.h"
|
#include "VVortex_VX_context_slave.h"
|
||||||
|
|
||||||
// SYMS CLASS
|
// SYMS CLASS
|
||||||
|
|||||||
34
rtl/obj_dir/VVortex___024unit.cpp
Normal file
34
rtl/obj_dir/VVortex___024unit.cpp
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
// Verilated -*- C++ -*-
|
||||||
|
// DESCRIPTION: Verilator output: Design implementation internals
|
||||||
|
// See VVortex.h for the primary calling header
|
||||||
|
|
||||||
|
#include "VVortex___024unit.h"
|
||||||
|
#include "VVortex__Syms.h"
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------
|
||||||
|
// STATIC VARIABLES
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------
|
||||||
|
|
||||||
|
VL_CTOR_IMP(VVortex___024unit) {
|
||||||
|
// Reset internal values
|
||||||
|
// Reset structure values
|
||||||
|
_ctor_var_reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VVortex___024unit::__Vconfigure(VVortex__Syms* vlSymsp, bool first) {
|
||||||
|
if (0 && first) {} // Prevent unused
|
||||||
|
this->__VlSymsp = vlSymsp;
|
||||||
|
}
|
||||||
|
|
||||||
|
VVortex___024unit::~VVortex___024unit() {
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------
|
||||||
|
// Internal Methods
|
||||||
|
|
||||||
|
void VVortex___024unit::_ctor_var_reset() {
|
||||||
|
VL_DEBUG_IF(VL_DBG_MSGF("+ VVortex___024unit::_ctor_var_reset\n"); );
|
||||||
|
}
|
||||||
45
rtl/obj_dir/VVortex___024unit.h
Normal file
45
rtl/obj_dir/VVortex___024unit.h
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
// Verilated -*- C++ -*-
|
||||||
|
// DESCRIPTION: Verilator output: Design internal header
|
||||||
|
// See VVortex.h for the primary calling header
|
||||||
|
|
||||||
|
#ifndef _VVortex___024unit_H_
|
||||||
|
#define _VVortex___024unit_H_
|
||||||
|
|
||||||
|
#include "verilated.h"
|
||||||
|
|
||||||
|
class VVortex__Syms;
|
||||||
|
|
||||||
|
//----------
|
||||||
|
|
||||||
|
VL_MODULE(VVortex___024unit) {
|
||||||
|
public:
|
||||||
|
|
||||||
|
// PORTS
|
||||||
|
|
||||||
|
// LOCAL SIGNALS
|
||||||
|
|
||||||
|
// LOCAL VARIABLES
|
||||||
|
|
||||||
|
// INTERNAL VARIABLES
|
||||||
|
private:
|
||||||
|
VVortex__Syms* __VlSymsp; // Symbol table
|
||||||
|
public:
|
||||||
|
|
||||||
|
// PARAMETERS
|
||||||
|
|
||||||
|
// CONSTRUCTORS
|
||||||
|
private:
|
||||||
|
VL_UNCOPYABLE(VVortex___024unit); ///< Copying not allowed
|
||||||
|
public:
|
||||||
|
VVortex___024unit(const char* name="TOP");
|
||||||
|
~VVortex___024unit();
|
||||||
|
|
||||||
|
// API METHODS
|
||||||
|
|
||||||
|
// INTERNAL METHODS
|
||||||
|
void __Vconfigure(VVortex__Syms* symsp, bool first);
|
||||||
|
private:
|
||||||
|
void _ctor_var_reset();
|
||||||
|
} VL_ATTR_ALIGNED(128);
|
||||||
|
|
||||||
|
#endif // guard
|
||||||
@@ -1 +1 @@
|
|||||||
obj_dir/VVortex.cpp obj_dir/VVortex.h obj_dir/VVortex.mk obj_dir/VVortex_VX_context_slave.cpp obj_dir/VVortex_VX_context_slave.h obj_dir/VVortex__Syms.cpp obj_dir/VVortex__Syms.h obj_dir/VVortex__ver.d obj_dir/VVortex_classes.mk : /usr/local/Cellar/verilator/4.010/bin/verilator_bin /usr/local/Cellar/verilator/4.010/bin/verilator_bin VX_alu.v VX_context.v VX_context_slave.v VX_csr_handler.v VX_d_e_reg.v VX_decode.v VX_define.v VX_e_m_reg.v VX_execute.v VX_f_d_reg.v VX_fetch.v VX_forwarding.v VX_m_w_reg.v VX_memory.v VX_register_file.v VX_register_file_master_slave.v VX_register_file_slave.v VX_warp.v VX_writeback.v Vortex.v
|
obj_dir/VVortex.cpp obj_dir/VVortex.h obj_dir/VVortex.mk obj_dir/VVortex_VX_context_slave.cpp obj_dir/VVortex_VX_context_slave.h obj_dir/VVortex__Syms.cpp obj_dir/VVortex__Syms.h obj_dir/VVortex___024unit.cpp obj_dir/VVortex___024unit.h obj_dir/VVortex__ver.d obj_dir/VVortex_classes.mk : /usr/local/Cellar/verilator/4.010/bin/verilator_bin /usr/local/Cellar/verilator/4.010/bin/verilator_bin VX_alu.v VX_context.v VX_context_slave.v VX_csr_handler.v VX_d_e_reg.v VX_decode.v VX_define.v VX_e_m_reg.v VX_execute.v VX_f_d_reg.v VX_fetch.v VX_forwarding.v VX_m_w_reg.v VX_memory.v VX_register_file.v VX_register_file_master_slave.v VX_register_file_slave.v VX_warp.v VX_writeback.v Vortex.v buses.vh
|
||||||
|
|||||||
@@ -1,33 +1,36 @@
|
|||||||
# DESCRIPTION: Verilator output: Timestamp data for --skip-identical. Delete at will.
|
# DESCRIPTION: Verilator output: Timestamp data for --skip-identical. Delete at will.
|
||||||
C "-Wall -cc Vortex.v --exe test_bench.cpp"
|
C "-Wall -cc Vortex.v --exe test_bench.cpp -CFLAGS -std=c++11"
|
||||||
S 4608404 12889046060 1553037052 0 1548678579 0 "/usr/local/Cellar/verilator/4.010/bin/verilator_bin"
|
S 4608404 12889046060 1553037052 0 1548678579 0 "/usr/local/Cellar/verilator/4.010/bin/verilator_bin"
|
||||||
S 2785 12891069980 1560309956 0 1560309956 0 "VX_alu.v"
|
S 2785 1565236 1567474434 0 1567474434 0 "VX_alu.v"
|
||||||
S 3553 12891069981 1560309956 0 1560309956 0 "VX_context.v"
|
S 3553 1565237 1567474434 0 1567474434 0 "VX_context.v"
|
||||||
S 4995 12891069982 1560309956 0 1560309956 0 "VX_context_slave.v"
|
S 4995 1565238 1567474434 0 1567474434 0 "VX_context_slave.v"
|
||||||
S 1699 12891069983 1560311423 0 1560311423 0 "VX_csr_handler.v"
|
S 1699 1565239 1567474434 0 1567474434 0 "VX_csr_handler.v"
|
||||||
S 5512 12891069984 1560309956 0 1560309956 0 "VX_d_e_reg.v"
|
S 5512 1565240 1567474434 0 1567474434 0 "VX_d_e_reg.v"
|
||||||
S 17808 12891069985 1560309956 0 1560309956 0 "VX_decode.v"
|
S 17808 1565241 1567474434 0 1567474434 0 "VX_decode.v"
|
||||||
S 1676 12891069987 1560310232 0 1560310232 0 "VX_define.v"
|
S 1676 1565244 1567474434 0 1567474434 0 "VX_define.v"
|
||||||
S 4267 12891069988 1560309956 0 1560309956 0 "VX_e_m_reg.v"
|
S 4267 1565245 1567474434 0 1567474434 0 "VX_e_m_reg.v"
|
||||||
S 3692 12891069989 1560309956 0 1560309956 0 "VX_execute.v"
|
S 3692 1565246 1567474434 0 1567474434 0 "VX_execute.v"
|
||||||
S 1751 12891069990 1560309956 0 1560309956 0 "VX_f_d_reg.v"
|
S 2537 1567951 1567541896 0 1567541896 0 "VX_f_d_reg.v"
|
||||||
S 6204 12891069991 1560310568 0 1560310568 0 "VX_fetch.v"
|
S 6742 1567193 1567540852 0 1567540852 0 "VX_fetch.v"
|
||||||
S 6293 12891069992 1560309956 0 1560309956 0 "VX_forwarding.v"
|
S 6293 1565249 1567474434 0 1567474434 0 "VX_forwarding.v"
|
||||||
S 1866 12891069993 1560309956 0 1560309956 0 "VX_m_w_reg.v"
|
S 1866 1565250 1567474434 0 1567474434 0 "VX_m_w_reg.v"
|
||||||
S 4352 12891069994 1560310451 0 1560310451 0 "VX_memory.v"
|
S 4352 1565251 1567474434 0 1567474434 0 "VX_memory.v"
|
||||||
S 1249 12891069995 1560309956 0 1560309956 0 "VX_register_file.v"
|
S 1249 1565252 1567474434 0 1567474434 0 "VX_register_file.v"
|
||||||
S 1655 12891069996 1560309956 0 1560309956 0 "VX_register_file_master_slave.v"
|
S 1655 1565253 1567474434 0 1567474434 0 "VX_register_file_master_slave.v"
|
||||||
S 1599 12891069997 1560309956 0 1560309956 0 "VX_register_file_slave.v"
|
S 1599 1565254 1567474434 0 1567474434 0 "VX_register_file_slave.v"
|
||||||
S 1915 12891069999 1560309956 0 1560309956 0 "VX_warp.v"
|
S 1915 1565256 1567474434 0 1567474434 0 "VX_warp.v"
|
||||||
S 1568 12891070000 1560309956 0 1560309956 0 "VX_writeback.v"
|
S 1568 1565257 1567474434 0 1567474434 0 "VX_writeback.v"
|
||||||
S 18828 12891070001 1560309956 0 1560309956 0 "Vortex.v"
|
S 19239 1565260 1567539986 0 1567539986 0 "Vortex.v"
|
||||||
T 937577 12891114882 1560311425 0 1560311425 0 "obj_dir/VVortex.cpp"
|
S 1335 1565265 1567540424 0 1567540424 0 "buses.vh"
|
||||||
T 33907 12891114881 1560311425 0 1560311425 0 "obj_dir/VVortex.h"
|
T 937657 1568790 1567541908 0 1567541908 0 "obj_dir/VVortex.cpp"
|
||||||
T 1800 12891114886 1560311425 0 1560311425 0 "obj_dir/VVortex.mk"
|
T 33938 1568786 1567541908 0 1567541908 0 "obj_dir/VVortex.h"
|
||||||
T 597541 12891114884 1560311425 0 1560311425 0 "obj_dir/VVortex_VX_context_slave.cpp"
|
T 1814 1568896 1567541908 0 1567541908 0 "obj_dir/VVortex.mk"
|
||||||
T 19362 12891114883 1560311425 0 1560311425 0 "obj_dir/VVortex_VX_context_slave.h"
|
T 597541 1568856 1567541908 0 1567541908 0 "obj_dir/VVortex_VX_context_slave.cpp"
|
||||||
T 3668 12891114880 1560311425 0 1560311425 0 "obj_dir/VVortex__Syms.cpp"
|
T 19362 1568854 1567541908 0 1567541908 0 "obj_dir/VVortex_VX_context_slave.h"
|
||||||
T 1547 12891114879 1560311425 0 1560311425 0 "obj_dir/VVortex__Syms.h"
|
T 3699 1568785 1567541908 0 1567541908 0 "obj_dir/VVortex__Syms.cpp"
|
||||||
T 635 12891114889 1560311425 0 1560311425 0 "obj_dir/VVortex__ver.d"
|
T 1578 1568784 1567541908 0 1567541908 0 "obj_dir/VVortex__Syms.h"
|
||||||
T 0 0 1560311425 0 1560311425 0 "obj_dir/VVortex__verFiles.dat"
|
T 754 1568852 1567541908 0 1567541908 0 "obj_dir/VVortex___024unit.cpp"
|
||||||
T 1187 12891114885 1560311425 0 1560311425 0 "obj_dir/VVortex_classes.mk"
|
T 860 1568851 1567541908 0 1567541908 0 "obj_dir/VVortex___024unit.h"
|
||||||
|
T 702 1569200 1567541908 0 1567541908 0 "obj_dir/VVortex__ver.d"
|
||||||
|
T 0 0 1567541908 0 1567541908 0 "obj_dir/VVortex__verFiles.dat"
|
||||||
|
T 1208 1568895 1567541908 0 1567541908 0 "obj_dir/VVortex_classes.mk"
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ VM_TRACE = 0
|
|||||||
# Generated module classes, fast-path, compile with highest optimization
|
# Generated module classes, fast-path, compile with highest optimization
|
||||||
VM_CLASSES_FAST += \
|
VM_CLASSES_FAST += \
|
||||||
VVortex \
|
VVortex \
|
||||||
|
VVortex___024unit \
|
||||||
VVortex_VX_context_slave \
|
VVortex_VX_context_slave \
|
||||||
|
|
||||||
# Generated module classes, non-fast-path, compile with low/medium optimization
|
# Generated module classes, non-fast-path, compile with low/medium optimization
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -138,9 +138,9 @@ bool Vortex::ibus_driver()
|
|||||||
|
|
||||||
curr_inst = 0xdeadbeef;
|
curr_inst = 0xdeadbeef;
|
||||||
|
|
||||||
new_PC = vortex->curr_PC;
|
new_PC = vortex->icache_request_pc_address;
|
||||||
ram.getWord(new_PC, &curr_inst);
|
ram.getWord(new_PC, &curr_inst);
|
||||||
vortex->fe_instruction = curr_inst;
|
vortex->icache_response_instruction = curr_inst;
|
||||||
|
|
||||||
// printf("\n\n---------------------------------------------\n(%x) Inst: %x\n", new_PC, curr_inst);
|
// printf("\n\n---------------------------------------------\n(%x) Inst: %x\n", new_PC, curr_inst);
|
||||||
// printf("\n");
|
// printf("\n");
|
||||||
|
|||||||
Reference in New Issue
Block a user