問題タブ [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.
haskell - カンザス溶岩の信号で行列の行列にインデックスを付ける
時分割多重化を実装して、4桁の7セグメントディスプレイを駆動しようとしています。デバイスには7つのデータレッグと4つのアノードがあるため、4つの異なる桁を表示する場合は、アノードを0001
最初に設定し、データを最初に設定する必要があります。あなたのセグメントへの足; 次に、しばらくして、アノードをに設定し0010
、データレッグを更新します。等々。
私はこれをカンザス溶岩に実装しようとしています。ただし、ザイリンクスコンパイラは、生成された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)
かのどちらかだと思いますがstd_logic_vector(6 downto 0)
、Lavaがそれらを何に使っているのかわかりませんstd_logic_vector(0 downto 0)
。
haskell - カンザス溶岩を使用したRTLブロック内の同じレジスタへの複数の割り当て
RTL
ブロックに同じレジスタへの複数の割り当てが含まれている場合のカンザス溶岩の動作を理解するのに問題があります。これがバージョン番号1です。
これは私が期待したとおりに動作します。
生成されるVHDL
ものは次のとおりです。
ただし、この他のバージョンも機能することを望みました。
しかし、そうではなく、2番目の割り当ては考慮されていません。
私が混乱している理由は、reg
とvar
がフルクロックサイクルで定義されているためです。したがって、に基づいて分岐しr
、それに新しい値を再割り当てするなど、合成が不可能なことを実行できるわけではありません。では、なぜこの2番目の形式が機能しないのでしょうか。
これはシミュレーションの問題だけではありませんVHDL
。2番目のバージョン用に生成されたものは、2番目の割り当てが生成時に破棄されることを明確に示しています。
だから基本的に、私は出力がもっと似ていると思っていたでしょう
しかし、それがVHDLで何を意味するのか/すべきかはわかりません。
haskell - Haskell ビットから bool へのエラー
Kansas Lava で少し bool に変換する関数を書いています。これには 2 つの方法がありますが、どちらも機能しません。
関数は次のことを行う必要があります。
- ビットを受信 (ローまたはハイ)
- 対応するブール値に変換します => 低い場合は False、高い場合は True
最初の方法:
このメソッドでは、「Exception: undefined: Eq over a signal」というエラーが表示されます
2 番目の方法:
このメソッドは、入力が高い場合でも常に False を返します。これはうまくいくはずです。なぜなら、別のコードではこれと逆のことをしているからです。
ここで何が間違っていますか?
助けてくれてありがとう
大安
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
私は何を間違っていますか?
助けてくれてありがとう
haskell - ヨーク溶岩機能をカンザス溶岩に変換
ここには、Kansas Lava で書き直したい York Lava 関数があります。しかし、それはうまくいきたくないので、実際にやるべきかわかりません。誰かがこれで私を助けてくれますか?
上記の関数により、いくつかの例でこれらの正しい結果が得られます。
これをカンザス溶岩で書き込もうとしましたが、これは遅延関数ですが、奇妙な結果が得られます。以下のコードは、最初の例と同じパラメータで me を生成します。
emulation - スタンドアロン テストとコモドール PET での 6502 の割り込み動作
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 の interrupt testsuiteにたどり着いた方法です。Kansas Lava シミュレーターで実行すると、元の割り込み実装に大量のバグが指摘されました。
I
割り込みハンドラに入ったときにフラグが設定されませんでしたB
旗がいたるところにありましたI
IRQ 割り込みは、到着時に設定されていない限り完全に無視されました (正しい動作はI
、設定されているときに割り込みをキューに入れ、設定が解除されたときに割り込みを処理する必要があるようです)。
これらを修正した後、Klaus Dormann テストを正常に実行できるようになったので、マシンを実際の FPGA にロードし直して、BASIC クラッシュがなくなることを期待していました。
ただし、これらすべての割り込みバグが修正され、シミュレータでの割り込みテストに合格した新しいバージョンでは、キーボード入力に応答しなかったり、実際の FPGA でカーソルが点滅したりすることさえありません。キーボード入力とカーソル点滅の両方が外部 IRQ (画面の VBlank 信号から接続) に応答して行われることに注意してください。これは、修正バージョンが何らかの形ですべての割り込み処理を壊したことを意味します ...
何がうまくいかないのか、またはこれをデバッグし始める方法について、漠然とした提案を探しています。
完全なコードはhttps://github.com/gergoerdi/mos6502-kansas-lava/tree/interrupt-rewriteで入手できます。問題のあるコミット (テストを修正して PET を壊すもの) は7a09b794afです。これは最小限の実行可能な複製とは正反対であることを認識していますが、変更自体はごくわずかであり、どこで問題が発生するのかわかりません。また、問題を再現するには、ストックコモドール PET ROM を起動するのに十分な機能を備えたマシンが必要であるため、変更は必要ありません。縮める方法がわからない…
追加した:
ストック PET ROM の代わりに非常に単純な (あえて最小限の) ROM を使用して、同じハードウェアで同じ問題を再現することができました。
haskell - Haskell の Signal Int から Int へ
デジタル回路 (Lava) を記述する Haskell libraby を使用しています。その関数の入力と出力は信号 ( Signal Bool 、 Signal Int) 型です。 Int、Signal Int 型で使用できる算術演算がいくつかあることは知っていますが、すべての算術演算が可能なわけではありません。Signal Int から Int に変換すると思われるこの関数を作成しました (必要な値のみ)。
試しに、これらの 4 つの可能性だけを書きました。問題は、入力が何であれ、この関数を呼び出すたびに、出力が常に 1000 になることです。Signal Int 型の入力を使用するようにします。これが私が得るものです。
誰でも問題がどこにあるのか指摘できますか? 私はあなたの助けに感謝します。