risc-v 0.0.1.0 → 0.0.2.0
raw patch · 5 files changed
+71/−3 lines, 5 filesdep +clash-prelude
Dependencies added: clash-prelude
Files
- Data/RiscV/Instruction.hs +9/−0
- Data/RiscV/Instruction/I.hs +16/−0
- Data/RiscV/Instruction/R.hs +17/−0
- Data/RiscV/Instruction/S.hs +19/−0
- risc-v.cabal +10/−3
+ Data/RiscV/Instruction.hs view
@@ -0,0 +1,9 @@+{-# LANGUAGE ViewPatterns, PatternSynonyms #-}++module Data.RiscV.Instruction where++import Clash.Prelude.Safe++newtype MajorOpcode = MajorOpcode (BitVector 5) deriving (Eq)+newtype MinorOpcode = MinorOpcode (BitVector 3) deriving (Eq)+newtype Register = Register (BitVector 5) deriving (Eq)
+ Data/RiscV/Instruction/I.hs view
@@ -0,0 +1,16 @@+{-# LANGUAGE ViewPatterns, PatternSynonyms #-}+{-# LANGUAGE ScopedTypeVariables #-}++module Data.RiscV.Instruction.I where++import Clash.Explicit.Prelude.Safe++import Data.RiscV.Instruction++pattern R { major, rd, minor, rs1, imm } <-+ (split -> (split -> (split -> (split -> (imm :: BitVector 12, Register -> rs1),+ MinorOpcode -> minor),+ Register -> rd),+ split -> (0b11 :: BitVector 2, MajorOpcode -> major))) where+ R (MajorOpcode major) (Register rd) (MinorOpcode minor) (Register rs1) imm =+ unpack $ imm ++# rs1 ++# minor ++# rd ++# major ++# (0b11 :: BitVector 2)
+ Data/RiscV/Instruction/R.hs view
@@ -0,0 +1,17 @@+{-# LANGUAGE ViewPatterns, PatternSynonyms #-}+{-# LANGUAGE ScopedTypeVariables #-}++module Data.RiscV.Instruction.R where++import Clash.Explicit.Prelude.Safe++import Data.RiscV.Instruction++pattern R { major, rd, minor, rs1, rs2, func } <-+ (split -> (split -> (split -> (split -> (func :: BitVector 7,+ split -> (Register -> rs2, Register -> rs1)),+ MinorOpcode -> minor),+ Register -> rd),+ split -> (0b11 :: BitVector 2, MajorOpcode -> major))) where+ R (MajorOpcode major) (Register rd) (MinorOpcode minor) (Register rs1) (Register rs2) func =+ unpack $ func ++# rs2 ++# rs1 ++# minor ++# rd ++# major ++# (0b11 :: BitVector 2)
+ Data/RiscV/Instruction/S.hs view
@@ -0,0 +1,19 @@+{-# LANGUAGE ViewPatterns, PatternSynonyms #-}+{-# LANGUAGE ScopedTypeVariables #-}++module Data.RiscV.Instruction.S where++import Clash.Explicit.Prelude.Safe++import Util++import Data.RiscV.Instruction++pattern S { major, minor, rs1, rs2, imm } <-+ (split -> ((split & \ (split -> (imm1 :: BitVector 7, blah), imm0 :: BitVector 5) -> (imm1 ++# imm0, blah)) ->+ (imm,+ split -> (split -> (Register -> rs1, Register -> rs2),+ MinorOpcode -> minor)),+ split -> (0b11 :: BitVector 2, MajorOpcode -> major))) where+ S (MajorOpcode major) (MinorOpcode minor) (Register rs1) (Register rs2) (split -> (imm1, imm0)) =+ unpack $ imm1 ++# rs2 ++# rs1 ++# minor ++# (imm0 :: BitVector 5) ++# major ++# (0b11 :: BitVector 2)
risc-v.cabal view
@@ -1,5 +1,5 @@ name: risc-v-version: 0.0.1.0+version: 0.0.2.0 synopsis: RISC-V -- description: license: BSD3@@ -10,21 +10,28 @@ -- category: build-type: Simple extra-source-files: README.md-cabal-version: >=1.10+cabal-version: >=2.0 library hs-source-dirs: .- exposed-modules: + exposed-modules:+ Data.RiscV.Instruction+ Data.RiscV.Instruction.I+ Data.RiscV.Instruction.R+ Data.RiscV.Instruction.S build-depends: base >= 4.7 && < 5 , base-unicode-symbols+ , clash-prelude ^>= 1 , util default-language: Haskell2010 default-extensions: UnicodeSyntax+ , BinaryLiterals , LambdaCase , EmptyCase , InstanceSigs , PartialTypeSignatures , PolyKinds+ , DataKinds , ConstraintKinds , FlexibleContexts , FlexibleInstances