mirror of
https://github.com/rdolbeau/VexRiscvBPluginGenerator.git
synced 2025-04-18 18:44:42 -04:00
aes32d*, Zknd
This commit is contained in:
parent
e1513ee5cf
commit
051a96c2fa
5 changed files with 2237 additions and 52 deletions
1006
CryptoZknd.scala
Normal file
1006
CryptoZknd.scala
Normal file
File diff suppressed because it is too large
Load diff
621
CryptoZkne.scala
621
CryptoZkne.scala
|
@ -19,7 +19,7 @@ object CryptoZknePlugin {
|
|||
// Prologue
|
||||
|
||||
// massive MUX implementing FT0
|
||||
def fun_aes_raw(in:Bits) : Bits = {
|
||||
def fun_aesft0_raw(in:Bits) : Bits = {
|
||||
val x = in(7 downto 0)
|
||||
val r = (x).mux(
|
||||
B"8'x00" -> B"24'xa563c6",
|
||||
|
@ -281,48 +281,619 @@ object CryptoZknePlugin {
|
|||
r // return value;
|
||||
}
|
||||
|
||||
def fun_aesx_0(rs1: Bits, rs2: Bits) : Bits = {
|
||||
def fun_aes32esmi0(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(7 downto 0)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(23 downto 8) ## r(15 downto 0)) ^ rs2 // return value
|
||||
}
|
||||
def fun_aesx_1(rs1: Bits, rs2: Bits) : Bits = {
|
||||
def fun_aes32esmi1(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(15 downto 8)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(15 downto 8) ## r(15 downto 0) ## r(23 downto 16)) ^ rs2 // return value
|
||||
}
|
||||
def fun_aesx_2(rs1: Bits, rs2: Bits) : Bits = {
|
||||
def fun_aes32esmi2(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(23 downto 16)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(15 downto 0) ## r(23 downto 8)) ^ rs2 // return value
|
||||
}
|
||||
def fun_aesx_3(rs1: Bits, rs2: Bits) : Bits = {
|
||||
def fun_aes32esmi3(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(31 downto 24)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(7 downto 0) ## r(23 downto 8) ## r(15 downto 8)) ^ rs2 // return value
|
||||
}
|
||||
|
||||
def fun_aesxnm_0(rs1: Bits, rs2: Bits) : Bits = {
|
||||
// reuse the middle column of FT0 as FSb
|
||||
def fun_aes32esi0(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(7 downto 0)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(15 downto 8).resize(32) ) ^ rs2 // return value
|
||||
}
|
||||
def fun_aesxnm_1(rs1: Bits, rs2: Bits) : Bits = {
|
||||
def fun_aes32esi1(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(15 downto 8)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(15 downto 8).resize(32) |<< 8) ^ rs2 // return value
|
||||
}
|
||||
def fun_aesxnm_2(rs1: Bits, rs2: Bits) : Bits = {
|
||||
def fun_aes32esi2(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(23 downto 16)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(15 downto 8).resize(32) |<< 16) ^ rs2 // return value
|
||||
}
|
||||
def fun_aesxnm_3(rs1: Bits, rs2: Bits) : Bits = {
|
||||
def fun_aes32esi3(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(31 downto 24)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(15 downto 8).resize(32) |<< 24) ^ rs2 // return value
|
||||
}
|
||||
|
||||
// even more massive MUX implementing RT0
|
||||
def fun_aesrt0_raw(in:Bits) : Bits = {
|
||||
val x = in(7 downto 0)
|
||||
val r = (x).mux(
|
||||
B"8'x00" -> B"32'x50a7f451",
|
||||
B"8'x01" -> B"32'x5365417e",
|
||||
B"8'x02" -> B"32'xc3a4171a",
|
||||
B"8'x03" -> B"32'x965e273a",
|
||||
B"8'x04" -> B"32'xcb6bab3b",
|
||||
B"8'x05" -> B"32'xf1459d1f",
|
||||
B"8'x06" -> B"32'xab58faac",
|
||||
B"8'x07" -> B"32'x9303e34b",
|
||||
B"8'x08" -> B"32'x55fa3020",
|
||||
B"8'x09" -> B"32'xf66d76ad",
|
||||
B"8'x0a" -> B"32'x9176cc88",
|
||||
B"8'x0b" -> B"32'x254c02f5",
|
||||
B"8'x0c" -> B"32'xfcd7e54f",
|
||||
B"8'x0d" -> B"32'xd7cb2ac5",
|
||||
B"8'x0e" -> B"32'x80443526",
|
||||
B"8'x0f" -> B"32'x8fa362b5",
|
||||
B"8'x10" -> B"32'x495ab1de",
|
||||
B"8'x11" -> B"32'x671bba25",
|
||||
B"8'x12" -> B"32'x980eea45",
|
||||
B"8'x13" -> B"32'xe1c0fe5d",
|
||||
B"8'x14" -> B"32'x02752fc3",
|
||||
B"8'x15" -> B"32'x12f04c81",
|
||||
B"8'x16" -> B"32'xa397468d",
|
||||
B"8'x17" -> B"32'xc6f9d36b",
|
||||
B"8'x18" -> B"32'xe75f8f03",
|
||||
B"8'x19" -> B"32'x959c9215",
|
||||
B"8'x1a" -> B"32'xeb7a6dbf",
|
||||
B"8'x1b" -> B"32'xda595295",
|
||||
B"8'x1c" -> B"32'x2d83bed4",
|
||||
B"8'x1d" -> B"32'xd3217458",
|
||||
B"8'x1e" -> B"32'x2969e049",
|
||||
B"8'x1f" -> B"32'x44c8c98e",
|
||||
B"8'x20" -> B"32'x6a89c275",
|
||||
B"8'x21" -> B"32'x78798ef4",
|
||||
B"8'x22" -> B"32'x6b3e5899",
|
||||
B"8'x23" -> B"32'xdd71b927",
|
||||
B"8'x24" -> B"32'xb64fe1be",
|
||||
B"8'x25" -> B"32'x17ad88f0",
|
||||
B"8'x26" -> B"32'x66ac20c9",
|
||||
B"8'x27" -> B"32'xb43ace7d",
|
||||
B"8'x28" -> B"32'x184adf63",
|
||||
B"8'x29" -> B"32'x82311ae5",
|
||||
B"8'x2a" -> B"32'x60335197",
|
||||
B"8'x2b" -> B"32'x457f5362",
|
||||
B"8'x2c" -> B"32'xe07764b1",
|
||||
B"8'x2d" -> B"32'x84ae6bbb",
|
||||
B"8'x2e" -> B"32'x1ca081fe",
|
||||
B"8'x2f" -> B"32'x942b08f9",
|
||||
B"8'x30" -> B"32'x58684870",
|
||||
B"8'x31" -> B"32'x19fd458f",
|
||||
B"8'x32" -> B"32'x876cde94",
|
||||
B"8'x33" -> B"32'xb7f87b52",
|
||||
B"8'x34" -> B"32'x23d373ab",
|
||||
B"8'x35" -> B"32'xe2024b72",
|
||||
B"8'x36" -> B"32'x578f1fe3",
|
||||
B"8'x37" -> B"32'x2aab5566",
|
||||
B"8'x38" -> B"32'x0728ebb2",
|
||||
B"8'x39" -> B"32'x03c2b52f",
|
||||
B"8'x3a" -> B"32'x9a7bc586",
|
||||
B"8'x3b" -> B"32'xa50837d3",
|
||||
B"8'x3c" -> B"32'xf2872830",
|
||||
B"8'x3d" -> B"32'xb2a5bf23",
|
||||
B"8'x3e" -> B"32'xba6a0302",
|
||||
B"8'x3f" -> B"32'x5c8216ed",
|
||||
B"8'x40" -> B"32'x2b1ccf8a",
|
||||
B"8'x41" -> B"32'x92b479a7",
|
||||
B"8'x42" -> B"32'xf0f207f3",
|
||||
B"8'x43" -> B"32'xa1e2694e",
|
||||
B"8'x44" -> B"32'xcdf4da65",
|
||||
B"8'x45" -> B"32'xd5be0506",
|
||||
B"8'x46" -> B"32'x1f6234d1",
|
||||
B"8'x47" -> B"32'x8afea6c4",
|
||||
B"8'x48" -> B"32'x9d532e34",
|
||||
B"8'x49" -> B"32'xa055f3a2",
|
||||
B"8'x4a" -> B"32'x32e18a05",
|
||||
B"8'x4b" -> B"32'x75ebf6a4",
|
||||
B"8'x4c" -> B"32'x39ec830b",
|
||||
B"8'x4d" -> B"32'xaaef6040",
|
||||
B"8'x4e" -> B"32'x069f715e",
|
||||
B"8'x4f" -> B"32'x51106ebd",
|
||||
B"8'x50" -> B"32'xf98a213e",
|
||||
B"8'x51" -> B"32'x3d06dd96",
|
||||
B"8'x52" -> B"32'xae053edd",
|
||||
B"8'x53" -> B"32'x46bde64d",
|
||||
B"8'x54" -> B"32'xb58d5491",
|
||||
B"8'x55" -> B"32'x055dc471",
|
||||
B"8'x56" -> B"32'x6fd40604",
|
||||
B"8'x57" -> B"32'xff155060",
|
||||
B"8'x58" -> B"32'x24fb9819",
|
||||
B"8'x59" -> B"32'x97e9bdd6",
|
||||
B"8'x5a" -> B"32'xcc434089",
|
||||
B"8'x5b" -> B"32'x779ed967",
|
||||
B"8'x5c" -> B"32'xbd42e8b0",
|
||||
B"8'x5d" -> B"32'x888b8907",
|
||||
B"8'x5e" -> B"32'x385b19e7",
|
||||
B"8'x5f" -> B"32'xdbeec879",
|
||||
B"8'x60" -> B"32'x470a7ca1",
|
||||
B"8'x61" -> B"32'xe90f427c",
|
||||
B"8'x62" -> B"32'xc91e84f8",
|
||||
B"8'x63" -> B"32'x00000000",
|
||||
B"8'x64" -> B"32'x83868009",
|
||||
B"8'x65" -> B"32'x48ed2b32",
|
||||
B"8'x66" -> B"32'xac70111e",
|
||||
B"8'x67" -> B"32'x4e725a6c",
|
||||
B"8'x68" -> B"32'xfbff0efd",
|
||||
B"8'x69" -> B"32'x5638850f",
|
||||
B"8'x6a" -> B"32'x1ed5ae3d",
|
||||
B"8'x6b" -> B"32'x27392d36",
|
||||
B"8'x6c" -> B"32'x64d90f0a",
|
||||
B"8'x6d" -> B"32'x21a65c68",
|
||||
B"8'x6e" -> B"32'xd1545b9b",
|
||||
B"8'x6f" -> B"32'x3a2e3624",
|
||||
B"8'x70" -> B"32'xb1670a0c",
|
||||
B"8'x71" -> B"32'x0fe75793",
|
||||
B"8'x72" -> B"32'xd296eeb4",
|
||||
B"8'x73" -> B"32'x9e919b1b",
|
||||
B"8'x74" -> B"32'x4fc5c080",
|
||||
B"8'x75" -> B"32'xa220dc61",
|
||||
B"8'x76" -> B"32'x694b775a",
|
||||
B"8'x77" -> B"32'x161a121c",
|
||||
B"8'x78" -> B"32'x0aba93e2",
|
||||
B"8'x79" -> B"32'xe52aa0c0",
|
||||
B"8'x7a" -> B"32'x43e0223c",
|
||||
B"8'x7b" -> B"32'x1d171b12",
|
||||
B"8'x7c" -> B"32'x0b0d090e",
|
||||
B"8'x7d" -> B"32'xadc78bf2",
|
||||
B"8'x7e" -> B"32'xb9a8b62d",
|
||||
B"8'x7f" -> B"32'xc8a91e14",
|
||||
B"8'x80" -> B"32'x8519f157",
|
||||
B"8'x81" -> B"32'x4c0775af",
|
||||
B"8'x82" -> B"32'xbbdd99ee",
|
||||
B"8'x83" -> B"32'xfd607fa3",
|
||||
B"8'x84" -> B"32'x9f2601f7",
|
||||
B"8'x85" -> B"32'xbcf5725c",
|
||||
B"8'x86" -> B"32'xc53b6644",
|
||||
B"8'x87" -> B"32'x347efb5b",
|
||||
B"8'x88" -> B"32'x7629438b",
|
||||
B"8'x89" -> B"32'xdcc623cb",
|
||||
B"8'x8a" -> B"32'x68fcedb6",
|
||||
B"8'x8b" -> B"32'x63f1e4b8",
|
||||
B"8'x8c" -> B"32'xcadc31d7",
|
||||
B"8'x8d" -> B"32'x10856342",
|
||||
B"8'x8e" -> B"32'x40229713",
|
||||
B"8'x8f" -> B"32'x2011c684",
|
||||
B"8'x90" -> B"32'x7d244a85",
|
||||
B"8'x91" -> B"32'xf83dbbd2",
|
||||
B"8'x92" -> B"32'x1132f9ae",
|
||||
B"8'x93" -> B"32'x6da129c7",
|
||||
B"8'x94" -> B"32'x4b2f9e1d",
|
||||
B"8'x95" -> B"32'xf330b2dc",
|
||||
B"8'x96" -> B"32'xec52860d",
|
||||
B"8'x97" -> B"32'xd0e3c177",
|
||||
B"8'x98" -> B"32'x6c16b32b",
|
||||
B"8'x99" -> B"32'x99b970a9",
|
||||
B"8'x9a" -> B"32'xfa489411",
|
||||
B"8'x9b" -> B"32'x2264e947",
|
||||
B"8'x9c" -> B"32'xc48cfca8",
|
||||
B"8'x9d" -> B"32'x1a3ff0a0",
|
||||
B"8'x9e" -> B"32'xd82c7d56",
|
||||
B"8'x9f" -> B"32'xef903322",
|
||||
B"8'xa0" -> B"32'xc74e4987",
|
||||
B"8'xa1" -> B"32'xc1d138d9",
|
||||
B"8'xa2" -> B"32'xfea2ca8c",
|
||||
B"8'xa3" -> B"32'x360bd498",
|
||||
B"8'xa4" -> B"32'xcf81f5a6",
|
||||
B"8'xa5" -> B"32'x28de7aa5",
|
||||
B"8'xa6" -> B"32'x268eb7da",
|
||||
B"8'xa7" -> B"32'xa4bfad3f",
|
||||
B"8'xa8" -> B"32'xe49d3a2c",
|
||||
B"8'xa9" -> B"32'x0d927850",
|
||||
B"8'xaa" -> B"32'x9bcc5f6a",
|
||||
B"8'xab" -> B"32'x62467e54",
|
||||
B"8'xac" -> B"32'xc2138df6",
|
||||
B"8'xad" -> B"32'xe8b8d890",
|
||||
B"8'xae" -> B"32'x5ef7392e",
|
||||
B"8'xaf" -> B"32'xf5afc382",
|
||||
B"8'xb0" -> B"32'xbe805d9f",
|
||||
B"8'xb1" -> B"32'x7c93d069",
|
||||
B"8'xb2" -> B"32'xa92dd56f",
|
||||
B"8'xb3" -> B"32'xb31225cf",
|
||||
B"8'xb4" -> B"32'x3b99acc8",
|
||||
B"8'xb5" -> B"32'xa77d1810",
|
||||
B"8'xb6" -> B"32'x6e639ce8",
|
||||
B"8'xb7" -> B"32'x7bbb3bdb",
|
||||
B"8'xb8" -> B"32'x097826cd",
|
||||
B"8'xb9" -> B"32'xf418596e",
|
||||
B"8'xba" -> B"32'x01b79aec",
|
||||
B"8'xbb" -> B"32'xa89a4f83",
|
||||
B"8'xbc" -> B"32'x656e95e6",
|
||||
B"8'xbd" -> B"32'x7ee6ffaa",
|
||||
B"8'xbe" -> B"32'x08cfbc21",
|
||||
B"8'xbf" -> B"32'xe6e815ef",
|
||||
B"8'xc0" -> B"32'xd99be7ba",
|
||||
B"8'xc1" -> B"32'xce366f4a",
|
||||
B"8'xc2" -> B"32'xd4099fea",
|
||||
B"8'xc3" -> B"32'xd67cb029",
|
||||
B"8'xc4" -> B"32'xafb2a431",
|
||||
B"8'xc5" -> B"32'x31233f2a",
|
||||
B"8'xc6" -> B"32'x3094a5c6",
|
||||
B"8'xc7" -> B"32'xc066a235",
|
||||
B"8'xc8" -> B"32'x37bc4e74",
|
||||
B"8'xc9" -> B"32'xa6ca82fc",
|
||||
B"8'xca" -> B"32'xb0d090e0",
|
||||
B"8'xcb" -> B"32'x15d8a733",
|
||||
B"8'xcc" -> B"32'x4a9804f1",
|
||||
B"8'xcd" -> B"32'xf7daec41",
|
||||
B"8'xce" -> B"32'x0e50cd7f",
|
||||
B"8'xcf" -> B"32'x2ff69117",
|
||||
B"8'xd0" -> B"32'x8dd64d76",
|
||||
B"8'xd1" -> B"32'x4db0ef43",
|
||||
B"8'xd2" -> B"32'x544daacc",
|
||||
B"8'xd3" -> B"32'xdf0496e4",
|
||||
B"8'xd4" -> B"32'xe3b5d19e",
|
||||
B"8'xd5" -> B"32'x1b886a4c",
|
||||
B"8'xd6" -> B"32'xb81f2cc1",
|
||||
B"8'xd7" -> B"32'x7f516546",
|
||||
B"8'xd8" -> B"32'x04ea5e9d",
|
||||
B"8'xd9" -> B"32'x5d358c01",
|
||||
B"8'xda" -> B"32'x737487fa",
|
||||
B"8'xdb" -> B"32'x2e410bfb",
|
||||
B"8'xdc" -> B"32'x5a1d67b3",
|
||||
B"8'xdd" -> B"32'x52d2db92",
|
||||
B"8'xde" -> B"32'x335610e9",
|
||||
B"8'xdf" -> B"32'x1347d66d",
|
||||
B"8'xe0" -> B"32'x8c61d79a",
|
||||
B"8'xe1" -> B"32'x7a0ca137",
|
||||
B"8'xe2" -> B"32'x8e14f859",
|
||||
B"8'xe3" -> B"32'x893c13eb",
|
||||
B"8'xe4" -> B"32'xee27a9ce",
|
||||
B"8'xe5" -> B"32'x35c961b7",
|
||||
B"8'xe6" -> B"32'xede51ce1",
|
||||
B"8'xe7" -> B"32'x3cb1477a",
|
||||
B"8'xe8" -> B"32'x59dfd29c",
|
||||
B"8'xe9" -> B"32'x3f73f255",
|
||||
B"8'xea" -> B"32'x79ce1418",
|
||||
B"8'xeb" -> B"32'xbf37c773",
|
||||
B"8'xec" -> B"32'xeacdf753",
|
||||
B"8'xed" -> B"32'x5baafd5f",
|
||||
B"8'xee" -> B"32'x146f3ddf",
|
||||
B"8'xef" -> B"32'x86db4478",
|
||||
B"8'xf0" -> B"32'x81f3afca",
|
||||
B"8'xf1" -> B"32'x3ec468b9",
|
||||
B"8'xf2" -> B"32'x2c342438",
|
||||
B"8'xf3" -> B"32'x5f40a3c2",
|
||||
B"8'xf4" -> B"32'x72c31d16",
|
||||
B"8'xf5" -> B"32'x0c25e2bc",
|
||||
B"8'xf6" -> B"32'x8b493c28",
|
||||
B"8'xf7" -> B"32'x41950dff",
|
||||
B"8'xf8" -> B"32'x7101a839",
|
||||
B"8'xf9" -> B"32'xdeb30c08",
|
||||
B"8'xfa" -> B"32'x9ce4b4d8",
|
||||
B"8'xfb" -> B"32'x90c15664",
|
||||
B"8'xfc" -> B"32'x6184cb7b",
|
||||
B"8'xfd" -> B"32'x70b632d5",
|
||||
B"8'xfe" -> B"32'x745c6c48",
|
||||
B"8'xff" -> B"32'x4257b8d0"
|
||||
)
|
||||
r // return value;
|
||||
}
|
||||
|
||||
def fun_aes32dsmi0(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(7 downto 0)
|
||||
val r = fun_aesrt0_raw(idx)
|
||||
r(31 downto 0) ^ rs2 // return value
|
||||
}
|
||||
def fun_aes32dsmi1(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(15 downto 8)
|
||||
val r = fun_aesrt0_raw(idx)
|
||||
(r(23 downto 0) ## r(31 downto 24)) ^ rs2 // return value
|
||||
}
|
||||
def fun_aes32dsmi2(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(23 downto 16)
|
||||
val r = fun_aesrt0_raw(idx)
|
||||
(r(15 downto 0) ## r(31 downto 16)) ^ rs2 // return value
|
||||
}
|
||||
def fun_aes32dsmi3(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(31 downto 24)
|
||||
val r = fun_aesrt0_raw(idx)
|
||||
(r(7 downto 0) ## r(31 downto 8)) ^ rs2 // return value
|
||||
}
|
||||
|
||||
def fun_aesrsb_raw(in:Bits) : Bits = {
|
||||
val x = in(7 downto 0)
|
||||
val r = (x).mux(
|
||||
B"8'x00" -> B"8'x52",
|
||||
B"8'x01" -> B"8'x09",
|
||||
B"8'x02" -> B"8'x6a",
|
||||
B"8'x03" -> B"8'xd5",
|
||||
B"8'x04" -> B"8'x30",
|
||||
B"8'x05" -> B"8'x36",
|
||||
B"8'x06" -> B"8'xa5",
|
||||
B"8'x07" -> B"8'x38",
|
||||
B"8'x08" -> B"8'xbf",
|
||||
B"8'x09" -> B"8'x40",
|
||||
B"8'x0a" -> B"8'xa3",
|
||||
B"8'x0b" -> B"8'x9e",
|
||||
B"8'x0c" -> B"8'x81",
|
||||
B"8'x0d" -> B"8'xf3",
|
||||
B"8'x0e" -> B"8'xd7",
|
||||
B"8'x0f" -> B"8'xfb",
|
||||
B"8'x10" -> B"8'x7c",
|
||||
B"8'x11" -> B"8'xe3",
|
||||
B"8'x12" -> B"8'x39",
|
||||
B"8'x13" -> B"8'x82",
|
||||
B"8'x14" -> B"8'x9b",
|
||||
B"8'x15" -> B"8'x2f",
|
||||
B"8'x16" -> B"8'xff",
|
||||
B"8'x17" -> B"8'x87",
|
||||
B"8'x18" -> B"8'x34",
|
||||
B"8'x19" -> B"8'x8e",
|
||||
B"8'x1a" -> B"8'x43",
|
||||
B"8'x1b" -> B"8'x44",
|
||||
B"8'x1c" -> B"8'xc4",
|
||||
B"8'x1d" -> B"8'xde",
|
||||
B"8'x1e" -> B"8'xe9",
|
||||
B"8'x1f" -> B"8'xcb",
|
||||
B"8'x20" -> B"8'x54",
|
||||
B"8'x21" -> B"8'x7b",
|
||||
B"8'x22" -> B"8'x94",
|
||||
B"8'x23" -> B"8'x32",
|
||||
B"8'x24" -> B"8'xa6",
|
||||
B"8'x25" -> B"8'xc2",
|
||||
B"8'x26" -> B"8'x23",
|
||||
B"8'x27" -> B"8'x3d",
|
||||
B"8'x28" -> B"8'xee",
|
||||
B"8'x29" -> B"8'x4c",
|
||||
B"8'x2a" -> B"8'x95",
|
||||
B"8'x2b" -> B"8'x0b",
|
||||
B"8'x2c" -> B"8'x42",
|
||||
B"8'x2d" -> B"8'xfa",
|
||||
B"8'x2e" -> B"8'xc3",
|
||||
B"8'x2f" -> B"8'x4e",
|
||||
B"8'x30" -> B"8'x08",
|
||||
B"8'x31" -> B"8'x2e",
|
||||
B"8'x32" -> B"8'xa1",
|
||||
B"8'x33" -> B"8'x66",
|
||||
B"8'x34" -> B"8'x28",
|
||||
B"8'x35" -> B"8'xd9",
|
||||
B"8'x36" -> B"8'x24",
|
||||
B"8'x37" -> B"8'xb2",
|
||||
B"8'x38" -> B"8'x76",
|
||||
B"8'x39" -> B"8'x5b",
|
||||
B"8'x3a" -> B"8'xa2",
|
||||
B"8'x3b" -> B"8'x49",
|
||||
B"8'x3c" -> B"8'x6d",
|
||||
B"8'x3d" -> B"8'x8b",
|
||||
B"8'x3e" -> B"8'xd1",
|
||||
B"8'x3f" -> B"8'x25",
|
||||
B"8'x40" -> B"8'x72",
|
||||
B"8'x41" -> B"8'xf8",
|
||||
B"8'x42" -> B"8'xf6",
|
||||
B"8'x43" -> B"8'x64",
|
||||
B"8'x44" -> B"8'x86",
|
||||
B"8'x45" -> B"8'x68",
|
||||
B"8'x46" -> B"8'x98",
|
||||
B"8'x47" -> B"8'x16",
|
||||
B"8'x48" -> B"8'xd4",
|
||||
B"8'x49" -> B"8'xa4",
|
||||
B"8'x4a" -> B"8'x5c",
|
||||
B"8'x4b" -> B"8'xcc",
|
||||
B"8'x4c" -> B"8'x5d",
|
||||
B"8'x4d" -> B"8'x65",
|
||||
B"8'x4e" -> B"8'xb6",
|
||||
B"8'x4f" -> B"8'x92",
|
||||
B"8'x50" -> B"8'x6c",
|
||||
B"8'x51" -> B"8'x70",
|
||||
B"8'x52" -> B"8'x48",
|
||||
B"8'x53" -> B"8'x50",
|
||||
B"8'x54" -> B"8'xfd",
|
||||
B"8'x55" -> B"8'xed",
|
||||
B"8'x56" -> B"8'xb9",
|
||||
B"8'x57" -> B"8'xda",
|
||||
B"8'x58" -> B"8'x5e",
|
||||
B"8'x59" -> B"8'x15",
|
||||
B"8'x5a" -> B"8'x46",
|
||||
B"8'x5b" -> B"8'x57",
|
||||
B"8'x5c" -> B"8'xa7",
|
||||
B"8'x5d" -> B"8'x8d",
|
||||
B"8'x5e" -> B"8'x9d",
|
||||
B"8'x5f" -> B"8'x84",
|
||||
B"8'x60" -> B"8'x90",
|
||||
B"8'x61" -> B"8'xd8",
|
||||
B"8'x62" -> B"8'xab",
|
||||
B"8'x63" -> B"8'x00",
|
||||
B"8'x64" -> B"8'x8c",
|
||||
B"8'x65" -> B"8'xbc",
|
||||
B"8'x66" -> B"8'xd3",
|
||||
B"8'x67" -> B"8'x0a",
|
||||
B"8'x68" -> B"8'xf7",
|
||||
B"8'x69" -> B"8'xe4",
|
||||
B"8'x6a" -> B"8'x58",
|
||||
B"8'x6b" -> B"8'x05",
|
||||
B"8'x6c" -> B"8'xb8",
|
||||
B"8'x6d" -> B"8'xb3",
|
||||
B"8'x6e" -> B"8'x45",
|
||||
B"8'x6f" -> B"8'x06",
|
||||
B"8'x70" -> B"8'xd0",
|
||||
B"8'x71" -> B"8'x2c",
|
||||
B"8'x72" -> B"8'x1e",
|
||||
B"8'x73" -> B"8'x8f",
|
||||
B"8'x74" -> B"8'xca",
|
||||
B"8'x75" -> B"8'x3f",
|
||||
B"8'x76" -> B"8'x0f",
|
||||
B"8'x77" -> B"8'x02",
|
||||
B"8'x78" -> B"8'xc1",
|
||||
B"8'x79" -> B"8'xaf",
|
||||
B"8'x7a" -> B"8'xbd",
|
||||
B"8'x7b" -> B"8'x03",
|
||||
B"8'x7c" -> B"8'x01",
|
||||
B"8'x7d" -> B"8'x13",
|
||||
B"8'x7e" -> B"8'x8a",
|
||||
B"8'x7f" -> B"8'x6b",
|
||||
B"8'x80" -> B"8'x3a",
|
||||
B"8'x81" -> B"8'x91",
|
||||
B"8'x82" -> B"8'x11",
|
||||
B"8'x83" -> B"8'x41",
|
||||
B"8'x84" -> B"8'x4f",
|
||||
B"8'x85" -> B"8'x67",
|
||||
B"8'x86" -> B"8'xdc",
|
||||
B"8'x87" -> B"8'xea",
|
||||
B"8'x88" -> B"8'x97",
|
||||
B"8'x89" -> B"8'xf2",
|
||||
B"8'x8a" -> B"8'xcf",
|
||||
B"8'x8b" -> B"8'xce",
|
||||
B"8'x8c" -> B"8'xf0",
|
||||
B"8'x8d" -> B"8'xb4",
|
||||
B"8'x8e" -> B"8'xe6",
|
||||
B"8'x8f" -> B"8'x73",
|
||||
B"8'x90" -> B"8'x96",
|
||||
B"8'x91" -> B"8'xac",
|
||||
B"8'x92" -> B"8'x74",
|
||||
B"8'x93" -> B"8'x22",
|
||||
B"8'x94" -> B"8'xe7",
|
||||
B"8'x95" -> B"8'xad",
|
||||
B"8'x96" -> B"8'x35",
|
||||
B"8'x97" -> B"8'x85",
|
||||
B"8'x98" -> B"8'xe2",
|
||||
B"8'x99" -> B"8'xf9",
|
||||
B"8'x9a" -> B"8'x37",
|
||||
B"8'x9b" -> B"8'xe8",
|
||||
B"8'x9c" -> B"8'x1c",
|
||||
B"8'x9d" -> B"8'x75",
|
||||
B"8'x9e" -> B"8'xdf",
|
||||
B"8'x9f" -> B"8'x6e",
|
||||
B"8'xa0" -> B"8'x47",
|
||||
B"8'xa1" -> B"8'xf1",
|
||||
B"8'xa2" -> B"8'x1a",
|
||||
B"8'xa3" -> B"8'x71",
|
||||
B"8'xa4" -> B"8'x1d",
|
||||
B"8'xa5" -> B"8'x29",
|
||||
B"8'xa6" -> B"8'xc5",
|
||||
B"8'xa7" -> B"8'x89",
|
||||
B"8'xa8" -> B"8'x6f",
|
||||
B"8'xa9" -> B"8'xb7",
|
||||
B"8'xaa" -> B"8'x62",
|
||||
B"8'xab" -> B"8'x0e",
|
||||
B"8'xac" -> B"8'xaa",
|
||||
B"8'xad" -> B"8'x18",
|
||||
B"8'xae" -> B"8'xbe",
|
||||
B"8'xaf" -> B"8'x1b",
|
||||
B"8'xb0" -> B"8'xfc",
|
||||
B"8'xb1" -> B"8'x56",
|
||||
B"8'xb2" -> B"8'x3e",
|
||||
B"8'xb3" -> B"8'x4b",
|
||||
B"8'xb4" -> B"8'xc6",
|
||||
B"8'xb5" -> B"8'xd2",
|
||||
B"8'xb6" -> B"8'x79",
|
||||
B"8'xb7" -> B"8'x20",
|
||||
B"8'xb8" -> B"8'x9a",
|
||||
B"8'xb9" -> B"8'xdb",
|
||||
B"8'xba" -> B"8'xc0",
|
||||
B"8'xbb" -> B"8'xfe",
|
||||
B"8'xbc" -> B"8'x78",
|
||||
B"8'xbd" -> B"8'xcd",
|
||||
B"8'xbe" -> B"8'x5a",
|
||||
B"8'xbf" -> B"8'xf4",
|
||||
B"8'xc0" -> B"8'x1f",
|
||||
B"8'xc1" -> B"8'xdd",
|
||||
B"8'xc2" -> B"8'xa8",
|
||||
B"8'xc3" -> B"8'x33",
|
||||
B"8'xc4" -> B"8'x88",
|
||||
B"8'xc5" -> B"8'x07",
|
||||
B"8'xc6" -> B"8'xc7",
|
||||
B"8'xc7" -> B"8'x31",
|
||||
B"8'xc8" -> B"8'xb1",
|
||||
B"8'xc9" -> B"8'x12",
|
||||
B"8'xca" -> B"8'x10",
|
||||
B"8'xcb" -> B"8'x59",
|
||||
B"8'xcc" -> B"8'x27",
|
||||
B"8'xcd" -> B"8'x80",
|
||||
B"8'xce" -> B"8'xec",
|
||||
B"8'xcf" -> B"8'x5f",
|
||||
B"8'xd0" -> B"8'x60",
|
||||
B"8'xd1" -> B"8'x51",
|
||||
B"8'xd2" -> B"8'x7f",
|
||||
B"8'xd3" -> B"8'xa9",
|
||||
B"8'xd4" -> B"8'x19",
|
||||
B"8'xd5" -> B"8'xb5",
|
||||
B"8'xd6" -> B"8'x4a",
|
||||
B"8'xd7" -> B"8'x0d",
|
||||
B"8'xd8" -> B"8'x2d",
|
||||
B"8'xd9" -> B"8'xe5",
|
||||
B"8'xda" -> B"8'x7a",
|
||||
B"8'xdb" -> B"8'x9f",
|
||||
B"8'xdc" -> B"8'x93",
|
||||
B"8'xdd" -> B"8'xc9",
|
||||
B"8'xde" -> B"8'x9c",
|
||||
B"8'xdf" -> B"8'xef",
|
||||
B"8'xe0" -> B"8'xa0",
|
||||
B"8'xe1" -> B"8'xe0",
|
||||
B"8'xe2" -> B"8'x3b",
|
||||
B"8'xe3" -> B"8'x4d",
|
||||
B"8'xe4" -> B"8'xae",
|
||||
B"8'xe5" -> B"8'x2a",
|
||||
B"8'xe6" -> B"8'xf5",
|
||||
B"8'xe7" -> B"8'xb0",
|
||||
B"8'xe8" -> B"8'xc8",
|
||||
B"8'xe9" -> B"8'xeb",
|
||||
B"8'xea" -> B"8'xbb",
|
||||
B"8'xeb" -> B"8'x3c",
|
||||
B"8'xec" -> B"8'x83",
|
||||
B"8'xed" -> B"8'x53",
|
||||
B"8'xee" -> B"8'x99",
|
||||
B"8'xef" -> B"8'x61",
|
||||
B"8'xf0" -> B"8'x17",
|
||||
B"8'xf1" -> B"8'x2b",
|
||||
B"8'xf2" -> B"8'x04",
|
||||
B"8'xf3" -> B"8'x7e",
|
||||
B"8'xf4" -> B"8'xba",
|
||||
B"8'xf5" -> B"8'x77",
|
||||
B"8'xf6" -> B"8'xd6",
|
||||
B"8'xf7" -> B"8'x26",
|
||||
B"8'xf8" -> B"8'xe1",
|
||||
B"8'xf9" -> B"8'x69",
|
||||
B"8'xfa" -> B"8'x14",
|
||||
B"8'xfb" -> B"8'x63",
|
||||
B"8'xfc" -> B"8'x55",
|
||||
B"8'xfd" -> B"8'x21",
|
||||
B"8'xfe" -> B"8'x0c",
|
||||
B"8'xff" -> B"8'x7d"
|
||||
)
|
||||
|
||||
r // return value
|
||||
}
|
||||
|
||||
def fun_aes32dsi0(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(7 downto 0)
|
||||
val r = fun_aesrsb_raw(idx)
|
||||
(r.resize(32) ) ^ rs2 // return value
|
||||
}
|
||||
def fun_aes32dsi1(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(15 downto 8)
|
||||
val r = fun_aesrsb_raw(idx)
|
||||
(r.resize(32) |<< 8) ^ rs2 // return value
|
||||
}
|
||||
def fun_aes32dsi2(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(23 downto 16)
|
||||
val r = fun_aesrsb_raw(idx)
|
||||
(r.resize(32) |<< 16) ^ rs2 // return value
|
||||
}
|
||||
def fun_aes32dsi3(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(31 downto 24)
|
||||
val r = fun_aesrsb_raw(idx)
|
||||
(r.resize(32) |<< 24) ^ rs2 // return value
|
||||
}
|
||||
|
||||
// End prologue
|
||||
} // object Plugin
|
||||
class CryptoZknePlugin(earlyInjection : Boolean = true) extends Plugin[VexRiscv] {
|
||||
|
@ -408,16 +979,16 @@ class CryptoZknePlugin(earlyInjection : Boolean = true) extends Plugin[VexRiscv]
|
|||
execute plug new Area{
|
||||
import execute._
|
||||
val val_aes0 = input(CryptoZkneCtrlaes0).mux(
|
||||
CryptoZkneCtrlaes0Enum.CTRL_aes32esmi0 -> fun_aesx_0(input(SRC2), input(SRC1)).asBits,
|
||||
CryptoZkneCtrlaes0Enum.CTRL_aes32esmi1 -> fun_aesx_1(input(SRC2), input(SRC1)).asBits,
|
||||
CryptoZkneCtrlaes0Enum.CTRL_aes32esmi2 -> fun_aesx_2(input(SRC2), input(SRC1)).asBits,
|
||||
CryptoZkneCtrlaes0Enum.CTRL_aes32esmi3 -> fun_aesx_3(input(SRC2), input(SRC1)).asBits
|
||||
CryptoZkneCtrlaes0Enum.CTRL_aes32esmi0 -> fun_aes32esmi0(input(SRC2), input(SRC1)).asBits,
|
||||
CryptoZkneCtrlaes0Enum.CTRL_aes32esmi1 -> fun_aes32esmi1(input(SRC2), input(SRC1)).asBits,
|
||||
CryptoZkneCtrlaes0Enum.CTRL_aes32esmi2 -> fun_aes32esmi2(input(SRC2), input(SRC1)).asBits,
|
||||
CryptoZkneCtrlaes0Enum.CTRL_aes32esmi3 -> fun_aes32esmi3(input(SRC2), input(SRC1)).asBits
|
||||
) // mux aes0
|
||||
val val_aes1 = input(CryptoZkneCtrlaes1).mux(
|
||||
CryptoZkneCtrlaes1Enum.CTRL_aes32esi0 -> fun_aesxnm_0(input(SRC2), input(SRC1)).asBits,
|
||||
CryptoZkneCtrlaes1Enum.CTRL_aes32esi1 -> fun_aesxnm_1(input(SRC2), input(SRC1)).asBits,
|
||||
CryptoZkneCtrlaes1Enum.CTRL_aes32esi2 -> fun_aesxnm_2(input(SRC2), input(SRC1)).asBits,
|
||||
CryptoZkneCtrlaes1Enum.CTRL_aes32esi3 -> fun_aesxnm_3(input(SRC2), input(SRC1)).asBits
|
||||
CryptoZkneCtrlaes1Enum.CTRL_aes32esi0 -> fun_aes32esi0(input(SRC2), input(SRC1)).asBits,
|
||||
CryptoZkneCtrlaes1Enum.CTRL_aes32esi1 -> fun_aes32esi1(input(SRC2), input(SRC1)).asBits,
|
||||
CryptoZkneCtrlaes1Enum.CTRL_aes32esi2 -> fun_aes32esi2(input(SRC2), input(SRC1)).asBits,
|
||||
CryptoZkneCtrlaes1Enum.CTRL_aes32esi3 -> fun_aes32esi3(input(SRC2), input(SRC1)).asBits
|
||||
) // mux aes1
|
||||
insert(CryptoZkne_FINAL_OUTPUT) := input(CryptoZkneCtrl).mux(
|
||||
CryptoZkneCtrlEnum.CTRL_aes0 -> val_aes0.asBits,
|
||||
|
|
7
Makefile
7
Makefile
|
@ -86,12 +86,15 @@ CryptoZkb.scala: gen_plugin data_bitmanip.txt data_bitmanip_ZbbOnly.txt
|
|||
|
||||
## CryptoZkg doesn't require clmulr, so not 100% the same as Zbc
|
||||
CryptoZkg.scala: gen_plugin data_clmul.txt
|
||||
./gen_plugin -n CryptoZkg -i data_clmul.txt -I clmul -I clmulh >| $@
|
||||
./gen_plugin -n CryptoZkg -i data_clmul.txt -I CLMUL -I CLMULH >| $@
|
||||
|
||||
## Full Zkn not there yet, missing Zknd (AES decode)
|
||||
|
||||
CryptoZknd.scala: gen_plugin data_aes.txt
|
||||
./gen_plugin -n CryptoZknd -i data_aes.txt -I Zknd >| $@
|
||||
|
||||
CryptoZkne.scala: gen_plugin data_aes.txt
|
||||
./gen_plugin -n CryptoZkne -i data_aes.txt -I '*' >| $@
|
||||
./gen_plugin -n CryptoZkne -i data_aes.txt -I Zkne >| $@
|
||||
|
||||
CryptoZknh.scala: gen_plugin data_sha.txt
|
||||
./gen_plugin -n CryptoZknh -i data_sha.txt -I '*' >| $@
|
||||
|
|
639
data_aes.txt
639
data_aes.txt
|
@ -16,18 +16,36 @@ I aes32esi1 aes32esi1 0111001----------000000000110011 aes1 Zkne
|
|||
I aes32esi2 aes32esi2 1011001----------000000000110011 aes1 Zkne
|
||||
I aes32esi3 aes32esi3 1111001----------000000000110011 aes1 Zkne
|
||||
|
||||
S aes32esmi0 "fun_aesx_0(input(SRC2), input(SRC1))"
|
||||
S aes32esmi1 "fun_aesx_1(input(SRC2), input(SRC1))"
|
||||
S aes32esmi2 "fun_aesx_2(input(SRC2), input(SRC1))"
|
||||
S aes32esmi3 "fun_aesx_3(input(SRC2), input(SRC1))"
|
||||
S aes32esi0 "fun_aesxnm_0(input(SRC2), input(SRC1))"
|
||||
S aes32esi1 "fun_aesxnm_1(input(SRC2), input(SRC1))"
|
||||
S aes32esi2 "fun_aesxnm_2(input(SRC2), input(SRC1))"
|
||||
S aes32esi3 "fun_aesxnm_3(input(SRC2), input(SRC1))"
|
||||
I aes32dsmi0 aes32dsmi0 0011111----------000000000110011 aes0 Zknd
|
||||
I aes32dsmi1 aes32dsmi1 0111111----------000000000110011 aes0 Zknd
|
||||
I aes32dsmi2 aes32dsmi2 1011111----------000000000110011 aes0 Zknd
|
||||
I aes32dsmi3 aes32dsmi3 1111111----------000000000110011 aes0 Zknd
|
||||
I aes32dsi0 aes32dsi0 0011101----------000000000110011 aes1 Zknd
|
||||
I aes32dsi1 aes32dsi1 0111101----------000000000110011 aes1 Zknd
|
||||
I aes32dsi2 aes32dsi2 1011101----------000000000110011 aes1 Zknd
|
||||
I aes32dsi3 aes32dsi3 1111101----------000000000110011 aes1 Zknd
|
||||
|
||||
S aes32esmi0 "fun_aes32esmi0(input(SRC2), input(SRC1))"
|
||||
S aes32esmi1 "fun_aes32esmi1(input(SRC2), input(SRC1))"
|
||||
S aes32esmi2 "fun_aes32esmi2(input(SRC2), input(SRC1))"
|
||||
S aes32esmi3 "fun_aes32esmi3(input(SRC2), input(SRC1))"
|
||||
S aes32esi0 "fun_aes32esi0(input(SRC2), input(SRC1))"
|
||||
S aes32esi1 "fun_aes32esi1(input(SRC2), input(SRC1))"
|
||||
S aes32esi2 "fun_aes32esi2(input(SRC2), input(SRC1))"
|
||||
S aes32esi3 "fun_aes32esi3(input(SRC2), input(SRC1))"
|
||||
|
||||
S aes32dsmi0 "fun_aes32dsmi0(input(SRC2), input(SRC1))"
|
||||
S aes32dsmi1 "fun_aes32dsmi1(input(SRC2), input(SRC1))"
|
||||
S aes32dsmi2 "fun_aes32dsmi2(input(SRC2), input(SRC1))"
|
||||
S aes32dsmi3 "fun_aes32dsmi3(input(SRC2), input(SRC1))"
|
||||
S aes32dsi0 "fun_aes32dsi0(input(SRC2), input(SRC1))"
|
||||
S aes32dsi1 "fun_aes32dsi1(input(SRC2), input(SRC1))"
|
||||
S aes32dsi2 "fun_aes32dsi2(input(SRC2), input(SRC1))"
|
||||
S aes32dsi3 "fun_aes32dsi3(input(SRC2), input(SRC1))"
|
||||
|
||||
P """
|
||||
// massive MUX implementing FT0
|
||||
def fun_aes_raw(in:Bits) : Bits = {
|
||||
def fun_aesft0_raw(in:Bits) : Bits = {
|
||||
val x = in(7 downto 0)
|
||||
val r = (x).mux(
|
||||
B"8'x00" -> B"24'xa563c6",
|
||||
|
@ -289,45 +307,616 @@ P """
|
|||
r // return value;
|
||||
}
|
||||
|
||||
def fun_aesx_0(rs1: Bits, rs2: Bits) : Bits = {
|
||||
def fun_aes32esmi0(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(7 downto 0)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(23 downto 8) ## r(15 downto 0)) ^ rs2 // return value
|
||||
}
|
||||
def fun_aesx_1(rs1: Bits, rs2: Bits) : Bits = {
|
||||
def fun_aes32esmi1(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(15 downto 8)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(15 downto 8) ## r(15 downto 0) ## r(23 downto 16)) ^ rs2 // return value
|
||||
}
|
||||
def fun_aesx_2(rs1: Bits, rs2: Bits) : Bits = {
|
||||
def fun_aes32esmi2(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(23 downto 16)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(15 downto 0) ## r(23 downto 8)) ^ rs2 // return value
|
||||
}
|
||||
def fun_aesx_3(rs1: Bits, rs2: Bits) : Bits = {
|
||||
def fun_aes32esmi3(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(31 downto 24)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(7 downto 0) ## r(23 downto 8) ## r(15 downto 8)) ^ rs2 // return value
|
||||
}
|
||||
|
||||
def fun_aesxnm_0(rs1: Bits, rs2: Bits) : Bits = {
|
||||
// reuse the middle column of FT0 as FSb
|
||||
def fun_aes32esi0(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(7 downto 0)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(15 downto 8).resize(32) ) ^ rs2 // return value
|
||||
}
|
||||
def fun_aesxnm_1(rs1: Bits, rs2: Bits) : Bits = {
|
||||
def fun_aes32esi1(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(15 downto 8)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(15 downto 8).resize(32) |<< 8) ^ rs2 // return value
|
||||
}
|
||||
def fun_aesxnm_2(rs1: Bits, rs2: Bits) : Bits = {
|
||||
def fun_aes32esi2(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(23 downto 16)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(15 downto 8).resize(32) |<< 16) ^ rs2 // return value
|
||||
}
|
||||
def fun_aesxnm_3(rs1: Bits, rs2: Bits) : Bits = {
|
||||
def fun_aes32esi3(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(31 downto 24)
|
||||
val r = fun_aes_raw(idx)
|
||||
val r = fun_aesft0_raw(idx)
|
||||
(r(15 downto 8).resize(32) |<< 24) ^ rs2 // return value
|
||||
}
|
||||
|
||||
// even more massive MUX implementing RT0
|
||||
def fun_aesrt0_raw(in:Bits) : Bits = {
|
||||
val x = in(7 downto 0)
|
||||
val r = (x).mux(
|
||||
B"8'x00" -> B"32'x50a7f451",
|
||||
B"8'x01" -> B"32'x5365417e",
|
||||
B"8'x02" -> B"32'xc3a4171a",
|
||||
B"8'x03" -> B"32'x965e273a",
|
||||
B"8'x04" -> B"32'xcb6bab3b",
|
||||
B"8'x05" -> B"32'xf1459d1f",
|
||||
B"8'x06" -> B"32'xab58faac",
|
||||
B"8'x07" -> B"32'x9303e34b",
|
||||
B"8'x08" -> B"32'x55fa3020",
|
||||
B"8'x09" -> B"32'xf66d76ad",
|
||||
B"8'x0a" -> B"32'x9176cc88",
|
||||
B"8'x0b" -> B"32'x254c02f5",
|
||||
B"8'x0c" -> B"32'xfcd7e54f",
|
||||
B"8'x0d" -> B"32'xd7cb2ac5",
|
||||
B"8'x0e" -> B"32'x80443526",
|
||||
B"8'x0f" -> B"32'x8fa362b5",
|
||||
B"8'x10" -> B"32'x495ab1de",
|
||||
B"8'x11" -> B"32'x671bba25",
|
||||
B"8'x12" -> B"32'x980eea45",
|
||||
B"8'x13" -> B"32'xe1c0fe5d",
|
||||
B"8'x14" -> B"32'x02752fc3",
|
||||
B"8'x15" -> B"32'x12f04c81",
|
||||
B"8'x16" -> B"32'xa397468d",
|
||||
B"8'x17" -> B"32'xc6f9d36b",
|
||||
B"8'x18" -> B"32'xe75f8f03",
|
||||
B"8'x19" -> B"32'x959c9215",
|
||||
B"8'x1a" -> B"32'xeb7a6dbf",
|
||||
B"8'x1b" -> B"32'xda595295",
|
||||
B"8'x1c" -> B"32'x2d83bed4",
|
||||
B"8'x1d" -> B"32'xd3217458",
|
||||
B"8'x1e" -> B"32'x2969e049",
|
||||
B"8'x1f" -> B"32'x44c8c98e",
|
||||
B"8'x20" -> B"32'x6a89c275",
|
||||
B"8'x21" -> B"32'x78798ef4",
|
||||
B"8'x22" -> B"32'x6b3e5899",
|
||||
B"8'x23" -> B"32'xdd71b927",
|
||||
B"8'x24" -> B"32'xb64fe1be",
|
||||
B"8'x25" -> B"32'x17ad88f0",
|
||||
B"8'x26" -> B"32'x66ac20c9",
|
||||
B"8'x27" -> B"32'xb43ace7d",
|
||||
B"8'x28" -> B"32'x184adf63",
|
||||
B"8'x29" -> B"32'x82311ae5",
|
||||
B"8'x2a" -> B"32'x60335197",
|
||||
B"8'x2b" -> B"32'x457f5362",
|
||||
B"8'x2c" -> B"32'xe07764b1",
|
||||
B"8'x2d" -> B"32'x84ae6bbb",
|
||||
B"8'x2e" -> B"32'x1ca081fe",
|
||||
B"8'x2f" -> B"32'x942b08f9",
|
||||
B"8'x30" -> B"32'x58684870",
|
||||
B"8'x31" -> B"32'x19fd458f",
|
||||
B"8'x32" -> B"32'x876cde94",
|
||||
B"8'x33" -> B"32'xb7f87b52",
|
||||
B"8'x34" -> B"32'x23d373ab",
|
||||
B"8'x35" -> B"32'xe2024b72",
|
||||
B"8'x36" -> B"32'x578f1fe3",
|
||||
B"8'x37" -> B"32'x2aab5566",
|
||||
B"8'x38" -> B"32'x0728ebb2",
|
||||
B"8'x39" -> B"32'x03c2b52f",
|
||||
B"8'x3a" -> B"32'x9a7bc586",
|
||||
B"8'x3b" -> B"32'xa50837d3",
|
||||
B"8'x3c" -> B"32'xf2872830",
|
||||
B"8'x3d" -> B"32'xb2a5bf23",
|
||||
B"8'x3e" -> B"32'xba6a0302",
|
||||
B"8'x3f" -> B"32'x5c8216ed",
|
||||
B"8'x40" -> B"32'x2b1ccf8a",
|
||||
B"8'x41" -> B"32'x92b479a7",
|
||||
B"8'x42" -> B"32'xf0f207f3",
|
||||
B"8'x43" -> B"32'xa1e2694e",
|
||||
B"8'x44" -> B"32'xcdf4da65",
|
||||
B"8'x45" -> B"32'xd5be0506",
|
||||
B"8'x46" -> B"32'x1f6234d1",
|
||||
B"8'x47" -> B"32'x8afea6c4",
|
||||
B"8'x48" -> B"32'x9d532e34",
|
||||
B"8'x49" -> B"32'xa055f3a2",
|
||||
B"8'x4a" -> B"32'x32e18a05",
|
||||
B"8'x4b" -> B"32'x75ebf6a4",
|
||||
B"8'x4c" -> B"32'x39ec830b",
|
||||
B"8'x4d" -> B"32'xaaef6040",
|
||||
B"8'x4e" -> B"32'x069f715e",
|
||||
B"8'x4f" -> B"32'x51106ebd",
|
||||
B"8'x50" -> B"32'xf98a213e",
|
||||
B"8'x51" -> B"32'x3d06dd96",
|
||||
B"8'x52" -> B"32'xae053edd",
|
||||
B"8'x53" -> B"32'x46bde64d",
|
||||
B"8'x54" -> B"32'xb58d5491",
|
||||
B"8'x55" -> B"32'x055dc471",
|
||||
B"8'x56" -> B"32'x6fd40604",
|
||||
B"8'x57" -> B"32'xff155060",
|
||||
B"8'x58" -> B"32'x24fb9819",
|
||||
B"8'x59" -> B"32'x97e9bdd6",
|
||||
B"8'x5a" -> B"32'xcc434089",
|
||||
B"8'x5b" -> B"32'x779ed967",
|
||||
B"8'x5c" -> B"32'xbd42e8b0",
|
||||
B"8'x5d" -> B"32'x888b8907",
|
||||
B"8'x5e" -> B"32'x385b19e7",
|
||||
B"8'x5f" -> B"32'xdbeec879",
|
||||
B"8'x60" -> B"32'x470a7ca1",
|
||||
B"8'x61" -> B"32'xe90f427c",
|
||||
B"8'x62" -> B"32'xc91e84f8",
|
||||
B"8'x63" -> B"32'x00000000",
|
||||
B"8'x64" -> B"32'x83868009",
|
||||
B"8'x65" -> B"32'x48ed2b32",
|
||||
B"8'x66" -> B"32'xac70111e",
|
||||
B"8'x67" -> B"32'x4e725a6c",
|
||||
B"8'x68" -> B"32'xfbff0efd",
|
||||
B"8'x69" -> B"32'x5638850f",
|
||||
B"8'x6a" -> B"32'x1ed5ae3d",
|
||||
B"8'x6b" -> B"32'x27392d36",
|
||||
B"8'x6c" -> B"32'x64d90f0a",
|
||||
B"8'x6d" -> B"32'x21a65c68",
|
||||
B"8'x6e" -> B"32'xd1545b9b",
|
||||
B"8'x6f" -> B"32'x3a2e3624",
|
||||
B"8'x70" -> B"32'xb1670a0c",
|
||||
B"8'x71" -> B"32'x0fe75793",
|
||||
B"8'x72" -> B"32'xd296eeb4",
|
||||
B"8'x73" -> B"32'x9e919b1b",
|
||||
B"8'x74" -> B"32'x4fc5c080",
|
||||
B"8'x75" -> B"32'xa220dc61",
|
||||
B"8'x76" -> B"32'x694b775a",
|
||||
B"8'x77" -> B"32'x161a121c",
|
||||
B"8'x78" -> B"32'x0aba93e2",
|
||||
B"8'x79" -> B"32'xe52aa0c0",
|
||||
B"8'x7a" -> B"32'x43e0223c",
|
||||
B"8'x7b" -> B"32'x1d171b12",
|
||||
B"8'x7c" -> B"32'x0b0d090e",
|
||||
B"8'x7d" -> B"32'xadc78bf2",
|
||||
B"8'x7e" -> B"32'xb9a8b62d",
|
||||
B"8'x7f" -> B"32'xc8a91e14",
|
||||
B"8'x80" -> B"32'x8519f157",
|
||||
B"8'x81" -> B"32'x4c0775af",
|
||||
B"8'x82" -> B"32'xbbdd99ee",
|
||||
B"8'x83" -> B"32'xfd607fa3",
|
||||
B"8'x84" -> B"32'x9f2601f7",
|
||||
B"8'x85" -> B"32'xbcf5725c",
|
||||
B"8'x86" -> B"32'xc53b6644",
|
||||
B"8'x87" -> B"32'x347efb5b",
|
||||
B"8'x88" -> B"32'x7629438b",
|
||||
B"8'x89" -> B"32'xdcc623cb",
|
||||
B"8'x8a" -> B"32'x68fcedb6",
|
||||
B"8'x8b" -> B"32'x63f1e4b8",
|
||||
B"8'x8c" -> B"32'xcadc31d7",
|
||||
B"8'x8d" -> B"32'x10856342",
|
||||
B"8'x8e" -> B"32'x40229713",
|
||||
B"8'x8f" -> B"32'x2011c684",
|
||||
B"8'x90" -> B"32'x7d244a85",
|
||||
B"8'x91" -> B"32'xf83dbbd2",
|
||||
B"8'x92" -> B"32'x1132f9ae",
|
||||
B"8'x93" -> B"32'x6da129c7",
|
||||
B"8'x94" -> B"32'x4b2f9e1d",
|
||||
B"8'x95" -> B"32'xf330b2dc",
|
||||
B"8'x96" -> B"32'xec52860d",
|
||||
B"8'x97" -> B"32'xd0e3c177",
|
||||
B"8'x98" -> B"32'x6c16b32b",
|
||||
B"8'x99" -> B"32'x99b970a9",
|
||||
B"8'x9a" -> B"32'xfa489411",
|
||||
B"8'x9b" -> B"32'x2264e947",
|
||||
B"8'x9c" -> B"32'xc48cfca8",
|
||||
B"8'x9d" -> B"32'x1a3ff0a0",
|
||||
B"8'x9e" -> B"32'xd82c7d56",
|
||||
B"8'x9f" -> B"32'xef903322",
|
||||
B"8'xa0" -> B"32'xc74e4987",
|
||||
B"8'xa1" -> B"32'xc1d138d9",
|
||||
B"8'xa2" -> B"32'xfea2ca8c",
|
||||
B"8'xa3" -> B"32'x360bd498",
|
||||
B"8'xa4" -> B"32'xcf81f5a6",
|
||||
B"8'xa5" -> B"32'x28de7aa5",
|
||||
B"8'xa6" -> B"32'x268eb7da",
|
||||
B"8'xa7" -> B"32'xa4bfad3f",
|
||||
B"8'xa8" -> B"32'xe49d3a2c",
|
||||
B"8'xa9" -> B"32'x0d927850",
|
||||
B"8'xaa" -> B"32'x9bcc5f6a",
|
||||
B"8'xab" -> B"32'x62467e54",
|
||||
B"8'xac" -> B"32'xc2138df6",
|
||||
B"8'xad" -> B"32'xe8b8d890",
|
||||
B"8'xae" -> B"32'x5ef7392e",
|
||||
B"8'xaf" -> B"32'xf5afc382",
|
||||
B"8'xb0" -> B"32'xbe805d9f",
|
||||
B"8'xb1" -> B"32'x7c93d069",
|
||||
B"8'xb2" -> B"32'xa92dd56f",
|
||||
B"8'xb3" -> B"32'xb31225cf",
|
||||
B"8'xb4" -> B"32'x3b99acc8",
|
||||
B"8'xb5" -> B"32'xa77d1810",
|
||||
B"8'xb6" -> B"32'x6e639ce8",
|
||||
B"8'xb7" -> B"32'x7bbb3bdb",
|
||||
B"8'xb8" -> B"32'x097826cd",
|
||||
B"8'xb9" -> B"32'xf418596e",
|
||||
B"8'xba" -> B"32'x01b79aec",
|
||||
B"8'xbb" -> B"32'xa89a4f83",
|
||||
B"8'xbc" -> B"32'x656e95e6",
|
||||
B"8'xbd" -> B"32'x7ee6ffaa",
|
||||
B"8'xbe" -> B"32'x08cfbc21",
|
||||
B"8'xbf" -> B"32'xe6e815ef",
|
||||
B"8'xc0" -> B"32'xd99be7ba",
|
||||
B"8'xc1" -> B"32'xce366f4a",
|
||||
B"8'xc2" -> B"32'xd4099fea",
|
||||
B"8'xc3" -> B"32'xd67cb029",
|
||||
B"8'xc4" -> B"32'xafb2a431",
|
||||
B"8'xc5" -> B"32'x31233f2a",
|
||||
B"8'xc6" -> B"32'x3094a5c6",
|
||||
B"8'xc7" -> B"32'xc066a235",
|
||||
B"8'xc8" -> B"32'x37bc4e74",
|
||||
B"8'xc9" -> B"32'xa6ca82fc",
|
||||
B"8'xca" -> B"32'xb0d090e0",
|
||||
B"8'xcb" -> B"32'x15d8a733",
|
||||
B"8'xcc" -> B"32'x4a9804f1",
|
||||
B"8'xcd" -> B"32'xf7daec41",
|
||||
B"8'xce" -> B"32'x0e50cd7f",
|
||||
B"8'xcf" -> B"32'x2ff69117",
|
||||
B"8'xd0" -> B"32'x8dd64d76",
|
||||
B"8'xd1" -> B"32'x4db0ef43",
|
||||
B"8'xd2" -> B"32'x544daacc",
|
||||
B"8'xd3" -> B"32'xdf0496e4",
|
||||
B"8'xd4" -> B"32'xe3b5d19e",
|
||||
B"8'xd5" -> B"32'x1b886a4c",
|
||||
B"8'xd6" -> B"32'xb81f2cc1",
|
||||
B"8'xd7" -> B"32'x7f516546",
|
||||
B"8'xd8" -> B"32'x04ea5e9d",
|
||||
B"8'xd9" -> B"32'x5d358c01",
|
||||
B"8'xda" -> B"32'x737487fa",
|
||||
B"8'xdb" -> B"32'x2e410bfb",
|
||||
B"8'xdc" -> B"32'x5a1d67b3",
|
||||
B"8'xdd" -> B"32'x52d2db92",
|
||||
B"8'xde" -> B"32'x335610e9",
|
||||
B"8'xdf" -> B"32'x1347d66d",
|
||||
B"8'xe0" -> B"32'x8c61d79a",
|
||||
B"8'xe1" -> B"32'x7a0ca137",
|
||||
B"8'xe2" -> B"32'x8e14f859",
|
||||
B"8'xe3" -> B"32'x893c13eb",
|
||||
B"8'xe4" -> B"32'xee27a9ce",
|
||||
B"8'xe5" -> B"32'x35c961b7",
|
||||
B"8'xe6" -> B"32'xede51ce1",
|
||||
B"8'xe7" -> B"32'x3cb1477a",
|
||||
B"8'xe8" -> B"32'x59dfd29c",
|
||||
B"8'xe9" -> B"32'x3f73f255",
|
||||
B"8'xea" -> B"32'x79ce1418",
|
||||
B"8'xeb" -> B"32'xbf37c773",
|
||||
B"8'xec" -> B"32'xeacdf753",
|
||||
B"8'xed" -> B"32'x5baafd5f",
|
||||
B"8'xee" -> B"32'x146f3ddf",
|
||||
B"8'xef" -> B"32'x86db4478",
|
||||
B"8'xf0" -> B"32'x81f3afca",
|
||||
B"8'xf1" -> B"32'x3ec468b9",
|
||||
B"8'xf2" -> B"32'x2c342438",
|
||||
B"8'xf3" -> B"32'x5f40a3c2",
|
||||
B"8'xf4" -> B"32'x72c31d16",
|
||||
B"8'xf5" -> B"32'x0c25e2bc",
|
||||
B"8'xf6" -> B"32'x8b493c28",
|
||||
B"8'xf7" -> B"32'x41950dff",
|
||||
B"8'xf8" -> B"32'x7101a839",
|
||||
B"8'xf9" -> B"32'xdeb30c08",
|
||||
B"8'xfa" -> B"32'x9ce4b4d8",
|
||||
B"8'xfb" -> B"32'x90c15664",
|
||||
B"8'xfc" -> B"32'x6184cb7b",
|
||||
B"8'xfd" -> B"32'x70b632d5",
|
||||
B"8'xfe" -> B"32'x745c6c48",
|
||||
B"8'xff" -> B"32'x4257b8d0"
|
||||
)
|
||||
r // return value;
|
||||
}
|
||||
|
||||
def fun_aes32dsmi0(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(7 downto 0)
|
||||
val r = fun_aesrt0_raw(idx)
|
||||
r(31 downto 0) ^ rs2 // return value
|
||||
}
|
||||
def fun_aes32dsmi1(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(15 downto 8)
|
||||
val r = fun_aesrt0_raw(idx)
|
||||
(r(23 downto 0) ## r(31 downto 24)) ^ rs2 // return value
|
||||
}
|
||||
def fun_aes32dsmi2(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(23 downto 16)
|
||||
val r = fun_aesrt0_raw(idx)
|
||||
(r(15 downto 0) ## r(31 downto 16)) ^ rs2 // return value
|
||||
}
|
||||
def fun_aes32dsmi3(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(31 downto 24)
|
||||
val r = fun_aesrt0_raw(idx)
|
||||
(r(7 downto 0) ## r(31 downto 8)) ^ rs2 // return value
|
||||
}
|
||||
|
||||
def fun_aesrsb_raw(in:Bits) : Bits = {
|
||||
val x = in(7 downto 0)
|
||||
val r = (x).mux(
|
||||
B"8'x00" -> B"8'x52",
|
||||
B"8'x01" -> B"8'x09",
|
||||
B"8'x02" -> B"8'x6a",
|
||||
B"8'x03" -> B"8'xd5",
|
||||
B"8'x04" -> B"8'x30",
|
||||
B"8'x05" -> B"8'x36",
|
||||
B"8'x06" -> B"8'xa5",
|
||||
B"8'x07" -> B"8'x38",
|
||||
B"8'x08" -> B"8'xbf",
|
||||
B"8'x09" -> B"8'x40",
|
||||
B"8'x0a" -> B"8'xa3",
|
||||
B"8'x0b" -> B"8'x9e",
|
||||
B"8'x0c" -> B"8'x81",
|
||||
B"8'x0d" -> B"8'xf3",
|
||||
B"8'x0e" -> B"8'xd7",
|
||||
B"8'x0f" -> B"8'xfb",
|
||||
B"8'x10" -> B"8'x7c",
|
||||
B"8'x11" -> B"8'xe3",
|
||||
B"8'x12" -> B"8'x39",
|
||||
B"8'x13" -> B"8'x82",
|
||||
B"8'x14" -> B"8'x9b",
|
||||
B"8'x15" -> B"8'x2f",
|
||||
B"8'x16" -> B"8'xff",
|
||||
B"8'x17" -> B"8'x87",
|
||||
B"8'x18" -> B"8'x34",
|
||||
B"8'x19" -> B"8'x8e",
|
||||
B"8'x1a" -> B"8'x43",
|
||||
B"8'x1b" -> B"8'x44",
|
||||
B"8'x1c" -> B"8'xc4",
|
||||
B"8'x1d" -> B"8'xde",
|
||||
B"8'x1e" -> B"8'xe9",
|
||||
B"8'x1f" -> B"8'xcb",
|
||||
B"8'x20" -> B"8'x54",
|
||||
B"8'x21" -> B"8'x7b",
|
||||
B"8'x22" -> B"8'x94",
|
||||
B"8'x23" -> B"8'x32",
|
||||
B"8'x24" -> B"8'xa6",
|
||||
B"8'x25" -> B"8'xc2",
|
||||
B"8'x26" -> B"8'x23",
|
||||
B"8'x27" -> B"8'x3d",
|
||||
B"8'x28" -> B"8'xee",
|
||||
B"8'x29" -> B"8'x4c",
|
||||
B"8'x2a" -> B"8'x95",
|
||||
B"8'x2b" -> B"8'x0b",
|
||||
B"8'x2c" -> B"8'x42",
|
||||
B"8'x2d" -> B"8'xfa",
|
||||
B"8'x2e" -> B"8'xc3",
|
||||
B"8'x2f" -> B"8'x4e",
|
||||
B"8'x30" -> B"8'x08",
|
||||
B"8'x31" -> B"8'x2e",
|
||||
B"8'x32" -> B"8'xa1",
|
||||
B"8'x33" -> B"8'x66",
|
||||
B"8'x34" -> B"8'x28",
|
||||
B"8'x35" -> B"8'xd9",
|
||||
B"8'x36" -> B"8'x24",
|
||||
B"8'x37" -> B"8'xb2",
|
||||
B"8'x38" -> B"8'x76",
|
||||
B"8'x39" -> B"8'x5b",
|
||||
B"8'x3a" -> B"8'xa2",
|
||||
B"8'x3b" -> B"8'x49",
|
||||
B"8'x3c" -> B"8'x6d",
|
||||
B"8'x3d" -> B"8'x8b",
|
||||
B"8'x3e" -> B"8'xd1",
|
||||
B"8'x3f" -> B"8'x25",
|
||||
B"8'x40" -> B"8'x72",
|
||||
B"8'x41" -> B"8'xf8",
|
||||
B"8'x42" -> B"8'xf6",
|
||||
B"8'x43" -> B"8'x64",
|
||||
B"8'x44" -> B"8'x86",
|
||||
B"8'x45" -> B"8'x68",
|
||||
B"8'x46" -> B"8'x98",
|
||||
B"8'x47" -> B"8'x16",
|
||||
B"8'x48" -> B"8'xd4",
|
||||
B"8'x49" -> B"8'xa4",
|
||||
B"8'x4a" -> B"8'x5c",
|
||||
B"8'x4b" -> B"8'xcc",
|
||||
B"8'x4c" -> B"8'x5d",
|
||||
B"8'x4d" -> B"8'x65",
|
||||
B"8'x4e" -> B"8'xb6",
|
||||
B"8'x4f" -> B"8'x92",
|
||||
B"8'x50" -> B"8'x6c",
|
||||
B"8'x51" -> B"8'x70",
|
||||
B"8'x52" -> B"8'x48",
|
||||
B"8'x53" -> B"8'x50",
|
||||
B"8'x54" -> B"8'xfd",
|
||||
B"8'x55" -> B"8'xed",
|
||||
B"8'x56" -> B"8'xb9",
|
||||
B"8'x57" -> B"8'xda",
|
||||
B"8'x58" -> B"8'x5e",
|
||||
B"8'x59" -> B"8'x15",
|
||||
B"8'x5a" -> B"8'x46",
|
||||
B"8'x5b" -> B"8'x57",
|
||||
B"8'x5c" -> B"8'xa7",
|
||||
B"8'x5d" -> B"8'x8d",
|
||||
B"8'x5e" -> B"8'x9d",
|
||||
B"8'x5f" -> B"8'x84",
|
||||
B"8'x60" -> B"8'x90",
|
||||
B"8'x61" -> B"8'xd8",
|
||||
B"8'x62" -> B"8'xab",
|
||||
B"8'x63" -> B"8'x00",
|
||||
B"8'x64" -> B"8'x8c",
|
||||
B"8'x65" -> B"8'xbc",
|
||||
B"8'x66" -> B"8'xd3",
|
||||
B"8'x67" -> B"8'x0a",
|
||||
B"8'x68" -> B"8'xf7",
|
||||
B"8'x69" -> B"8'xe4",
|
||||
B"8'x6a" -> B"8'x58",
|
||||
B"8'x6b" -> B"8'x05",
|
||||
B"8'x6c" -> B"8'xb8",
|
||||
B"8'x6d" -> B"8'xb3",
|
||||
B"8'x6e" -> B"8'x45",
|
||||
B"8'x6f" -> B"8'x06",
|
||||
B"8'x70" -> B"8'xd0",
|
||||
B"8'x71" -> B"8'x2c",
|
||||
B"8'x72" -> B"8'x1e",
|
||||
B"8'x73" -> B"8'x8f",
|
||||
B"8'x74" -> B"8'xca",
|
||||
B"8'x75" -> B"8'x3f",
|
||||
B"8'x76" -> B"8'x0f",
|
||||
B"8'x77" -> B"8'x02",
|
||||
B"8'x78" -> B"8'xc1",
|
||||
B"8'x79" -> B"8'xaf",
|
||||
B"8'x7a" -> B"8'xbd",
|
||||
B"8'x7b" -> B"8'x03",
|
||||
B"8'x7c" -> B"8'x01",
|
||||
B"8'x7d" -> B"8'x13",
|
||||
B"8'x7e" -> B"8'x8a",
|
||||
B"8'x7f" -> B"8'x6b",
|
||||
B"8'x80" -> B"8'x3a",
|
||||
B"8'x81" -> B"8'x91",
|
||||
B"8'x82" -> B"8'x11",
|
||||
B"8'x83" -> B"8'x41",
|
||||
B"8'x84" -> B"8'x4f",
|
||||
B"8'x85" -> B"8'x67",
|
||||
B"8'x86" -> B"8'xdc",
|
||||
B"8'x87" -> B"8'xea",
|
||||
B"8'x88" -> B"8'x97",
|
||||
B"8'x89" -> B"8'xf2",
|
||||
B"8'x8a" -> B"8'xcf",
|
||||
B"8'x8b" -> B"8'xce",
|
||||
B"8'x8c" -> B"8'xf0",
|
||||
B"8'x8d" -> B"8'xb4",
|
||||
B"8'x8e" -> B"8'xe6",
|
||||
B"8'x8f" -> B"8'x73",
|
||||
B"8'x90" -> B"8'x96",
|
||||
B"8'x91" -> B"8'xac",
|
||||
B"8'x92" -> B"8'x74",
|
||||
B"8'x93" -> B"8'x22",
|
||||
B"8'x94" -> B"8'xe7",
|
||||
B"8'x95" -> B"8'xad",
|
||||
B"8'x96" -> B"8'x35",
|
||||
B"8'x97" -> B"8'x85",
|
||||
B"8'x98" -> B"8'xe2",
|
||||
B"8'x99" -> B"8'xf9",
|
||||
B"8'x9a" -> B"8'x37",
|
||||
B"8'x9b" -> B"8'xe8",
|
||||
B"8'x9c" -> B"8'x1c",
|
||||
B"8'x9d" -> B"8'x75",
|
||||
B"8'x9e" -> B"8'xdf",
|
||||
B"8'x9f" -> B"8'x6e",
|
||||
B"8'xa0" -> B"8'x47",
|
||||
B"8'xa1" -> B"8'xf1",
|
||||
B"8'xa2" -> B"8'x1a",
|
||||
B"8'xa3" -> B"8'x71",
|
||||
B"8'xa4" -> B"8'x1d",
|
||||
B"8'xa5" -> B"8'x29",
|
||||
B"8'xa6" -> B"8'xc5",
|
||||
B"8'xa7" -> B"8'x89",
|
||||
B"8'xa8" -> B"8'x6f",
|
||||
B"8'xa9" -> B"8'xb7",
|
||||
B"8'xaa" -> B"8'x62",
|
||||
B"8'xab" -> B"8'x0e",
|
||||
B"8'xac" -> B"8'xaa",
|
||||
B"8'xad" -> B"8'x18",
|
||||
B"8'xae" -> B"8'xbe",
|
||||
B"8'xaf" -> B"8'x1b",
|
||||
B"8'xb0" -> B"8'xfc",
|
||||
B"8'xb1" -> B"8'x56",
|
||||
B"8'xb2" -> B"8'x3e",
|
||||
B"8'xb3" -> B"8'x4b",
|
||||
B"8'xb4" -> B"8'xc6",
|
||||
B"8'xb5" -> B"8'xd2",
|
||||
B"8'xb6" -> B"8'x79",
|
||||
B"8'xb7" -> B"8'x20",
|
||||
B"8'xb8" -> B"8'x9a",
|
||||
B"8'xb9" -> B"8'xdb",
|
||||
B"8'xba" -> B"8'xc0",
|
||||
B"8'xbb" -> B"8'xfe",
|
||||
B"8'xbc" -> B"8'x78",
|
||||
B"8'xbd" -> B"8'xcd",
|
||||
B"8'xbe" -> B"8'x5a",
|
||||
B"8'xbf" -> B"8'xf4",
|
||||
B"8'xc0" -> B"8'x1f",
|
||||
B"8'xc1" -> B"8'xdd",
|
||||
B"8'xc2" -> B"8'xa8",
|
||||
B"8'xc3" -> B"8'x33",
|
||||
B"8'xc4" -> B"8'x88",
|
||||
B"8'xc5" -> B"8'x07",
|
||||
B"8'xc6" -> B"8'xc7",
|
||||
B"8'xc7" -> B"8'x31",
|
||||
B"8'xc8" -> B"8'xb1",
|
||||
B"8'xc9" -> B"8'x12",
|
||||
B"8'xca" -> B"8'x10",
|
||||
B"8'xcb" -> B"8'x59",
|
||||
B"8'xcc" -> B"8'x27",
|
||||
B"8'xcd" -> B"8'x80",
|
||||
B"8'xce" -> B"8'xec",
|
||||
B"8'xcf" -> B"8'x5f",
|
||||
B"8'xd0" -> B"8'x60",
|
||||
B"8'xd1" -> B"8'x51",
|
||||
B"8'xd2" -> B"8'x7f",
|
||||
B"8'xd3" -> B"8'xa9",
|
||||
B"8'xd4" -> B"8'x19",
|
||||
B"8'xd5" -> B"8'xb5",
|
||||
B"8'xd6" -> B"8'x4a",
|
||||
B"8'xd7" -> B"8'x0d",
|
||||
B"8'xd8" -> B"8'x2d",
|
||||
B"8'xd9" -> B"8'xe5",
|
||||
B"8'xda" -> B"8'x7a",
|
||||
B"8'xdb" -> B"8'x9f",
|
||||
B"8'xdc" -> B"8'x93",
|
||||
B"8'xdd" -> B"8'xc9",
|
||||
B"8'xde" -> B"8'x9c",
|
||||
B"8'xdf" -> B"8'xef",
|
||||
B"8'xe0" -> B"8'xa0",
|
||||
B"8'xe1" -> B"8'xe0",
|
||||
B"8'xe2" -> B"8'x3b",
|
||||
B"8'xe3" -> B"8'x4d",
|
||||
B"8'xe4" -> B"8'xae",
|
||||
B"8'xe5" -> B"8'x2a",
|
||||
B"8'xe6" -> B"8'xf5",
|
||||
B"8'xe7" -> B"8'xb0",
|
||||
B"8'xe8" -> B"8'xc8",
|
||||
B"8'xe9" -> B"8'xeb",
|
||||
B"8'xea" -> B"8'xbb",
|
||||
B"8'xeb" -> B"8'x3c",
|
||||
B"8'xec" -> B"8'x83",
|
||||
B"8'xed" -> B"8'x53",
|
||||
B"8'xee" -> B"8'x99",
|
||||
B"8'xef" -> B"8'x61",
|
||||
B"8'xf0" -> B"8'x17",
|
||||
B"8'xf1" -> B"8'x2b",
|
||||
B"8'xf2" -> B"8'x04",
|
||||
B"8'xf3" -> B"8'x7e",
|
||||
B"8'xf4" -> B"8'xba",
|
||||
B"8'xf5" -> B"8'x77",
|
||||
B"8'xf6" -> B"8'xd6",
|
||||
B"8'xf7" -> B"8'x26",
|
||||
B"8'xf8" -> B"8'xe1",
|
||||
B"8'xf9" -> B"8'x69",
|
||||
B"8'xfa" -> B"8'x14",
|
||||
B"8'xfb" -> B"8'x63",
|
||||
B"8'xfc" -> B"8'x55",
|
||||
B"8'xfd" -> B"8'x21",
|
||||
B"8'xfe" -> B"8'x0c",
|
||||
B"8'xff" -> B"8'x7d"
|
||||
)
|
||||
|
||||
r // return value
|
||||
}
|
||||
|
||||
def fun_aes32dsi0(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(7 downto 0)
|
||||
val r = fun_aesrsb_raw(idx)
|
||||
(r.resize(32) ) ^ rs2 // return value
|
||||
}
|
||||
def fun_aes32dsi1(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(15 downto 8)
|
||||
val r = fun_aesrsb_raw(idx)
|
||||
(r.resize(32) |<< 8) ^ rs2 // return value
|
||||
}
|
||||
def fun_aes32dsi2(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(23 downto 16)
|
||||
val r = fun_aesrsb_raw(idx)
|
||||
(r.resize(32) |<< 16) ^ rs2 // return value
|
||||
}
|
||||
def fun_aes32dsi3(rs1: Bits, rs2: Bits) : Bits = {
|
||||
val idx = rs1(31 downto 24)
|
||||
val r = fun_aesrsb_raw(idx)
|
||||
(r.resize(32) |<< 24) ^ rs2 // return value
|
||||
}
|
||||
"""
|
||||
|
|
|
@ -19,6 +19,22 @@ FUN2F(aes32esi0,AES32ESI0)
|
|||
FUN2F(aes32esi1,AES32ESI1)
|
||||
FUN2F(aes32esi2,AES32ESI2)
|
||||
FUN2F(aes32esi3,AES32ESI3)
|
||||
ASM2FMACRO(AES32DSMI0,0x3e000033)
|
||||
ASM2FMACRO(AES32DSMI1,0x7e000033)
|
||||
ASM2FMACRO(AES32DSMI2,0xbe000033)
|
||||
ASM2FMACRO(AES32DSMI3,0xfe000033)
|
||||
ASM2FMACRO(AES32DSI0,0x3a000033)
|
||||
ASM2FMACRO(AES32DSI1,0x7a000033)
|
||||
ASM2FMACRO(AES32DSI2,0xba000033)
|
||||
ASM2FMACRO(AES32DSI3,0xfa000033)
|
||||
FUN2F(aes32dsmi0,AES32DSMI0)
|
||||
FUN2F(aes32dsmi1,AES32DSMI1)
|
||||
FUN2F(aes32dsmi2,AES32DSMI2)
|
||||
FUN2F(aes32dsmi3,AES32DSMI3)
|
||||
FUN2F(aes32dsi0,AES32DSI0)
|
||||
FUN2F(aes32dsi1,AES32DSI1)
|
||||
FUN2F(aes32dsi2,AES32DSI2)
|
||||
FUN2F(aes32dsi3,AES32DSI3)
|
||||
|
||||
ASM1MACRO(SHA256SIG0,0x10201013)
|
||||
ASM1MACRO(SHA256SIG1,0x10301013)
|
||||
|
|
Loading…
Add table
Reference in a new issue