Skip to content

Commit

Permalink
Bump all clash dependencies to current master HEAD
Browse files Browse the repository at this point in the history
Do note that we currently retain our local version of `PeriodToCycles`.
This version still has the `Max` types which greatly improves usability.
Related issue: clash-lang/ghc-typelits-extra#56
  • Loading branch information
lmbollen committed Aug 6, 2024
1 parent 668c888 commit 9b4cfb5
Show file tree
Hide file tree
Showing 16 changed files with 50 additions and 46 deletions.
2 changes: 1 addition & 1 deletion bittide-instances/src/Bittide/Instances/Domains.hs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

module Bittide.Instances.Domains where

import Clash.Explicit.Prelude
import Clash.Explicit.Prelude hiding (PeriodToCycles)

import Bittide.ClockControl
import Bittide.Arithmetic.Time
Expand Down
1 change: 0 additions & 1 deletion bittide-instances/src/Bittide/Instances/Hitl/FincFdec.hs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import Clash.Explicit.Prelude
import Clash.Prelude (withClockResetEnable)
import Clash.Xilinx.ClockGen (clockWizardDifferential)

import Bittide.Arithmetic.Time
import Bittide.Counter (domainDiffCounter)
import Bittide.ClockControl (SpeedChange(NoChange, SlowDown, SpeedUp), speedChangeToFincFdec)
import Bittide.ClockControl.Si539xSpi (si539xSpi, ConfigState(Finished))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ module Bittide.Instances.Hitl.FullMeshHwCc
) where

import Clash.Prelude (withClockResetEnable)
import Clash.Explicit.Prelude
import Clash.Explicit.Prelude hiding (PeriodToCycles)
import qualified Clash.Explicit.Prelude as E

import Data.Maybe (fromMaybe)
Expand Down
7 changes: 4 additions & 3 deletions bittide-instances/src/Bittide/Instances/Hitl/FullMeshSwCc.hs
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
-- SPDX-FileCopyrightText: 2023-2024 Google LLC
--
-- SPDX-License-Identifier: Apache-2.0
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE NumericUnderscores #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE NamedFieldPuns #-}

