Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expanded support for CFUs. #14

Draft
wants to merge 34 commits into
base: master
Choose a base branch
from
Draft
Changes from 1 commit
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
054cffc
Changes to build VexRiscv versions with Cfu plugin:
tcal-x Oct 5, 2020
7374fad
Set up wrappers to contain the cpu+cfu.
tcal-x Oct 6, 2020
ae3d1d7
Add 'clk' input to CFU modules.
tcal-x Oct 8, 2020
07a72e2
Add perf count CSRs; rebuild CFU VexRiscv Verilogs.
tcal-x Nov 5, 2020
f022529
Increase to 8 perf counter CSRs; rebuild.
tcal-x Jan 7, 2021
59f011d
Bump both I$, D$ from 4k to 8k.
tcal-x Jan 12, 2021
12ecb67
Bump SpinalHdl/VexRiscv submodules; rebuild; widen CFU funcid port.
tcal-x Feb 19, 2021
9f87086
Delete SpinalHDL submodule.
tcal-x Mar 5, 2021
b6724a2
Rebuild: VexRiscv master w/ cfu fix, Spinal 1.4.3, wide func_id.
tcal-x Mar 6, 2021
767476c
Update CFU instr. encoding to match spec (update vex submodule too).
tcal-x Apr 7, 2021
eafff82
Match CFU spec; function_id now 10b {funct7,funct3}.
tcal-x Apr 7, 2021
c888198
Remove I-format CFU instruction; it impacts timing.
tcal-x Apr 8, 2021
b31d499
Add 'SlimCfu' variants; add missing reset/rst connections.
tcal-x Apr 25, 2021
6db4891
Slim: reduce Icache size to 1kB.
tcal-x Apr 29, 2021
528360a
Rebuild SlimCfu CPUs w/ 1kB Icache.
tcal-x Apr 29, 2021
e78ff1c
Remove wrapper mechanism for VexRiscv/CFU.
tcal-x Jun 3, 2021
aa12b0d
Rebuild Verilogs at hash e78ff1c.
tcal-x Jun 3, 2021
848042f
Add VexRiscv for Fomu -- minimal, plus hard muldiv, plus mcycle.
tcal-x Jun 11, 2021
301554e
Trim Fomu variants by removing alignment etc. checks.
tcal-x Jun 11, 2021
9188280
Tweak the Fomu variant to remove division, debug, and writeback/memor…
JosephBushagour Jul 19, 2021
43e1317
Merge pull request #1 from JosephBushagour/jbushagour_fomu_tweaks
tcal-x Jul 20, 2021
d8ec2d8
Require a memory and writeback stage for the CFU plugin.
JosephBushagour Aug 2, 2021
dc1f9dd
Merge pull request #2 from JosephBushagour/fomu-cfu
tcal-x Aug 2, 2021
9face5f
Add icache, single-cycle-shift, and single-cycle multiply to the Fomu…
JosephBushagour Aug 9, 2021
38f50db
Merge pull request #3 from JosephBushagour/fomu-cfu
tcal-x Aug 9, 2021
5bb9114
New "perf" variant has perfCSRs.
tcal-x Aug 31, 2021
cbb04d3
Rebuild affected verilogs with correct hash comment (5bb9114).
tcal-x Aug 31, 2021
7490bb2
Add slimperf+cfu variant.
tcal-x Sep 16, 2021
593e180
Merge branch 'master' into fomu-cfu-mm2
tcal-x Sep 21, 2021
9f85993
Rebuild Verilogs at 593e180.
tcal-x Sep 21, 2021
6f2afa7
Add 'slim' variant for completeness.
tcal-x Sep 29, 2021
6dfdf25
Rebuild VexRiscv_Slim.v so it has correct hash in comment.
tcal-x Sep 30, 2021
7454d1a
Remove performance CSRs from 'FullCfu' variants.
tcal-x Sep 30, 2021
9a22d43
Rebuild VexRiscv_FullCfu*.v at 7454d1ac.
tcal-x Sep 30, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Rebuild SlimCfu CPUs w/ 1kB Icache.
Signed-off-by: Tim Callahan <[email protected]>
tcal-x committed Apr 29, 2021
commit 528360a7191bdbc0680626d1bac060849f006c30
52 changes: 26 additions & 26 deletions pythondata_cpu_vexriscv/verilog/VexRiscv_SlimCfu.v
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Generator : SpinalHDL v1.4.3 git head : adf552d8f500e7419fff395b7049228e4bc5de26
// Component : VexRiscv
// Git hash : c8881985e0b323f1b12cab3ed0bd455d6c406944
// Git hash : 6db4891bfe4078a7b5fdad5e4653428f87060c21


