From dc9fc2bd7d9b46a61b32b470c379173e13c4cac7 Mon Sep 17 00:00:00 2001 From: Akilan Date: Tue, 17 Feb 2026 13:49:05 +0000 Subject: [PATCH] added delta value field --- CHERICC_Fat.bo | Bin 0 -> 290712 bytes CHERICC_Fat.bsv | 95 ++++-- CHERICap.bo | Bin 0 -> 112697 bytes CHERICap.bsv | 8 +- CHERICapWrap.bo | Bin 0 -> 594034 bytes Makefile | 2 +- module_wrap128_almightyCap.v | 38 +++ module_wrap128_fromMem.v | 115 +++++++ module_wrap128_getAddr.v | 42 +++ module_wrap128_getBase.v | 55 ++++ module_wrap128_getFlags.v | 42 +++ module_wrap128_getHardPerms.v | 42 +++ module_wrap128_getKind.v | 59 ++++ module_wrap128_getLength.v | 57 ++++ module_wrap128_getOffset.v | 56 ++++ module_wrap128_getPerms.v | 42 +++ module_wrap128_getSoftPerms.v | 41 +++ module_wrap128_getTop.v | 74 +++++ module_wrap128_incOffset.v | 114 +++++++ module_wrap128_isInBounds.v | 57 ++++ module_wrap128_isValidCap.v | 42 +++ module_wrap128_modifyOffset.v | 176 +++++++++++ module_wrap128_nullCap.v | 38 +++ module_wrap128_nullWithAddr.v | 52 ++++ module_wrap128_setAddr.v | 103 +++++++ module_wrap128_setBounds.v | 561 ++++++++++++++++++++++++++++++++++ module_wrap128_setFlags.v | 48 +++ module_wrap128_setHardPerms.v | 49 +++ module_wrap128_setKind.v | 64 ++++ module_wrap128_setOffset.v | 129 ++++++++ module_wrap128_setPerms.v | 48 +++ module_wrap128_setSoftPerms.v | 45 +++ module_wrap128_setValidCap.v | 46 +++ module_wrap128_toMem.v | 66 ++++ module_wrap128_validAsType.v | 45 +++ module_wrap64_almightyCap.v | 38 +++ module_wrap64_fromMem.v | 115 +++++++ module_wrap64_getAddr.v | 42 +++ module_wrap64_getBase.v | 54 ++++ module_wrap64_getFlags.v | 42 +++ module_wrap64_getHardPerms.v | 42 +++ module_wrap64_getKind.v | 59 ++++ module_wrap64_getLength.v | 57 ++++ module_wrap64_getOffset.v | 56 ++++ module_wrap64_getPerms.v | 42 +++ module_wrap64_getSoftPerms.v | 41 +++ module_wrap64_getTop.v | 74 +++++ module_wrap64_incOffset.v | 114 +++++++ module_wrap64_isInBounds.v | 56 ++++ module_wrap64_isValidCap.v | 42 +++ module_wrap64_modifyOffset.v | 174 +++++++++++ module_wrap64_nullCap.v | 38 +++ module_wrap64_nullWithAddr.v | 52 ++++ module_wrap64_setAddr.v | 103 +++++++ module_wrap64_setBounds.v | 558 +++++++++++++++++++++++++++++++++ module_wrap64_setFlags.v | 48 +++ module_wrap64_setHardPerms.v | 49 +++ module_wrap64_setKind.v | 64 ++++ module_wrap64_setOffset.v | 129 ++++++++ module_wrap64_setPerms.v | 48 +++ module_wrap64_setSoftPerms.v | 45 +++ module_wrap64_setValidCap.v | 46 +++ module_wrap64_toMem.v | 66 ++++ module_wrap64_validAsType.v | 45 +++ 64 files changed, 4754 insertions(+), 36 deletions(-) create mode 100644 CHERICC_Fat.bo create mode 100644 CHERICap.bo create mode 100644 CHERICapWrap.bo create mode 100644 module_wrap128_almightyCap.v create mode 100644 module_wrap128_fromMem.v create mode 100644 module_wrap128_getAddr.v create mode 100644 module_wrap128_getBase.v create mode 100644 module_wrap128_getFlags.v create mode 100644 module_wrap128_getHardPerms.v create mode 100644 module_wrap128_getKind.v create mode 100644 module_wrap128_getLength.v create mode 100644 module_wrap128_getOffset.v create mode 100644 module_wrap128_getPerms.v create mode 100644 module_wrap128_getSoftPerms.v create mode 100644 module_wrap128_getTop.v create mode 100644 module_wrap128_incOffset.v create mode 100644 module_wrap128_isInBounds.v create mode 100644 module_wrap128_isValidCap.v create mode 100644 module_wrap128_modifyOffset.v create mode 100644 module_wrap128_nullCap.v create mode 100644 module_wrap128_nullWithAddr.v create mode 100644 module_wrap128_setAddr.v create mode 100644 module_wrap128_setBounds.v create mode 100644 module_wrap128_setFlags.v create mode 100644 module_wrap128_setHardPerms.v create mode 100644 module_wrap128_setKind.v create mode 100644 module_wrap128_setOffset.v create mode 100644 module_wrap128_setPerms.v create mode 100644 module_wrap128_setSoftPerms.v create mode 100644 module_wrap128_setValidCap.v create mode 100644 module_wrap128_toMem.v create mode 100644 module_wrap128_validAsType.v create mode 100644 module_wrap64_almightyCap.v create mode 100644 module_wrap64_fromMem.v create mode 100644 module_wrap64_getAddr.v create mode 100644 module_wrap64_getBase.v create mode 100644 module_wrap64_getFlags.v create mode 100644 module_wrap64_getHardPerms.v create mode 100644 module_wrap64_getKind.v create mode 100644 module_wrap64_getLength.v create mode 100644 module_wrap64_getOffset.v create mode 100644 module_wrap64_getPerms.v create mode 100644 module_wrap64_getSoftPerms.v create mode 100644 module_wrap64_getTop.v create mode 100644 module_wrap64_incOffset.v create mode 100644 module_wrap64_isInBounds.v create mode 100644 module_wrap64_isValidCap.v create mode 100644 module_wrap64_modifyOffset.v create mode 100644 module_wrap64_nullCap.v create mode 100644 module_wrap64_nullWithAddr.v create mode 100644 module_wrap64_setAddr.v create mode 100644 module_wrap64_setBounds.v create mode 100644 module_wrap64_setFlags.v create mode 100644 module_wrap64_setHardPerms.v create mode 100644 module_wrap64_setKind.v create mode 100644 module_wrap64_setOffset.v create mode 100644 module_wrap64_setPerms.v create mode 100644 module_wrap64_setSoftPerms.v create mode 100644 module_wrap64_setValidCap.v create mode 100644 module_wrap64_toMem.v create mode 100644 module_wrap64_validAsType.v diff --git a/CHERICC_Fat.bo b/CHERICC_Fat.bo new file mode 100644 index 0000000000000000000000000000000000000000..c9bf0e4dd7d0992941c1ddcc41854791200d90b1 GIT binary patch literal 290712 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 z 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