{-# OPTIONS_GHC -fplugin=Protocols.Plugin #-}
{-# OPTIONS_GHC -fconstraint-solver-iterations=20 #-}
Expand Down Expand Up @@ -33,7 +34,7 @@ module Bittide.Instances.Hitl.FullMeshSwCc

import qualified Prelude as P
import Clash.Prelude (withClockResetEnable)
import Clash.Explicit.Prelude
import Clash.Explicit.Prelude hiding (PeriodToCycles)
import qualified Clash.Explicit.Prelude as E

import Data.Maybe (fromMaybe)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ module Bittide.Instances.Hitl.HwCcTopologies
) where

import Clash.Prelude (withClockResetEnable)
import Clash.Explicit.Prelude
import Clash.Explicit.Prelude hiding (PeriodToCycles)
import qualified Clash.Explicit.Prelude as E

import Data.Bifunctor (bimap)
Expand Down
4 changes: 2 additions & 2 deletions bittide-instances/src/Bittide/Instances/Hitl/IlaPlot.hs
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ module Bittide.Instances.Hitl.IlaPlot

import GHC.Stack (HasCallStack)

import Clash.Explicit.Prelude
import Clash.Explicit.Prelude hiding (PeriodToCycles)
import Clash.Explicit.Signal.Extra
import Clash.Sized.Extra (concatUnsigneds)

import Bittide.Arithmetic.Time (Seconds, Milliseconds, PeriodToCycles, trueFor)
import Bittide.Arithmetic.Time (PeriodToCycles, trueFor)
import Bittide.ClockControl (SpeedChange(..), RelDataCount, ClockControlConfig)
import Bittide.ClockControl.Callisto
(CallistoResult(..), ReframingState(..), callistoClockControl)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
--
module Bittide.Instances.Hitl.SyncInSyncOut where

import Clash.Explicit.Prelude
import Clash.Explicit.Prelude hiding (PeriodToCycles)

import Bittide.Arithmetic.Time
import Bittide.Hitl (HitlTests, allFpgas, hitlVioBool, noConfigTest)
Expand Down
1 change: 0 additions & 1 deletion bittide-instances/src/Bittide/Instances/Pnr/Si539xSpi.hs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import Clash.Prelude

import Clash.Annotations.TH (makeTopEntity)

import Bittide.Arithmetic.Time
import Bittide.ClockControl
import Bittide.ClockControl.Callisto
import Bittide.ClockControl.Si5395J
Expand Down
47 changes: 27 additions & 20 deletions bittide/src/Bittide/Arithmetic/Time.hs
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,51 @@
--
-- SPDX-License-Identifier: Apache-2.0
{-# LANGUAGE FlexibleInstances,MultiParamTypeClasses,TemplateHaskell #-}
{-# LANGUAGE NumericUnderscores #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Bittide.Arithmetic.Time where

import GHC.Stack (HasCallStack)
import Clash.Explicit.Prelude hiding (natVal)
import Clash.Explicit.Prelude hiding (natVal, PeriodToCycles)

import Clash.Class.Counter (countSucc, Counter)
import Clash.Signal.Internal (Femtoseconds (Femtoseconds), mapFemtoseconds)
import Data.Data (Proxy(Proxy))
import Data.Data (Proxy(..))
import Data.Int (Int64)
import Data.Kind (Type)

import GHC.TypeNats (natVal)
import GHC.TypeLits.KnownNat (KnownNat1 (..),SNatKn(..), nameToSymbol)

-- | Gets time in 'Picoseconds' from time in 'Seconds'.
type Seconds (s :: Nat) = Milliseconds (1000 * s)
-- | Gets time in 'Picoseconds' from time in 'Milliseconds'.
type Milliseconds (ms :: Nat) = Microseconds (1000 * ms)
-- | Gets time in 'Picoseconds' from time in 'Microseconds'.
type Microseconds (us :: Nat) = Nanoseconds (1000 * us)
-- | Gets time in 'Picoseconds' from time in 'Nanoseconds'.
type Nanoseconds (ns :: Nat) = Picoseconds (1000 * ns)
-- | Gets time in 'Picoseconds' from time in 'Picoseconds', essentially 'id'.
type Picoseconds (ps :: Nat) = ps

-- Make ghc-typelits-knownnat look through the Picoseconds type alias
-- | XXX: We currently retain this in favor of @clash-prelude@s 'PeriodToCycles'
-- until @1 <= DomainPeriod dom@ is trivially true. Related issue:
-- https://github.com/clash-lang/ghc-typelits-extra/issues/56
--
--Number of clock cycles required at the clock frequency of @dom@ before a minimum @period@ has passed.
-- Is always at least one.
type PeriodToCycles dom period = Max 1 (DivRU period (Max 1 (DomainPeriod dom)))

-- Make ghc-typelits-knownnat look through time related type aliases.
-- https://github.com/clash-lang/ghc-typelits-knownnat/issues/53
instance (KnownNat ps) => KnownNat1 $(nameToSymbol ''Picoseconds) ps where
natSing1 = SNatKn (natVal (Proxy @ps))
{-# NOINLINE natSing1 #-}

-- | Number of clock cycles required at the clock frequency of @dom@ before a minimum @period@ has passed.
-- Is always at least one.
type PeriodToCycles dom period = Max 1 (DivRU period (Max 1 (DomainPeriod dom)))
instance (KnownNat ps) => KnownNat1 $(nameToSymbol ''Nanoseconds) ps where
natSing1 = SNatKn (natVal (Proxy @(1_000 * ps)))
{-# NOINLINE natSing1 #-}

instance (KnownNat ps) => KnownNat1 $(nameToSymbol ''Microseconds) ps where
natSing1 = SNatKn (natVal (Proxy @(1_000_000 * ps)))
{-# NOINLINE natSing1 #-}

-- | The domain's clock frequency in Hertz, calculated based on the period stored in ps.
-- This might lead to rounding errors.
type DomainFrequency dom = Div (Seconds 1) (DomainPeriod dom)
instance (KnownNat ps) => KnownNat1 $(nameToSymbol ''Milliseconds) ps where
natSing1 = SNatKn (natVal (Proxy @(1_000_000_000 * ps)))
{-# NOINLINE natSing1 #-}

instance (KnownNat ps) => KnownNat1 $(nameToSymbol ''Seconds) ps where
natSing1 = SNatKn (natVal (Proxy @(1_000_000_000_000 * ps)))
{-# NOINLINE natSing1 #-}

-- | 'Index' with its 'maxBound' corresponding to the number of cycles needed to
-- wait for /n/ milliseconds.
Expand Down
4 changes: 2 additions & 2 deletions bittide/src/Bittide/ClockControl.hs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ module Bittide.ClockControl
)
where

import Clash.Explicit.Prelude
import Clash.Explicit.Prelude hiding (PeriodToCycles)
import Clash.Signal.Internal (Femtoseconds(..))
import Data.Aeson (ToJSON(toJSON))
import Data.Proxy (Proxy(..))
Expand All @@ -32,7 +32,7 @@ import Foreign.Storable (Storable(..))
import GHC.Stack (HasCallStack)

import Bittide.Arithmetic.Ppm
import Bittide.Arithmetic.Time (PeriodToCycles, Nanoseconds, Microseconds, microseconds)
import Bittide.Arithmetic.Time (PeriodToCycles, microseconds)
import Bittide.ClockControl.Foreign.Sizes

import Data.Csv
Expand Down
2 changes: 1 addition & 1 deletion bittide/src/Bittide/ClockControl/Si539xSpi.hs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

module Bittide.ClockControl.Si539xSpi where

import Clash.Prelude
import Clash.Prelude hiding (PeriodToCycles)
import Clash.Cores.SPI

import Data.Maybe
Expand Down
2 changes: 1 addition & 1 deletion bittide/src/Bittide/Transceiver.hs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ module Bittide.Transceiver where

import Clash.Explicit.Prelude

import Bittide.Arithmetic.Time (Milliseconds, trueForSteps)
import Bittide.Arithmetic.Time (trueForSteps)
import Bittide.ElasticBuffer (sticky)
import Clash.Cores.Xilinx.GTH (GthCore)
import Clash.Cores.Xilinx.Ila (IlaConfig(advancedTriggers, depth, stages), ilaConfig, ila, Depth(D1024))
Expand Down
3 changes: 1 addition & 2 deletions bittide/src/Bittide/Wishbone.hs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ module Bittide.Wishbone where

import Clash.Prelude

import Bittide.Arithmetic.Time(DomainFrequency)
import Bittide.DoubleBufferedRam
import Bittide.SharedTypes

Expand Down Expand Up @@ -467,7 +466,7 @@ timeWb = Circuit $ \(wbM2S, _) -> (mealy goMealy (0,0) wbM2S, ())
where
goMealy (frozen, count :: Unsigned 64) wbM2S = ((nextFrozen, succ count), wbS2M)
where
freq = natToNum @(DomainFrequency dom) :: Unsigned 64
freq = natToNum @(DomainToHz dom) :: Unsigned 64
nextFrozen = if isJust (head writes) then count else frozen
RegisterBank (splitAtI -> (frozenMsbs, frozenLsbs)) = getRegsBe @8 frozen
RegisterBank (splitAtI -> (freqMsbs, freqLsbs)) = getRegsBe @8 freq
Expand Down
3 changes: 1 addition & 2 deletions bittide/src/Clash/Cores/UART/Extra.hs
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,12 @@ import Protocols
import Protocols.Df hiding (catMaybes, sample, pure)
import System.IO

import Bittide.Arithmetic.Time
import Bittide.Wishbone

import qualified Protocols.Df as Df

-- | The maximum baud rate for a given domain, useful for simulation purposes
type MaxBaudRate dom = Div (DomainFrequency dom) 16
type MaxBaudRate dom = Div (DomainToHz dom) 16

-- | A simulation function for circuits that expose a UART connection.
-- This function reads from the provided input handle and feeds that to the UART circuit.
Expand Down
4 changes: 2 additions & 2 deletions bittide/tests/Tests/Transceiver.hs
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@

module Tests.Transceiver where

import Clash.Explicit.Prelude
import Clash.Explicit.Prelude hiding (PeriodToCycles)
import Clash.Prelude (withClock)
import Hedgehog

import Bittide.Arithmetic.Time (PeriodToCycles, Microseconds, Milliseconds)
import Bittide.Arithmetic.Time (PeriodToCycles)
import Bittide.SharedTypes (Bytes)
import Clash.Annotations.Primitive (dontTranslate)
import Clash.Cores.Xilinx.GTH (GthCore)
Expand Down
10 changes: 5 additions & 5 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -131,31 +131,31 @@ index-state: 2023-12-05T05:33:28Z
source-repository-package
type: git
location: https://github.com/clash-lang/clash-compiler.git
tag: 9afc2262a66cbf98c7c157d5472cbb46d0016f7f
tag: 1d49cd2a528fe719beb3b2887dc440362b1b3574
subdir: clash-prelude

source-repository-package
type: git
location: https://github.com/clash-lang/clash-compiler.git
tag: 9afc2262a66cbf98c7c157d5472cbb46d0016f7f
tag: 1d49cd2a528fe719beb3b2887dc440362b1b3574
subdir: clash-ghc

source-repository-package
type: git
location: https://github.com/clash-lang/clash-compiler.git
tag: 9afc2262a66cbf98c7c157d5472cbb46d0016f7f
tag: 1d49cd2a528fe719beb3b2887dc440362b1b3574
subdir: clash-lib

source-repository-package
type: git
location: https://github.com/clash-lang/clash-compiler.git
tag: 9afc2262a66cbf98c7c157d5472cbb46d0016f7f
tag: 1d49cd2a528fe719beb3b2887dc440362b1b3574
subdir: clash-prelude-hedgehog

source-repository-package
type: git
location: https://github.com/clash-lang/clash-compiler.git
tag: 9afc2262a66cbf98c7c157d5472cbb46d0016f7f
tag: 1d49cd2a528fe719beb3b2887dc440362b1b3574
subdir: clash-cores

source-repository-package
Expand Down

0 comments on commit 9b4cfb5

Please sign in to comment.