問題タブ [risc]
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.
verilog - 未定義の値を与える Verilog Icarus
Icarus Verilog 0.9.7 で単純な RISC マシンを設計しているプロジェクトに取り組んでいます。
このコードはモジュール式で、最後にいくつかのコンポーネントをまとめますが、メモリ コントローラーの作業中に問題が発生しました。すべてのテスト値について、未定義の出力、つまり「Z」が得られます。どうすればこれを修正できますか? これらの値が入力されていない理由はわかりません。
メモリ コントローラーが持つべきすべての動作を定義することは、この質問の文脈を超えているため、Verilog のトピックについて簡単に説明します。
これが私の現在の Verilog コードです。ワークベンチには、mem.sv と SrcMemoryController.sv の 2 つのファイルがあります。
mem.sv は現在動作しており、この問題の原因ではありません。とにかく役立つ場合は含めます。
ここにもテストベンチがあります。必要ないかもしれませんが、投稿すると役立つ場合があります。
すべての助けに感謝します。ありがとう!
compiler-construction - コンパイラ: 中間表現変数のネイティブ コードへの変換
コンパイラで使用される中間表現に関する本、記事、スライド、およびチュートリアルでは、Three Address Code (TAC) が一般的なものです。私の質問は、次の TAC の例についてです
この例では、a と b の 2 つの変数を持つ 3 つの行があります。および 3 つの一時的なもの: t0、t1、および t2。たとえば、そのような TAC を MIPS アセンブリに変換する場合、最初と最後の TAC は次のように簡単に変更できます。
しかし、MIPS (および他の多くの RISC プロセッサ) には 2 つのメモリ オペランドを同時にフェッチできる命令がないため、中間の TAC を変換する方法がわかりません。
したがって、私の質問は次のとおりです。(1)そのようなTACをRISC命令にどのように変換するか、および; (2) 最近では非常に多くのプロセッサが RISC ベースのプロセッサであるのに、なぜそのような TAC が一般的に使用されるのですか? プロセッサがより CISC ベースで、メモリからの複数のフェッチが許可されていた時代からの遺産ですか?
また
たぶん、そのような TAC での変数の意味について間違った解釈をしているのでしょう。もしそうなら、TAC でそのような変数をどのように解釈すればよいですか?