mirror of
https://github.com/rdolbeau/VexRiscvBPluginGenerator.git
synced 2025-04-18 18:44:42 -04:00
move to K 0.9.0
This commit is contained in:
parent
e870f3ebe7
commit
25d43e10d3
5 changed files with 9 additions and 12 deletions
|
@ -17,7 +17,7 @@ object CryptoZkbPlugin {
|
||||||
val CTRL_XPERMdotB, CTRL_XPERMdotN = newElement()
|
val CTRL_XPERMdotB, CTRL_XPERMdotN = newElement()
|
||||||
}
|
}
|
||||||
object CryptoZkbCtrlgrevorcEnum extends SpinalEnum(binarySequential) {
|
object CryptoZkbCtrlgrevorcEnum extends SpinalEnum(binarySequential) {
|
||||||
val CTRL_GORC, CTRL_REV8, CTRL_REVdotB = newElement()
|
val CTRL_REV8, CTRL_REVdotB = newElement()
|
||||||
}
|
}
|
||||||
object CryptoZkbCtrlshuffleEnum extends SpinalEnum(binarySequential) {
|
object CryptoZkbCtrlshuffleEnum extends SpinalEnum(binarySequential) {
|
||||||
val CTRL_UNZIP, CTRL_ZIP = newElement()
|
val CTRL_UNZIP, CTRL_ZIP = newElement()
|
||||||
|
@ -457,7 +457,6 @@ class CryptoZkbPlugin(earlyInjection : Boolean = true) extends Plugin[VexRiscv]
|
||||||
def XPERMdotN_KEY = M"0010100----------010-----0110011"
|
def XPERMdotN_KEY = M"0010100----------010-----0110011"
|
||||||
def XPERMdotB_KEY = M"0010100----------100-----0110011"
|
def XPERMdotB_KEY = M"0010100----------100-----0110011"
|
||||||
def RORI_KEY = M"01100------------101-----0010011"
|
def RORI_KEY = M"01100------------101-----0010011"
|
||||||
def GORCI_KEY = M"00101------------101-----0010011"
|
|
||||||
def REV8_KEY = M"011010011000-----101-----0010011"
|
def REV8_KEY = M"011010011000-----101-----0010011"
|
||||||
def REVdotB_KEY = M"011010000111-----101-----0010011"
|
def REVdotB_KEY = M"011010000111-----101-----0010011"
|
||||||
def ZIP_KEY = M"000010001111-----001-----0010011"
|
def ZIP_KEY = M"000010001111-----001-----0010011"
|
||||||
|
@ -476,7 +475,6 @@ class CryptoZkbPlugin(earlyInjection : Boolean = true) extends Plugin[VexRiscv]
|
||||||
PACKH_KEY -> (binaryActions ++ List(CryptoZkbCtrl -> CryptoZkbCtrlEnum.CTRL_pack, CryptoZkbCtrlpack -> CryptoZkbCtrlpackEnum.CTRL_PACKH)),
|
PACKH_KEY -> (binaryActions ++ List(CryptoZkbCtrl -> CryptoZkbCtrlEnum.CTRL_pack, CryptoZkbCtrlpack -> CryptoZkbCtrlpackEnum.CTRL_PACKH)),
|
||||||
XPERMdotN_KEY -> (binaryActions ++ List(CryptoZkbCtrl -> CryptoZkbCtrlEnum.CTRL_xperm, CryptoZkbCtrlxperm -> CryptoZkbCtrlxpermEnum.CTRL_XPERMdotN)),
|
XPERMdotN_KEY -> (binaryActions ++ List(CryptoZkbCtrl -> CryptoZkbCtrlEnum.CTRL_xperm, CryptoZkbCtrlxperm -> CryptoZkbCtrlxpermEnum.CTRL_XPERMdotN)),
|
||||||
XPERMdotB_KEY -> (binaryActions ++ List(CryptoZkbCtrl -> CryptoZkbCtrlEnum.CTRL_xperm, CryptoZkbCtrlxperm -> CryptoZkbCtrlxpermEnum.CTRL_XPERMdotB)),
|
XPERMdotB_KEY -> (binaryActions ++ List(CryptoZkbCtrl -> CryptoZkbCtrlEnum.CTRL_xperm, CryptoZkbCtrlxperm -> CryptoZkbCtrlxpermEnum.CTRL_XPERMdotB)),
|
||||||
GORCI_KEY -> (immediateActions ++ List(CryptoZkbCtrl -> CryptoZkbCtrlEnum.CTRL_grevorc, CryptoZkbCtrlgrevorc -> CryptoZkbCtrlgrevorcEnum.CTRL_GORC)),
|
|
||||||
REV8_KEY -> (unaryActions ++ List(CryptoZkbCtrl -> CryptoZkbCtrlEnum.CTRL_grevorc, CryptoZkbCtrlgrevorc -> CryptoZkbCtrlgrevorcEnum.CTRL_REV8)),
|
REV8_KEY -> (unaryActions ++ List(CryptoZkbCtrl -> CryptoZkbCtrlEnum.CTRL_grevorc, CryptoZkbCtrlgrevorc -> CryptoZkbCtrlgrevorcEnum.CTRL_REV8)),
|
||||||
REVdotB_KEY -> (unaryActions ++ List(CryptoZkbCtrl -> CryptoZkbCtrlEnum.CTRL_grevorc, CryptoZkbCtrlgrevorc -> CryptoZkbCtrlgrevorcEnum.CTRL_REVdotB)),
|
REVdotB_KEY -> (unaryActions ++ List(CryptoZkbCtrl -> CryptoZkbCtrlEnum.CTRL_grevorc, CryptoZkbCtrlgrevorc -> CryptoZkbCtrlgrevorcEnum.CTRL_REVdotB)),
|
||||||
ZIP_KEY -> (unaryActions ++ List(CryptoZkbCtrl -> CryptoZkbCtrlEnum.CTRL_shuffle, CryptoZkbCtrlshuffle -> CryptoZkbCtrlshuffleEnum.CTRL_ZIP)),
|
ZIP_KEY -> (unaryActions ++ List(CryptoZkbCtrl -> CryptoZkbCtrlEnum.CTRL_shuffle, CryptoZkbCtrlshuffle -> CryptoZkbCtrlshuffleEnum.CTRL_ZIP)),
|
||||||
|
@ -507,7 +505,6 @@ class CryptoZkbPlugin(earlyInjection : Boolean = true) extends Plugin[VexRiscv]
|
||||||
CryptoZkbCtrlxpermEnum.CTRL_XPERMdotN -> fun_xperm_n(input(SRC1), input(SRC2)).asBits
|
CryptoZkbCtrlxpermEnum.CTRL_XPERMdotN -> fun_xperm_n(input(SRC1), input(SRC2)).asBits
|
||||||
) // mux xperm
|
) // mux xperm
|
||||||
val val_grevorc = input(CryptoZkbCtrlgrevorc).mux(
|
val val_grevorc = input(CryptoZkbCtrlgrevorc).mux(
|
||||||
CryptoZkbCtrlgrevorcEnum.CTRL_GORC -> fun_gorc(input(SRC1), input(SRC2)).asBits,
|
|
||||||
CryptoZkbCtrlgrevorcEnum.CTRL_REV8 -> fun_rev8(input(SRC1)).asBits,
|
CryptoZkbCtrlgrevorcEnum.CTRL_REV8 -> fun_rev8(input(SRC1)).asBits,
|
||||||
CryptoZkbCtrlgrevorcEnum.CTRL_REVdotB -> fun_revdotb(input(SRC1)).asBits
|
CryptoZkbCtrlgrevorcEnum.CTRL_REVdotB -> fun_revdotb(input(SRC1)).asBits
|
||||||
) // mux grevorc
|
) // mux grevorc
|
||||||
|
|
|
@ -20,7 +20,7 @@ This has received limited testing in a [Linux-on-Litex-VexRiscv](https://github.
|
||||||
|
|
||||||
Also, the implementations of the instructions in SpinalHDL are written for tuncitonality, and not tuned or optimized in any way for performance/area/... (file usage.txt has some numbers).
|
Also, the implementations of the instructions in SpinalHDL are written for tuncitonality, and not tuned or optimized in any way for performance/area/... (file usage.txt has some numbers).
|
||||||
|
|
||||||
A separate data file include prototype support for RV32Zkn[ed] (AES encryption/decryption instructions) and RV32Zknh (SHA hash instructions) from the [K ("crypto")](https://github.com/riscv/riscv-crypto) extension draft 0.8.1. This requires another patch to VexRiscv, as Zkn[ed] use field rs1 instead of rd for the output register. There is now support for SM3 and SM4 acceleration (collectively Zks), which requires an expanded version of the rs1-for-rd patch.
|
A separate data file include prototype support for RV32Zkn[ed] (AES encryption/decryption instructions) and RV32Zknh (SHA hash instructions) from the [K ("crypto")](https://github.com/riscv/riscv-crypto) extension draft 0.9.0. This requires another patch to VexRiscv, as Zkn[ed] use field rs1 instead of rd for the output register. There is now support for SM3 and SM4 acceleration (collectively Zks), which requires an expanded version of the rs1-for-rd patch.
|
||||||
|
|
||||||
There's also some experimental support for some [P ("packed SIMD")](https://github.com/riscv/riscv-p-spec) instructions. It requires even more patches to VexRiscv, first to use a third input sourced from the destination register (so not R4 format like B's ternaries), and second to enable Zp64 instructions that write to two registers (x(2n) and x(2n+1)).
|
There's also some experimental support for some [P ("packed SIMD")](https://github.com/riscv/riscv-p-spec) instructions. It requires even more patches to VexRiscv, first to use a third input sourced from the destination register (so not R4 format like B's ternaries), and second to enable Zp64 instructions that write to two registers (x(2n) and x(2n+1)).
|
||||||
|
|
||||||
|
|
|
@ -16,12 +16,12 @@
|
||||||
// Zbp:
|
// Zbp:
|
||||||
// Zbs:
|
// Zbs:
|
||||||
// Zba:
|
// Zba:
|
||||||
// Zbe: bcompress/bdecompress currently unimplemented
|
// Zbe: in a dedicated file for b[de]compress, 'data_bitmanip_compress.txt'
|
||||||
// Zbf:
|
// Zbf:
|
||||||
// Zbc: in a dedicated file, 'data_clmul.txt'
|
// Zbc: in a dedicated file, 'data_clmul.txt'
|
||||||
// Zbm: ignored, RV64-only
|
// Zbm: ignored, RV64-only
|
||||||
// Zbr: ignored, crc32 unimplemented
|
// Zbr: ignored, crc32 unimplemented
|
||||||
// Zbt:
|
// Zbt: (requires three-operands patch to VexRiscv)
|
||||||
// B : should be Zbb, Zbp, Zbs, Zba, Zbe, Zbf, Zbc, Zbm
|
// B : should be Zbb, Zbp, Zbs, Zba, Zbe, Zbf, Zbc, Zbm
|
||||||
//
|
//
|
||||||
// INSTRUCTIONS
|
// INSTRUCTIONS
|
||||||
|
@ -91,7 +91,7 @@ I BCLRI BCLR 01001------------001-----0010011 singlebit Zbs
|
||||||
I BSETI BSET 00101------------001-----0010011 singlebit Zbs
|
I BSETI BSET 00101------------001-----0010011 singlebit Zbs
|
||||||
I BINVI BINV 01101------------001-----0010011 singlebit Zbs
|
I BINVI BINV 01101------------001-----0010011 singlebit Zbs
|
||||||
I BEXTI BEXT 01001------------101-----0010011 singlebit Zbs
|
I BEXTI BEXT 01001------------101-----0010011 singlebit Zbs
|
||||||
I GORCI GORC 00101------------101-----0010011 grevorc Zbp Zkb
|
I GORCI GORC 00101------------101-----0010011 grevorc Zbp
|
||||||
I GREVI GREV 01101------------101-----0010011 grevorc Zbp
|
I GREVI GREV 01101------------101-----0010011 grevorc Zbp
|
||||||
I SLLIdotUW SLLIdotUW 00001------------001-----0011011 SLLIdotUW
|
I SLLIdotUW SLLIdotUW 00001------------001-----0011011 SLLIdotUW
|
||||||
// register-immediate (6bits)
|
// register-immediate (6bits)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
I SM3P0 SM3P0 000100001000-----001-----0010011 sm3 Zks
|
I SM3P0 SM3P0 000100001000-----001-----0010011 sm3 Zks Zksh
|
||||||
I SM3P1 SM3P1 000100001001-----001-----0010011 sm3 Zks
|
I SM3P1 SM3P1 000100001001-----001-----0010011 sm3 Zks Zksh
|
||||||
|
|
||||||
S SM3P0 "fun_sm3p0(input(SRC1))"
|
S SM3P0 "fun_sm3p0(input(SRC1))"
|
||||||
S SM3P1 "fun_sm3p1(input(SRC1))"
|
S SM3P1 "fun_sm3p1(input(SRC1))"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
I SM4ED SM4ED --11000----------000000000110011 sm4 Zks
|
I SM4ED SM4ED --11000----------000000000110011 sm4 Zks Zksed
|
||||||
I SM4KS SM4KS --11010----------000000000110011 sm4 Zks
|
I SM4KS SM4KS --11010----------000000000110011 sm4 Zks Zksed
|
||||||
|
|
||||||
S SM4ED "fun_sm4ed(input(SRC1), input(SRC2), input(INSTRUCTION)(31 downto 30))"
|
S SM4ED "fun_sm4ed(input(SRC1), input(SRC2), input(INSTRUCTION)(31 downto 30))"
|
||||||
S SM4KS "fun_sm4ks(input(SRC1), input(SRC2), input(INSTRUCTION)(31 downto 30))"
|
S SM4KS "fun_sm4ks(input(SRC1), input(SRC2), input(INSTRUCTION)(31 downto 30))"
|
||||||
|
|
Loading…
Add table
Reference in a new issue