问题标签 [lava]

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 投票
1 回答
243 浏览

haskell - 用堪萨斯熔岩中的信号索引矩阵矩阵

我正在尝试实现时间多路复用以驱动具有 4 位数字的 7 段显示器:该设备有 7 个数据腿和 4 个阳极,因此如果要显示四个不同的数字,则必须将阳极设置为0001第一个,然后将数据腿到你的部分; 然后过了一会儿,将阳极设置为0010并更新数据腿;等等。

我正在尝试在堪萨斯熔岩中实现这一点。但是,Xilinx 编译器以类型错误拒绝生成的 VHDL(并且查看生成的代码,我认为它是正确的)。

首先,我的 Lava 代码:它基本上实现了序列的信号[0, 1, 2, 3, 0, ...],然后使用.!.运算符 fromLanguage.KansasLava.Signal来索引 matrix-of-matrices 参数。0001阳极值是通过在每个时间步向左旋转来生成的。

因此,当我尝试编译生成的 VHDL 时,我收到以下错误消息:

相关行来自hello.vhdl

的类型sig_24_o0似乎不对;我认为应该是array (6 downto 0) of std_logic_vector(0 downto 0)or std_logic_vector(6 downto 0),但我不知道 Lava 使用那些std_logic_vector(0 downto 0)

0 投票
1 回答
1044 浏览

haskell - Multiple assignments to the same register in an RTL block with Kansas Lava

I'm having trouble understanding Kansas Lava's behaviour when an RTL block contains multiple assignments to the same register. Here's version number 1:

This behaves as I expected it:

The generated VHDL is:

However, I hoped this other version would also work:

But it doesn't, and the second assignment isn't taken into account:

The reason I'm confused is because reg and var are defined in terms of a full clock cycle, so it's not like I could do impossible-to-synthesize things like branch based on r and then reassign a new value to it. So why doesn't this second form work?

It's not just a simulation issue either: the generated VHDL for the second version clearly shows that the second assignment is thrown away at generation time:

So basically, I would have expected the output to be more like

but I'm not sure what that would/should mean in VHDL.

0 投票
1 回答
240 浏览

haskell - Haskell 位到布尔错误

我正在编写一个函数,将位转换为堪萨斯熔岩中的布尔值。我可以通过两种方式做到这一点,但它们都不起作用。

该函数必须执行以下操作:

  • 接收一点(低或高)
  • 将其转换为相应的布尔值 => False 如果它是低的并且它是高的

第一种方法:

在这种方法中,我收到错误“异常:未定义:信号上的 Eq”

第二种方法:

即使输入很高,此方法也始终返回 False。这应该有效,因为在另一段代码中我做了相反的操作,这有效。

我在这里做错了什么?

谢谢您的帮助

大安

0 投票
1 回答
109 浏览

haskell - Haskell/Kansas Lava 移位寄存器错误

我从堪萨斯熔岩纸上得到了一段代码,它有效。

现在我尝试在另一个功能中做同样的事情,使用另一个功能,这不起作用。

现在我收到以下错误:

  • 无法将预期类型[Signal i0 Bool]与实际类型匹配Signal clk0 a0(3x)
  • 无法将预期类型Signal i0 Bool与实际类型匹配[Signal i0 Bool]
  • 无法将预期类型Signal i Bool -> Signal i Bool -> Signal i Bool与实际类型匹配Signal i Bool

我做错了什么?

谢谢您的帮助

0 投票
1 回答
195 浏览

haskell - 将 York Lava 函数转换为 Kansas Lava

我在这里有一个约克熔岩函数,我想在堪萨斯熔岩中重写。但它不想工作,我不知道我应该这样做。有人可以帮我吗?

对于某些示例,上述函数为我提供了这些正确的结果:

现在我试图在堪萨斯熔岩中写这个,它们是一个延迟函数,但我得到了奇怪的结果。下面的代码生成了我,其参数与第一个示例相同:

0 投票
2 回答
1639 浏览

chisel - Chisel 和 Lava 和 CLaSH 有什么区别?

我一直在研究 Chisel 以及各种 Lavas(Kansas、Chalmers 和 Xilinx 风味)和 CLaSH 的来源。我试图了解 Chisel 与其他产品的主要卖点是什么。我确定的主要方法是快速模拟。

我想知道研究得更深入的人是否可以指出其他优点、缺点和权衡。

(抱歉,如果这是一个太多的讨论问题。我尝试向凿子用户发帖,但显然你需要被接受为会员才能做到这一点。)

0 投票
1 回答
367 浏览