38*=cf4>qZeB`$%r<#-z~gQ30Ku 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 literal 0 HcmV?d00001 diff --git a/CHERICC_Fat.bsv b/CHERICC_Fat.bsv index 2527c84..5b56e18 100644 --- a/CHERICC_Fat.bsv +++ b/CHERICC_Fat.bsv @@ -40,6 +40,8 @@ export CapPipe; export CapFat; export MW; export OTypeW; +export Delta; +export setDeltaValue; export FlagsW; export Perms; export ResW; @@ -59,8 +61,8 @@ export Exp; export MetaInfo; export SetBoundsReturn; export CapTrim; -export trimCap; -export untrimCap; +// export trimCap; +// export untrimCap; // =============================================================================== @@ -82,17 +84,20 @@ typedef 0 UPermW; typedef 8 MW; typedef 6 ExpW; typedef 4 OTypeW; +typedef 24 Delta; typedef `FLAGSW FlagsW; typedef 32 CapAddrW; -typedef 64 CapW; +typedef 88 CapW; `else // CAP128 is default typedef 4 UPermW; typedef 14 MW; typedef 6 ExpW; typedef 18 OTypeW; +typedef 44 Delta; typedef `FLAGSW FlagsW; typedef 64 CapAddrW; -typedef 128 CapW; +// The capability width changes +typedef 172 CapW; `endif // The Address type is used to represent the full sized address returned to the @@ -137,8 +142,9 @@ typedef SizeOf#(Perms) PermsW; // The reserved bits typedef TSub#(CapW, TAdd#( CapAddrW , TAdd#( OTypeW - , TAdd#( CBoundsW - , TAdd#(PermsW, FlagsW))))) ResW; + , TAdd#( Delta + , TAdd#( CBoundsW + , TAdd#(PermsW, FlagsW)))))) ResW; // The full capability structure, including the "tag" bit. typedef struct { Bool isCapability; @@ -146,6 +152,7 @@ typedef struct { Bit#(ResW) reserved; Bit#(FlagsW) flags; Bit#(OTypeW) otype; + Bit#(Delta) delta; CBounds bounds; CapAddr address; } CapabilityInMemory deriving (Bits, Eq, FShow); // CapW + 1 (tag bit) @@ -181,6 +188,7 @@ typedef struct { Bit#(FlagsW) flags; Bit#(ResW) reserved; Bit#(OTypeW) otype; + Bit#(Delta) delta; Format format; Bounds bounds; } CapFat deriving (Bits); @@ -227,6 +235,7 @@ function CapFat unpackCap(Capability thin); fat.flags = memCap.flags; fat.reserved = memCap.reserved; fat.otype = memCap.otype; + fat.delta = memCap.delta; match {.f, .b} = decBounds(memCap.bounds); fat.format = f; fat.bounds = b; @@ -686,6 +695,13 @@ function CapFat unseal(CapFat cap, x _); ret.otype = otype_unsealed; return ret; endfunction +// TODOD Creating Cap function to all delta value +// function CapFat addDelta(CapFat cap, x _); +// CapFat ret = cap; +// ret.delta = x; +// return ret; +// endfunction + function VnD#(CapFat) incOffsetFat( CapFat cap , CapAddr pointer , CapAddr offset // this is the increment in inc offset, and the offset in set offset @@ -1033,7 +1049,7 @@ typedef struct { // Note: commented out methods have a provided default implementation in the // CHERICap typeclass definition -instance CHERICap #(CapMem, OTypeW, FlagsW, CapAddrW, CapW, TSub #(MW, 3)); +instance CHERICap #(CapMem, OTypeW, FlagsW, CapAddrW, CapW, TSub #(MW, 3), Delta); // capability validity ////////////////////////////////////////////////////////////////////////////// @@ -1101,6 +1117,7 @@ instance CHERICap #(CapMem, OTypeW, FlagsW, CapAddrW, CapW, TSub #(MW, 3)); , pack (cap.reserved) , pack (cap.flags) , pack (cap.otype) + , pack (cap.delta) , pack (cap.bounds) }; endfunction function getAddr (capMem); @@ -1191,7 +1208,7 @@ endinstance // Note: commented out methods have a provided default implementation in the // CHERICap typeclass definition -instance CHERICap #(CapReg, OTypeW, FlagsW, CapAddrW, CapW, TSub #(MW, 3)); +instance CHERICap #(CapReg, OTypeW, FlagsW, CapAddrW, CapW, TSub #(MW, 3), Delta); // capability validity ////////////////////////////////////////////////////////////////////////////// @@ -1339,7 +1356,7 @@ instance CHERICap #(CapReg, OTypeW, FlagsW, CapAddrW, CapW, TSub #(MW, 3)); endinstance -instance CHERICap #(CapPipe, OTypeW, FlagsW, CapAddrW, CapW, TSub#(MW, 3)); +instance CHERICap #(CapPipe, OTypeW, FlagsW, CapAddrW, CapW, TSub#(MW, 3), Delta); //Functions supported by CapReg are just passed through @@ -1387,6 +1404,15 @@ instance CHERICap #(CapPipe, OTypeW, FlagsW, CapAddrW, CapW, TSub#(MW, 3)); , mask: result.mask }; endfunction + // Create function to set delta value + function setDeltaValue (CapPipe cap, Bit#(Delta) delta); + // let result = setDelta(cap.capFat, delta); + cap.capFat.delta = delta; + return cap; + endfunction + + + function nullWithAddr (addr); CapReg res = nullWithAddr(addr); return CapPipe { capFat: res, tempFields: getTempFields(res) }; @@ -1509,33 +1535,36 @@ typedef 48 VA_Width; typedef struct { Perms perms; Bit#(FlagsW) flags; + Bit#(Delta) delta; CBounds bounds; Bit#(VA_Width) address; Bool validAddress; } CapTrim deriving(Bits, Eq, FShow); -function CapTrim trimCap(CapMem cm); - CapabilityInMemory cap = unpack(cm); - Bit#(TSub#(CapAddrW,VA_Width)) addr_upper = truncateLSB(cap.address); - return CapTrim{perms: cap.perms, - flags: cap.flags, - bounds: cap.bounds, - address: truncate(cap.address), - validAddress: (addr_upper==signExtend(cap.address[valueOf(VA_Width)-1])) - }; -endfunction -function CapMem untrimCap(CapTrim ct); - // Encode an invalid address as the bit above the last valid bit being different. - Bit#(1) addressMsb = ct.address[valueOf(VA_Width)-1]; - if (!ct.validAddress) addressMsb = ^addressMsb; - return pack(CapabilityInMemory{ - isCapability: True, - perms: ct.perms, - reserved: 0, - flags: ct.flags, - otype: otype_unsealed, - bounds: ct.bounds, - address: signExtend({addressMsb,ct.address}) - }); -endfunction +// function CapTrim trimCap(CapMem cm); +// CapabilityInMemory cap = unpack(cm); +// Bit#(TSub#(CapAddrW,VA_Width)) addr_upper = truncateLSB(cap.address); +// return CapTrim{perms: cap.perms, +// flags: cap.flags, +// delta: cap.delta, +// bounds: cap.bounds, +// address: truncate(cap.address), +// validAddress: (addr_upper==signExtend(cap.address[valueOf(VA_Width)-1])) +// }; +// endfunction +// function CapMem untrimCap(CapTrim ct); +// // Encode an invalid address as the bit above the last valid bit being different. +// Bit#(1) addressMsb = ct.address[valueOf(VA_Width)-1]; +// if (!ct.validAddress) addressMsb = ^addressMsb; +// return pack(CapabilityInMemory{ +// isCapability: True, +// perms: ct.perms, +// reserved: 0, +// flags: ct.flags, +// otype: otype_unsealed, +// delta: ct.delta, +// bounds: ct.bounds, +// address: signExtend({addressMsb,ct.address}) +// }); +// endfunction endpackage diff --git a/CHERICap.bo b/CHERICap.bo new file mode 100644 index 0000000000000000000000000000000000000000..86138d35860ef47e3bc4e575496828037c7ec2c6 GIT binary patch literal 112697 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 VK8xM7*14_R)uRrJcq-ae{y+Rg!$bf8 literal 0 HcmV?d00001 diff --git a/CHERICap.bsv b/CHERICap.bsv index 2f6d5a4..ebf98ae 100644 --- a/CHERICap.bsv +++ b/CHERICap.bsv @@ -119,7 +119,7 @@ endfunction // XXX TODO augment with all architectural bounds/ repbounds ? function Fmt showCHERICap (capT cap) - provisos (CHERICap #(capT , otypeW, flgW, addrW, inMemW, maskableW)); + provisos (CHERICap #(capT , otypeW, flgW, addrW, inMemW, maskableW, delta)); return $format( "Valid: 0x%0x", isValidCap(cap)) + $format(" Perms: 0x%0x", getPerms(cap)) + $format(" Kind: ", fshow(getKind(cap))) + @@ -153,8 +153,9 @@ typeclass CHERICap #( type capT // type of the CHERICap capability , numeric type addrW // width of the address , numeric type inMemW // width of the capability in mem , numeric type maskableW // width of maskable bits + , numeric type delta // size of delta (tlb bypass) ) - dependencies (capT determines (otypeW, flgW, addrW, inMemW, maskableW)); + dependencies (capT determines (otypeW, flgW, addrW, inMemW, maskableW, delta)); // capability validity ////////////////////////////////////////////////////////////////////////////// @@ -320,6 +321,9 @@ typeclass CHERICap #( type capT // type of the CHERICap capability // the null capability (requires a dummy proxy) function capT nullCapFromDummy (capT dummy); + // define set delta function + function capT setDeltaValue (capT cap, Bit #(delta) length); + // Assert that the encoding is valid ////////////////////////////////////////////////////////////////////////////// diff --git a/CHERICapWrap.bo b/CHERICapWrap.bo new file mode 100644 index 0000000000000000000000000000000000000000..90edb70d5f26f515d5d9ca42e45bae91c65a99a5 GIT binary patch literal 594034 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%0DGD+F%$R?Q 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 wrap128_fromMem +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_fromMem(wrap128_fromMem_mem_cap, + wrap128_fromMem); + // value method wrap128_fromMem + input [88 : 0] wrap128_fromMem_mem_cap; + output [114 : 0] wrap128_fromMem; + + // signals for module outputs + wire [114 : 0] wrap128_fromMem; + + // remaining internal signals + wire [88 : 0] thin__h113; + wire [31 : 0] x__h428; + wire [21 : 0] IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d33; + wire [7 : 0] bounds_topBits__h585, + res_addrBits__h131, + x__h618, + x__h638, + x__h653; + wire [5 : 0] x__h462; + wire [4 : 0] IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d52; + wire [2 : 0] repBound__h698, tb__h695; + wire [1 : 0] carry_out__h553, + impliedTopBits__h555, + len_correction__h554, + x__h635; + wire IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d39, + IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d40, + IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d42; + + // value method wrap128_fromMem + assign wrap128_fromMem = + { thin__h113[88], + thin__h113[31:0], + res_addrBits__h131, + thin__h113[87:46], + IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d33, + repBound__h698, + IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d39, + IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d40, + IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d52 } ; + + // remaining internal signals + assign IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d33 = + { thin__h113[46] ? x__h462 : 6'd0, x__h618, x__h638 } ; + assign IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d39 = + tb__h695 < repBound__h698 ; + assign IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d40 = + x__h638[7:5] < repBound__h698 ; + assign IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d42 = + res_addrBits__h131[7:5] < repBound__h698 ; + assign IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d52 = + { IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d42, + (IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d39 == + IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d42) ? + 2'd0 : + ((IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d39 && + !IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d42) ? + 2'd1 : + 2'd3), + (IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d40 == + IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d42) ? + 2'd0 : + ((IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d40 && + !IF_wrap128_fromMem_mem_cap_XOR_15_CONCAT_DONTC_ETC___d42) ? + 2'd1 : + 2'd3) } ; + assign bounds_topBits__h585 = { 2'h2, thin__h113[45:43], 3'd0 } ; + assign carry_out__h553 = (x__h653[5:0] < x__h638[5:0]) ? 2'b01 : 2'b0 ; + assign impliedTopBits__h555 = x__h635 + len_correction__h554 ; + assign len_correction__h554 = thin__h113[46] ? 2'b01 : 2'b0 ; + assign repBound__h698 = x__h638[7:5] - 3'b001 ; + assign res_addrBits__h131 = + thin__h113[46] ? x__h428[7:0] : thin__h113[7:0] ; + assign tb__h695 = { impliedTopBits__h555, x__h653[5] } ; + assign thin__h113 = wrap128_fromMem_mem_cap ^ 89'h00007D55555430200000000 ; + assign x__h428 = thin__h113[31:0] >> x__h462 ; + assign x__h462 = { thin__h113[42:40], thin__h113[34:32] } ; + assign x__h618 = { impliedTopBits__h555, x__h653[5:0] } ; + assign x__h635 = x__h638[7:6] + carry_out__h553 ; + assign x__h638 = + thin__h113[46] ? + { thin__h113[39:35], 3'd0 } : + thin__h113[39:32] ; + assign x__h653 = thin__h113[46] ? bounds_topBits__h585 : thin__h113[47:40] ; +endmodule // module_wrap128_fromMem + diff --git a/module_wrap128_getAddr.v b/module_wrap128_getAddr.v new file mode 100644 index 0000000..d71b33d --- /dev/null +++ b/module_wrap128_getAddr.v @@ -0,0 +1,42 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_getAddr O 32 +// wrap128_getAddr_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap128_getAddr_cap -> wrap128_getAddr +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_getAddr(wrap128_getAddr_cap, + wrap128_getAddr); + // value method wrap128_getAddr + input [114 : 0] wrap128_getAddr_cap; + output [31 : 0] wrap128_getAddr; + + // signals for module outputs + wire [31 : 0] wrap128_getAddr; + + // value method wrap128_getAddr + assign wrap128_getAddr = wrap128_getAddr_cap[113:82] ; +endmodule // module_wrap128_getAddr + diff --git a/module_wrap128_getBase.v b/module_wrap128_getBase.v new file mode 100644 index 0000000..b596504 --- /dev/null +++ b/module_wrap128_getBase.v @@ -0,0 +1,55 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_getBase O 32 +// wrap128_getBase_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap128_getBase_cap -> wrap128_getBase +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_getBase(wrap128_getBase_cap, + wrap128_getBase); + // value method wrap128_getBase + input [114 : 0] wrap128_getBase_cap; + output [31 : 0] wrap128_getBase; + + // signals for module outputs + wire [31 : 0] wrap128_getBase; + + // remaining internal signals + wire [31 : 0] addBase__h64; + wire [23 : 0] mask__h65; + wire [9 : 0] x__h167; + + // value method wrap128_getBase + assign wrap128_getBase = + { wrap128_getBase_cap[113:90] & mask__h65, 8'd0 } + + addBase__h64 ; + + // remaining internal signals + assign addBase__h64 = + { {22{x__h167[9]}}, x__h167 } << wrap128_getBase_cap[31:26] ; + assign mask__h65 = 24'd16777215 << wrap128_getBase_cap[31:26] ; + assign x__h167 = { wrap128_getBase_cap[1:0], wrap128_getBase_cap[17:10] } ; +endmodule // module_wrap128_getBase + diff --git a/module_wrap128_getFlags.v b/module_wrap128_getFlags.v new file mode 100644 index 0000000..1530c8f --- /dev/null +++ b/module_wrap128_getFlags.v @@ -0,0 +1,42 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_getFlags O 1 +// wrap128_getFlags_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap128_getFlags_cap -> wrap128_getFlags +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_getFlags(wrap128_getFlags_cap, + wrap128_getFlags); + // value method wrap128_getFlags + input [114 : 0] wrap128_getFlags_cap; + output wrap128_getFlags; + + // signals for module outputs + wire wrap128_getFlags; + + // value method wrap128_getFlags + assign wrap128_getFlags = wrap128_getFlags_cap[61] ; +endmodule // module_wrap128_getFlags + diff --git a/module_wrap128_getHardPerms.v b/module_wrap128_getHardPerms.v new file mode 100644 index 0000000..e667725 --- /dev/null +++ b/module_wrap128_getHardPerms.v @@ -0,0 +1,42 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_getHardPerms O 12 +// wrap128_getHardPerms_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap128_getHardPerms_cap -> wrap128_getHardPerms +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_getHardPerms(wrap128_getHardPerms_cap, + wrap128_getHardPerms); + // value method wrap128_getHardPerms + input [114 : 0] wrap128_getHardPerms_cap; + output [11 : 0] wrap128_getHardPerms; + + // signals for module outputs + wire [11 : 0] wrap128_getHardPerms; + + // value method wrap128_getHardPerms + assign wrap128_getHardPerms = wrap128_getHardPerms_cap[73:62] ; +endmodule // module_wrap128_getHardPerms + diff --git a/module_wrap128_getKind.v b/module_wrap128_getKind.v new file mode 100644 index 0000000..2557d7f --- /dev/null +++ b/module_wrap128_getKind.v @@ -0,0 +1,59 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_getKind O 7 +// wrap128_getKind_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap128_getKind_cap -> wrap128_getKind +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_getKind(wrap128_getKind_cap, + wrap128_getKind); + // value method wrap128_getKind + input [114 : 0] wrap128_getKind_cap; + output [6 : 0] wrap128_getKind; + + // signals for module outputs + wire [6 : 0] wrap128_getKind; + + // remaining internal signals + reg [2 : 0] CASE_wrap128_getKind_cap_BITS_60_TO_57_12_3_13_ETC__q1; + + // value method wrap128_getKind + assign wrap128_getKind = + { CASE_wrap128_getKind_cap_BITS_60_TO_57_12_3_13_ETC__q1, + wrap128_getKind_cap[60:57] } ; + + // remaining internal signals + always@(wrap128_getKind_cap) + begin + case (wrap128_getKind_cap[60:57]) + 4'd12: CASE_wrap128_getKind_cap_BITS_60_TO_57_12_3_13_ETC__q1 = 3'd3; + 4'd13: CASE_wrap128_getKind_cap_BITS_60_TO_57_12_3_13_ETC__q1 = 3'd2; + 4'd14: CASE_wrap128_getKind_cap_BITS_60_TO_57_12_3_13_ETC__q1 = 3'd1; + 4'd15: CASE_wrap128_getKind_cap_BITS_60_TO_57_12_3_13_ETC__q1 = 3'd0; + default: CASE_wrap128_getKind_cap_BITS_60_TO_57_12_3_13_ETC__q1 = 3'd4; + endcase + end +endmodule // module_wrap128_getKind + diff --git a/module_wrap128_getLength.v b/module_wrap128_getLength.v new file mode 100644 index 0000000..3e72207 --- /dev/null +++ b/module_wrap128_getLength.v @@ -0,0 +1,57 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_getLength O 33 +// wrap128_getLength_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap128_getLength_cap -> wrap128_getLength +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_getLength(wrap128_getLength_cap, + wrap128_getLength); + // value method wrap128_getLength + input [114 : 0] wrap128_getLength_cap; + output [32 : 0] wrap128_getLength; + + // signals for module outputs + wire [32 : 0] wrap128_getLength; + + // remaining internal signals + wire [32 : 0] length__h66; + wire [9 : 0] base__h65, top__h64, x__h125; + + // value method wrap128_getLength + assign wrap128_getLength = + (wrap128_getLength_cap[31:26] < 6'd26) ? + length__h66 : + 33'h1FFFFFFFF ; + + // remaining internal signals + assign base__h65 = + { wrap128_getLength_cap[1:0], wrap128_getLength_cap[17:10] } ; + assign length__h66 = { 23'd0, x__h125 } << wrap128_getLength_cap[31:26] ; + assign top__h64 = + { wrap128_getLength_cap[3:2], wrap128_getLength_cap[25:18] } ; + assign x__h125 = top__h64 - base__h65 ; +endmodule // module_wrap128_getLength + diff --git a/module_wrap128_getOffset.v b/module_wrap128_getOffset.v new file mode 100644 index 0000000..9b85b53 --- /dev/null +++ b/module_wrap128_getOffset.v @@ -0,0 +1,56 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_getOffset O 32 +// wrap128_getOffset_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap128_getOffset_cap -> wrap128_getOffset +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_getOffset(wrap128_getOffset_cap, + wrap128_getOffset); + // value method wrap128_getOffset + input [114 : 0] wrap128_getOffset_cap; + output [31 : 0] wrap128_getOffset; + + // signals for module outputs + wire [31 : 0] wrap128_getOffset; + + // remaining internal signals + wire [31 : 0] addrLSB__h68, x__h204, x__h79, x__h81, y__h203; + wire [9 : 0] base__h66, offset__h67; + + // value method wrap128_getOffset + assign wrap128_getOffset = x__h79 | addrLSB__h68 ; + + // remaining internal signals + assign addrLSB__h68 = wrap128_getOffset_cap[113:82] & y__h203 ; + assign base__h66 = + { wrap128_getOffset_cap[1:0], wrap128_getOffset_cap[17:10] } ; + assign offset__h67 = { 2'b0, wrap128_getOffset_cap[81:74] } - base__h66 ; + assign x__h204 = 32'hFFFFFFFF << wrap128_getOffset_cap[31:26] ; + assign x__h79 = x__h81 << wrap128_getOffset_cap[31:26] ; + assign x__h81 = { {22{offset__h67[9]}}, offset__h67 } ; + assign y__h203 = ~x__h204 ; +endmodule // module_wrap128_getOffset + diff --git a/module_wrap128_getPerms.v b/module_wrap128_getPerms.v new file mode 100644 index 0000000..1aef592 --- /dev/null +++ b/module_wrap128_getPerms.v @@ -0,0 +1,42 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_getPerms O 31 +// wrap128_getPerms_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap128_getPerms_cap -> wrap128_getPerms +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_getPerms(wrap128_getPerms_cap, + wrap128_getPerms); + // value method wrap128_getPerms + input [114 : 0] wrap128_getPerms_cap; + output [30 : 0] wrap128_getPerms; + + // signals for module outputs + wire [30 : 0] wrap128_getPerms; + + // value method wrap128_getPerms + assign wrap128_getPerms = { 19'd0, wrap128_getPerms_cap[73:62] } ; +endmodule // module_wrap128_getPerms + diff --git a/module_wrap128_getSoftPerms.v b/module_wrap128_getSoftPerms.v new file mode 100644 index 0000000..a240ce2 --- /dev/null +++ b/module_wrap128_getSoftPerms.v @@ -0,0 +1,41 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_getSoftPerms O 16 const +// wrap128_getSoftPerms_cap I 115 unused +// +// No combinational paths from inputs to outputs +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_getSoftPerms(wrap128_getSoftPerms_cap, + wrap128_getSoftPerms); + // value method wrap128_getSoftPerms + input [114 : 0] wrap128_getSoftPerms_cap; + output [15 : 0] wrap128_getSoftPerms; + + // signals for module outputs + wire [15 : 0] wrap128_getSoftPerms; + + // value method wrap128_getSoftPerms + assign wrap128_getSoftPerms = 16'd0 ; +endmodule // module_wrap128_getSoftPerms + diff --git a/module_wrap128_getTop.v b/module_wrap128_getTop.v new file mode 100644 index 0000000..3a49a4a --- /dev/null +++ b/module_wrap128_getTop.v @@ -0,0 +1,74 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_getTop O 33 +// wrap128_getTop_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap128_getTop_cap -> wrap128_getTop +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_getTop(wrap128_getTop_cap, + wrap128_getTop); + // value method wrap128_getTop + input [114 : 0] wrap128_getTop_cap; + output [32 : 0] wrap128_getTop; + + // signals for module outputs + wire [32 : 0] wrap128_getTop; + + // remaining internal signals + wire [32 : 0] addTop__h64, result__h512, ret__h66; + wire [24 : 0] mask__h65; + wire [23 : 0] wrap128_getTop_cap_BITS_113_TO_90_PLUS_SEXT_wr_ETC__q2; + wire [9 : 0] x__h178; + wire [1 : 0] wrap128_getTop_cap_BITS_1_TO_0__q1; + + // value method wrap128_getTop + assign wrap128_getTop = + (wrap128_getTop_cap[31:26] < 6'd25 && + ret__h66[32:31] - + { 1'b0, + (wrap128_getTop_cap[31:26] == 6'd24) ? + wrap128_getTop_cap[17] : + wrap128_getTop_cap_BITS_113_TO_90_PLUS_SEXT_wr_ETC__q2[23] } > + 2'd1) ? + result__h512 : + ret__h66 ; + + // remaining internal signals + assign addTop__h64 = + { {23{x__h178[9]}}, x__h178 } << wrap128_getTop_cap[31:26] ; + assign mask__h65 = 25'd33554431 << wrap128_getTop_cap[31:26] ; + assign result__h512 = { ~ret__h66[32], ret__h66[31:0] } ; + assign ret__h66 = + { { 1'b0, wrap128_getTop_cap[113:90] } & mask__h65, 8'd0 } + + addTop__h64 ; + assign wrap128_getTop_cap_BITS_113_TO_90_PLUS_SEXT_wr_ETC__q2 = + wrap128_getTop_cap[113:90] + + ({ {22{wrap128_getTop_cap_BITS_1_TO_0__q1[1]}}, + wrap128_getTop_cap_BITS_1_TO_0__q1 } << + wrap128_getTop_cap[31:26]) ; + assign wrap128_getTop_cap_BITS_1_TO_0__q1 = wrap128_getTop_cap[1:0] ; + assign x__h178 = { wrap128_getTop_cap[3:2], wrap128_getTop_cap[25:18] } ; +endmodule // module_wrap128_getTop + diff --git a/module_wrap128_incOffset.v b/module_wrap128_incOffset.v new file mode 100644 index 0000000..1ccdda5 --- /dev/null +++ b/module_wrap128_incOffset.v @@ -0,0 +1,114 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_incOffset O 116 +// wrap128_incOffset_cap I 115 +// wrap128_incOffset_inc I 32 +// +// Combinational paths from inputs to outputs: +// (wrap128_incOffset_cap, wrap128_incOffset_inc) -> wrap128_incOffset +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_incOffset(wrap128_incOffset_cap, + wrap128_incOffset_inc, + wrap128_incOffset); + // value method wrap128_incOffset + input [114 : 0] wrap128_incOffset_cap; + input [31 : 0] wrap128_incOffset_inc; + output [115 : 0] wrap128_incOffset; + + // signals for module outputs + wire [115 : 0] wrap128_incOffset; + + // remaining internal signals + wire [31 : 0] result_d_address__h574, x__h488, x__h597; + wire [23 : 0] highBitsfilter__h79, + highOffsetBits__h80, + signBits__h77, + x__h107; + wire [7 : 0] repBoundBits__h86, toBoundsM1__h90, toBounds__h89; + wire [3 : 0] IF_wrap128_incOffset_cap_BITS_25_TO_23_9_ULT_w_ETC___d53; + wire [2 : 0] repBound__h738; + wire IF_wrap128_incOffset_inc_BIT_31_THEN_NOT_wrap1_ETC___d23, + wrap128_incOffset_cap_BITS_113_TO_82_0_PLUS_wr_ETC___d43, + wrap128_incOffset_cap_BITS_17_TO_15_7_ULT_wrap_ETC___d41, + wrap128_incOffset_cap_BITS_25_TO_23_9_ULT_wrap_ETC___d40; + + // value method wrap128_incOffset + assign wrap128_incOffset = + { highOffsetBits__h80 == 24'd0 && + IF_wrap128_incOffset_inc_BIT_31_THEN_NOT_wrap1_ETC___d23 || + wrap128_incOffset_cap[31:26] >= 6'd24, + (highOffsetBits__h80 == 24'd0 && + IF_wrap128_incOffset_inc_BIT_31_THEN_NOT_wrap1_ETC___d23 || + wrap128_incOffset_cap[31:26] >= 6'd24) && + wrap128_incOffset_cap[114], + result_d_address__h574, + x__h597[7:0], + wrap128_incOffset_cap[73:10], + repBound__h738, + wrap128_incOffset_cap_BITS_25_TO_23_9_ULT_wrap_ETC___d40, + wrap128_incOffset_cap_BITS_17_TO_15_7_ULT_wrap_ETC___d41, + wrap128_incOffset_cap_BITS_113_TO_82_0_PLUS_wr_ETC___d43, + IF_wrap128_incOffset_cap_BITS_25_TO_23_9_ULT_w_ETC___d53 } ; + + // remaining internal signals + assign IF_wrap128_incOffset_cap_BITS_25_TO_23_9_ULT_w_ETC___d53 = + { (wrap128_incOffset_cap_BITS_25_TO_23_9_ULT_wrap_ETC___d40 == + wrap128_incOffset_cap_BITS_113_TO_82_0_PLUS_wr_ETC___d43) ? + 2'd0 : + ((wrap128_incOffset_cap_BITS_25_TO_23_9_ULT_wrap_ETC___d40 && + !wrap128_incOffset_cap_BITS_113_TO_82_0_PLUS_wr_ETC___d43) ? + 2'd1 : + 2'd3), + (wrap128_incOffset_cap_BITS_17_TO_15_7_ULT_wrap_ETC___d41 == + wrap128_incOffset_cap_BITS_113_TO_82_0_PLUS_wr_ETC___d43) ? + 2'd0 : + ((wrap128_incOffset_cap_BITS_17_TO_15_7_ULT_wrap_ETC___d41 && + !wrap128_incOffset_cap_BITS_113_TO_82_0_PLUS_wr_ETC___d43) ? + 2'd1 : + 2'd3) } ; + assign IF_wrap128_incOffset_inc_BIT_31_THEN_NOT_wrap1_ETC___d23 = + wrap128_incOffset_inc[31] ? + x__h488[7:0] >= toBounds__h89 && + repBoundBits__h86 != wrap128_incOffset_cap[81:74] : + x__h488[7:0] < toBoundsM1__h90 ; + assign highBitsfilter__h79 = 24'd16777215 << wrap128_incOffset_cap[31:26] ; + assign highOffsetBits__h80 = x__h107 & highBitsfilter__h79 ; + assign repBoundBits__h86 = { wrap128_incOffset_cap[9:7], 5'd0 } ; + assign repBound__h738 = wrap128_incOffset_cap[17:15] - 3'b001 ; + assign result_d_address__h574 = + wrap128_incOffset_cap[113:82] + wrap128_incOffset_inc ; + assign signBits__h77 = {24{wrap128_incOffset_inc[31]}} ; + assign toBoundsM1__h90 = repBoundBits__h86 + ~wrap128_incOffset_cap[81:74] ; + assign toBounds__h89 = repBoundBits__h86 - wrap128_incOffset_cap[81:74] ; + assign wrap128_incOffset_cap_BITS_113_TO_82_0_PLUS_wr_ETC___d43 = + x__h597[7:5] < repBound__h738 ; + assign wrap128_incOffset_cap_BITS_17_TO_15_7_ULT_wrap_ETC___d41 = + wrap128_incOffset_cap[17:15] < repBound__h738 ; + assign wrap128_incOffset_cap_BITS_25_TO_23_9_ULT_wrap_ETC___d40 = + wrap128_incOffset_cap[25:23] < repBound__h738 ; + assign x__h107 = wrap128_incOffset_inc[31:8] ^ signBits__h77 ; + assign x__h488 = wrap128_incOffset_inc >> wrap128_incOffset_cap[31:26] ; + assign x__h597 = result_d_address__h574 >> wrap128_incOffset_cap[31:26] ; +endmodule // module_wrap128_incOffset + diff --git a/module_wrap128_isInBounds.v b/module_wrap128_isInBounds.v new file mode 100644 index 0000000..2b62743 --- /dev/null +++ b/module_wrap128_isInBounds.v @@ -0,0 +1,57 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_isInBounds O 1 +// wrap128_isInBounds_cap I 115 +// wrap128_isInBounds_isTopIncluded I 1 +// +// Combinational paths from inputs to outputs: +// (wrap128_isInBounds_cap, +// wrap128_isInBounds_isTopIncluded) -> wrap128_isInBounds +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_isInBounds(wrap128_isInBounds_cap, + wrap128_isInBounds_isTopIncluded, + wrap128_isInBounds); + // value method wrap128_isInBounds + input [114 : 0] wrap128_isInBounds_cap; + input wrap128_isInBounds_isTopIncluded; + output wrap128_isInBounds; + + // signals for module outputs + wire wrap128_isInBounds; + + // value method wrap128_isInBounds + assign wrap128_isInBounds = + ((wrap128_isInBounds_cap[6] == wrap128_isInBounds_cap[4]) ? + (wrap128_isInBounds_isTopIncluded ? + wrap128_isInBounds_cap[81:74] <= + wrap128_isInBounds_cap[25:18] : + wrap128_isInBounds_cap[81:74] < + wrap128_isInBounds_cap[25:18]) : + wrap128_isInBounds_cap[6]) && + ((wrap128_isInBounds_cap[5] == wrap128_isInBounds_cap[4]) ? + wrap128_isInBounds_cap[81:74] >= + wrap128_isInBounds_cap[17:10] : + wrap128_isInBounds_cap[4]) ; +endmodule // module_wrap128_isInBounds + diff --git a/module_wrap128_isValidCap.v b/module_wrap128_isValidCap.v new file mode 100644 index 0000000..70db897 --- /dev/null +++ b/module_wrap128_isValidCap.v @@ -0,0 +1,42 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_isValidCap O 1 +// wrap128_isValidCap_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap128_isValidCap_cap -> wrap128_isValidCap +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_isValidCap(wrap128_isValidCap_cap, + wrap128_isValidCap); + // value method wrap128_isValidCap + input [114 : 0] wrap128_isValidCap_cap; + output wrap128_isValidCap; + + // signals for module outputs + wire wrap128_isValidCap; + + // value method wrap128_isValidCap + assign wrap128_isValidCap = wrap128_isValidCap_cap[114] ; +endmodule // module_wrap128_isValidCap + diff --git a/module_wrap128_modifyOffset.v b/module_wrap128_modifyOffset.v new file mode 100644 index 0000000..b95b668 --- /dev/null +++ b/module_wrap128_modifyOffset.v @@ -0,0 +1,176 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_modifyOffset O 116 +// wrap128_modifyOffset_cap I 115 +// wrap128_modifyOffset_offset I 32 +// wrap128_modifyOffset_doInc I 1 +// +// Combinational paths from inputs to outputs: +// (wrap128_modifyOffset_cap, +// wrap128_modifyOffset_offset, +// wrap128_modifyOffset_doInc) -> wrap128_modifyOffset +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_modifyOffset(wrap128_modifyOffset_cap, + wrap128_modifyOffset_offset, + wrap128_modifyOffset_doInc, + wrap128_modifyOffset); + // value method wrap128_modifyOffset + input [114 : 0] wrap128_modifyOffset_cap; + input [31 : 0] wrap128_modifyOffset_offset; + input wrap128_modifyOffset_doInc; + output [115 : 0] wrap128_modifyOffset; + + // signals for module outputs + wire [115 : 0] wrap128_modifyOffset; + + // remaining internal signals + reg [1 : 0] mask__h585; + wire [31 : 0] addBase__h631, + pointer__h74, + result_d_address__h600, + ret___1_address__h611, + x__h491, + x__h741; + wire [23 : 0] highOffsetBits__h81, mask__h632, signBits__h78, x__h108; + wire [9 : 0] x__h682; + wire [7 : 0] newAddrBits__h584, + repBoundBits__h87, + result_d_addrBits__h601, + toBoundsM1_A__h86, + toBoundsM1_B__h89, + toBoundsM1__h91, + toBounds_A__h85, + toBounds_B__h88, + toBounds__h90; + wire [3 : 0] IF_wrap128_modifyOffset_cap_BITS_25_TO_23_9_UL_ETC___d83; + wire [2 : 0] repBound__h881; + wire IF_wrap128_modifyOffset_doInc_THEN_wrap128_mod_ETC___d73, + IF_wrap128_modifyOffset_offset_BIT_31_THEN_NOT_ETC___d34, + NOT_wrap128_modifyOffset_offset_SRL_wrap128_mo_ETC___d25, + wrap128_modifyOffset_cap_BITS_17_TO_15_7_ULT_w_ETC___d71, + wrap128_modifyOffset_cap_BITS_25_TO_23_9_ULT_w_ETC___d70; + + // value method wrap128_modifyOffset + assign wrap128_modifyOffset = + { highOffsetBits__h81 == 24'd0 && + IF_wrap128_modifyOffset_offset_BIT_31_THEN_NOT_ETC___d34 || + wrap128_modifyOffset_cap[31:26] >= 6'd24, + (highOffsetBits__h81 == 24'd0 && + IF_wrap128_modifyOffset_offset_BIT_31_THEN_NOT_ETC___d34 || + wrap128_modifyOffset_cap[31:26] >= 6'd24) && + wrap128_modifyOffset_cap[114], + result_d_address__h600, + result_d_addrBits__h601, + wrap128_modifyOffset_cap[73:10], + repBound__h881, + wrap128_modifyOffset_cap_BITS_25_TO_23_9_ULT_w_ETC___d70, + wrap128_modifyOffset_cap_BITS_17_TO_15_7_ULT_w_ETC___d71, + IF_wrap128_modifyOffset_doInc_THEN_wrap128_mod_ETC___d73, + IF_wrap128_modifyOffset_cap_BITS_25_TO_23_9_UL_ETC___d83 } ; + + // remaining internal signals + assign IF_wrap128_modifyOffset_cap_BITS_25_TO_23_9_UL_ETC___d83 = + { (wrap128_modifyOffset_cap_BITS_25_TO_23_9_ULT_w_ETC___d70 == + IF_wrap128_modifyOffset_doInc_THEN_wrap128_mod_ETC___d73) ? + 2'd0 : + ((wrap128_modifyOffset_cap_BITS_25_TO_23_9_ULT_w_ETC___d70 && + !IF_wrap128_modifyOffset_doInc_THEN_wrap128_mod_ETC___d73) ? + 2'd1 : + 2'd3), + (wrap128_modifyOffset_cap_BITS_17_TO_15_7_ULT_w_ETC___d71 == + IF_wrap128_modifyOffset_doInc_THEN_wrap128_mod_ETC___d73) ? + 2'd0 : + ((wrap128_modifyOffset_cap_BITS_17_TO_15_7_ULT_w_ETC___d71 && + !IF_wrap128_modifyOffset_doInc_THEN_wrap128_mod_ETC___d73) ? + 2'd1 : + 2'd3) } ; + assign IF_wrap128_modifyOffset_doInc_THEN_wrap128_mod_ETC___d73 = + result_d_addrBits__h601[7:5] < repBound__h881 ; + assign IF_wrap128_modifyOffset_offset_BIT_31_THEN_NOT_ETC___d34 = + wrap128_modifyOffset_offset[31] ? + NOT_wrap128_modifyOffset_offset_SRL_wrap128_mo_ETC___d25 : + (wrap128_modifyOffset_doInc ? + x__h491[7:0] < toBoundsM1__h91 : + x__h491[7:0] <= toBoundsM1__h91) ; + assign NOT_wrap128_modifyOffset_offset_SRL_wrap128_mo_ETC___d25 = + x__h491[7:0] >= toBounds__h90 && + (!wrap128_modifyOffset_doInc || + repBoundBits__h87 != wrap128_modifyOffset_cap[81:74]) ; + assign addBase__h631 = + { {22{x__h682[9]}}, x__h682 } << + wrap128_modifyOffset_cap[31:26] ; + assign highOffsetBits__h81 = x__h108 & mask__h632 ; + assign mask__h632 = 24'd16777215 << wrap128_modifyOffset_cap[31:26] ; + assign newAddrBits__h584 = wrap128_modifyOffset_cap[17:10] + x__h491[7:0] ; + assign pointer__h74 = + wrap128_modifyOffset_cap[113:82] + wrap128_modifyOffset_offset ; + assign repBoundBits__h87 = { wrap128_modifyOffset_cap[9:7], 5'd0 } ; + assign repBound__h881 = wrap128_modifyOffset_cap[17:15] - 3'b001 ; + assign result_d_addrBits__h601 = + wrap128_modifyOffset_doInc ? + x__h741[7:0] : + { mask__h585, 6'd63 } & newAddrBits__h584 ; + assign result_d_address__h600 = + wrap128_modifyOffset_doInc ? + pointer__h74 : + ret___1_address__h611 ; + assign ret___1_address__h611 = + { wrap128_modifyOffset_cap[113:90] & mask__h632, 8'd0 } + + addBase__h631 + + wrap128_modifyOffset_offset ; + assign signBits__h78 = {24{wrap128_modifyOffset_offset[31]}} ; + assign toBoundsM1_A__h86 = { 3'b110, ~wrap128_modifyOffset_cap[14:10] } ; + assign toBoundsM1_B__h89 = + repBoundBits__h87 + ~wrap128_modifyOffset_cap[81:74] ; + assign toBoundsM1__h91 = + wrap128_modifyOffset_doInc ? + toBoundsM1_B__h89 : + toBoundsM1_A__h86 ; + assign toBounds_A__h85 = + 8'd224 - { 3'b0, wrap128_modifyOffset_cap[14:10] } ; + assign toBounds_B__h88 = + repBoundBits__h87 - wrap128_modifyOffset_cap[81:74] ; + assign toBounds__h90 = + wrap128_modifyOffset_doInc ? toBounds_B__h88 : toBounds_A__h85 ; + assign wrap128_modifyOffset_cap_BITS_17_TO_15_7_ULT_w_ETC___d71 = + wrap128_modifyOffset_cap[17:15] < repBound__h881 ; + assign wrap128_modifyOffset_cap_BITS_25_TO_23_9_ULT_w_ETC___d70 = + wrap128_modifyOffset_cap[25:23] < repBound__h881 ; + assign x__h108 = wrap128_modifyOffset_offset[31:8] ^ signBits__h78 ; + assign x__h491 = + wrap128_modifyOffset_offset >> wrap128_modifyOffset_cap[31:26] ; + assign x__h682 = + { wrap128_modifyOffset_cap[1:0], + wrap128_modifyOffset_cap[17:10] } ; + assign x__h741 = pointer__h74 >> wrap128_modifyOffset_cap[31:26] ; + always@(wrap128_modifyOffset_cap) + begin + case (wrap128_modifyOffset_cap[31:26]) + 6'd25: mask__h585 = 2'b01; + 6'd26: mask__h585 = 2'b0; + default: mask__h585 = 2'b11; + endcase + end +endmodule // module_wrap128_modifyOffset + diff --git a/module_wrap128_nullCap.v b/module_wrap128_nullCap.v new file mode 100644 index 0000000..4b8feba --- /dev/null +++ b/module_wrap128_nullCap.v @@ -0,0 +1,38 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_nullCap O 115 const +// +// No combinational paths from inputs to outputs +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_nullCap(wrap128_nullCap); + // value method wrap128_nullCap + output [114 : 0] wrap128_nullCap; + + // signals for module outputs + wire [114 : 0] wrap128_nullCap; + + // value method wrap128_nullCap + assign wrap128_nullCap = 115'h00000000000001F555555690003F0 ; +endmodule // module_wrap128_nullCap + diff --git a/module_wrap128_nullWithAddr.v b/module_wrap128_nullWithAddr.v new file mode 100644 index 0000000..7e04859 --- /dev/null +++ b/module_wrap128_nullWithAddr.v @@ -0,0 +1,52 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_nullWithAddr O 115 +// wrap128_nullWithAddr_addr I 32 +// +// Combinational paths from inputs to outputs: +// wrap128_nullWithAddr_addr -> wrap128_nullWithAddr +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_nullWithAddr(wrap128_nullWithAddr_addr, + wrap128_nullWithAddr); + // value method wrap128_nullWithAddr + input [31 : 0] wrap128_nullWithAddr_addr; + output [114 : 0] wrap128_nullWithAddr; + + // signals for module outputs + wire [114 : 0] wrap128_nullWithAddr; + + // remaining internal signals + wire [7 : 0] res_addrBits__h116; + + // value method wrap128_nullWithAddr + assign wrap128_nullWithAddr = + { 1'd0, + wrap128_nullWithAddr_addr, + res_addrBits__h116, + 74'h0001F555555690003F0 } ; + + // remaining internal signals + assign res_addrBits__h116 = { 2'd0, wrap128_nullWithAddr_addr[31:26] } ; +endmodule // module_wrap128_nullWithAddr + diff --git a/module_wrap128_setAddr.v b/module_wrap128_setAddr.v new file mode 100644 index 0000000..8d2b167 --- /dev/null +++ b/module_wrap128_setAddr.v @@ -0,0 +1,103 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_setAddr O 116 +// wrap128_setAddr_cap I 115 +// wrap128_setAddr_addr I 32 +// +// Combinational paths from inputs to outputs: +// (wrap128_setAddr_cap, wrap128_setAddr_addr) -> wrap128_setAddr +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_setAddr(wrap128_setAddr_cap, + wrap128_setAddr_addr, + wrap128_setAddr); + // value method wrap128_setAddr + input [114 : 0] wrap128_setAddr_cap; + input [31 : 0] wrap128_setAddr_addr; + output [115 : 0] wrap128_setAddr; + + // signals for module outputs + wire [115 : 0] wrap128_setAddr; + + // remaining internal signals + wire [31 : 0] x__h102; + wire [23 : 0] deltaAddrHi__h76, deltaAddrUpper__h78, mask__h77; + wire [3 : 0] IF_wrap128_setAddr_cap_BITS_25_TO_23_7_ULT_wra_ETC___d40; + wire [2 : 0] repBound__h430; + wire [1 : 0] x__h84; + wire SEXT__0b0_CONCAT_wrap128_setAddr_addr_SRL_wrap_ETC___d18, + wrap128_setAddr_addr_SRL_wrap128_setAddr_cap_B_ETC___d30, + wrap128_setAddr_cap_BITS_17_TO_15_5_ULT_wrap12_ETC___d29, + wrap128_setAddr_cap_BITS_25_TO_23_7_ULT_wrap12_ETC___d28; + + // value method wrap128_setAddr + assign wrap128_setAddr = + { SEXT__0b0_CONCAT_wrap128_setAddr_addr_SRL_wrap_ETC___d18, + SEXT__0b0_CONCAT_wrap128_setAddr_addr_SRL_wrap_ETC___d18 && + wrap128_setAddr_cap[114], + wrap128_setAddr_addr, + x__h102[7:0], + wrap128_setAddr_cap[73:10], + repBound__h430, + wrap128_setAddr_cap_BITS_25_TO_23_7_ULT_wrap12_ETC___d28, + wrap128_setAddr_cap_BITS_17_TO_15_5_ULT_wrap12_ETC___d29, + wrap128_setAddr_addr_SRL_wrap128_setAddr_cap_B_ETC___d30, + IF_wrap128_setAddr_cap_BITS_25_TO_23_7_ULT_wra_ETC___d40 } ; + + // remaining internal signals + assign IF_wrap128_setAddr_cap_BITS_25_TO_23_7_ULT_wra_ETC___d40 = + { (wrap128_setAddr_cap_BITS_25_TO_23_7_ULT_wrap12_ETC___d28 == + wrap128_setAddr_addr_SRL_wrap128_setAddr_cap_B_ETC___d30) ? + 2'd0 : + ((wrap128_setAddr_cap_BITS_25_TO_23_7_ULT_wrap12_ETC___d28 && + !wrap128_setAddr_addr_SRL_wrap128_setAddr_cap_B_ETC___d30) ? + 2'd1 : + 2'd3), + (wrap128_setAddr_cap_BITS_17_TO_15_5_ULT_wrap12_ETC___d29 == + wrap128_setAddr_addr_SRL_wrap128_setAddr_cap_B_ETC___d30) ? + 2'd0 : + ((wrap128_setAddr_cap_BITS_17_TO_15_5_ULT_wrap12_ETC___d29 && + !wrap128_setAddr_addr_SRL_wrap128_setAddr_cap_B_ETC___d30) ? + 2'd1 : + 2'd3) } ; + assign SEXT__0b0_CONCAT_wrap128_setAddr_addr_SRL_wrap_ETC___d18 = + deltaAddrHi__h76 == deltaAddrUpper__h78 ; + assign deltaAddrHi__h76 = + { {22{x__h84[1]}}, x__h84 } << wrap128_setAddr_cap[31:26] ; + assign deltaAddrUpper__h78 = + (wrap128_setAddr_addr[31:8] & mask__h77) - + (wrap128_setAddr_cap[113:90] & mask__h77) ; + assign mask__h77 = 24'd16777215 << wrap128_setAddr_cap[31:26] ; + assign repBound__h430 = wrap128_setAddr_cap[17:15] - 3'b001 ; + assign wrap128_setAddr_addr_SRL_wrap128_setAddr_cap_B_ETC___d30 = + x__h102[7:5] < repBound__h430 ; + assign wrap128_setAddr_cap_BITS_17_TO_15_5_ULT_wrap12_ETC___d29 = + wrap128_setAddr_cap[17:15] < repBound__h430 ; + assign wrap128_setAddr_cap_BITS_25_TO_23_7_ULT_wrap12_ETC___d28 = + wrap128_setAddr_cap[25:23] < repBound__h430 ; + assign x__h102 = wrap128_setAddr_addr >> wrap128_setAddr_cap[31:26] ; + assign x__h84 = + { 1'b0, x__h102[7:5] < wrap128_setAddr_cap[9:7] } - + { 1'b0, wrap128_setAddr_cap[4] } ; +endmodule // module_wrap128_setAddr + diff --git a/module_wrap128_setBounds.v b/module_wrap128_setBounds.v new file mode 100644 index 0000000..e6bf523 --- /dev/null +++ b/module_wrap128_setBounds.v @@ -0,0 +1,561 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_setBounds O 116 +// wrap128_setBounds_cap I 115 +// wrap128_setBounds_length I 32 +// +// Combinational paths from inputs to outputs: +// (wrap128_setBounds_cap, wrap128_setBounds_length) -> wrap128_setBounds +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_setBounds(wrap128_setBounds_cap, + wrap128_setBounds_length, + wrap128_setBounds); + // value method wrap128_setBounds + input [114 : 0] wrap128_setBounds_cap; + input [31 : 0] wrap128_setBounds_length; + output [115 : 0] wrap128_setBounds; + + // signals for module outputs + wire [115 : 0] wrap128_setBounds; + + // remaining internal signals + wire [33 : 0] base__h84, + len__h86, + lmaskLo__h92, + lmaskLor__h91, + mwLsbMask__h100, + top__h87, + x__h4494, + x__h4615, + x__h4798, + y__h4495; + wire [31 : 0] wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d110, + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d10, + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d13, + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d16, + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d4, + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d7; + wire [15 : 0] IF_NOT_wrap128_setBounds_length_BIT_31_1_2_AND_ETC___d212; + wire [8 : 0] x__h4837; + wire [7 : 0] _theResult_____3_fst_bounds_topBits__h4604, + result_cap_addrBits__h4434, + ret_bounds_baseBits__h4780, + ret_bounds_topBits__h4600, + ret_bounds_topBits__h4829, + x__h4874, + x__h4877; + wire [5 : 0] IF_wrap128_setBounds_length_AND_15_CONCAT_INV__ETC___d190, + _25_MINUS_0_CONCAT_IF_wrap128_setBounds_length__ETC___d183; + wire [3 : 0] IF_IF_NOT_wrap128_setBounds_length_BIT_31_1_2__ETC___d234; + wire [2 : 0] repBound__h4867; + wire IF_NOT_wrap128_setBounds_length_BIT_31_1_2_AND_ETC___d221, + IF_NOT_wrap128_setBounds_length_BIT_31_1_2_AND_ETC___d222, + IF_wrap128_setBounds_length_AND_15_CONCAT_INV__ETC___d224, + NOT_0_CONCAT_wrap128_setBounds_length_OR_0_CON_ETC___d122, + NOT_0b0_CONCAT_wrap128_setBounds_cap_BITS_113__ETC___d191, + NOT_0b0_CONCAT_wrap128_setBounds_cap_BITS_113__ETC___d202, + _0b0_CONCAT_wrap128_setBounds_cap_BITS_113_TO_8_ETC___d105, + wrap128_setBounds_cap_BITS_113_TO_82_AND_0_CON_ETC___d98, + wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d123, + wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d129, + wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d130; + + // value method wrap128_setBounds + assign wrap128_setBounds = + { wrap128_setBounds_cap_BITS_113_TO_82_AND_0_CON_ETC___d98 && + _0b0_CONCAT_wrap128_setBounds_cap_BITS_113_TO_8_ETC___d105, + wrap128_setBounds_cap[114:82], + result_cap_addrBits__h4434, + wrap128_setBounds_cap[73:33], + wrap128_setBounds_length[31] || wrap128_setBounds_length[30] || + wrap128_setBounds_length[29] || + wrap128_setBounds_length[28] || + wrap128_setBounds_length[27] || + wrap128_setBounds_length[26] || + wrap128_setBounds_length[25] || + wrap128_setBounds_length[24] || + wrap128_setBounds_length[23] || + wrap128_setBounds_length[22] || + wrap128_setBounds_length[21] || + wrap128_setBounds_length[20] || + wrap128_setBounds_length[19] || + wrap128_setBounds_length[18] || + wrap128_setBounds_length[17] || + wrap128_setBounds_length[16] || + wrap128_setBounds_length[15] || + wrap128_setBounds_length[14] || + wrap128_setBounds_length[13] || + wrap128_setBounds_length[12] || + wrap128_setBounds_length[11] || + wrap128_setBounds_length[10] || + wrap128_setBounds_length[9] || + wrap128_setBounds_length[8] || + wrap128_setBounds_length[7] || + wrap128_setBounds_length[6], + IF_wrap128_setBounds_length_AND_15_CONCAT_INV__ETC___d190, + IF_NOT_wrap128_setBounds_length_BIT_31_1_2_AND_ETC___d212, + repBound__h4867, + IF_NOT_wrap128_setBounds_length_BIT_31_1_2_AND_ETC___d221, + IF_NOT_wrap128_setBounds_length_BIT_31_1_2_AND_ETC___d222, + IF_wrap128_setBounds_length_AND_15_CONCAT_INV__ETC___d224, + IF_IF_NOT_wrap128_setBounds_length_BIT_31_1_2__ETC___d234 } ; + + // remaining internal signals + assign IF_IF_NOT_wrap128_setBounds_length_BIT_31_1_2__ETC___d234 = + { (IF_NOT_wrap128_setBounds_length_BIT_31_1_2_AND_ETC___d221 == + IF_wrap128_setBounds_length_AND_15_CONCAT_INV__ETC___d224) ? + 2'd0 : + ((IF_NOT_wrap128_setBounds_length_BIT_31_1_2_AND_ETC___d221 && + !IF_wrap128_setBounds_length_AND_15_CONCAT_INV__ETC___d224) ? + 2'd1 : + 2'd3), + (IF_NOT_wrap128_setBounds_length_BIT_31_1_2_AND_ETC___d222 == + IF_wrap128_setBounds_length_AND_15_CONCAT_INV__ETC___d224) ? + 2'd0 : + ((IF_NOT_wrap128_setBounds_length_BIT_31_1_2_AND_ETC___d222 && + !IF_wrap128_setBounds_length_AND_15_CONCAT_INV__ETC___d224) ? + 2'd1 : + 2'd3) } ; + assign IF_NOT_wrap128_setBounds_length_BIT_31_1_2_AND_ETC___d212 = + (!wrap128_setBounds_length[31] && + !wrap128_setBounds_length[30] && + !wrap128_setBounds_length[29] && + !wrap128_setBounds_length[28] && + !wrap128_setBounds_length[27] && + !wrap128_setBounds_length[26] && + !wrap128_setBounds_length[25] && + !wrap128_setBounds_length[24] && + !wrap128_setBounds_length[23] && + !wrap128_setBounds_length[22] && + !wrap128_setBounds_length[21] && + !wrap128_setBounds_length[20] && + !wrap128_setBounds_length[19] && + !wrap128_setBounds_length[18] && + !wrap128_setBounds_length[17] && + !wrap128_setBounds_length[16] && + !wrap128_setBounds_length[15] && + !wrap128_setBounds_length[14] && + !wrap128_setBounds_length[13] && + !wrap128_setBounds_length[12] && + !wrap128_setBounds_length[11] && + !wrap128_setBounds_length[10] && + !wrap128_setBounds_length[9] && + !wrap128_setBounds_length[8] && + !wrap128_setBounds_length[7] && + !wrap128_setBounds_length[6]) ? + { ret_bounds_topBits__h4829, x__h4615[7:0] } : + { ret_bounds_topBits__h4600[7:3], + 3'd0, + ret_bounds_baseBits__h4780 } ; + assign IF_NOT_wrap128_setBounds_length_BIT_31_1_2_AND_ETC___d221 = + x__h4877[7:5] < repBound__h4867 ; + assign IF_NOT_wrap128_setBounds_length_BIT_31_1_2_AND_ETC___d222 = + x__h4874[7:5] < repBound__h4867 ; + assign IF_wrap128_setBounds_length_AND_15_CONCAT_INV__ETC___d190 = + (wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d130 && + (wrap128_setBounds_length[31] || wrap128_setBounds_length[30] || + wrap128_setBounds_length[29] || + wrap128_setBounds_length[28] || + wrap128_setBounds_length[27] || + wrap128_setBounds_length[26] || + wrap128_setBounds_length[25] || + wrap128_setBounds_length[24] || + wrap128_setBounds_length[23] || + wrap128_setBounds_length[22] || + wrap128_setBounds_length[21] || + wrap128_setBounds_length[20] || + wrap128_setBounds_length[19] || + wrap128_setBounds_length[18] || + wrap128_setBounds_length[17] || + wrap128_setBounds_length[16] || + wrap128_setBounds_length[15] || + wrap128_setBounds_length[14] || + wrap128_setBounds_length[13] || + wrap128_setBounds_length[12] || + wrap128_setBounds_length[11] || + wrap128_setBounds_length[10] || + wrap128_setBounds_length[9] || + wrap128_setBounds_length[8] || + wrap128_setBounds_length[7] || + wrap128_setBounds_length[6])) ? + _25_MINUS_0_CONCAT_IF_wrap128_setBounds_length__ETC___d183 + + 6'd1 : + _25_MINUS_0_CONCAT_IF_wrap128_setBounds_length__ETC___d183 ; + assign IF_wrap128_setBounds_length_AND_15_CONCAT_INV__ETC___d224 = + result_cap_addrBits__h4434[7:5] < repBound__h4867 ; + assign NOT_0_CONCAT_wrap128_setBounds_length_OR_0_CON_ETC___d122 = + (mwLsbMask__h100 & top__h87) != (x__h4494 ^ y__h4495) ; + assign NOT_0b0_CONCAT_wrap128_setBounds_cap_BITS_113__ETC___d191 = + (top__h87 & lmaskLor__h91) != 34'd0 && + (wrap128_setBounds_length[31] || wrap128_setBounds_length[30] || + wrap128_setBounds_length[29] || + wrap128_setBounds_length[28] || + wrap128_setBounds_length[27] || + wrap128_setBounds_length[26] || + wrap128_setBounds_length[25] || + wrap128_setBounds_length[24] || + wrap128_setBounds_length[23] || + wrap128_setBounds_length[22] || + wrap128_setBounds_length[21] || + wrap128_setBounds_length[20] || + wrap128_setBounds_length[19] || + wrap128_setBounds_length[18] || + wrap128_setBounds_length[17] || + wrap128_setBounds_length[16] || + wrap128_setBounds_length[15] || + wrap128_setBounds_length[14] || + wrap128_setBounds_length[13] || + wrap128_setBounds_length[12] || + wrap128_setBounds_length[11] || + wrap128_setBounds_length[10] || + wrap128_setBounds_length[9] || + wrap128_setBounds_length[8] || + wrap128_setBounds_length[7] || + wrap128_setBounds_length[6]) ; + assign NOT_0b0_CONCAT_wrap128_setBounds_cap_BITS_113__ETC___d202 = + (top__h87 & lmaskLo__h92) != 34'd0 && + (wrap128_setBounds_length[31] || wrap128_setBounds_length[30] || + wrap128_setBounds_length[29] || + wrap128_setBounds_length[28] || + wrap128_setBounds_length[27] || + wrap128_setBounds_length[26] || + wrap128_setBounds_length[25] || + wrap128_setBounds_length[24] || + wrap128_setBounds_length[23] || + wrap128_setBounds_length[22] || + wrap128_setBounds_length[21] || + wrap128_setBounds_length[20] || + wrap128_setBounds_length[19] || + wrap128_setBounds_length[18] || + wrap128_setBounds_length[17] || + wrap128_setBounds_length[16] || + wrap128_setBounds_length[15] || + wrap128_setBounds_length[14] || + wrap128_setBounds_length[13] || + wrap128_setBounds_length[12] || + wrap128_setBounds_length[11] || + wrap128_setBounds_length[10] || + wrap128_setBounds_length[9] || + wrap128_setBounds_length[8] || + wrap128_setBounds_length[7] || + wrap128_setBounds_length[6]) ; + assign _0b0_CONCAT_wrap128_setBounds_cap_BITS_113_TO_8_ETC___d105 = + (top__h87 & lmaskLor__h91) == 34'd0 || + !wrap128_setBounds_length[31] && !wrap128_setBounds_length[30] && + !wrap128_setBounds_length[29] && + !wrap128_setBounds_length[28] && + !wrap128_setBounds_length[27] && + !wrap128_setBounds_length[26] && + !wrap128_setBounds_length[25] && + !wrap128_setBounds_length[24] && + !wrap128_setBounds_length[23] && + !wrap128_setBounds_length[22] && + !wrap128_setBounds_length[21] && + !wrap128_setBounds_length[20] && + !wrap128_setBounds_length[19] && + !wrap128_setBounds_length[18] && + !wrap128_setBounds_length[17] && + !wrap128_setBounds_length[16] && + !wrap128_setBounds_length[15] && + !wrap128_setBounds_length[14] && + !wrap128_setBounds_length[13] && + !wrap128_setBounds_length[12] && + !wrap128_setBounds_length[11] && + !wrap128_setBounds_length[10] && + !wrap128_setBounds_length[9] && + !wrap128_setBounds_length[8] && + !wrap128_setBounds_length[7] && + !wrap128_setBounds_length[6] ; + assign _25_MINUS_0_CONCAT_IF_wrap128_setBounds_length__ETC___d183 = + 6'd25 - + { 1'd0, + wrap128_setBounds_length[31] ? + 5'd0 : + (wrap128_setBounds_length[30] ? + 5'd1 : + (wrap128_setBounds_length[29] ? + 5'd2 : + (wrap128_setBounds_length[28] ? + 5'd3 : + (wrap128_setBounds_length[27] ? + 5'd4 : + (wrap128_setBounds_length[26] ? + 5'd5 : + (wrap128_setBounds_length[25] ? + 5'd6 : + (wrap128_setBounds_length[24] ? + 5'd7 : + (wrap128_setBounds_length[23] ? + 5'd8 : + (wrap128_setBounds_length[22] ? + 5'd9 : + (wrap128_setBounds_length[21] ? + 5'd10 : + (wrap128_setBounds_length[20] ? + 5'd11 : + (wrap128_setBounds_length[19] ? + 5'd12 : + (wrap128_setBounds_length[18] ? + 5'd13 : + (wrap128_setBounds_length[17] ? + 5'd14 : + (wrap128_setBounds_length[16] ? + 5'd15 : + (wrap128_setBounds_length[15] ? + 5'd16 : + (wrap128_setBounds_length[14] ? + 5'd17 : + (wrap128_setBounds_length[13] ? + 5'd18 : + (wrap128_setBounds_length[12] ? + 5'd19 : + (wrap128_setBounds_length[11] ? + 5'd20 : + (wrap128_setBounds_length[10] ? + 5'd21 : + (wrap128_setBounds_length[9] ? + 5'd22 : + (wrap128_setBounds_length[8] ? + 5'd23 : + (wrap128_setBounds_length[7] ? + 5'd24 : + 5'd25)))))))))))))))))))))))) } ; + assign _theResult_____3_fst_bounds_topBits__h4604 = + NOT_0b0_CONCAT_wrap128_setBounds_cap_BITS_113__ETC___d202 ? + x__h4798[8:1] + 8'b00001000 : + x__h4798[8:1] ; + assign base__h84 = { 2'b0, wrap128_setBounds_cap[113:82] } ; + assign len__h86 = { 2'b0, wrap128_setBounds_length } ; + assign lmaskLo__h92 = + { 5'd0, + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d16[31:3] } ; + assign lmaskLor__h91 = + { 6'd0, + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d16[31:4] } ; + assign mwLsbMask__h100 = lmaskLor__h91 ^ lmaskLo__h92 ; + assign repBound__h4867 = x__h4874[7:5] - 3'b001 ; + assign result_cap_addrBits__h4434 = + (wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d130 && + (wrap128_setBounds_length[31] || wrap128_setBounds_length[30] || + wrap128_setBounds_length[29] || + wrap128_setBounds_length[28] || + wrap128_setBounds_length[27] || + wrap128_setBounds_length[26] || + wrap128_setBounds_length[25] || + wrap128_setBounds_length[24] || + wrap128_setBounds_length[23] || + wrap128_setBounds_length[22] || + wrap128_setBounds_length[21] || + wrap128_setBounds_length[20] || + wrap128_setBounds_length[19] || + wrap128_setBounds_length[18] || + wrap128_setBounds_length[17] || + wrap128_setBounds_length[16] || + wrap128_setBounds_length[15] || + wrap128_setBounds_length[14] || + wrap128_setBounds_length[13] || + wrap128_setBounds_length[12] || + wrap128_setBounds_length[11] || + wrap128_setBounds_length[10] || + wrap128_setBounds_length[9] || + wrap128_setBounds_length[8] || + wrap128_setBounds_length[7] || + wrap128_setBounds_length[6])) ? + x__h4615[8:1] : + x__h4615[7:0] ; + assign ret_bounds_baseBits__h4780 = + { result_cap_addrBits__h4434[7:3], 3'd0 } ; + assign ret_bounds_topBits__h4600 = + (wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d130 && + (wrap128_setBounds_length[31] || wrap128_setBounds_length[30] || + wrap128_setBounds_length[29] || + wrap128_setBounds_length[28] || + wrap128_setBounds_length[27] || + wrap128_setBounds_length[26] || + wrap128_setBounds_length[25] || + wrap128_setBounds_length[24] || + wrap128_setBounds_length[23] || + wrap128_setBounds_length[22] || + wrap128_setBounds_length[21] || + wrap128_setBounds_length[20] || + wrap128_setBounds_length[19] || + wrap128_setBounds_length[18] || + wrap128_setBounds_length[17] || + wrap128_setBounds_length[16] || + wrap128_setBounds_length[15] || + wrap128_setBounds_length[14] || + wrap128_setBounds_length[13] || + wrap128_setBounds_length[12] || + wrap128_setBounds_length[11] || + wrap128_setBounds_length[10] || + wrap128_setBounds_length[9] || + wrap128_setBounds_length[8] || + wrap128_setBounds_length[7] || + wrap128_setBounds_length[6])) ? + _theResult_____3_fst_bounds_topBits__h4604 : + ret_bounds_topBits__h4829 ; + assign ret_bounds_topBits__h4829 = + NOT_0b0_CONCAT_wrap128_setBounds_cap_BITS_113__ETC___d191 ? + x__h4837[7:0] : + x__h4798[7:0] ; + assign top__h87 = base__h84 + len__h86 ; + assign wrap128_setBounds_cap_BITS_113_TO_82_AND_0_CON_ETC___d98 = + (wrap128_setBounds_cap[113:82] & + { 4'd0, + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d16[31:4] }) == + 32'd0 || + !wrap128_setBounds_length[31] && !wrap128_setBounds_length[30] && + !wrap128_setBounds_length[29] && + !wrap128_setBounds_length[28] && + !wrap128_setBounds_length[27] && + !wrap128_setBounds_length[26] && + !wrap128_setBounds_length[25] && + !wrap128_setBounds_length[24] && + !wrap128_setBounds_length[23] && + !wrap128_setBounds_length[22] && + !wrap128_setBounds_length[21] && + !wrap128_setBounds_length[20] && + !wrap128_setBounds_length[19] && + !wrap128_setBounds_length[18] && + !wrap128_setBounds_length[17] && + !wrap128_setBounds_length[16] && + !wrap128_setBounds_length[15] && + !wrap128_setBounds_length[14] && + !wrap128_setBounds_length[13] && + !wrap128_setBounds_length[12] && + !wrap128_setBounds_length[11] && + !wrap128_setBounds_length[10] && + !wrap128_setBounds_length[9] && + !wrap128_setBounds_length[8] && + !wrap128_setBounds_length[7] && + !wrap128_setBounds_length[6] ; + assign wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d110 = + wrap128_setBounds_length & + { 4'd15, + ~wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d16[31:4] } ; + assign wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d123 = + wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d110 == + (wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d16 ^ + { 3'd0, + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d16[31:3] }) && + NOT_0_CONCAT_wrap128_setBounds_length_OR_0_CON_ETC___d122 ; + assign wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d129 = + wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d110 == + (wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d16 ^ + { 4'd0, + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d16[31:4] }) && + (NOT_0_CONCAT_wrap128_setBounds_length_OR_0_CON_ETC___d122 || + (top__h87 & lmaskLor__h91) != 34'd0) ; + assign wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d130 = + wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d123 && + (top__h87 & lmaskLor__h91) != 34'd0 || + wrap128_setBounds_length_AND_15_CONCAT_INV_wra_ETC___d129 ; + assign wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d10 = + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d7 | + { 4'd0, + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d7[31:4] } ; + assign wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d13 = + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d10 | + { 8'd0, + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d10[31:8] } ; + assign wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d16 = + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d13 | + { 16'd0, + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d13[31:16] } ; + assign wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d4 = + wrap128_setBounds_length | + { 1'd0, wrap128_setBounds_length[31:1] } ; + assign wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d7 = + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d4 | + { 2'd0, + wrap128_setBounds_length_OR_0_CONCAT_wrap128_s_ETC___d4[31:2] } ; + assign x__h4494 = mwLsbMask__h100 & base__h84 ; + assign x__h4615 = + base__h84 >> + _25_MINUS_0_CONCAT_IF_wrap128_setBounds_length__ETC___d183 ; + assign x__h4798 = + top__h87 >> + _25_MINUS_0_CONCAT_IF_wrap128_setBounds_length__ETC___d183 ; + assign x__h4837 = x__h4798[8:0] + 9'b000001000 ; + assign x__h4874 = + (!wrap128_setBounds_length[31] && + !wrap128_setBounds_length[30] && + !wrap128_setBounds_length[29] && + !wrap128_setBounds_length[28] && + !wrap128_setBounds_length[27] && + !wrap128_setBounds_length[26] && + !wrap128_setBounds_length[25] && + !wrap128_setBounds_length[24] && + !wrap128_setBounds_length[23] && + !wrap128_setBounds_length[22] && + !wrap128_setBounds_length[21] && + !wrap128_setBounds_length[20] && + !wrap128_setBounds_length[19] && + !wrap128_setBounds_length[18] && + !wrap128_setBounds_length[17] && + !wrap128_setBounds_length[16] && + !wrap128_setBounds_length[15] && + !wrap128_setBounds_length[14] && + !wrap128_setBounds_length[13] && + !wrap128_setBounds_length[12] && + !wrap128_setBounds_length[11] && + !wrap128_setBounds_length[10] && + !wrap128_setBounds_length[9] && + !wrap128_setBounds_length[8] && + !wrap128_setBounds_length[7] && + !wrap128_setBounds_length[6]) ? + result_cap_addrBits__h4434 : + ret_bounds_baseBits__h4780 ; + assign x__h4877 = + (!wrap128_setBounds_length[31] && + !wrap128_setBounds_length[30] && + !wrap128_setBounds_length[29] && + !wrap128_setBounds_length[28] && + !wrap128_setBounds_length[27] && + !wrap128_setBounds_length[26] && + !wrap128_setBounds_length[25] && + !wrap128_setBounds_length[24] && + !wrap128_setBounds_length[23] && + !wrap128_setBounds_length[22] && + !wrap128_setBounds_length[21] && + !wrap128_setBounds_length[20] && + !wrap128_setBounds_length[19] && + !wrap128_setBounds_length[18] && + !wrap128_setBounds_length[17] && + !wrap128_setBounds_length[16] && + !wrap128_setBounds_length[15] && + !wrap128_setBounds_length[14] && + !wrap128_setBounds_length[13] && + !wrap128_setBounds_length[12] && + !wrap128_setBounds_length[11] && + !wrap128_setBounds_length[10] && + !wrap128_setBounds_length[9] && + !wrap128_setBounds_length[8] && + !wrap128_setBounds_length[7] && + !wrap128_setBounds_length[6]) ? + ret_bounds_topBits__h4600 : + { ret_bounds_topBits__h4600[7:3], 3'd0 } ; + assign y__h4495 = mwLsbMask__h100 & len__h86 ; +endmodule // module_wrap128_setBounds + diff --git a/module_wrap128_setFlags.v b/module_wrap128_setFlags.v new file mode 100644 index 0000000..bc29041 --- /dev/null +++ b/module_wrap128_setFlags.v @@ -0,0 +1,48 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_setFlags O 115 +// wrap128_setFlags_cap I 115 +// wrap128_setFlags_flags I 1 +// +// Combinational paths from inputs to outputs: +// (wrap128_setFlags_cap, wrap128_setFlags_flags) -> wrap128_setFlags +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_setFlags(wrap128_setFlags_cap, + wrap128_setFlags_flags, + wrap128_setFlags); + // value method wrap128_setFlags + input [114 : 0] wrap128_setFlags_cap; + input wrap128_setFlags_flags; + output [114 : 0] wrap128_setFlags; + + // signals for module outputs + wire [114 : 0] wrap128_setFlags; + + // value method wrap128_setFlags + assign wrap128_setFlags = + { wrap128_setFlags_cap[114:62], + wrap128_setFlags_flags, + wrap128_setFlags_cap[60:0] } ; +endmodule // module_wrap128_setFlags + diff --git a/module_wrap128_setHardPerms.v b/module_wrap128_setHardPerms.v new file mode 100644 index 0000000..34446f5 --- /dev/null +++ b/module_wrap128_setHardPerms.v @@ -0,0 +1,49 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_setHardPerms O 115 +// wrap128_setHardPerms_cap I 115 +// wrap128_setHardPerms_hardperms I 12 +// +// Combinational paths from inputs to outputs: +// (wrap128_setHardPerms_cap, +// wrap128_setHardPerms_hardperms) -> wrap128_setHardPerms +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_setHardPerms(wrap128_setHardPerms_cap, + wrap128_setHardPerms_hardperms, + wrap128_setHardPerms); + // value method wrap128_setHardPerms + input [114 : 0] wrap128_setHardPerms_cap; + input [11 : 0] wrap128_setHardPerms_hardperms; + output [114 : 0] wrap128_setHardPerms; + + // signals for module outputs + wire [114 : 0] wrap128_setHardPerms; + + // value method wrap128_setHardPerms + assign wrap128_setHardPerms = + { wrap128_setHardPerms_cap[114:74], + wrap128_setHardPerms_hardperms, + wrap128_setHardPerms_cap[61:0] } ; +endmodule // module_wrap128_setHardPerms + diff --git a/module_wrap128_setKind.v b/module_wrap128_setKind.v new file mode 100644 index 0000000..ef0db83 --- /dev/null +++ b/module_wrap128_setKind.v @@ -0,0 +1,64 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_setKind O 115 +// wrap128_setKind_cap I 115 +// wrap128_setKind_kind I 7 +// +// Combinational paths from inputs to outputs: +// (wrap128_setKind_cap, wrap128_setKind_kind) -> wrap128_setKind +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_setKind(wrap128_setKind_cap, + wrap128_setKind_kind, + wrap128_setKind); + // value method wrap128_setKind + input [114 : 0] wrap128_setKind_cap; + input [6 : 0] wrap128_setKind_kind; + output [114 : 0] wrap128_setKind; + + // signals for module outputs + wire [114 : 0] wrap128_setKind; + + // remaining internal signals + reg [3 : 0] CASE_wrap128_setKind_kind_BITS_6_TO_4_0_15_1_1_ETC__q1; + + // value method wrap128_setKind + assign wrap128_setKind = + { wrap128_setKind_cap[114:61], + CASE_wrap128_setKind_kind_BITS_6_TO_4_0_15_1_1_ETC__q1, + wrap128_setKind_cap[56:0] } ; + + // remaining internal signals + always@(wrap128_setKind_kind) + begin + case (wrap128_setKind_kind[6:4]) + 3'd0: CASE_wrap128_setKind_kind_BITS_6_TO_4_0_15_1_1_ETC__q1 = 4'd15; + 3'd1: CASE_wrap128_setKind_kind_BITS_6_TO_4_0_15_1_1_ETC__q1 = 4'd14; + 3'd2: CASE_wrap128_setKind_kind_BITS_6_TO_4_0_15_1_1_ETC__q1 = 4'd13; + 3'd3: CASE_wrap128_setKind_kind_BITS_6_TO_4_0_15_1_1_ETC__q1 = 4'd12; + default: CASE_wrap128_setKind_kind_BITS_6_TO_4_0_15_1_1_ETC__q1 = + wrap128_setKind_kind[3:0]; + endcase + end +endmodule // module_wrap128_setKind + diff --git a/module_wrap128_setOffset.v b/module_wrap128_setOffset.v new file mode 100644 index 0000000..d7509f9 --- /dev/null +++ b/module_wrap128_setOffset.v @@ -0,0 +1,129 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_setOffset O 116 +// wrap128_setOffset_cap I 115 +// wrap128_setOffset_offset I 32 +// +// Combinational paths from inputs to outputs: +// (wrap128_setOffset_cap, wrap128_setOffset_offset) -> wrap128_setOffset +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_setOffset(wrap128_setOffset_cap, + wrap128_setOffset_offset, + wrap128_setOffset); + // value method wrap128_setOffset + input [114 : 0] wrap128_setOffset_cap; + input [31 : 0] wrap128_setOffset_offset; + output [115 : 0] wrap128_setOffset; + + // signals for module outputs + wire [115 : 0] wrap128_setOffset; + + // remaining internal signals + reg [1 : 0] mask__h560; + wire [31 : 0] addBase__h594, result_d_address__h572, x__h488; + wire [23 : 0] highOffsetBits__h80, mask__h595, signBits__h77, x__h107; + wire [9 : 0] x__h645; + wire [7 : 0] newAddrBits__h559, + result_d_addrBits__h573, + toBoundsM1__h90, + toBounds__h89; + wire [3 : 0] IF_wrap128_setOffset_cap_BITS_25_TO_23_8_ULT_w_ETC___d62; + wire [2 : 0] repBound__h826; + wire IF_wrap128_setOffset_cap_BITS_31_TO_26_EQ_26_6_ETC___d52, + IF_wrap128_setOffset_offset_BIT_31_THEN_NOT_wr_ETC___d19, + wrap128_setOffset_cap_BITS_17_TO_15_6_ULT_wrap_ETC___d50, + wrap128_setOffset_cap_BITS_25_TO_23_8_ULT_wrap_ETC___d49; + + // value method wrap128_setOffset + assign wrap128_setOffset = + { highOffsetBits__h80 == 24'd0 && + IF_wrap128_setOffset_offset_BIT_31_THEN_NOT_wr_ETC___d19 || + wrap128_setOffset_cap[31:26] >= 6'd24, + (highOffsetBits__h80 == 24'd0 && + IF_wrap128_setOffset_offset_BIT_31_THEN_NOT_wr_ETC___d19 || + wrap128_setOffset_cap[31:26] >= 6'd24) && + wrap128_setOffset_cap[114], + result_d_address__h572, + result_d_addrBits__h573, + wrap128_setOffset_cap[73:10], + repBound__h826, + wrap128_setOffset_cap_BITS_25_TO_23_8_ULT_wrap_ETC___d49, + wrap128_setOffset_cap_BITS_17_TO_15_6_ULT_wrap_ETC___d50, + IF_wrap128_setOffset_cap_BITS_31_TO_26_EQ_26_6_ETC___d52, + IF_wrap128_setOffset_cap_BITS_25_TO_23_8_ULT_w_ETC___d62 } ; + + // remaining internal signals + assign IF_wrap128_setOffset_cap_BITS_25_TO_23_8_ULT_w_ETC___d62 = + { (wrap128_setOffset_cap_BITS_25_TO_23_8_ULT_wrap_ETC___d49 == + IF_wrap128_setOffset_cap_BITS_31_TO_26_EQ_26_6_ETC___d52) ? + 2'd0 : + ((wrap128_setOffset_cap_BITS_25_TO_23_8_ULT_wrap_ETC___d49 && + !IF_wrap128_setOffset_cap_BITS_31_TO_26_EQ_26_6_ETC___d52) ? + 2'd1 : + 2'd3), + (wrap128_setOffset_cap_BITS_17_TO_15_6_ULT_wrap_ETC___d50 == + IF_wrap128_setOffset_cap_BITS_31_TO_26_EQ_26_6_ETC___d52) ? + 2'd0 : + ((wrap128_setOffset_cap_BITS_17_TO_15_6_ULT_wrap_ETC___d50 && + !IF_wrap128_setOffset_cap_BITS_31_TO_26_EQ_26_6_ETC___d52) ? + 2'd1 : + 2'd3) } ; + assign IF_wrap128_setOffset_cap_BITS_31_TO_26_EQ_26_6_ETC___d52 = + result_d_addrBits__h573[7:5] < repBound__h826 ; + assign IF_wrap128_setOffset_offset_BIT_31_THEN_NOT_wr_ETC___d19 = + wrap128_setOffset_offset[31] ? + x__h488[7:0] >= toBounds__h89 : + x__h488[7:0] <= toBoundsM1__h90 ; + assign addBase__h594 = + { {22{x__h645[9]}}, x__h645 } << wrap128_setOffset_cap[31:26] ; + assign highOffsetBits__h80 = x__h107 & mask__h595 ; + assign mask__h595 = 24'd16777215 << wrap128_setOffset_cap[31:26] ; + assign newAddrBits__h559 = wrap128_setOffset_cap[17:10] + x__h488[7:0] ; + assign repBound__h826 = wrap128_setOffset_cap[17:15] - 3'b001 ; + assign result_d_addrBits__h573 = { mask__h560, 6'd63 } & newAddrBits__h559 ; + assign result_d_address__h572 = + { wrap128_setOffset_cap[113:90] & mask__h595, 8'd0 } + + addBase__h594 + + wrap128_setOffset_offset ; + assign signBits__h77 = {24{wrap128_setOffset_offset[31]}} ; + assign toBoundsM1__h90 = { 3'b110, ~wrap128_setOffset_cap[14:10] } ; + assign toBounds__h89 = 8'd224 - { 3'b0, wrap128_setOffset_cap[14:10] } ; + assign wrap128_setOffset_cap_BITS_17_TO_15_6_ULT_wrap_ETC___d50 = + wrap128_setOffset_cap[17:15] < repBound__h826 ; + assign wrap128_setOffset_cap_BITS_25_TO_23_8_ULT_wrap_ETC___d49 = + wrap128_setOffset_cap[25:23] < repBound__h826 ; + assign x__h107 = wrap128_setOffset_offset[31:8] ^ signBits__h77 ; + assign x__h488 = wrap128_setOffset_offset >> wrap128_setOffset_cap[31:26] ; + assign x__h645 = + { wrap128_setOffset_cap[1:0], wrap128_setOffset_cap[17:10] } ; + always@(wrap128_setOffset_cap) + begin + case (wrap128_setOffset_cap[31:26]) + 6'd25: mask__h560 = 2'b01; + 6'd26: mask__h560 = 2'b0; + default: mask__h560 = 2'b11; + endcase + end +endmodule // module_wrap128_setOffset + diff --git a/module_wrap128_setPerms.v b/module_wrap128_setPerms.v new file mode 100644 index 0000000..d163d7b --- /dev/null +++ b/module_wrap128_setPerms.v @@ -0,0 +1,48 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_setPerms O 115 +// wrap128_setPerms_cap I 115 +// wrap128_setPerms_perms I 31 +// +// Combinational paths from inputs to outputs: +// (wrap128_setPerms_cap, wrap128_setPerms_perms) -> wrap128_setPerms +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_setPerms(wrap128_setPerms_cap, + wrap128_setPerms_perms, + wrap128_setPerms); + // value method wrap128_setPerms + input [114 : 0] wrap128_setPerms_cap; + input [30 : 0] wrap128_setPerms_perms; + output [114 : 0] wrap128_setPerms; + + // signals for module outputs + wire [114 : 0] wrap128_setPerms; + + // value method wrap128_setPerms + assign wrap128_setPerms = + { wrap128_setPerms_cap[114:74], + wrap128_setPerms_perms[11:0], + wrap128_setPerms_cap[61:0] } ; +endmodule // module_wrap128_setPerms + diff --git a/module_wrap128_setSoftPerms.v b/module_wrap128_setSoftPerms.v new file mode 100644 index 0000000..e0b0cd0 --- /dev/null +++ b/module_wrap128_setSoftPerms.v @@ -0,0 +1,45 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_setSoftPerms O 115 +// wrap128_setSoftPerms_cap I 115 +// wrap128_setSoftPerms_softperms I 16 unused +// +// Combinational paths from inputs to outputs: +// wrap128_setSoftPerms_cap -> wrap128_setSoftPerms +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_setSoftPerms(wrap128_setSoftPerms_cap, + wrap128_setSoftPerms_softperms, + wrap128_setSoftPerms); + // value method wrap128_setSoftPerms + input [114 : 0] wrap128_setSoftPerms_cap; + input [15 : 0] wrap128_setSoftPerms_softperms; + output [114 : 0] wrap128_setSoftPerms; + + // signals for module outputs + wire [114 : 0] wrap128_setSoftPerms; + + // value method wrap128_setSoftPerms + assign wrap128_setSoftPerms = wrap128_setSoftPerms_cap ; +endmodule // module_wrap128_setSoftPerms + diff --git a/module_wrap128_setValidCap.v b/module_wrap128_setValidCap.v new file mode 100644 index 0000000..0133523 --- /dev/null +++ b/module_wrap128_setValidCap.v @@ -0,0 +1,46 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_setValidCap O 115 +// wrap128_setValidCap_cap I 115 +// wrap128_setValidCap_valid I 1 +// +// Combinational paths from inputs to outputs: +// (wrap128_setValidCap_cap, wrap128_setValidCap_valid) -> wrap128_setValidCap +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_setValidCap(wrap128_setValidCap_cap, + wrap128_setValidCap_valid, + wrap128_setValidCap); + // value method wrap128_setValidCap + input [114 : 0] wrap128_setValidCap_cap; + input wrap128_setValidCap_valid; + output [114 : 0] wrap128_setValidCap; + + // signals for module outputs + wire [114 : 0] wrap128_setValidCap; + + // value method wrap128_setValidCap + assign wrap128_setValidCap = + { wrap128_setValidCap_valid, wrap128_setValidCap_cap[113:0] } ; +endmodule // module_wrap128_setValidCap + diff --git a/module_wrap128_toMem.v b/module_wrap128_toMem.v new file mode 100644 index 0000000..fed6ca3 --- /dev/null +++ b/module_wrap128_toMem.v @@ -0,0 +1,66 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_toMem O 89 +// wrap128_toMem_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap128_toMem_cap -> wrap128_toMem +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_toMem(wrap128_toMem_cap, + wrap128_toMem); + // value method wrap128_toMem + input [114 : 0] wrap128_toMem_cap; + output [88 : 0] wrap128_toMem; + + // signals for module outputs + wire [88 : 0] wrap128_toMem; + + // remaining internal signals + wire [87 : 0] x__h467; + wire [13 : 0] IF_wrap128_toMem_cap_BIT_32_THEN_wrap128_toMem_ETC___d15; + + // value method wrap128_toMem + assign wrap128_toMem = { wrap128_toMem_cap[114], x__h467 } ; + + // remaining internal signals + assign IF_wrap128_toMem_cap_BIT_32_THEN_wrap128_toMem_ETC___d15 = + wrap128_toMem_cap[32] ? + { wrap128_toMem_cap[23:21], + wrap128_toMem_cap[31:29], + wrap128_toMem_cap[17:13], + wrap128_toMem_cap[28:26] } : + wrap128_toMem_cap[23:10] ; + assign x__h467 = + { wrap128_toMem_cap[73:61], + ~wrap128_toMem_cap[60:57], + 24'hAAAAAA ^ 24'hAAAAAA, + ~wrap128_toMem_cap[32], + IF_wrap128_toMem_cap_BIT_32_THEN_wrap128_toMem_ETC___d15[13:10], + ~IF_wrap128_toMem_cap_BIT_32_THEN_wrap128_toMem_ETC___d15[9:8], + IF_wrap128_toMem_cap_BIT_32_THEN_wrap128_toMem_ETC___d15[7:2], + ~IF_wrap128_toMem_cap_BIT_32_THEN_wrap128_toMem_ETC___d15[1], + IF_wrap128_toMem_cap_BIT_32_THEN_wrap128_toMem_ETC___d15[0], + wrap128_toMem_cap[113:82] } ; +endmodule // module_wrap128_toMem + diff --git a/module_wrap128_validAsType.v b/module_wrap128_validAsType.v new file mode 100644 index 0000000..e33d056 --- /dev/null +++ b/module_wrap128_validAsType.v @@ -0,0 +1,45 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:11:39 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap128_validAsType O 1 +// wrap128_validAsType_dummy I 115 unused +// wrap128_validAsType_checkType I 32 +// +// Combinational paths from inputs to outputs: +// wrap128_validAsType_checkType -> wrap128_validAsType +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap128_validAsType(wrap128_validAsType_dummy, + wrap128_validAsType_checkType, + wrap128_validAsType); + // value method wrap128_validAsType + input [114 : 0] wrap128_validAsType_dummy; + input [31 : 0] wrap128_validAsType_checkType; + output wrap128_validAsType; + + // signals for module outputs + wire wrap128_validAsType; + + // value method wrap128_validAsType + assign wrap128_validAsType = wrap128_validAsType_checkType <= 32'd11 ; +endmodule // module_wrap128_validAsType + diff --git a/module_wrap64_almightyCap.v b/module_wrap64_almightyCap.v new file mode 100644 index 0000000..7bb5615 --- /dev/null +++ b/module_wrap64_almightyCap.v @@ -0,0 +1,38 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:26 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_almightyCap O 115 const +// +// No combinational paths from inputs to outputs +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_almightyCap(wrap64_almightyCap); + // value method wrap64_almightyCap + output [114 : 0] wrap64_almightyCap; + + // signals for module outputs + wire [114 : 0] wrap64_almightyCap; + + // value method wrap64_almightyCap + assign wrap64_almightyCap = 115'h40000000003FFDF555555690003F0 ; +endmodule // module_wrap64_almightyCap + diff --git a/module_wrap64_fromMem.v b/module_wrap64_fromMem.v new file mode 100644 index 0000000..1e1c37f --- /dev/null +++ b/module_wrap64_fromMem.v @@ -0,0 +1,115 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:26 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_fromMem O 115 +// wrap64_fromMem_mem_cap I 89 +// +// Combinational paths from inputs to outputs: +// wrap64_fromMem_mem_cap -> wrap64_fromMem +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_fromMem(wrap64_fromMem_mem_cap, + wrap64_fromMem); + // value method wrap64_fromMem + input [88 : 0] wrap64_fromMem_mem_cap; + output [114 : 0] wrap64_fromMem; + + // signals for module outputs + wire [114 : 0] wrap64_fromMem; + + // remaining internal signals + wire [88 : 0] thin__h113; + wire [31 : 0] x__h428; + wire [21 : 0] IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d33; + wire [7 : 0] bounds_topBits__h585, + res_addrBits__h131, + x__h618, + x__h638, + x__h653; + wire [5 : 0] x__h462; + wire [4 : 0] IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d52; + wire [2 : 0] repBound__h698, tb__h695; + wire [1 : 0] carry_out__h553, + impliedTopBits__h555, + len_correction__h554, + x__h635; + wire IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d39, + IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d40, + IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d42; + + // value method wrap64_fromMem + assign wrap64_fromMem = + { thin__h113[88], + thin__h113[31:0], + res_addrBits__h131, + thin__h113[87:46], + IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d33, + repBound__h698, + IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d39, + IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d40, + IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d52 } ; + + // remaining internal signals + assign IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d33 = + { thin__h113[46] ? x__h462 : 6'd0, x__h618, x__h638 } ; + assign IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d39 = + tb__h695 < repBound__h698 ; + assign IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d40 = + x__h638[7:5] < repBound__h698 ; + assign IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d42 = + res_addrBits__h131[7:5] < repBound__h698 ; + assign IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d52 = + { IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d42, + (IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d39 == + IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d42) ? + 2'd0 : + ((IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d39 && + !IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d42) ? + 2'd1 : + 2'd3), + (IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d40 == + IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d42) ? + 2'd0 : + ((IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d40 && + !IF_wrap64_fromMem_mem_cap_XOR_15_CONCAT_DONTCA_ETC___d42) ? + 2'd1 : + 2'd3) } ; + assign bounds_topBits__h585 = { 2'h2, thin__h113[45:43], 3'd0 } ; + assign carry_out__h553 = (x__h653[5:0] < x__h638[5:0]) ? 2'b01 : 2'b0 ; + assign impliedTopBits__h555 = x__h635 + len_correction__h554 ; + assign len_correction__h554 = thin__h113[46] ? 2'b01 : 2'b0 ; + assign repBound__h698 = x__h638[7:5] - 3'b001 ; + assign res_addrBits__h131 = + thin__h113[46] ? x__h428[7:0] : thin__h113[7:0] ; + assign tb__h695 = { impliedTopBits__h555, x__h653[5] } ; + assign thin__h113 = wrap64_fromMem_mem_cap ^ 89'h00007D55555430200000000 ; + assign x__h428 = thin__h113[31:0] >> x__h462 ; + assign x__h462 = { thin__h113[42:40], thin__h113[34:32] } ; + assign x__h618 = { impliedTopBits__h555, x__h653[5:0] } ; + assign x__h635 = x__h638[7:6] + carry_out__h553 ; + assign x__h638 = + thin__h113[46] ? + { thin__h113[39:35], 3'd0 } : + thin__h113[39:32] ; + assign x__h653 = thin__h113[46] ? bounds_topBits__h585 : thin__h113[47:40] ; +endmodule // module_wrap64_fromMem + diff --git a/module_wrap64_getAddr.v b/module_wrap64_getAddr.v new file mode 100644 index 0000000..effed0c --- /dev/null +++ b/module_wrap64_getAddr.v @@ -0,0 +1,42 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_getAddr O 32 +// wrap64_getAddr_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap64_getAddr_cap -> wrap64_getAddr +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_getAddr(wrap64_getAddr_cap, + wrap64_getAddr); + // value method wrap64_getAddr + input [114 : 0] wrap64_getAddr_cap; + output [31 : 0] wrap64_getAddr; + + // signals for module outputs + wire [31 : 0] wrap64_getAddr; + + // value method wrap64_getAddr + assign wrap64_getAddr = wrap64_getAddr_cap[113:82] ; +endmodule // module_wrap64_getAddr + diff --git a/module_wrap64_getBase.v b/module_wrap64_getBase.v new file mode 100644 index 0000000..fa253d4 --- /dev/null +++ b/module_wrap64_getBase.v @@ -0,0 +1,54 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_getBase O 32 +// wrap64_getBase_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap64_getBase_cap -> wrap64_getBase +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_getBase(wrap64_getBase_cap, + wrap64_getBase); + // value method wrap64_getBase + input [114 : 0] wrap64_getBase_cap; + output [31 : 0] wrap64_getBase; + + // signals for module outputs + wire [31 : 0] wrap64_getBase; + + // remaining internal signals + wire [31 : 0] addBase__h64; + wire [23 : 0] mask__h65; + wire [9 : 0] x__h167; + + // value method wrap64_getBase + assign wrap64_getBase = + { wrap64_getBase_cap[113:90] & mask__h65, 8'd0 } + addBase__h64 ; + + // remaining internal signals + assign addBase__h64 = + { {22{x__h167[9]}}, x__h167 } << wrap64_getBase_cap[31:26] ; + assign mask__h65 = 24'd16777215 << wrap64_getBase_cap[31:26] ; + assign x__h167 = { wrap64_getBase_cap[1:0], wrap64_getBase_cap[17:10] } ; +endmodule // module_wrap64_getBase + diff --git a/module_wrap64_getFlags.v b/module_wrap64_getFlags.v new file mode 100644 index 0000000..df3fb74 --- /dev/null +++ b/module_wrap64_getFlags.v @@ -0,0 +1,42 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_getFlags O 1 +// wrap64_getFlags_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap64_getFlags_cap -> wrap64_getFlags +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_getFlags(wrap64_getFlags_cap, + wrap64_getFlags); + // value method wrap64_getFlags + input [114 : 0] wrap64_getFlags_cap; + output wrap64_getFlags; + + // signals for module outputs + wire wrap64_getFlags; + + // value method wrap64_getFlags + assign wrap64_getFlags = wrap64_getFlags_cap[61] ; +endmodule // module_wrap64_getFlags + diff --git a/module_wrap64_getHardPerms.v b/module_wrap64_getHardPerms.v new file mode 100644 index 0000000..4be5a9a --- /dev/null +++ b/module_wrap64_getHardPerms.v @@ -0,0 +1,42 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_getHardPerms O 12 +// wrap64_getHardPerms_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap64_getHardPerms_cap -> wrap64_getHardPerms +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_getHardPerms(wrap64_getHardPerms_cap, + wrap64_getHardPerms); + // value method wrap64_getHardPerms + input [114 : 0] wrap64_getHardPerms_cap; + output [11 : 0] wrap64_getHardPerms; + + // signals for module outputs + wire [11 : 0] wrap64_getHardPerms; + + // value method wrap64_getHardPerms + assign wrap64_getHardPerms = wrap64_getHardPerms_cap[73:62] ; +endmodule // module_wrap64_getHardPerms + diff --git a/module_wrap64_getKind.v b/module_wrap64_getKind.v new file mode 100644 index 0000000..1953456 --- /dev/null +++ b/module_wrap64_getKind.v @@ -0,0 +1,59 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_getKind O 7 +// wrap64_getKind_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap64_getKind_cap -> wrap64_getKind +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_getKind(wrap64_getKind_cap, + wrap64_getKind); + // value method wrap64_getKind + input [114 : 0] wrap64_getKind_cap; + output [6 : 0] wrap64_getKind; + + // signals for module outputs + wire [6 : 0] wrap64_getKind; + + // remaining internal signals + reg [2 : 0] CASE_wrap64_getKind_cap_BITS_60_TO_57_12_3_13__ETC__q1; + + // value method wrap64_getKind + assign wrap64_getKind = + { CASE_wrap64_getKind_cap_BITS_60_TO_57_12_3_13__ETC__q1, + wrap64_getKind_cap[60:57] } ; + + // remaining internal signals + always@(wrap64_getKind_cap) + begin + case (wrap64_getKind_cap[60:57]) + 4'd12: CASE_wrap64_getKind_cap_BITS_60_TO_57_12_3_13__ETC__q1 = 3'd3; + 4'd13: CASE_wrap64_getKind_cap_BITS_60_TO_57_12_3_13__ETC__q1 = 3'd2; + 4'd14: CASE_wrap64_getKind_cap_BITS_60_TO_57_12_3_13__ETC__q1 = 3'd1; + 4'd15: CASE_wrap64_getKind_cap_BITS_60_TO_57_12_3_13__ETC__q1 = 3'd0; + default: CASE_wrap64_getKind_cap_BITS_60_TO_57_12_3_13__ETC__q1 = 3'd4; + endcase + end +endmodule // module_wrap64_getKind + diff --git a/module_wrap64_getLength.v b/module_wrap64_getLength.v new file mode 100644 index 0000000..8d5c49c --- /dev/null +++ b/module_wrap64_getLength.v @@ -0,0 +1,57 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_getLength O 33 +// wrap64_getLength_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap64_getLength_cap -> wrap64_getLength +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_getLength(wrap64_getLength_cap, + wrap64_getLength); + // value method wrap64_getLength + input [114 : 0] wrap64_getLength_cap; + output [32 : 0] wrap64_getLength; + + // signals for module outputs + wire [32 : 0] wrap64_getLength; + + // remaining internal signals + wire [32 : 0] length__h66; + wire [9 : 0] base__h65, top__h64, x__h125; + + // value method wrap64_getLength + assign wrap64_getLength = + (wrap64_getLength_cap[31:26] < 6'd26) ? + length__h66 : + 33'h1FFFFFFFF ; + + // remaining internal signals + assign base__h65 = + { wrap64_getLength_cap[1:0], wrap64_getLength_cap[17:10] } ; + assign length__h66 = { 23'd0, x__h125 } << wrap64_getLength_cap[31:26] ; + assign top__h64 = + { wrap64_getLength_cap[3:2], wrap64_getLength_cap[25:18] } ; + assign x__h125 = top__h64 - base__h65 ; +endmodule // module_wrap64_getLength + diff --git a/module_wrap64_getOffset.v b/module_wrap64_getOffset.v new file mode 100644 index 0000000..9a7d4bd --- /dev/null +++ b/module_wrap64_getOffset.v @@ -0,0 +1,56 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_getOffset O 32 +// wrap64_getOffset_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap64_getOffset_cap -> wrap64_getOffset +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_getOffset(wrap64_getOffset_cap, + wrap64_getOffset); + // value method wrap64_getOffset + input [114 : 0] wrap64_getOffset_cap; + output [31 : 0] wrap64_getOffset; + + // signals for module outputs + wire [31 : 0] wrap64_getOffset; + + // remaining internal signals + wire [31 : 0] addrLSB__h68, x__h204, x__h79, x__h81, y__h203; + wire [9 : 0] base__h66, offset__h67; + + // value method wrap64_getOffset + assign wrap64_getOffset = x__h79 | addrLSB__h68 ; + + // remaining internal signals + assign addrLSB__h68 = wrap64_getOffset_cap[113:82] & y__h203 ; + assign base__h66 = + { wrap64_getOffset_cap[1:0], wrap64_getOffset_cap[17:10] } ; + assign offset__h67 = { 2'b0, wrap64_getOffset_cap[81:74] } - base__h66 ; + assign x__h204 = 32'hFFFFFFFF << wrap64_getOffset_cap[31:26] ; + assign x__h79 = x__h81 << wrap64_getOffset_cap[31:26] ; + assign x__h81 = { {22{offset__h67[9]}}, offset__h67 } ; + assign y__h203 = ~x__h204 ; +endmodule // module_wrap64_getOffset + diff --git a/module_wrap64_getPerms.v b/module_wrap64_getPerms.v new file mode 100644 index 0000000..ec224a5 --- /dev/null +++ b/module_wrap64_getPerms.v @@ -0,0 +1,42 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_getPerms O 31 +// wrap64_getPerms_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap64_getPerms_cap -> wrap64_getPerms +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_getPerms(wrap64_getPerms_cap, + wrap64_getPerms); + // value method wrap64_getPerms + input [114 : 0] wrap64_getPerms_cap; + output [30 : 0] wrap64_getPerms; + + // signals for module outputs + wire [30 : 0] wrap64_getPerms; + + // value method wrap64_getPerms + assign wrap64_getPerms = { 19'd0, wrap64_getPerms_cap[73:62] } ; +endmodule // module_wrap64_getPerms + diff --git a/module_wrap64_getSoftPerms.v b/module_wrap64_getSoftPerms.v new file mode 100644 index 0000000..5db102a --- /dev/null +++ b/module_wrap64_getSoftPerms.v @@ -0,0 +1,41 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_getSoftPerms O 16 const +// wrap64_getSoftPerms_cap I 115 unused +// +// No combinational paths from inputs to outputs +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_getSoftPerms(wrap64_getSoftPerms_cap, + wrap64_getSoftPerms); + // value method wrap64_getSoftPerms + input [114 : 0] wrap64_getSoftPerms_cap; + output [15 : 0] wrap64_getSoftPerms; + + // signals for module outputs + wire [15 : 0] wrap64_getSoftPerms; + + // value method wrap64_getSoftPerms + assign wrap64_getSoftPerms = 16'd0 ; +endmodule // module_wrap64_getSoftPerms + diff --git a/module_wrap64_getTop.v b/module_wrap64_getTop.v new file mode 100644 index 0000000..0780c26 --- /dev/null +++ b/module_wrap64_getTop.v @@ -0,0 +1,74 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_getTop O 33 +// wrap64_getTop_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap64_getTop_cap -> wrap64_getTop +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_getTop(wrap64_getTop_cap, + wrap64_getTop); + // value method wrap64_getTop + input [114 : 0] wrap64_getTop_cap; + output [32 : 0] wrap64_getTop; + + // signals for module outputs + wire [32 : 0] wrap64_getTop; + + // remaining internal signals + wire [32 : 0] addTop__h64, result__h512, ret__h66; + wire [24 : 0] mask__h65; + wire [23 : 0] wrap64_getTop_cap_BITS_113_TO_90_PLUS_SEXT_wra_ETC__q2; + wire [9 : 0] x__h178; + wire [1 : 0] wrap64_getTop_cap_BITS_1_TO_0__q1; + + // value method wrap64_getTop + assign wrap64_getTop = + (wrap64_getTop_cap[31:26] < 6'd25 && + ret__h66[32:31] - + { 1'b0, + (wrap64_getTop_cap[31:26] == 6'd24) ? + wrap64_getTop_cap[17] : + wrap64_getTop_cap_BITS_113_TO_90_PLUS_SEXT_wra_ETC__q2[23] } > + 2'd1) ? + result__h512 : + ret__h66 ; + + // remaining internal signals + assign addTop__h64 = + { {23{x__h178[9]}}, x__h178 } << wrap64_getTop_cap[31:26] ; + assign mask__h65 = 25'd33554431 << wrap64_getTop_cap[31:26] ; + assign result__h512 = { ~ret__h66[32], ret__h66[31:0] } ; + assign ret__h66 = + { { 1'b0, wrap64_getTop_cap[113:90] } & mask__h65, 8'd0 } + + addTop__h64 ; + assign wrap64_getTop_cap_BITS_113_TO_90_PLUS_SEXT_wra_ETC__q2 = + wrap64_getTop_cap[113:90] + + ({ {22{wrap64_getTop_cap_BITS_1_TO_0__q1[1]}}, + wrap64_getTop_cap_BITS_1_TO_0__q1 } << + wrap64_getTop_cap[31:26]) ; + assign wrap64_getTop_cap_BITS_1_TO_0__q1 = wrap64_getTop_cap[1:0] ; + assign x__h178 = { wrap64_getTop_cap[3:2], wrap64_getTop_cap[25:18] } ; +endmodule // module_wrap64_getTop + diff --git a/module_wrap64_incOffset.v b/module_wrap64_incOffset.v new file mode 100644 index 0000000..d377bc0 --- /dev/null +++ b/module_wrap64_incOffset.v @@ -0,0 +1,114 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_incOffset O 116 +// wrap64_incOffset_cap I 115 +// wrap64_incOffset_inc I 32 +// +// Combinational paths from inputs to outputs: +// (wrap64_incOffset_cap, wrap64_incOffset_inc) -> wrap64_incOffset +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_incOffset(wrap64_incOffset_cap, + wrap64_incOffset_inc, + wrap64_incOffset); + // value method wrap64_incOffset + input [114 : 0] wrap64_incOffset_cap; + input [31 : 0] wrap64_incOffset_inc; + output [115 : 0] wrap64_incOffset; + + // signals for module outputs + wire [115 : 0] wrap64_incOffset; + + // remaining internal signals + wire [31 : 0] result_d_address__h574, x__h488, x__h597; + wire [23 : 0] highBitsfilter__h79, + highOffsetBits__h80, + signBits__h77, + x__h107; + wire [7 : 0] repBoundBits__h86, toBoundsM1__h90, toBounds__h89; + wire [3 : 0] IF_wrap64_incOffset_cap_BITS_25_TO_23_9_ULT_wr_ETC___d53; + wire [2 : 0] repBound__h738; + wire IF_wrap64_incOffset_inc_BIT_31_THEN_NOT_wrap64_ETC___d23, + wrap64_incOffset_cap_BITS_113_TO_82_0_PLUS_wra_ETC___d43, + wrap64_incOffset_cap_BITS_17_TO_15_7_ULT_wrap6_ETC___d41, + wrap64_incOffset_cap_BITS_25_TO_23_9_ULT_wrap6_ETC___d40; + + // value method wrap64_incOffset + assign wrap64_incOffset = + { highOffsetBits__h80 == 24'd0 && + IF_wrap64_incOffset_inc_BIT_31_THEN_NOT_wrap64_ETC___d23 || + wrap64_incOffset_cap[31:26] >= 6'd24, + (highOffsetBits__h80 == 24'd0 && + IF_wrap64_incOffset_inc_BIT_31_THEN_NOT_wrap64_ETC___d23 || + wrap64_incOffset_cap[31:26] >= 6'd24) && + wrap64_incOffset_cap[114], + result_d_address__h574, + x__h597[7:0], + wrap64_incOffset_cap[73:10], + repBound__h738, + wrap64_incOffset_cap_BITS_25_TO_23_9_ULT_wrap6_ETC___d40, + wrap64_incOffset_cap_BITS_17_TO_15_7_ULT_wrap6_ETC___d41, + wrap64_incOffset_cap_BITS_113_TO_82_0_PLUS_wra_ETC___d43, + IF_wrap64_incOffset_cap_BITS_25_TO_23_9_ULT_wr_ETC___d53 } ; + + // remaining internal signals + assign IF_wrap64_incOffset_cap_BITS_25_TO_23_9_ULT_wr_ETC___d53 = + { (wrap64_incOffset_cap_BITS_25_TO_23_9_ULT_wrap6_ETC___d40 == + wrap64_incOffset_cap_BITS_113_TO_82_0_PLUS_wra_ETC___d43) ? + 2'd0 : + ((wrap64_incOffset_cap_BITS_25_TO_23_9_ULT_wrap6_ETC___d40 && + !wrap64_incOffset_cap_BITS_113_TO_82_0_PLUS_wra_ETC___d43) ? + 2'd1 : + 2'd3), + (wrap64_incOffset_cap_BITS_17_TO_15_7_ULT_wrap6_ETC___d41 == + wrap64_incOffset_cap_BITS_113_TO_82_0_PLUS_wra_ETC___d43) ? + 2'd0 : + ((wrap64_incOffset_cap_BITS_17_TO_15_7_ULT_wrap6_ETC___d41 && + !wrap64_incOffset_cap_BITS_113_TO_82_0_PLUS_wra_ETC___d43) ? + 2'd1 : + 2'd3) } ; + assign IF_wrap64_incOffset_inc_BIT_31_THEN_NOT_wrap64_ETC___d23 = + wrap64_incOffset_inc[31] ? + x__h488[7:0] >= toBounds__h89 && + repBoundBits__h86 != wrap64_incOffset_cap[81:74] : + x__h488[7:0] < toBoundsM1__h90 ; + assign highBitsfilter__h79 = 24'd16777215 << wrap64_incOffset_cap[31:26] ; + assign highOffsetBits__h80 = x__h107 & highBitsfilter__h79 ; + assign repBoundBits__h86 = { wrap64_incOffset_cap[9:7], 5'd0 } ; + assign repBound__h738 = wrap64_incOffset_cap[17:15] - 3'b001 ; + assign result_d_address__h574 = + wrap64_incOffset_cap[113:82] + wrap64_incOffset_inc ; + assign signBits__h77 = {24{wrap64_incOffset_inc[31]}} ; + assign toBoundsM1__h90 = repBoundBits__h86 + ~wrap64_incOffset_cap[81:74] ; + assign toBounds__h89 = repBoundBits__h86 - wrap64_incOffset_cap[81:74] ; + assign wrap64_incOffset_cap_BITS_113_TO_82_0_PLUS_wra_ETC___d43 = + x__h597[7:5] < repBound__h738 ; + assign wrap64_incOffset_cap_BITS_17_TO_15_7_ULT_wrap6_ETC___d41 = + wrap64_incOffset_cap[17:15] < repBound__h738 ; + assign wrap64_incOffset_cap_BITS_25_TO_23_9_ULT_wrap6_ETC___d40 = + wrap64_incOffset_cap[25:23] < repBound__h738 ; + assign x__h107 = wrap64_incOffset_inc[31:8] ^ signBits__h77 ; + assign x__h488 = wrap64_incOffset_inc >> wrap64_incOffset_cap[31:26] ; + assign x__h597 = result_d_address__h574 >> wrap64_incOffset_cap[31:26] ; +endmodule // module_wrap64_incOffset + diff --git a/module_wrap64_isInBounds.v b/module_wrap64_isInBounds.v new file mode 100644 index 0000000..d4023c0 --- /dev/null +++ b/module_wrap64_isInBounds.v @@ -0,0 +1,56 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_isInBounds O 1 +// wrap64_isInBounds_cap I 115 +// wrap64_isInBounds_isTopIncluded I 1 +// +// Combinational paths from inputs to outputs: +// (wrap64_isInBounds_cap, +// wrap64_isInBounds_isTopIncluded) -> wrap64_isInBounds +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_isInBounds(wrap64_isInBounds_cap, + wrap64_isInBounds_isTopIncluded, + wrap64_isInBounds); + // value method wrap64_isInBounds + input [114 : 0] wrap64_isInBounds_cap; + input wrap64_isInBounds_isTopIncluded; + output wrap64_isInBounds; + + // signals for module outputs + wire wrap64_isInBounds; + + // value method wrap64_isInBounds + assign wrap64_isInBounds = + ((wrap64_isInBounds_cap[6] == wrap64_isInBounds_cap[4]) ? + (wrap64_isInBounds_isTopIncluded ? + wrap64_isInBounds_cap[81:74] <= + wrap64_isInBounds_cap[25:18] : + wrap64_isInBounds_cap[81:74] < + wrap64_isInBounds_cap[25:18]) : + wrap64_isInBounds_cap[6]) && + ((wrap64_isInBounds_cap[5] == wrap64_isInBounds_cap[4]) ? + wrap64_isInBounds_cap[81:74] >= wrap64_isInBounds_cap[17:10] : + wrap64_isInBounds_cap[4]) ; +endmodule // module_wrap64_isInBounds + diff --git a/module_wrap64_isValidCap.v b/module_wrap64_isValidCap.v new file mode 100644 index 0000000..d3e18e2 --- /dev/null +++ b/module_wrap64_isValidCap.v @@ -0,0 +1,42 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_isValidCap O 1 +// wrap64_isValidCap_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap64_isValidCap_cap -> wrap64_isValidCap +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_isValidCap(wrap64_isValidCap_cap, + wrap64_isValidCap); + // value method wrap64_isValidCap + input [114 : 0] wrap64_isValidCap_cap; + output wrap64_isValidCap; + + // signals for module outputs + wire wrap64_isValidCap; + + // value method wrap64_isValidCap + assign wrap64_isValidCap = wrap64_isValidCap_cap[114] ; +endmodule // module_wrap64_isValidCap + diff --git a/module_wrap64_modifyOffset.v b/module_wrap64_modifyOffset.v new file mode 100644 index 0000000..9b14be2 --- /dev/null +++ b/module_wrap64_modifyOffset.v @@ -0,0 +1,174 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_modifyOffset O 116 +// wrap64_modifyOffset_cap I 115 +// wrap64_modifyOffset_offset I 32 +// wrap64_modifyOffset_doInc I 1 +// +// Combinational paths from inputs to outputs: +// (wrap64_modifyOffset_cap, +// wrap64_modifyOffset_offset, +// wrap64_modifyOffset_doInc) -> wrap64_modifyOffset +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_modifyOffset(wrap64_modifyOffset_cap, + wrap64_modifyOffset_offset, + wrap64_modifyOffset_doInc, + wrap64_modifyOffset); + // value method wrap64_modifyOffset + input [114 : 0] wrap64_modifyOffset_cap; + input [31 : 0] wrap64_modifyOffset_offset; + input wrap64_modifyOffset_doInc; + output [115 : 0] wrap64_modifyOffset; + + // signals for module outputs + wire [115 : 0] wrap64_modifyOffset; + + // remaining internal signals + reg [1 : 0] mask__h585; + wire [31 : 0] addBase__h631, + pointer__h74, + result_d_address__h600, + ret___1_address__h611, + x__h491, + x__h741; + wire [23 : 0] highOffsetBits__h81, mask__h632, signBits__h78, x__h108; + wire [9 : 0] x__h682; + wire [7 : 0] newAddrBits__h584, + repBoundBits__h87, + result_d_addrBits__h601, + toBoundsM1_A__h86, + toBoundsM1_B__h89, + toBoundsM1__h91, + toBounds_A__h85, + toBounds_B__h88, + toBounds__h90; + wire [3 : 0] IF_wrap64_modifyOffset_cap_BITS_25_TO_23_9_ULT_ETC___d83; + wire [2 : 0] repBound__h881; + wire IF_wrap64_modifyOffset_doInc_THEN_wrap64_modif_ETC___d73, + IF_wrap64_modifyOffset_offset_BIT_31_THEN_NOT__ETC___d34, + NOT_wrap64_modifyOffset_offset_SRL_wrap64_modi_ETC___d25, + wrap64_modifyOffset_cap_BITS_17_TO_15_7_ULT_wr_ETC___d71, + wrap64_modifyOffset_cap_BITS_25_TO_23_9_ULT_wr_ETC___d70; + + // value method wrap64_modifyOffset + assign wrap64_modifyOffset = + { highOffsetBits__h81 == 24'd0 && + IF_wrap64_modifyOffset_offset_BIT_31_THEN_NOT__ETC___d34 || + wrap64_modifyOffset_cap[31:26] >= 6'd24, + (highOffsetBits__h81 == 24'd0 && + IF_wrap64_modifyOffset_offset_BIT_31_THEN_NOT__ETC___d34 || + wrap64_modifyOffset_cap[31:26] >= 6'd24) && + wrap64_modifyOffset_cap[114], + result_d_address__h600, + result_d_addrBits__h601, + wrap64_modifyOffset_cap[73:10], + repBound__h881, + wrap64_modifyOffset_cap_BITS_25_TO_23_9_ULT_wr_ETC___d70, + wrap64_modifyOffset_cap_BITS_17_TO_15_7_ULT_wr_ETC___d71, + IF_wrap64_modifyOffset_doInc_THEN_wrap64_modif_ETC___d73, + IF_wrap64_modifyOffset_cap_BITS_25_TO_23_9_ULT_ETC___d83 } ; + + // remaining internal signals + assign IF_wrap64_modifyOffset_cap_BITS_25_TO_23_9_ULT_ETC___d83 = + { (wrap64_modifyOffset_cap_BITS_25_TO_23_9_ULT_wr_ETC___d70 == + IF_wrap64_modifyOffset_doInc_THEN_wrap64_modif_ETC___d73) ? + 2'd0 : + ((wrap64_modifyOffset_cap_BITS_25_TO_23_9_ULT_wr_ETC___d70 && + !IF_wrap64_modifyOffset_doInc_THEN_wrap64_modif_ETC___d73) ? + 2'd1 : + 2'd3), + (wrap64_modifyOffset_cap_BITS_17_TO_15_7_ULT_wr_ETC___d71 == + IF_wrap64_modifyOffset_doInc_THEN_wrap64_modif_ETC___d73) ? + 2'd0 : + ((wrap64_modifyOffset_cap_BITS_17_TO_15_7_ULT_wr_ETC___d71 && + !IF_wrap64_modifyOffset_doInc_THEN_wrap64_modif_ETC___d73) ? + 2'd1 : + 2'd3) } ; + assign IF_wrap64_modifyOffset_doInc_THEN_wrap64_modif_ETC___d73 = + result_d_addrBits__h601[7:5] < repBound__h881 ; + assign IF_wrap64_modifyOffset_offset_BIT_31_THEN_NOT__ETC___d34 = + wrap64_modifyOffset_offset[31] ? + NOT_wrap64_modifyOffset_offset_SRL_wrap64_modi_ETC___d25 : + (wrap64_modifyOffset_doInc ? + x__h491[7:0] < toBoundsM1__h91 : + x__h491[7:0] <= toBoundsM1__h91) ; + assign NOT_wrap64_modifyOffset_offset_SRL_wrap64_modi_ETC___d25 = + x__h491[7:0] >= toBounds__h90 && + (!wrap64_modifyOffset_doInc || + repBoundBits__h87 != wrap64_modifyOffset_cap[81:74]) ; + assign addBase__h631 = + { {22{x__h682[9]}}, x__h682 } << wrap64_modifyOffset_cap[31:26] ; + assign highOffsetBits__h81 = x__h108 & mask__h632 ; + assign mask__h632 = 24'd16777215 << wrap64_modifyOffset_cap[31:26] ; + assign newAddrBits__h584 = wrap64_modifyOffset_cap[17:10] + x__h491[7:0] ; + assign pointer__h74 = + wrap64_modifyOffset_cap[113:82] + wrap64_modifyOffset_offset ; + assign repBoundBits__h87 = { wrap64_modifyOffset_cap[9:7], 5'd0 } ; + assign repBound__h881 = wrap64_modifyOffset_cap[17:15] - 3'b001 ; + assign result_d_addrBits__h601 = + wrap64_modifyOffset_doInc ? + x__h741[7:0] : + { mask__h585, 6'd63 } & newAddrBits__h584 ; + assign result_d_address__h600 = + wrap64_modifyOffset_doInc ? + pointer__h74 : + ret___1_address__h611 ; + assign ret___1_address__h611 = + { wrap64_modifyOffset_cap[113:90] & mask__h632, 8'd0 } + + addBase__h631 + + wrap64_modifyOffset_offset ; + assign signBits__h78 = {24{wrap64_modifyOffset_offset[31]}} ; + assign toBoundsM1_A__h86 = { 3'b110, ~wrap64_modifyOffset_cap[14:10] } ; + assign toBoundsM1_B__h89 = + repBoundBits__h87 + ~wrap64_modifyOffset_cap[81:74] ; + assign toBoundsM1__h91 = + wrap64_modifyOffset_doInc ? + toBoundsM1_B__h89 : + toBoundsM1_A__h86 ; + assign toBounds_A__h85 = 8'd224 - { 3'b0, wrap64_modifyOffset_cap[14:10] } ; + assign toBounds_B__h88 = + repBoundBits__h87 - wrap64_modifyOffset_cap[81:74] ; + assign toBounds__h90 = + wrap64_modifyOffset_doInc ? toBounds_B__h88 : toBounds_A__h85 ; + assign wrap64_modifyOffset_cap_BITS_17_TO_15_7_ULT_wr_ETC___d71 = + wrap64_modifyOffset_cap[17:15] < repBound__h881 ; + assign wrap64_modifyOffset_cap_BITS_25_TO_23_9_ULT_wr_ETC___d70 = + wrap64_modifyOffset_cap[25:23] < repBound__h881 ; + assign x__h108 = wrap64_modifyOffset_offset[31:8] ^ signBits__h78 ; + assign x__h491 = + wrap64_modifyOffset_offset >> wrap64_modifyOffset_cap[31:26] ; + assign x__h682 = + { wrap64_modifyOffset_cap[1:0], + wrap64_modifyOffset_cap[17:10] } ; + assign x__h741 = pointer__h74 >> wrap64_modifyOffset_cap[31:26] ; + always@(wrap64_modifyOffset_cap) + begin + case (wrap64_modifyOffset_cap[31:26]) + 6'd25: mask__h585 = 2'b01; + 6'd26: mask__h585 = 2'b0; + default: mask__h585 = 2'b11; + endcase + end +endmodule // module_wrap64_modifyOffset + diff --git a/module_wrap64_nullCap.v b/module_wrap64_nullCap.v new file mode 100644 index 0000000..a67688a --- /dev/null +++ b/module_wrap64_nullCap.v @@ -0,0 +1,38 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:26 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_nullCap O 115 const +// +// No combinational paths from inputs to outputs +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_nullCap(wrap64_nullCap); + // value method wrap64_nullCap + output [114 : 0] wrap64_nullCap; + + // signals for module outputs + wire [114 : 0] wrap64_nullCap; + + // value method wrap64_nullCap + assign wrap64_nullCap = 115'h00000000000001F555555690003F0 ; +endmodule // module_wrap64_nullCap + diff --git a/module_wrap64_nullWithAddr.v b/module_wrap64_nullWithAddr.v new file mode 100644 index 0000000..2f439ef --- /dev/null +++ b/module_wrap64_nullWithAddr.v @@ -0,0 +1,52 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:26 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_nullWithAddr O 115 +// wrap64_nullWithAddr_addr I 32 +// +// Combinational paths from inputs to outputs: +// wrap64_nullWithAddr_addr -> wrap64_nullWithAddr +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_nullWithAddr(wrap64_nullWithAddr_addr, + wrap64_nullWithAddr); + // value method wrap64_nullWithAddr + input [31 : 0] wrap64_nullWithAddr_addr; + output [114 : 0] wrap64_nullWithAddr; + + // signals for module outputs + wire [114 : 0] wrap64_nullWithAddr; + + // remaining internal signals + wire [7 : 0] res_addrBits__h116; + + // value method wrap64_nullWithAddr + assign wrap64_nullWithAddr = + { 1'd0, + wrap64_nullWithAddr_addr, + res_addrBits__h116, + 74'h0001F555555690003F0 } ; + + // remaining internal signals + assign res_addrBits__h116 = { 2'd0, wrap64_nullWithAddr_addr[31:26] } ; +endmodule // module_wrap64_nullWithAddr + diff --git a/module_wrap64_setAddr.v b/module_wrap64_setAddr.v new file mode 100644 index 0000000..3c1638a --- /dev/null +++ b/module_wrap64_setAddr.v @@ -0,0 +1,103 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_setAddr O 116 +// wrap64_setAddr_cap I 115 +// wrap64_setAddr_addr I 32 +// +// Combinational paths from inputs to outputs: +// (wrap64_setAddr_cap, wrap64_setAddr_addr) -> wrap64_setAddr +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_setAddr(wrap64_setAddr_cap, + wrap64_setAddr_addr, + wrap64_setAddr); + // value method wrap64_setAddr + input [114 : 0] wrap64_setAddr_cap; + input [31 : 0] wrap64_setAddr_addr; + output [115 : 0] wrap64_setAddr; + + // signals for module outputs + wire [115 : 0] wrap64_setAddr; + + // remaining internal signals + wire [31 : 0] x__h102; + wire [23 : 0] deltaAddrHi__h76, deltaAddrUpper__h78, mask__h77; + wire [3 : 0] IF_wrap64_setAddr_cap_BITS_25_TO_23_7_ULT_wrap_ETC___d40; + wire [2 : 0] repBound__h430; + wire [1 : 0] x__h84; + wire SEXT__0b0_CONCAT_wrap64_setAddr_addr_SRL_wrap6_ETC___d18, + wrap64_setAddr_addr_SRL_wrap64_setAddr_cap_BIT_ETC___d30, + wrap64_setAddr_cap_BITS_17_TO_15_5_ULT_wrap64__ETC___d29, + wrap64_setAddr_cap_BITS_25_TO_23_7_ULT_wrap64__ETC___d28; + + // value method wrap64_setAddr + assign wrap64_setAddr = + { SEXT__0b0_CONCAT_wrap64_setAddr_addr_SRL_wrap6_ETC___d18, + SEXT__0b0_CONCAT_wrap64_setAddr_addr_SRL_wrap6_ETC___d18 && + wrap64_setAddr_cap[114], + wrap64_setAddr_addr, + x__h102[7:0], + wrap64_setAddr_cap[73:10], + repBound__h430, + wrap64_setAddr_cap_BITS_25_TO_23_7_ULT_wrap64__ETC___d28, + wrap64_setAddr_cap_BITS_17_TO_15_5_ULT_wrap64__ETC___d29, + wrap64_setAddr_addr_SRL_wrap64_setAddr_cap_BIT_ETC___d30, + IF_wrap64_setAddr_cap_BITS_25_TO_23_7_ULT_wrap_ETC___d40 } ; + + // remaining internal signals + assign IF_wrap64_setAddr_cap_BITS_25_TO_23_7_ULT_wrap_ETC___d40 = + { (wrap64_setAddr_cap_BITS_25_TO_23_7_ULT_wrap64__ETC___d28 == + wrap64_setAddr_addr_SRL_wrap64_setAddr_cap_BIT_ETC___d30) ? + 2'd0 : + ((wrap64_setAddr_cap_BITS_25_TO_23_7_ULT_wrap64__ETC___d28 && + !wrap64_setAddr_addr_SRL_wrap64_setAddr_cap_BIT_ETC___d30) ? + 2'd1 : + 2'd3), + (wrap64_setAddr_cap_BITS_17_TO_15_5_ULT_wrap64__ETC___d29 == + wrap64_setAddr_addr_SRL_wrap64_setAddr_cap_BIT_ETC___d30) ? + 2'd0 : + ((wrap64_setAddr_cap_BITS_17_TO_15_5_ULT_wrap64__ETC___d29 && + !wrap64_setAddr_addr_SRL_wrap64_setAddr_cap_BIT_ETC___d30) ? + 2'd1 : + 2'd3) } ; + assign SEXT__0b0_CONCAT_wrap64_setAddr_addr_SRL_wrap6_ETC___d18 = + deltaAddrHi__h76 == deltaAddrUpper__h78 ; + assign deltaAddrHi__h76 = + { {22{x__h84[1]}}, x__h84 } << wrap64_setAddr_cap[31:26] ; + assign deltaAddrUpper__h78 = + (wrap64_setAddr_addr[31:8] & mask__h77) - + (wrap64_setAddr_cap[113:90] & mask__h77) ; + assign mask__h77 = 24'd16777215 << wrap64_setAddr_cap[31:26] ; + assign repBound__h430 = wrap64_setAddr_cap[17:15] - 3'b001 ; + assign wrap64_setAddr_addr_SRL_wrap64_setAddr_cap_BIT_ETC___d30 = + x__h102[7:5] < repBound__h430 ; + assign wrap64_setAddr_cap_BITS_17_TO_15_5_ULT_wrap64__ETC___d29 = + wrap64_setAddr_cap[17:15] < repBound__h430 ; + assign wrap64_setAddr_cap_BITS_25_TO_23_7_ULT_wrap64__ETC___d28 = + wrap64_setAddr_cap[25:23] < repBound__h430 ; + assign x__h102 = wrap64_setAddr_addr >> wrap64_setAddr_cap[31:26] ; + assign x__h84 = + { 1'b0, x__h102[7:5] < wrap64_setAddr_cap[9:7] } - + { 1'b0, wrap64_setAddr_cap[4] } ; +endmodule // module_wrap64_setAddr + diff --git a/module_wrap64_setBounds.v b/module_wrap64_setBounds.v new file mode 100644 index 0000000..ea11b12 --- /dev/null +++ b/module_wrap64_setBounds.v @@ -0,0 +1,558 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_setBounds O 116 +// wrap64_setBounds_cap I 115 +// wrap64_setBounds_length I 32 +// +// Combinational paths from inputs to outputs: +// (wrap64_setBounds_cap, wrap64_setBounds_length) -> wrap64_setBounds +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_setBounds(wrap64_setBounds_cap, + wrap64_setBounds_length, + wrap64_setBounds); + // value method wrap64_setBounds + input [114 : 0] wrap64_setBounds_cap; + input [31 : 0] wrap64_setBounds_length; + output [115 : 0] wrap64_setBounds; + + // signals for module outputs + wire [115 : 0] wrap64_setBounds; + + // remaining internal signals + wire [33 : 0] base__h84, + len__h86, + lmaskLo__h92, + lmaskLor__h91, + mwLsbMask__h100, + top__h87, + x__h4494, + x__h4615, + x__h4798, + y__h4495; + wire [31 : 0] wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d110, + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d10, + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d13, + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d16, + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d4, + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d7; + wire [15 : 0] IF_NOT_wrap64_setBounds_length_BIT_31_1_2_AND__ETC___d212; + wire [8 : 0] x__h4837; + wire [7 : 0] _theResult_____3_fst_bounds_topBits__h4604, + result_cap_addrBits__h4434, + ret_bounds_baseBits__h4780, + ret_bounds_topBits__h4600, + ret_bounds_topBits__h4829, + x__h4874, + x__h4877; + wire [5 : 0] IF_wrap64_setBounds_length_AND_15_CONCAT_INV_w_ETC___d190, + _25_MINUS_0_CONCAT_IF_wrap64_setBounds_length_B_ETC___d183; + wire [3 : 0] IF_IF_NOT_wrap64_setBounds_length_BIT_31_1_2_A_ETC___d234; + wire [2 : 0] repBound__h4867; + wire IF_NOT_wrap64_setBounds_length_BIT_31_1_2_AND__ETC___d221, + IF_NOT_wrap64_setBounds_length_BIT_31_1_2_AND__ETC___d222, + IF_wrap64_setBounds_length_AND_15_CONCAT_INV_w_ETC___d224, + NOT_0_CONCAT_wrap64_setBounds_length_OR_0_CONC_ETC___d122, + NOT_0b0_CONCAT_wrap64_setBounds_cap_BITS_113_T_ETC___d191, + NOT_0b0_CONCAT_wrap64_setBounds_cap_BITS_113_T_ETC___d202, + _0b0_CONCAT_wrap64_setBounds_cap_BITS_113_TO_82_ETC___d105, + wrap64_setBounds_cap_BITS_113_TO_82_AND_0_CONC_ETC___d98, + wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d123, + wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d129, + wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d130; + + // value method wrap64_setBounds + assign wrap64_setBounds = + { wrap64_setBounds_cap_BITS_113_TO_82_AND_0_CONC_ETC___d98 && + _0b0_CONCAT_wrap64_setBounds_cap_BITS_113_TO_82_ETC___d105, + wrap64_setBounds_cap[114:82], + result_cap_addrBits__h4434, + wrap64_setBounds_cap[73:33], + wrap64_setBounds_length[31] || wrap64_setBounds_length[30] || + wrap64_setBounds_length[29] || + wrap64_setBounds_length[28] || + wrap64_setBounds_length[27] || + wrap64_setBounds_length[26] || + wrap64_setBounds_length[25] || + wrap64_setBounds_length[24] || + wrap64_setBounds_length[23] || + wrap64_setBounds_length[22] || + wrap64_setBounds_length[21] || + wrap64_setBounds_length[20] || + wrap64_setBounds_length[19] || + wrap64_setBounds_length[18] || + wrap64_setBounds_length[17] || + wrap64_setBounds_length[16] || + wrap64_setBounds_length[15] || + wrap64_setBounds_length[14] || + wrap64_setBounds_length[13] || + wrap64_setBounds_length[12] || + wrap64_setBounds_length[11] || + wrap64_setBounds_length[10] || + wrap64_setBounds_length[9] || + wrap64_setBounds_length[8] || + wrap64_setBounds_length[7] || + wrap64_setBounds_length[6], + IF_wrap64_setBounds_length_AND_15_CONCAT_INV_w_ETC___d190, + IF_NOT_wrap64_setBounds_length_BIT_31_1_2_AND__ETC___d212, + repBound__h4867, + IF_NOT_wrap64_setBounds_length_BIT_31_1_2_AND__ETC___d221, + IF_NOT_wrap64_setBounds_length_BIT_31_1_2_AND__ETC___d222, + IF_wrap64_setBounds_length_AND_15_CONCAT_INV_w_ETC___d224, + IF_IF_NOT_wrap64_setBounds_length_BIT_31_1_2_A_ETC___d234 } ; + + // remaining internal signals + assign IF_IF_NOT_wrap64_setBounds_length_BIT_31_1_2_A_ETC___d234 = + { (IF_NOT_wrap64_setBounds_length_BIT_31_1_2_AND__ETC___d221 == + IF_wrap64_setBounds_length_AND_15_CONCAT_INV_w_ETC___d224) ? + 2'd0 : + ((IF_NOT_wrap64_setBounds_length_BIT_31_1_2_AND__ETC___d221 && + !IF_wrap64_setBounds_length_AND_15_CONCAT_INV_w_ETC___d224) ? + 2'd1 : + 2'd3), + (IF_NOT_wrap64_setBounds_length_BIT_31_1_2_AND__ETC___d222 == + IF_wrap64_setBounds_length_AND_15_CONCAT_INV_w_ETC___d224) ? + 2'd0 : + ((IF_NOT_wrap64_setBounds_length_BIT_31_1_2_AND__ETC___d222 && + !IF_wrap64_setBounds_length_AND_15_CONCAT_INV_w_ETC___d224) ? + 2'd1 : + 2'd3) } ; + assign IF_NOT_wrap64_setBounds_length_BIT_31_1_2_AND__ETC___d212 = + (!wrap64_setBounds_length[31] && !wrap64_setBounds_length[30] && + !wrap64_setBounds_length[29] && + !wrap64_setBounds_length[28] && + !wrap64_setBounds_length[27] && + !wrap64_setBounds_length[26] && + !wrap64_setBounds_length[25] && + !wrap64_setBounds_length[24] && + !wrap64_setBounds_length[23] && + !wrap64_setBounds_length[22] && + !wrap64_setBounds_length[21] && + !wrap64_setBounds_length[20] && + !wrap64_setBounds_length[19] && + !wrap64_setBounds_length[18] && + !wrap64_setBounds_length[17] && + !wrap64_setBounds_length[16] && + !wrap64_setBounds_length[15] && + !wrap64_setBounds_length[14] && + !wrap64_setBounds_length[13] && + !wrap64_setBounds_length[12] && + !wrap64_setBounds_length[11] && + !wrap64_setBounds_length[10] && + !wrap64_setBounds_length[9] && + !wrap64_setBounds_length[8] && + !wrap64_setBounds_length[7] && + !wrap64_setBounds_length[6]) ? + { ret_bounds_topBits__h4829, x__h4615[7:0] } : + { ret_bounds_topBits__h4600[7:3], + 3'd0, + ret_bounds_baseBits__h4780 } ; + assign IF_NOT_wrap64_setBounds_length_BIT_31_1_2_AND__ETC___d221 = + x__h4877[7:5] < repBound__h4867 ; + assign IF_NOT_wrap64_setBounds_length_BIT_31_1_2_AND__ETC___d222 = + x__h4874[7:5] < repBound__h4867 ; + assign IF_wrap64_setBounds_length_AND_15_CONCAT_INV_w_ETC___d190 = + (wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d130 && + (wrap64_setBounds_length[31] || wrap64_setBounds_length[30] || + wrap64_setBounds_length[29] || + wrap64_setBounds_length[28] || + wrap64_setBounds_length[27] || + wrap64_setBounds_length[26] || + wrap64_setBounds_length[25] || + wrap64_setBounds_length[24] || + wrap64_setBounds_length[23] || + wrap64_setBounds_length[22] || + wrap64_setBounds_length[21] || + wrap64_setBounds_length[20] || + wrap64_setBounds_length[19] || + wrap64_setBounds_length[18] || + wrap64_setBounds_length[17] || + wrap64_setBounds_length[16] || + wrap64_setBounds_length[15] || + wrap64_setBounds_length[14] || + wrap64_setBounds_length[13] || + wrap64_setBounds_length[12] || + wrap64_setBounds_length[11] || + wrap64_setBounds_length[10] || + wrap64_setBounds_length[9] || + wrap64_setBounds_length[8] || + wrap64_setBounds_length[7] || + wrap64_setBounds_length[6])) ? + _25_MINUS_0_CONCAT_IF_wrap64_setBounds_length_B_ETC___d183 + + 6'd1 : + _25_MINUS_0_CONCAT_IF_wrap64_setBounds_length_B_ETC___d183 ; + assign IF_wrap64_setBounds_length_AND_15_CONCAT_INV_w_ETC___d224 = + result_cap_addrBits__h4434[7:5] < repBound__h4867 ; + assign NOT_0_CONCAT_wrap64_setBounds_length_OR_0_CONC_ETC___d122 = + (mwLsbMask__h100 & top__h87) != (x__h4494 ^ y__h4495) ; + assign NOT_0b0_CONCAT_wrap64_setBounds_cap_BITS_113_T_ETC___d191 = + (top__h87 & lmaskLor__h91) != 34'd0 && + (wrap64_setBounds_length[31] || wrap64_setBounds_length[30] || + wrap64_setBounds_length[29] || + wrap64_setBounds_length[28] || + wrap64_setBounds_length[27] || + wrap64_setBounds_length[26] || + wrap64_setBounds_length[25] || + wrap64_setBounds_length[24] || + wrap64_setBounds_length[23] || + wrap64_setBounds_length[22] || + wrap64_setBounds_length[21] || + wrap64_setBounds_length[20] || + wrap64_setBounds_length[19] || + wrap64_setBounds_length[18] || + wrap64_setBounds_length[17] || + wrap64_setBounds_length[16] || + wrap64_setBounds_length[15] || + wrap64_setBounds_length[14] || + wrap64_setBounds_length[13] || + wrap64_setBounds_length[12] || + wrap64_setBounds_length[11] || + wrap64_setBounds_length[10] || + wrap64_setBounds_length[9] || + wrap64_setBounds_length[8] || + wrap64_setBounds_length[7] || + wrap64_setBounds_length[6]) ; + assign NOT_0b0_CONCAT_wrap64_setBounds_cap_BITS_113_T_ETC___d202 = + (top__h87 & lmaskLo__h92) != 34'd0 && + (wrap64_setBounds_length[31] || wrap64_setBounds_length[30] || + wrap64_setBounds_length[29] || + wrap64_setBounds_length[28] || + wrap64_setBounds_length[27] || + wrap64_setBounds_length[26] || + wrap64_setBounds_length[25] || + wrap64_setBounds_length[24] || + wrap64_setBounds_length[23] || + wrap64_setBounds_length[22] || + wrap64_setBounds_length[21] || + wrap64_setBounds_length[20] || + wrap64_setBounds_length[19] || + wrap64_setBounds_length[18] || + wrap64_setBounds_length[17] || + wrap64_setBounds_length[16] || + wrap64_setBounds_length[15] || + wrap64_setBounds_length[14] || + wrap64_setBounds_length[13] || + wrap64_setBounds_length[12] || + wrap64_setBounds_length[11] || + wrap64_setBounds_length[10] || + wrap64_setBounds_length[9] || + wrap64_setBounds_length[8] || + wrap64_setBounds_length[7] || + wrap64_setBounds_length[6]) ; + assign _0b0_CONCAT_wrap64_setBounds_cap_BITS_113_TO_82_ETC___d105 = + (top__h87 & lmaskLor__h91) == 34'd0 || + !wrap64_setBounds_length[31] && !wrap64_setBounds_length[30] && + !wrap64_setBounds_length[29] && + !wrap64_setBounds_length[28] && + !wrap64_setBounds_length[27] && + !wrap64_setBounds_length[26] && + !wrap64_setBounds_length[25] && + !wrap64_setBounds_length[24] && + !wrap64_setBounds_length[23] && + !wrap64_setBounds_length[22] && + !wrap64_setBounds_length[21] && + !wrap64_setBounds_length[20] && + !wrap64_setBounds_length[19] && + !wrap64_setBounds_length[18] && + !wrap64_setBounds_length[17] && + !wrap64_setBounds_length[16] && + !wrap64_setBounds_length[15] && + !wrap64_setBounds_length[14] && + !wrap64_setBounds_length[13] && + !wrap64_setBounds_length[12] && + !wrap64_setBounds_length[11] && + !wrap64_setBounds_length[10] && + !wrap64_setBounds_length[9] && + !wrap64_setBounds_length[8] && + !wrap64_setBounds_length[7] && + !wrap64_setBounds_length[6] ; + assign _25_MINUS_0_CONCAT_IF_wrap64_setBounds_length_B_ETC___d183 = + 6'd25 - + { 1'd0, + wrap64_setBounds_length[31] ? + 5'd0 : + (wrap64_setBounds_length[30] ? + 5'd1 : + (wrap64_setBounds_length[29] ? + 5'd2 : + (wrap64_setBounds_length[28] ? + 5'd3 : + (wrap64_setBounds_length[27] ? + 5'd4 : + (wrap64_setBounds_length[26] ? + 5'd5 : + (wrap64_setBounds_length[25] ? + 5'd6 : + (wrap64_setBounds_length[24] ? + 5'd7 : + (wrap64_setBounds_length[23] ? + 5'd8 : + (wrap64_setBounds_length[22] ? + 5'd9 : + (wrap64_setBounds_length[21] ? + 5'd10 : + (wrap64_setBounds_length[20] ? + 5'd11 : + (wrap64_setBounds_length[19] ? + 5'd12 : + (wrap64_setBounds_length[18] ? + 5'd13 : + (wrap64_setBounds_length[17] ? + 5'd14 : + (wrap64_setBounds_length[16] ? + 5'd15 : + (wrap64_setBounds_length[15] ? + 5'd16 : + (wrap64_setBounds_length[14] ? + 5'd17 : + (wrap64_setBounds_length[13] ? + 5'd18 : + (wrap64_setBounds_length[12] ? + 5'd19 : + (wrap64_setBounds_length[11] ? + 5'd20 : + (wrap64_setBounds_length[10] ? + 5'd21 : + (wrap64_setBounds_length[9] ? + 5'd22 : + (wrap64_setBounds_length[8] ? + 5'd23 : + (wrap64_setBounds_length[7] ? + 5'd24 : + 5'd25)))))))))))))))))))))))) } ; + assign _theResult_____3_fst_bounds_topBits__h4604 = + NOT_0b0_CONCAT_wrap64_setBounds_cap_BITS_113_T_ETC___d202 ? + x__h4798[8:1] + 8'b00001000 : + x__h4798[8:1] ; + assign base__h84 = { 2'b0, wrap64_setBounds_cap[113:82] } ; + assign len__h86 = { 2'b0, wrap64_setBounds_length } ; + assign lmaskLo__h92 = + { 5'd0, + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d16[31:3] } ; + assign lmaskLor__h91 = + { 6'd0, + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d16[31:4] } ; + assign mwLsbMask__h100 = lmaskLor__h91 ^ lmaskLo__h92 ; + assign repBound__h4867 = x__h4874[7:5] - 3'b001 ; + assign result_cap_addrBits__h4434 = + (wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d130 && + (wrap64_setBounds_length[31] || wrap64_setBounds_length[30] || + wrap64_setBounds_length[29] || + wrap64_setBounds_length[28] || + wrap64_setBounds_length[27] || + wrap64_setBounds_length[26] || + wrap64_setBounds_length[25] || + wrap64_setBounds_length[24] || + wrap64_setBounds_length[23] || + wrap64_setBounds_length[22] || + wrap64_setBounds_length[21] || + wrap64_setBounds_length[20] || + wrap64_setBounds_length[19] || + wrap64_setBounds_length[18] || + wrap64_setBounds_length[17] || + wrap64_setBounds_length[16] || + wrap64_setBounds_length[15] || + wrap64_setBounds_length[14] || + wrap64_setBounds_length[13] || + wrap64_setBounds_length[12] || + wrap64_setBounds_length[11] || + wrap64_setBounds_length[10] || + wrap64_setBounds_length[9] || + wrap64_setBounds_length[8] || + wrap64_setBounds_length[7] || + wrap64_setBounds_length[6])) ? + x__h4615[8:1] : + x__h4615[7:0] ; + assign ret_bounds_baseBits__h4780 = + { result_cap_addrBits__h4434[7:3], 3'd0 } ; + assign ret_bounds_topBits__h4600 = + (wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d130 && + (wrap64_setBounds_length[31] || wrap64_setBounds_length[30] || + wrap64_setBounds_length[29] || + wrap64_setBounds_length[28] || + wrap64_setBounds_length[27] || + wrap64_setBounds_length[26] || + wrap64_setBounds_length[25] || + wrap64_setBounds_length[24] || + wrap64_setBounds_length[23] || + wrap64_setBounds_length[22] || + wrap64_setBounds_length[21] || + wrap64_setBounds_length[20] || + wrap64_setBounds_length[19] || + wrap64_setBounds_length[18] || + wrap64_setBounds_length[17] || + wrap64_setBounds_length[16] || + wrap64_setBounds_length[15] || + wrap64_setBounds_length[14] || + wrap64_setBounds_length[13] || + wrap64_setBounds_length[12] || + wrap64_setBounds_length[11] || + wrap64_setBounds_length[10] || + wrap64_setBounds_length[9] || + wrap64_setBounds_length[8] || + wrap64_setBounds_length[7] || + wrap64_setBounds_length[6])) ? + _theResult_____3_fst_bounds_topBits__h4604 : + ret_bounds_topBits__h4829 ; + assign ret_bounds_topBits__h4829 = + NOT_0b0_CONCAT_wrap64_setBounds_cap_BITS_113_T_ETC___d191 ? + x__h4837[7:0] : + x__h4798[7:0] ; + assign top__h87 = base__h84 + len__h86 ; + assign wrap64_setBounds_cap_BITS_113_TO_82_AND_0_CONC_ETC___d98 = + (wrap64_setBounds_cap[113:82] & + { 4'd0, + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d16[31:4] }) == + 32'd0 || + !wrap64_setBounds_length[31] && !wrap64_setBounds_length[30] && + !wrap64_setBounds_length[29] && + !wrap64_setBounds_length[28] && + !wrap64_setBounds_length[27] && + !wrap64_setBounds_length[26] && + !wrap64_setBounds_length[25] && + !wrap64_setBounds_length[24] && + !wrap64_setBounds_length[23] && + !wrap64_setBounds_length[22] && + !wrap64_setBounds_length[21] && + !wrap64_setBounds_length[20] && + !wrap64_setBounds_length[19] && + !wrap64_setBounds_length[18] && + !wrap64_setBounds_length[17] && + !wrap64_setBounds_length[16] && + !wrap64_setBounds_length[15] && + !wrap64_setBounds_length[14] && + !wrap64_setBounds_length[13] && + !wrap64_setBounds_length[12] && + !wrap64_setBounds_length[11] && + !wrap64_setBounds_length[10] && + !wrap64_setBounds_length[9] && + !wrap64_setBounds_length[8] && + !wrap64_setBounds_length[7] && + !wrap64_setBounds_length[6] ; + assign wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d110 = + wrap64_setBounds_length & + { 4'd15, + ~wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d16[31:4] } ; + assign wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d123 = + wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d110 == + (wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d16 ^ + { 3'd0, + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d16[31:3] }) && + NOT_0_CONCAT_wrap64_setBounds_length_OR_0_CONC_ETC___d122 ; + assign wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d129 = + wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d110 == + (wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d16 ^ + { 4'd0, + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d16[31:4] }) && + (NOT_0_CONCAT_wrap64_setBounds_length_OR_0_CONC_ETC___d122 || + (top__h87 & lmaskLor__h91) != 34'd0) ; + assign wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d130 = + wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d123 && + (top__h87 & lmaskLor__h91) != 34'd0 || + wrap64_setBounds_length_AND_15_CONCAT_INV_wrap_ETC___d129 ; + assign wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d10 = + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d7 | + { 4'd0, + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d7[31:4] } ; + assign wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d13 = + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d10 | + { 8'd0, + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d10[31:8] } ; + assign wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d16 = + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d13 | + { 16'd0, + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d13[31:16] } ; + assign wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d4 = + wrap64_setBounds_length | + { 1'd0, wrap64_setBounds_length[31:1] } ; + assign wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d7 = + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d4 | + { 2'd0, + wrap64_setBounds_length_OR_0_CONCAT_wrap64_set_ETC___d4[31:2] } ; + assign x__h4494 = mwLsbMask__h100 & base__h84 ; + assign x__h4615 = + base__h84 >> + _25_MINUS_0_CONCAT_IF_wrap64_setBounds_length_B_ETC___d183 ; + assign x__h4798 = + top__h87 >> + _25_MINUS_0_CONCAT_IF_wrap64_setBounds_length_B_ETC___d183 ; + assign x__h4837 = x__h4798[8:0] + 9'b000001000 ; + assign x__h4874 = + (!wrap64_setBounds_length[31] && !wrap64_setBounds_length[30] && + !wrap64_setBounds_length[29] && + !wrap64_setBounds_length[28] && + !wrap64_setBounds_length[27] && + !wrap64_setBounds_length[26] && + !wrap64_setBounds_length[25] && + !wrap64_setBounds_length[24] && + !wrap64_setBounds_length[23] && + !wrap64_setBounds_length[22] && + !wrap64_setBounds_length[21] && + !wrap64_setBounds_length[20] && + !wrap64_setBounds_length[19] && + !wrap64_setBounds_length[18] && + !wrap64_setBounds_length[17] && + !wrap64_setBounds_length[16] && + !wrap64_setBounds_length[15] && + !wrap64_setBounds_length[14] && + !wrap64_setBounds_length[13] && + !wrap64_setBounds_length[12] && + !wrap64_setBounds_length[11] && + !wrap64_setBounds_length[10] && + !wrap64_setBounds_length[9] && + !wrap64_setBounds_length[8] && + !wrap64_setBounds_length[7] && + !wrap64_setBounds_length[6]) ? + result_cap_addrBits__h4434 : + ret_bounds_baseBits__h4780 ; + assign x__h4877 = + (!wrap64_setBounds_length[31] && !wrap64_setBounds_length[30] && + !wrap64_setBounds_length[29] && + !wrap64_setBounds_length[28] && + !wrap64_setBounds_length[27] && + !wrap64_setBounds_length[26] && + !wrap64_setBounds_length[25] && + !wrap64_setBounds_length[24] && + !wrap64_setBounds_length[23] && + !wrap64_setBounds_length[22] && + !wrap64_setBounds_length[21] && + !wrap64_setBounds_length[20] && + !wrap64_setBounds_length[19] && + !wrap64_setBounds_length[18] && + !wrap64_setBounds_length[17] && + !wrap64_setBounds_length[16] && + !wrap64_setBounds_length[15] && + !wrap64_setBounds_length[14] && + !wrap64_setBounds_length[13] && + !wrap64_setBounds_length[12] && + !wrap64_setBounds_length[11] && + !wrap64_setBounds_length[10] && + !wrap64_setBounds_length[9] && + !wrap64_setBounds_length[8] && + !wrap64_setBounds_length[7] && + !wrap64_setBounds_length[6]) ? + ret_bounds_topBits__h4600 : + { ret_bounds_topBits__h4600[7:3], 3'd0 } ; + assign y__h4495 = mwLsbMask__h100 & len__h86 ; +endmodule // module_wrap64_setBounds + diff --git a/module_wrap64_setFlags.v b/module_wrap64_setFlags.v new file mode 100644 index 0000000..e68f3b4 --- /dev/null +++ b/module_wrap64_setFlags.v @@ -0,0 +1,48 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_setFlags O 115 +// wrap64_setFlags_cap I 115 +// wrap64_setFlags_flags I 1 +// +// Combinational paths from inputs to outputs: +// (wrap64_setFlags_cap, wrap64_setFlags_flags) -> wrap64_setFlags +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_setFlags(wrap64_setFlags_cap, + wrap64_setFlags_flags, + wrap64_setFlags); + // value method wrap64_setFlags + input [114 : 0] wrap64_setFlags_cap; + input wrap64_setFlags_flags; + output [114 : 0] wrap64_setFlags; + + // signals for module outputs + wire [114 : 0] wrap64_setFlags; + + // value method wrap64_setFlags + assign wrap64_setFlags = + { wrap64_setFlags_cap[114:62], + wrap64_setFlags_flags, + wrap64_setFlags_cap[60:0] } ; +endmodule // module_wrap64_setFlags + diff --git a/module_wrap64_setHardPerms.v b/module_wrap64_setHardPerms.v new file mode 100644 index 0000000..36edd2f --- /dev/null +++ b/module_wrap64_setHardPerms.v @@ -0,0 +1,49 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_setHardPerms O 115 +// wrap64_setHardPerms_cap I 115 +// wrap64_setHardPerms_hardperms I 12 +// +// Combinational paths from inputs to outputs: +// (wrap64_setHardPerms_cap, +// wrap64_setHardPerms_hardperms) -> wrap64_setHardPerms +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_setHardPerms(wrap64_setHardPerms_cap, + wrap64_setHardPerms_hardperms, + wrap64_setHardPerms); + // value method wrap64_setHardPerms + input [114 : 0] wrap64_setHardPerms_cap; + input [11 : 0] wrap64_setHardPerms_hardperms; + output [114 : 0] wrap64_setHardPerms; + + // signals for module outputs + wire [114 : 0] wrap64_setHardPerms; + + // value method wrap64_setHardPerms + assign wrap64_setHardPerms = + { wrap64_setHardPerms_cap[114:74], + wrap64_setHardPerms_hardperms, + wrap64_setHardPerms_cap[61:0] } ; +endmodule // module_wrap64_setHardPerms + diff --git a/module_wrap64_setKind.v b/module_wrap64_setKind.v new file mode 100644 index 0000000..7c544a7 --- /dev/null +++ b/module_wrap64_setKind.v @@ -0,0 +1,64 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_setKind O 115 +// wrap64_setKind_cap I 115 +// wrap64_setKind_kind I 7 +// +// Combinational paths from inputs to outputs: +// (wrap64_setKind_cap, wrap64_setKind_kind) -> wrap64_setKind +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_setKind(wrap64_setKind_cap, + wrap64_setKind_kind, + wrap64_setKind); + // value method wrap64_setKind + input [114 : 0] wrap64_setKind_cap; + input [6 : 0] wrap64_setKind_kind; + output [114 : 0] wrap64_setKind; + + // signals for module outputs + wire [114 : 0] wrap64_setKind; + + // remaining internal signals + reg [3 : 0] CASE_wrap64_setKind_kind_BITS_6_TO_4_0_15_1_14_ETC__q1; + + // value method wrap64_setKind + assign wrap64_setKind = + { wrap64_setKind_cap[114:61], + CASE_wrap64_setKind_kind_BITS_6_TO_4_0_15_1_14_ETC__q1, + wrap64_setKind_cap[56:0] } ; + + // remaining internal signals + always@(wrap64_setKind_kind) + begin + case (wrap64_setKind_kind[6:4]) + 3'd0: CASE_wrap64_setKind_kind_BITS_6_TO_4_0_15_1_14_ETC__q1 = 4'd15; + 3'd1: CASE_wrap64_setKind_kind_BITS_6_TO_4_0_15_1_14_ETC__q1 = 4'd14; + 3'd2: CASE_wrap64_setKind_kind_BITS_6_TO_4_0_15_1_14_ETC__q1 = 4'd13; + 3'd3: CASE_wrap64_setKind_kind_BITS_6_TO_4_0_15_1_14_ETC__q1 = 4'd12; + default: CASE_wrap64_setKind_kind_BITS_6_TO_4_0_15_1_14_ETC__q1 = + wrap64_setKind_kind[3:0]; + endcase + end +endmodule // module_wrap64_setKind + diff --git a/module_wrap64_setOffset.v b/module_wrap64_setOffset.v new file mode 100644 index 0000000..e5e51e2 --- /dev/null +++ b/module_wrap64_setOffset.v @@ -0,0 +1,129 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_setOffset O 116 +// wrap64_setOffset_cap I 115 +// wrap64_setOffset_offset I 32 +// +// Combinational paths from inputs to outputs: +// (wrap64_setOffset_cap, wrap64_setOffset_offset) -> wrap64_setOffset +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_setOffset(wrap64_setOffset_cap, + wrap64_setOffset_offset, + wrap64_setOffset); + // value method wrap64_setOffset + input [114 : 0] wrap64_setOffset_cap; + input [31 : 0] wrap64_setOffset_offset; + output [115 : 0] wrap64_setOffset; + + // signals for module outputs + wire [115 : 0] wrap64_setOffset; + + // remaining internal signals + reg [1 : 0] mask__h560; + wire [31 : 0] addBase__h594, result_d_address__h572, x__h488; + wire [23 : 0] highOffsetBits__h80, mask__h595, signBits__h77, x__h107; + wire [9 : 0] x__h645; + wire [7 : 0] newAddrBits__h559, + result_d_addrBits__h573, + toBoundsM1__h90, + toBounds__h89; + wire [3 : 0] IF_wrap64_setOffset_cap_BITS_25_TO_23_8_ULT_wr_ETC___d62; + wire [2 : 0] repBound__h826; + wire IF_wrap64_setOffset_cap_BITS_31_TO_26_EQ_26_6__ETC___d52, + IF_wrap64_setOffset_offset_BIT_31_THEN_NOT_wra_ETC___d19, + wrap64_setOffset_cap_BITS_17_TO_15_6_ULT_wrap6_ETC___d50, + wrap64_setOffset_cap_BITS_25_TO_23_8_ULT_wrap6_ETC___d49; + + // value method wrap64_setOffset + assign wrap64_setOffset = + { highOffsetBits__h80 == 24'd0 && + IF_wrap64_setOffset_offset_BIT_31_THEN_NOT_wra_ETC___d19 || + wrap64_setOffset_cap[31:26] >= 6'd24, + (highOffsetBits__h80 == 24'd0 && + IF_wrap64_setOffset_offset_BIT_31_THEN_NOT_wra_ETC___d19 || + wrap64_setOffset_cap[31:26] >= 6'd24) && + wrap64_setOffset_cap[114], + result_d_address__h572, + result_d_addrBits__h573, + wrap64_setOffset_cap[73:10], + repBound__h826, + wrap64_setOffset_cap_BITS_25_TO_23_8_ULT_wrap6_ETC___d49, + wrap64_setOffset_cap_BITS_17_TO_15_6_ULT_wrap6_ETC___d50, + IF_wrap64_setOffset_cap_BITS_31_TO_26_EQ_26_6__ETC___d52, + IF_wrap64_setOffset_cap_BITS_25_TO_23_8_ULT_wr_ETC___d62 } ; + + // remaining internal signals + assign IF_wrap64_setOffset_cap_BITS_25_TO_23_8_ULT_wr_ETC___d62 = + { (wrap64_setOffset_cap_BITS_25_TO_23_8_ULT_wrap6_ETC___d49 == + IF_wrap64_setOffset_cap_BITS_31_TO_26_EQ_26_6__ETC___d52) ? + 2'd0 : + ((wrap64_setOffset_cap_BITS_25_TO_23_8_ULT_wrap6_ETC___d49 && + !IF_wrap64_setOffset_cap_BITS_31_TO_26_EQ_26_6__ETC___d52) ? + 2'd1 : + 2'd3), + (wrap64_setOffset_cap_BITS_17_TO_15_6_ULT_wrap6_ETC___d50 == + IF_wrap64_setOffset_cap_BITS_31_TO_26_EQ_26_6__ETC___d52) ? + 2'd0 : + ((wrap64_setOffset_cap_BITS_17_TO_15_6_ULT_wrap6_ETC___d50 && + !IF_wrap64_setOffset_cap_BITS_31_TO_26_EQ_26_6__ETC___d52) ? + 2'd1 : + 2'd3) } ; + assign IF_wrap64_setOffset_cap_BITS_31_TO_26_EQ_26_6__ETC___d52 = + result_d_addrBits__h573[7:5] < repBound__h826 ; + assign IF_wrap64_setOffset_offset_BIT_31_THEN_NOT_wra_ETC___d19 = + wrap64_setOffset_offset[31] ? + x__h488[7:0] >= toBounds__h89 : + x__h488[7:0] <= toBoundsM1__h90 ; + assign addBase__h594 = + { {22{x__h645[9]}}, x__h645 } << wrap64_setOffset_cap[31:26] ; + assign highOffsetBits__h80 = x__h107 & mask__h595 ; + assign mask__h595 = 24'd16777215 << wrap64_setOffset_cap[31:26] ; + assign newAddrBits__h559 = wrap64_setOffset_cap[17:10] + x__h488[7:0] ; + assign repBound__h826 = wrap64_setOffset_cap[17:15] - 3'b001 ; + assign result_d_addrBits__h573 = { mask__h560, 6'd63 } & newAddrBits__h559 ; + assign result_d_address__h572 = + { wrap64_setOffset_cap[113:90] & mask__h595, 8'd0 } + + addBase__h594 + + wrap64_setOffset_offset ; + assign signBits__h77 = {24{wrap64_setOffset_offset[31]}} ; + assign toBoundsM1__h90 = { 3'b110, ~wrap64_setOffset_cap[14:10] } ; + assign toBounds__h89 = 8'd224 - { 3'b0, wrap64_setOffset_cap[14:10] } ; + assign wrap64_setOffset_cap_BITS_17_TO_15_6_ULT_wrap6_ETC___d50 = + wrap64_setOffset_cap[17:15] < repBound__h826 ; + assign wrap64_setOffset_cap_BITS_25_TO_23_8_ULT_wrap6_ETC___d49 = + wrap64_setOffset_cap[25:23] < repBound__h826 ; + assign x__h107 = wrap64_setOffset_offset[31:8] ^ signBits__h77 ; + assign x__h488 = wrap64_setOffset_offset >> wrap64_setOffset_cap[31:26] ; + assign x__h645 = + { wrap64_setOffset_cap[1:0], wrap64_setOffset_cap[17:10] } ; + always@(wrap64_setOffset_cap) + begin + case (wrap64_setOffset_cap[31:26]) + 6'd25: mask__h560 = 2'b01; + 6'd26: mask__h560 = 2'b0; + default: mask__h560 = 2'b11; + endcase + end +endmodule // module_wrap64_setOffset + diff --git a/module_wrap64_setPerms.v b/module_wrap64_setPerms.v new file mode 100644 index 0000000..ba7c78a --- /dev/null +++ b/module_wrap64_setPerms.v @@ -0,0 +1,48 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_setPerms O 115 +// wrap64_setPerms_cap I 115 +// wrap64_setPerms_perms I 31 +// +// Combinational paths from inputs to outputs: +// (wrap64_setPerms_cap, wrap64_setPerms_perms) -> wrap64_setPerms +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_setPerms(wrap64_setPerms_cap, + wrap64_setPerms_perms, + wrap64_setPerms); + // value method wrap64_setPerms + input [114 : 0] wrap64_setPerms_cap; + input [30 : 0] wrap64_setPerms_perms; + output [114 : 0] wrap64_setPerms; + + // signals for module outputs + wire [114 : 0] wrap64_setPerms; + + // value method wrap64_setPerms + assign wrap64_setPerms = + { wrap64_setPerms_cap[114:74], + wrap64_setPerms_perms[11:0], + wrap64_setPerms_cap[61:0] } ; +endmodule // module_wrap64_setPerms + diff --git a/module_wrap64_setSoftPerms.v b/module_wrap64_setSoftPerms.v new file mode 100644 index 0000000..c8b1ca6 --- /dev/null +++ b/module_wrap64_setSoftPerms.v @@ -0,0 +1,45 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_setSoftPerms O 115 +// wrap64_setSoftPerms_cap I 115 +// wrap64_setSoftPerms_softperms I 16 unused +// +// Combinational paths from inputs to outputs: +// wrap64_setSoftPerms_cap -> wrap64_setSoftPerms +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_setSoftPerms(wrap64_setSoftPerms_cap, + wrap64_setSoftPerms_softperms, + wrap64_setSoftPerms); + // value method wrap64_setSoftPerms + input [114 : 0] wrap64_setSoftPerms_cap; + input [15 : 0] wrap64_setSoftPerms_softperms; + output [114 : 0] wrap64_setSoftPerms; + + // signals for module outputs + wire [114 : 0] wrap64_setSoftPerms; + + // value method wrap64_setSoftPerms + assign wrap64_setSoftPerms = wrap64_setSoftPerms_cap ; +endmodule // module_wrap64_setSoftPerms + diff --git a/module_wrap64_setValidCap.v b/module_wrap64_setValidCap.v new file mode 100644 index 0000000..027c79c --- /dev/null +++ b/module_wrap64_setValidCap.v @@ -0,0 +1,46 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:25 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_setValidCap O 115 +// wrap64_setValidCap_cap I 115 +// wrap64_setValidCap_valid I 1 +// +// Combinational paths from inputs to outputs: +// (wrap64_setValidCap_cap, wrap64_setValidCap_valid) -> wrap64_setValidCap +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_setValidCap(wrap64_setValidCap_cap, + wrap64_setValidCap_valid, + wrap64_setValidCap); + // value method wrap64_setValidCap + input [114 : 0] wrap64_setValidCap_cap; + input wrap64_setValidCap_valid; + output [114 : 0] wrap64_setValidCap; + + // signals for module outputs + wire [114 : 0] wrap64_setValidCap; + + // value method wrap64_setValidCap + assign wrap64_setValidCap = + { wrap64_setValidCap_valid, wrap64_setValidCap_cap[113:0] } ; +endmodule // module_wrap64_setValidCap + diff --git a/module_wrap64_toMem.v b/module_wrap64_toMem.v new file mode 100644 index 0000000..effd212 --- /dev/null +++ b/module_wrap64_toMem.v @@ -0,0 +1,66 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:26 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_toMem O 89 +// wrap64_toMem_cap I 115 +// +// Combinational paths from inputs to outputs: +// wrap64_toMem_cap -> wrap64_toMem +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_toMem(wrap64_toMem_cap, + wrap64_toMem); + // value method wrap64_toMem + input [114 : 0] wrap64_toMem_cap; + output [88 : 0] wrap64_toMem; + + // signals for module outputs + wire [88 : 0] wrap64_toMem; + + // remaining internal signals + wire [87 : 0] x__h467; + wire [13 : 0] IF_wrap64_toMem_cap_BIT_32_THEN_wrap64_toMem_c_ETC___d15; + + // value method wrap64_toMem + assign wrap64_toMem = { wrap64_toMem_cap[114], x__h467 } ; + + // remaining internal signals + assign IF_wrap64_toMem_cap_BIT_32_THEN_wrap64_toMem_c_ETC___d15 = + wrap64_toMem_cap[32] ? + { wrap64_toMem_cap[23:21], + wrap64_toMem_cap[31:29], + wrap64_toMem_cap[17:13], + wrap64_toMem_cap[28:26] } : + wrap64_toMem_cap[23:10] ; + assign x__h467 = + { wrap64_toMem_cap[73:61], + ~wrap64_toMem_cap[60:57], + 24'hAAAAAA ^ 24'hAAAAAA, + ~wrap64_toMem_cap[32], + IF_wrap64_toMem_cap_BIT_32_THEN_wrap64_toMem_c_ETC___d15[13:10], + ~IF_wrap64_toMem_cap_BIT_32_THEN_wrap64_toMem_c_ETC___d15[9:8], + IF_wrap64_toMem_cap_BIT_32_THEN_wrap64_toMem_c_ETC___d15[7:2], + ~IF_wrap64_toMem_cap_BIT_32_THEN_wrap64_toMem_c_ETC___d15[1], + IF_wrap64_toMem_cap_BIT_32_THEN_wrap64_toMem_c_ETC___d15[0], + wrap64_toMem_cap[113:82] } ; +endmodule // module_wrap64_toMem + diff --git a/module_wrap64_validAsType.v b/module_wrap64_validAsType.v new file mode 100644 index 0000000..b3a28e9 --- /dev/null +++ b/module_wrap64_validAsType.v @@ -0,0 +1,45 @@ +// +// Generated by Bluespec Compiler, version 2025.01.1 (build 65e3a87) +// +// On Tue Feb 17 13:06:26 GMT 2026 +// +// +// Ports: +// Name I/O size props +// wrap64_validAsType O 1 +// wrap64_validAsType_dummy I 115 unused +// wrap64_validAsType_checkType I 32 +// +// Combinational paths from inputs to outputs: +// wrap64_validAsType_checkType -> wrap64_validAsType +// +// + +`ifdef BSV_ASSIGNMENT_DELAY +`else + `define BSV_ASSIGNMENT_DELAY +`endif + +`ifdef BSV_POSITIVE_RESET + `define BSV_RESET_VALUE 1'b1 + `define BSV_RESET_EDGE posedge +`else + `define BSV_RESET_VALUE 1'b0 + `define BSV_RESET_EDGE negedge +`endif + +module module_wrap64_validAsType(wrap64_validAsType_dummy, + wrap64_validAsType_checkType, + wrap64_validAsType); + // value method wrap64_validAsType + input [114 : 0] wrap64_validAsType_dummy; + input [31 : 0] wrap64_validAsType_checkType; + output wrap64_validAsType; + + // signals for module outputs + wire wrap64_validAsType; + + // value method wrap64_validAsType + assign wrap64_validAsType = wrap64_validAsType_checkType <= 32'd11 ; +endmodule // module_wrap64_validAsType +