packages feed

ice40-prim 0.3.0.1 → 0.3.1.0

raw patch · 7 files changed

+58/−4 lines, 7 filesdep −CabalPVP ok

version bump matches the API change (PVP)

Dependencies removed: Cabal

API changes (from Hackage documentation)

+ Ice40.GB: gbPrim :: Clock dom -> Clock dom

Files

CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for ice40-prim +## 0.3.1.0 -- 2021-03-30+* Add Global Buffer IP, Ice40.GB+* Update documentation+ ## 0.3.0.1 -- 2021-03-28  * Minor documentation updates
README.md view
@@ -19,7 +19,7 @@   * 32-bit, or two independent 16-bit adder/subtractor functions, registered or asynchronous   * Cascadable to create wider accumulator blocks -* [Ice40.Osc](https://github.com/standardsemiconductor/ice40-prim/blob/main/src/Ice40/Osc.hs) - For more information see the [+* [Ice40.Osc](https://github.com/standardsemiconductor/ice40-prim/blob/main/src/Ice40/Osc.hs) - For more information see the [iCE40 Oscillator Usage Guide](https://github.com/standardsemiconductor/VELDT-info/blob/master/FPGA-TN-02008-1-7-iCE40-Oscillator-Usage-Guide.pdf)   * on-chip oscillator   * Low-power low frequency oscillator of 10 kHz   * High frequency oscillator configurable to 48 Mhz, 24 Mhz, 12 Mhz, or 6 Mhz@@ -56,7 +56,11 @@   * LSB First or MSB First data transfer  * [Ice40.IO](https://github.com/standardsemiconductor/ice40-prim/blob/main/src/Ice40/IO.hs)-  * sysIO+  * IO primitive++* [Ice40.GB](https://github.com/standardsemiconductor/ice40-prim/blob/main/src/Ice40/GB.hs)+  * Global buffer primitive+  * Required for a user's internally generated FPGA signal that is heavily loaded and requires global buffering; for example, a user's logic-generated clock  * [Ice40.I2c](https://github.com/standardsemiconductor/ice40-prim/blob/main/src/Ice40/I2c.hs) - For more information see the [Advanced SPI and I2C Usage Guide PDF](https://github.com/standardsemiconductor/VELDT-info/blob/master/AdvancediCE40SPII2CHardenedIPUsageGuide.pdf)   * User I2C IP
ice40-prim.cabal view
@@ -1,6 +1,6 @@ cabal-version:       >=1.10 name:                ice40-prim-version:             0.3.0.1+version:             0.3.1.0 synopsis:            Lattice iCE40 Primitive IP description:         Clash primitives to instantiate Lattice Semiconductor's iCE40 FPGA hard IP bug-reports:         https://github.com/standardsemiconductor/ice40-prim/issues@@ -19,6 +19,7 @@                       library         exposed-modules: Ice40.Clock,+                         Ice40.GB,                          Ice40.I2c,                          Ice40.IO                          Ice40.Led,@@ -32,7 +33,6 @@                          Ice40.Spram         hs-source-dirs: src         build-depends: base          >= 4.12  && < 4.16,-                       Cabal,                        interpolate   >= 0.2   && < 0.3,                        clash-prelude >= 1.2.5 && < 1.5,                        ghc-typelits-natnormalise,
+ src/Ice40/GB.hs view
@@ -0,0 +1,41 @@+{-|+Module      : Ice40.GB+Description : Ice40 Global Buffer IP primtive+Copyright   : (c) David Cox, 2021+License     : BSD-3-Clause+Maintainer  : standardsemiconductor@gmail.com++Global buffer IP primitive from [Lattice Ice Technology Library](https://github.com/standardsemiconductor/VELDT-info/blob/master/SBTICETechnologyLibrary201708.pdf).+Required for a user's internally generated FPGA signal that is heavily loaded and requires global buffering; for example, a user's logic-generated clock.+-}+module Ice40.GB where++import Clash.Prelude+import Clash.Annotations.Primitive+import Data.String.Interpolate (i)+import Data.String.Interpolate.Util (unindent)++{-# ANN gbPrim (InlinePrimitive [Verilog] $ unindent [i|+  [  { "BlackBox" :+       { "name" : "Ice40.GB.gbPrim"+       , "kind" : "Declaration"+       , "type" :+  "gbPrim+    :: Clock dom -- ARG[0]+    -> Clock dom"+       , "template" :+  "//SB_GB begin+  SB_GB ~GENSYM[sb_gb_inst][0] (+    .USER_SIGNAL_TO_GLOBAL_BUFFER ( ~ARG[0] ),+    .GLOBAL_BUFFER_OUTPUT         ( ~RESULT )+  );+  //SB_GB end"+       }+     }+  ]+  |]) #-}++-- | Global buffer primitive+{-# NOINLINE gbPrim #-}+gbPrim :: Clock dom -> Clock dom+gbPrim !clk = clk
src/Ice40/IO.hs view
@@ -95,6 +95,7 @@   deriving stock (Generic, Show, Read, Eq)   deriving anyclass NFDataX +-- | Convert `PinInput` to underlying `BitVector` fromPinInput :: PinInput -> BitVector 2 fromPinInput = \case   PinInput                -> 0b01@@ -120,6 +121,7 @@   deriving stock (Generic, Show, Read, Eq)   deriving anyclass NFDataX +-- | Convert `PinOutput` to underlying `BitVector` fromPinOutput :: PinOutput -> BitVector 4 fromPinOutput = \case   PinNoOutput                                 -> 0b0000@@ -141,6 +143,7 @@                 | SBLVDSINPUT   deriving (Generic, Show, Read, Eq) +-- | Convert `IOStandard` to underlying `String` fromIOStandard :: IOStandard -> String fromIOStandard = \case   SBLVCMOS    -> "SB_LVCMOS"
src/Ice40/Pll/Core.hs view
@@ -75,6 +75,7 @@   ]   |]) #-} +-- | PLL Core primitive {-# NOINLINE pllCorePrim #-} pllCorePrim    :: KnownDomain dom'            -- ARG[0]
src/Ice40/Pll/Pad.hs view
@@ -76,6 +76,7 @@   ]   |]) #-} +-- | PLL Pad primitive {-# NOINLINE pllPadPrim #-} pllPadPrim    :: KnownDomain dom'         -- ARG[0]