emulation - 6502 在独立测试与 Commodore PET 中的中断行为

我正在 FPGA 上构建 Commodore PET。我在 Kansas Lava 中实现了我自己的 6502 核心(代码可在https://github.com/gergoerdi/mos6502-kansas-lava获得),并在其周围放置足够的 IO(https://github.com/gergoerdi /eightbit-kansas-lava ) 我能够在上面启动原始 Commodore PET ROM,得到一个闪烁的光标并开始输入。

但是,在输入经典的 BASIC 程序后

它会在一段时间后(几秒钟后)崩溃

因为我的代码具有相当合理的每个操作码测试覆盖率,并且它通过了AllSuiteA,所以我想我会研究更复杂行为的测试,这就是我到达Klaus Dormann 的中断测试套件的方式。在堪萨斯熔岩模拟器中运行它指出了我最初的中断实现中的大量错误:

  • I进入中断处理程序时未设置标志
  • B到处都是旗帜
  • IRQ 中断被完全忽略,除非I它们到达时未设置(正确的行为似乎是在设置时将中断排队I,当它未设置时,仍应处理它们)

修复这些之后,我现在可以成功运行 Klaus Dormann 测试,所以我希望通过将我的机器重新加载到真正的 FPGA 上,如果运气好的话,BASIC 崩溃可能会消失。

然而,新版本修复了所有这些中断错误,并在模拟器中通过了中断测试,现在无法响应键盘输入,甚至只是在真实 FPGA 上闪烁光标。请注意,键盘输入和光标闪烁都是响应外部 IRQ(从屏幕 VBlank 信号连接)完成的,因此这意味着固定版本以某种方式破坏了所有中断处理......

我正在寻找任何可能出现问题或如何开始调试的模糊建议。

完整代码可在https://github.com/gergoerdi/mos6502-kansas-lava/tree/interrupt-rewrite获得,有问题的提交(修复测试并破坏 PET 的提交)是7a09b794af。我意识到这与最小可行复制完全相反,但改变本身很小,因为我不知道哪里出了问题,而且因为复制问题需要一台功能足以启动库存 Commodore PET ROM 的机器,我不不知道怎么缩小...

添加:

我设法用一个非常简单(我敢说是最小的)ROM而不是库存的PET ROM在相同的硬件上重现了同样的问题:

0 投票
0 回答
1020 浏览

vhdl - 从 RTL 块中的同一分支分配给输出信号并更改寄存器值

在 VHDL 中,我可以编写类似这样的代码来更改存储在寄存器中的值COUNTER并分配给来自同一条件分支的输出信号:

有没有办法在堪萨斯熔岩中做类似的事情?当然,您可以分别使用类似

但是,我正在寻找一种不必reg counter .==. 9两次写出条件的方法,因为在我的真实代码中,我将更改大量内部寄存器并分配给许多分支中的大量输出信号(并且,理想情况下,我什至不会分配所有分支的所有输出;相反,我会有一些默认分配)。

0 投票
0 回答
79 浏览

haskell - 使用 Lava 进行等价验证

我一直在尝试验证 Chalmers Lava 中两个电路之间的等效性。我已经声明了一个类型位:

我有两个电路,每个电路都有一个位列表作为输入和一个位列表元组,以及一个检查它们等价性的函数:

这两个电路将输入作为 64 个元素的列表。我能够使用模拟用一个输入来模拟它们,并使用模拟序列用多个输入来模拟它们,但是对于孔域我无法做到,我得到了这个错误:

(在第 7 行我有类型声明)

同样对于 propEquiv,我可以模拟它,但我无法使用 satzoo 验证它,并且出现此错误:

我不明白他们俩在网上搜索时都找不到任何东西,有人可以帮我解决这个问题吗?我试图在列表中定义具有 64 个元素的电路,但它没有用。

问候。

0 投票
1 回答
110 浏览

haskell - 从 Signal Int 到 Haskell 中的 Int

我正在使用描述数字电路(Lava)的Haskell libraby,它的功能输入和输出属于信号类型(Signal Bool,Signal Int),据我所知,没有一个函数可以从Signal Int转换为Int,我知道有几种算术运算可以与 Signal Int 类型一起使用,但并非所有算术运算都是可能的。我编写了这个函数,假设从 Signal Int 转换为 Int (仅用于我需要的值)。

只是为了尝试,我只写了这 4 种可能性,问题是每当我调用此函数时,无论输入是什么,输出始终为 1000。我确保使用 Signal Int 类型的输入。这是我得到的。

在此处输入图像描述

谁能指出问题出在哪里?我会很感激你的帮助。