packages feed

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 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