`define Input2Kind_defaultEncoding_type [0:0]
@@ -5788,20 +5788,20 @@ module InstructionCache (
input reset
);
reg [31:0] _zz_9;
reg [22:0] _zz_10;
reg [23:0] _zz_10;
wire _zz_11;
wire _zz_12;
wire [0:0] _zz_13;
wire [0:0] _zz_14;
wire [22:0] _zz_15;
wire [23:0] _zz_15;
reg _zz_1;
reg _zz_2;
reg lineLoader_fire;
reg lineLoader_valid;
(* keep , syn_keep *) reg [31:0] lineLoader_address /* synthesis syn_keep = 1 */ ;
reg lineLoader_hadError;
reg lineLoader_flushPending;
reg [6:0] lineLoader_flushCounter;
reg [5:0] lineLoader_flushCounter;
reg _zz_3;
reg lineLoader_cmdSent;
reg lineLoader_wayToAllocate_willIncrement;
@@ -5810,23 +5810,23 @@ module InstructionCache (
wire lineLoader_wayToAllocate_willOverflow;
(* keep , syn_keep *) reg [2:0] lineLoader_wordIndex /* synthesis syn_keep = 1 */ ;
wire lineLoader_write_tag_0_valid;
wire [5:0] lineLoader_write_tag_0_payload_address;
wire [4:0] lineLoader_write_tag_0_payload_address;
wire lineLoader_write_tag_0_payload_data_valid;
wire lineLoader_write_tag_0_payload_data_error;
wire [20:0] lineLoader_write_tag_0_payload_data_address;
wire [21:0] lineLoader_write_tag_0_payload_data_address;
wire lineLoader_write_data_0_valid;
wire [8:0] lineLoader_write_data_0_payload_address;
wire [7:0] lineLoader_write_data_0_payload_address;
wire [31:0] lineLoader_write_data_0_payload_data;
wire [8:0] _zz_4;
wire [7:0] _zz_4;
wire _zz_5;
wire [31:0] fetchStage_read_banksValue_0_dataMem;
wire [31:0] fetchStage_read_banksValue_0_data;
wire [5:0] _zz_6;
wire [4:0] _zz_6;
wire _zz_7;
wire fetchStage_read_waysValues_0_tag_valid;
wire fetchStage_read_waysValues_0_tag_error;
wire [20:0] fetchStage_read_waysValues_0_tag_address;
wire [22:0] _zz_8;
wire [21:0] fetchStage_read_waysValues_0_tag_address;
wire [23:0] _zz_8;
wire fetchStage_hit_hits_0;
wire fetchStage_hit_valid;
wire fetchStage_hit_error;
@@ -5844,10 +5844,10 @@ module InstructionCache (
reg decodeStage_mmuRsp_bypassTranslation;
reg decodeStage_hit_valid;
reg decodeStage_hit_error;
(* ram_style = "block" *) reg [31:0] banks_0 [0:511];
(* ram_style = "block" *) reg [22:0] ways_0_tags [0:63];
(* ram_style = "block" *) reg [31:0] banks_0 [0:255];
(* ram_style = "block" *) reg [23:0] ways_0_tags [0:31];

assign _zz_11 = (! lineLoader_flushCounter[6]);
assign _zz_11 = (! lineLoader_flushCounter[5]);
assign _zz_12 = (lineLoader_flushPending && (! (lineLoader_valid || io_cpu_fetch_isValid)));
assign _zz_13 = _zz_8[0 : 0];
assign _zz_14 = _zz_8[1 : 1];
@@ -5925,25 +5925,25 @@ module InstructionCache (
assign lineLoader_wayToAllocate_willClear = 1'b0;
assign lineLoader_wayToAllocate_willOverflowIfInc = 1'b1;
assign lineLoader_wayToAllocate_willOverflow = (lineLoader_wayToAllocate_willOverflowIfInc && lineLoader_wayToAllocate_willIncrement);
assign lineLoader_write_tag_0_valid = ((1'b1 && lineLoader_fire) || (! lineLoader_flushCounter[6]));
assign lineLoader_write_tag_0_payload_address = (lineLoader_flushCounter[6] ? lineLoader_address[10 : 5] : lineLoader_flushCounter[5 : 0]);
assign lineLoader_write_tag_0_payload_data_valid = lineLoader_flushCounter[6];
assign lineLoader_write_tag_0_valid = ((1'b1 && lineLoader_fire) || (! lineLoader_flushCounter[5]));
assign lineLoader_write_tag_0_payload_address = (lineLoader_flushCounter[5] ? lineLoader_address[9 : 5] : lineLoader_flushCounter[4 : 0]);
assign lineLoader_write_tag_0_payload_data_valid = lineLoader_flushCounter[5];
assign lineLoader_write_tag_0_payload_data_error = (lineLoader_hadError || io_mem_rsp_payload_error);
assign lineLoader_write_tag_0_payload_data_address = lineLoader_address[31 : 11];
assign lineLoader_write_tag_0_payload_data_address = lineLoader_address[31 : 10];
assign lineLoader_write_data_0_valid = (io_mem_rsp_valid && 1'b1);
assign lineLoader_write_data_0_payload_address = {lineLoader_address[10 : 5],lineLoader_wordIndex};
assign lineLoader_write_data_0_payload_address = {lineLoader_address[9 : 5],lineLoader_wordIndex};
assign lineLoader_write_data_0_payload_data = io_mem_rsp_payload_data;
assign _zz_4 = io_cpu_prefetch_pc[10 : 2];
assign _zz_4 = io_cpu_prefetch_pc[9 : 2];
assign _zz_5 = (! io_cpu_fetch_isStuck);
assign fetchStage_read_banksValue_0_dataMem = _zz_9;
assign fetchStage_read_banksValue_0_data = fetchStage_read_banksValue_0_dataMem[31 : 0];
assign _zz_6 = io_cpu_prefetch_pc[10 : 5];
assign _zz_6 = io_cpu_prefetch_pc[9 : 5];
assign _zz_7 = (! io_cpu_fetch_isStuck);
assign _zz_8 = _zz_10;
assign fetchStage_read_waysValues_0_tag_valid = _zz_13[0];
assign fetchStage_read_waysValues_0_tag_error = _zz_14[0];
assign fetchStage_read_waysValues_0_tag_address = _zz_8[22 : 2];
assign fetchStage_hit_hits_0 = (fetchStage_read_waysValues_0_tag_valid && (fetchStage_read_waysValues_0_tag_address == io_cpu_fetch_mmuRsp_physicalAddress[31 : 11]));
assign fetchStage_read_waysValues_0_tag_address = _zz_8[23 : 2];
assign fetchStage_hit_hits_0 = (fetchStage_read_waysValues_0_tag_valid && (fetchStage_read_waysValues_0_tag_address == io_cpu_fetch_mmuRsp_physicalAddress[31 : 10]));
assign fetchStage_hit_valid = (fetchStage_hit_hits_0 != 1'b0);
assign fetchStage_hit_error = fetchStage_read_waysValues_0_tag_error;
assign fetchStage_hit_data = fetchStage_read_banksValue_0_data;
@@ -5999,11 +5999,11 @@ module InstructionCache (
lineLoader_address <= io_cpu_fill_payload;
end
if(_zz_11)begin
lineLoader_flushCounter <= (lineLoader_flushCounter + 7'h01);
lineLoader_flushCounter <= (lineLoader_flushCounter + 6'h01);
end
_zz_3 <= lineLoader_flushCounter[6];
_zz_3 <= lineLoader_flushCounter[5];
if(_zz_12)begin
lineLoader_flushCounter <= 7'h0;
lineLoader_flushCounter <= 6'h0;
end
if((! io_cpu_decode_isStuck))begin
io_cpu_fetch_data_regNextWhen <= io_cpu_fetch_data;
2 changes: 1 addition & 1 deletion pythondata_cpu_vexriscv/verilog/VexRiscv_SlimCfu.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
iBus: !!vexriscv.BusReport
flushInstructions: [4111, 19, 19, 19]
info: !!vexriscv.CacheReport {bytePerLine: 32, size: 2048}
info: !!vexriscv.CacheReport {bytePerLine: 32, size: 1024}
kind: cached
52 changes: 26 additions & 26 deletions pythondata_cpu_vexriscv/verilog/VexRiscv_SlimCfuDebug.v
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Generator : SpinalHDL v1.4.3 git head : adf552d8f500e7419fff395b7049228e4bc5de26
// Component : VexRiscv
// Git hash : c8881985e0b323f1b12cab3ed0bd455d6c406944
// Git hash : 6db4891bfe4078a7b5fdad5e4653428f87060c21


`define Input2Kind_defaultEncoding_type [0:0]
@@ -6062,20 +6062,20 @@ module InstructionCache (
input reset
);
reg [31:0] _zz_11;
reg [22:0] _zz_12;
reg [23:0] _zz_12;
wire _zz_13;
wire _zz_14;
wire [0:0] _zz_15;
wire [0:0] _zz_16;
wire [22:0] _zz_17;
wire [23:0] _zz_17;
reg _zz_1;
reg _zz_2;
reg lineLoader_fire;
reg lineLoader_valid;
(* keep , syn_keep *) reg [31:0] lineLoader_address /* synthesis syn_keep = 1 */ ;
reg lineLoader_hadError;
reg lineLoader_flushPending;
reg [6:0] lineLoader_flushCounter;
reg [5:0] lineLoader_flushCounter;
reg _zz_3;
reg lineLoader_cmdSent;
reg lineLoader_wayToAllocate_willIncrement;
@@ -6084,23 +6084,23 @@ module InstructionCache (
wire lineLoader_wayToAllocate_willOverflow;
(* keep , syn_keep *) reg [2:0] lineLoader_wordIndex /* synthesis syn_keep = 1 */ ;
wire lineLoader_write_tag_0_valid;
wire [5:0] lineLoader_write_tag_0_payload_address;
wire [4:0] lineLoader_write_tag_0_payload_address;
wire lineLoader_write_tag_0_payload_data_valid;
wire lineLoader_write_tag_0_payload_data_error;
wire [20:0] lineLoader_write_tag_0_payload_data_address;
wire [21:0] lineLoader_write_tag_0_payload_data_address;
wire lineLoader_write_data_0_valid;
wire [8:0] lineLoader_write_data_0_payload_address;
wire [7:0] lineLoader_write_data_0_payload_address;
wire [31:0] lineLoader_write_data_0_payload_data;
wire [8:0] _zz_4;
wire [7:0] _zz_4;
wire _zz_5;
wire [31:0] fetchStage_read_banksValue_0_dataMem;
wire [31:0] fetchStage_read_banksValue_0_data;
wire [5:0] _zz_6;
wire [4:0] _zz_6;
wire _zz_7;
wire fetchStage_read_waysValues_0_tag_valid;
wire fetchStage_read_waysValues_0_tag_error;
wire [20:0] fetchStage_read_waysValues_0_tag_address;
wire [22:0] _zz_8;
wire [21:0] fetchStage_read_waysValues_0_tag_address;
wire [23:0] _zz_8;
wire fetchStage_hit_hits_0;
wire fetchStage_hit_valid;
wire fetchStage_hit_error;
@@ -6118,10 +6118,10 @@ module InstructionCache (
reg decodeStage_mmuRsp_bypassTranslation;
reg decodeStage_hit_valid;
reg decodeStage_hit_error;
(* ram_style = "block" *) reg [31:0] banks_0 [0:511];
(* ram_style = "block" *) reg [22:0] ways_0_tags [0:63];
(* ram_style = "block" *) reg [31:0] banks_0 [0:255];
(* ram_style = "block" *) reg [23:0] ways_0_tags [0:31];

assign _zz_13 = (! lineLoader_flushCounter[6]);
assign _zz_13 = (! lineLoader_flushCounter[5]);
assign _zz_14 = (lineLoader_flushPending && (! (lineLoader_valid || io_cpu_fetch_isValid)));
assign _zz_15 = _zz_8[0 : 0];
assign _zz_16 = _zz_8[1 : 1];
@@ -6199,25 +6199,25 @@ module InstructionCache (
assign lineLoader_wayToAllocate_willClear = 1'b0;
assign lineLoader_wayToAllocate_willOverflowIfInc = 1'b1;
assign lineLoader_wayToAllocate_willOverflow = (lineLoader_wayToAllocate_willOverflowIfInc && lineLoader_wayToAllocate_willIncrement);
assign lineLoader_write_tag_0_valid = ((1'b1 && lineLoader_fire) || (! lineLoader_flushCounter[6]));
assign lineLoader_write_tag_0_payload_address = (lineLoader_flushCounter[6] ? lineLoader_address[10 : 5] : lineLoader_flushCounter[5 : 0]);
assign lineLoader_write_tag_0_payload_data_valid = lineLoader_flushCounter[6];
assign lineLoader_write_tag_0_valid = ((1'b1 && lineLoader_fire) || (! lineLoader_flushCounter[5]));
assign lineLoader_write_tag_0_payload_address = (lineLoader_flushCounter[5] ? lineLoader_address[9 : 5] : lineLoader_flushCounter[4 : 0]);
assign lineLoader_write_tag_0_payload_data_valid = lineLoader_flushCounter[5];
assign lineLoader_write_tag_0_payload_data_error = (lineLoader_hadError || io_mem_rsp_payload_error);
assign lineLoader_write_tag_0_payload_data_address = lineLoader_address[31 : 11];
assign lineLoader_write_tag_0_payload_data_address = lineLoader_address[31 : 10];
assign lineLoader_write_data_0_valid = (io_mem_rsp_valid && 1'b1);
assign lineLoader_write_data_0_payload_address = {lineLoader_address[10 : 5],lineLoader_wordIndex};
assign lineLoader_write_data_0_payload_address = {lineLoader_address[9 : 5],lineLoader_wordIndex};
assign lineLoader_write_data_0_payload_data = io_mem_rsp_payload_data;
assign _zz_4 = io_cpu_prefetch_pc[10 : 2];
assign _zz_4 = io_cpu_prefetch_pc[9 : 2];
assign _zz_5 = (! io_cpu_fetch_isStuck);
assign fetchStage_read_banksValue_0_dataMem = _zz_11;
assign fetchStage_read_banksValue_0_data = fetchStage_read_banksValue_0_dataMem[31 : 0];
assign _zz_6 = io_cpu_prefetch_pc[10 : 5];
assign _zz_6 = io_cpu_prefetch_pc[9 : 5];
assign _zz_7 = (! io_cpu_fetch_isStuck);
assign _zz_8 = _zz_12;
assign fetchStage_read_waysValues_0_tag_valid = _zz_15[0];
assign fetchStage_read_waysValues_0_tag_error = _zz_16[0];
assign fetchStage_read_waysValues_0_tag_address = _zz_8[22 : 2];
assign fetchStage_hit_hits_0 = (fetchStage_read_waysValues_0_tag_valid && (fetchStage_read_waysValues_0_tag_address == io_cpu_fetch_mmuRsp_physicalAddress[31 : 11]));
assign fetchStage_read_waysValues_0_tag_address = _zz_8[23 : 2];
assign fetchStage_hit_hits_0 = (fetchStage_read_waysValues_0_tag_valid && (fetchStage_read_waysValues_0_tag_address == io_cpu_fetch_mmuRsp_physicalAddress[31 : 10]));
assign fetchStage_hit_valid = (fetchStage_hit_hits_0 != 1'b0);
assign fetchStage_hit_error = fetchStage_read_waysValues_0_tag_error;
assign fetchStage_hit_data = fetchStage_read_banksValue_0_data;
@@ -6273,11 +6273,11 @@ module InstructionCache (
lineLoader_address <= io_cpu_fill_payload;
end
if(_zz_13)begin
lineLoader_flushCounter <= (lineLoader_flushCounter + 7'h01);
lineLoader_flushCounter <= (lineLoader_flushCounter + 6'h01);
end
_zz_3 <= lineLoader_flushCounter[6];
_zz_3 <= lineLoader_flushCounter[5];
if(_zz_14)begin
lineLoader_flushCounter <= 7'h0;
lineLoader_flushCounter <= 6'h0;
end
if((! io_cpu_decode_isStuck))begin
io_cpu_fetch_data_regNextWhen <= io_cpu_fetch_data;
2 changes: 1 addition & 1 deletion pythondata_cpu_vexriscv/verilog/VexRiscv_SlimCfuDebug.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
debug: !!vexriscv.DebugReport {hardwareBreakpointCount: 0}
iBus: !!vexriscv.BusReport
flushInstructions: [4111, 19, 19, 19]
info: !!vexriscv.CacheReport {bytePerLine: 32, size: 2048}
info: !!vexriscv.CacheReport {bytePerLine: 32, size: 1024}
kind: cached