问题标签 [clash]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
98 浏览

haskell - 使用实例约束中的量化类型等式约束

为了设置场景,这里有一堆我们将使用的语言扩展,以及来自 CLaSH 的一些简化定义:

我想Bundle为 n 元产品类型创建实例。类型本身定义如下:

我想写的是一个Bundle简单地替换IdentitySignal dom. 不幸的是,我们不能一口气做到这一点:

在这里,unbundle需要对 forts ~ []和 for做一些不同的事情ts ~ t : ts'。好的,让我们尝试在两种情况下编写它:

因此,正是在第二种情况下出现了问题。即使我们forall dom. Unbundled dom (Product ts) ~ ProductF (Signal dom) ts在实例约束中有一个(量化的)类型相等,GHC 8.6.3 在类型检查期间也不会使用它:

对于bundle

对于unbundle

一种可能的解决方法

当然,我们可以只走很长的路:专门为此创建我们自己的类,Product并将所有实际工作委托给它。我在这里介绍该解决方案,但我对比这更简洁和临时的东西特别感兴趣。

然后IsProduct具有可以实际实现的优点:

0 投票
0 回答
196 浏览

nix - nix-shell 程序执行缓慢

我正在使用冲突(haskell -> verilog)编译https://github.com/mheinzel/clash-yosys-demo上的演示项目,它提供了一个nix分支和一个使用stack.

跑步

  • 需要〜1m

    如果我在 nix shell 中运行它,而如果我使用我安装的版本stack install --resolver lts-12.12 clash-ghc

  • 需要〜2s

我是 nix-pkgs 的初学者,所以谁能给我指点,看看为什么我的 nix 环境版本慢得多?- 似乎使用过的库的链接需要很长时间(这是我从使用-v详细标志中得到的)。

0 投票
1 回答
96 浏览

haskell - Why does the inliner choke on this construct?

I am trying to share as much code as possible between emulators and a CLaSH implementations for CPUs. As part of this, I am writing instruction fetching & decoding as something along the lines of

This is trivial to run in the emulator using a monad that has a program counter in its state and direct access to memory. For the hardware version, I make a fixed-size buffer (since the instruction byte-length is bounded) and in every cycle, short-circuit the fetching if there is not enough data in the buffer yet.

The idea is that this would be used by storing a Buffer n dat in the CPU's state during instruction fetching, and remembering values coming in from memory while there is a buffer underrun:

This works just fine in the CLaSH simulator.

The problem is, if I start using it this way, it needs a lot bigger inlining limit for CLaSH to be able to synthesize it. For example, on a CHIP-8 implementation, this commit starts using the above-described FetchM. Before this change, an inlining depth of just 100 is enough to get through the CLaSH synthesizer; after this change, 300 is not enough and 1000 causes CLaSH to just churn until it runs out of memory.

What is so evil about FetchM that the inliner chokes on it?

0 投票
0 回答
48 浏览

intel-fpga - 如何让 DE0-nano 使用 ttl-232R-3V3 电缆与 PC 进行 1 位通信(使用冲突语言)?

我正在尝试使用 Altera DE0-nano 与 PC 通信。我正在使用 ttl-232R-3v3 电缆,目前它传输 8 位数据一次,但使用电缆,它可以一次传输 1 位。我该怎么做?

我已经完成了 8 位代码:

这是输出:

示例输出

0 投票
0 回答
94 浏览

haskell - 使用冲突实现一个简单的布隆过滤器

我在布隆过滤器中实现了一个简单的哈希过程。如何使用冲突实现相同的过程?

这是我已经实现的Haskell代码:</p>

如何将其转换为冲突语言,感谢您的帮助。

0 投票
1 回答
168 浏览

haskell - 冲突教程示例中“纯”关键字的用途是什么?

在 Clash 官网上,有如下例子:

我知道什么是纯函数,但为什么这里有这个关键字?如果我删除它,我会收到一个错误:

有什么线索吗?

0 投票
0 回答
89 浏览

haskell - 具有“背板”值的 Monadic API

我正在创建一个库来描述地址线与内存元素的连接。我认为一元 API 可以很好地创建组件(具有标识,以支持镜像),然后在各种受限地址范围内使用这些组件句柄;例如:

然而,一些内存组件也有“背板连接”。例如,假设内存映射的 IO 外设具有字节输出。我可以将其表示为返回一对结果的一元操作:内存元素句柄和输出信号;然后将其留给用户以某种方式将其路由到整个内存映射描述的最终结果:

这种方法的问题是它不承认一个简单的实现。在后台,这些组件最终只是Signal addr -> Signal (Maybe dat) -> (Signal dat, Signal backpane)函数,所以要获取backpane信号,我需要将它们应用到addr信号上;这当然需要查看connect句柄上的所有后续调用。这需要一个凌乱的“打结”实现,这会导致下游进一步出现问题,所以我想避免它。

outByte此外,除了在最后返回它们之外,用户实际上无法对这些背板输出做任何事情,例如。因此,如果仅绑定句柄(如上面的示例中的和) rom,并且其他输出......不知何故......神奇......传送到外面,它会更干净。ramacia

我的意思是,与其在这个递归定义的地址行上应用单个内存组件,不如创建一个内存组件可以只返回一些不透明的句柄,在所有调用之后保留要应用的函数connect,然后应用它。不需要递归,没有背板值暴露给用户,等等。但是这些额外的输出最终如何收集呢?

在我写这个问题的时候,一个突然想到的想法是使用分级单子,其中索引是背板输出信号类型的列表;acia例如,创建句柄将通过一个新元素扩展该列表。运行memoryMap器将在内存读取结果旁边返回某种通用产品类型。但我不喜欢这个想法有两个原因:

  • 使用分级单子对用户来说很笨拙,您需要使用它RebindableSyntax来恢复do符号,类型推断不是那么好,而且总体而言向用户解释它只是一种痛苦。

  • 最终的类型memoryMap会令人惊讶,因为它取决于创建带有背板信号的组件的顺序。

0 投票
1 回答
109 浏览

haskell - 是否可以推断出一种类似于反射的闭包类型?

使用以下 Clash 的“玩具模型”:

我想withClock用来关闭本地块HiddenClock内的约束。where假设我有以下两个顶级定义:

然后,我想写如下内容:

不幸的是,GHC(至少从 8.10.7 开始)无法推断出正确的类型board,这导致withClock clkSys board无法真正关闭HiddenClock DomSys约束:

这可以通过添加类型签名来解决board

我的问题是:是否可以稍微更改此代码,或修改withClock等的确切类型,以在topEntity没有绑定类型签名的情况下定义类型检查board