Clash-WaveDrom
May 15, 2021 ยท View on GitHub
Generate wave diagrams from Clash with WaveDrom.
Examples
It can show records with labeled waves (nested records work as you'd expect).
data Gray n = Gray
{ count :: Unsigned n
, gray :: BitVector n
}
deriving stock Generic
deriving anyclass (NFData, ToWave)
readmeSignal :: Signal System (Gray 3)
readmeSignal =
let count = register 0 (countSucc <$> count)
gray = (\x -> (x `shiftR` 1) `xor` x) . bitCoerce <$> count
in Gray <$> count <*> gray
renderToSVG "gray.svg" (wavedromWithReset 10 "" readmeSignal)
It can render the Show representation alongside the BitPack representation
very easily.
eitherSignal :: Signal System (Either (Index 8) (Index 3))
eitherSignal = let x = register (Right 0) (countSucc <$> x) in x
renderToSVG
"either.svg"
(wavedromWithClock 10 "" (WithBits <$> eitherSignal))
{ config = object ["hscale" .= (2 :: Int)]
}
Observe the undefined bits being handled correctly.