問題タブ [digital-logic]
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.
compiler-errors - VHDL エラー (単純な式が必要)
私は VHDL を初めて使用し、修正できないように見えるコードに問題があります。これは、選択した信号割り当てまたはテーブル ルックアップのいずれかを使用して行うことになっています。発生しない入力に対して don't care を使用することになっているため、私のものは 2 つの組み合わせのようなものです。
このコードは基本的に、2 の補数入力またはオフセット バイナリのいずれに対しても同じ出力を与えると想定されています。たとえば、10 進数の 7 は、オフセット 2 進数では "1111"、2 の補数では "0111" です。どちらの形式も、スイッチ oe の値に応じて "1111100000" の出力を生成する必要があります (オフセット バイナリの場合は '1'、2 の補数の場合は '0')。
このレベルでできる限りコードをデバッグしましたが、何が間違っているのかわかりません。
Active-HDL は現在、48 行目と 55 行目でエラーを表示しています。2 つの「単純な式が必要です」というエラーが表示されています。
私のコードは、以下のペーストビンの URL にあります。これにより、読みやすさと構文の強調表示が改善されます (さらに、コードを投稿する Stack Exchange の奇妙な方法をいじるのは好きではありません)。また、割り当ての指示を維持しながらコードを改善する方法についてのヒントがあれば、何でもお気軽に提案してください。
verilog - alwaysブロック内でのワイヤーの使用?
always ブロック内でワイヤを使用できますか? たとえば、次のようにします。
エラーをスローすることなくコンパイルされました。なんで?
c - 古いマイクロプロセッサで、ビット単位の演算が加算/減算演算よりもわずかに高速だったのはなぜですか?
今日、この抜粋に出くわしました:
ほとんどの古いマイクロプロセッサでは、ビット演算は加算および減算演算よりもわずかに高速で、通常は乗算および除算演算よりも大幅に高速です。最新のアーキテクチャでは、これは当てはまりません。ビット単位の演算は、通常、加算と同じ速度です (ただし、乗算よりも高速です)。
古いマイクロプロセッサでビット単位の演算が加算/減算演算よりもわずかに高速だった理由に興味があります。
レイテンシの原因と考えられるのは、加算/減算を実装する回路がいくつかのレベルの論理ゲート (並列加算器など) に依存しているのに対し、ビット単位の演算にははるかに単純な回路実装があることです。これが理由ですか?
最新のプロセッサでは、算術演算とビット単位の演算の両方が 1 クロック サイクル内で実行されることは知っていますが、純粋に回路の伝搬時間について言えば、最新のプロセッサでは理論的にはまだレイテンシが存在しますか?
最後に、ビットごとのシフト操作の実行に関する概念的な C の質問がありました。
x
との両方y
が値を保持する必要があります32
が、その値に到達するために5 つの個別の左シフトが必要でしx
たか (パイプを介して実装されたビット単位のシフトのように)? 明確にするために、クロックサイクル数ではなく、回路の動作について純粋に質問しています。
assembly - MIPS ストア バイトおよびストア ハーフワードの実装
私は現在、シングル サイクル MIPS プロセッサを実装しており、SB および SH 命令の実装に取り組んでいます。このスレッドのアイデアを使用して、LB/LBU および LH/LHU 命令を正常に実装しました:単一サイクル データパスでハーフ ワードをロードし、バイトをロードする
SB/SH 命令を実装する方法を概念化するのに苦労しています。私の現在の考えは、各入力がバイトが書き込まれる現在のワードのマスクである 4:1 MUX を持つことです。たとえば、バイト 0x2E をアドレス 0x10010002 に書き込むとします。これには、たとえば、現在 [0x10010000] 0xABCD1234 という値が含まれています。したがって、書き込み後のメモリは [0x10010000] 0xAB2E1234 になります。(バイトアラインアドレッシング)
したがって、0xFFFFFF00、0xFFFF00FF、0xFF00FFFF、0x00FFFFFF の値を持つ 4 つの AND を使用して、アドレス 0x10010000 の単語をマスクします。MUX の選択ビットは、アドレスの下位 2 ビットから取得されます。
これと同時に、バイトを取得してゼロ拡張し、いくつかの異なるシフトを実行して、マスクの正しい位置に配置します。これらの異なるシフトされた値は、同じ対応する選択ビットで再び MUX に送られます。たとえば、アドレスの下位 2 ビットが 0 の場合、シフトは必要ありません。01 の場合、1 バイト左シフトします。10 の場合、2 バイト左シフトします。11 の場合、左 3 バイト (または循環右シフト 1 バイト)
次に、MUX と OR の両方から値を取得して、保存する最終的な値を取得します。上記の例では、次のようになります。
下位 2 ビットは 10 であるため、MUX は 0xABCD1234 と AND 演算された 0xFF00FFFF を選択して、0xAB001234 の出力値を提供します。バイトは左に 4 シフトされて 0x002E0000 になり、0xAB001234 と OR 演算されて 0xAB2E1234 になり、格納されます。
もちろん、これは同じ考え方で SH 命令にまで拡張されます。私の例が理にかなっていることを願っています。私が見ていないより簡単な方法がない限り、おそらくこの方法で実装するつもりです。私は長い間ハードウェア設計を見つめてきましたが、より単純な実装を見落としている可能性があります。
ありがとう。
algorithm - 多数の入力変数で真理値表を減らす方法
入力変数の数が 6 を超える真理値表によって生成される式を削減するアルゴリズム。
より一般的な質問は次のとおりです:: 入力変数 n の数を持つ真理値表によって生成された式を削減するアルゴリズム :n > 6
processor - 「制御ユニットの次の状態レジスタ」を立ち下がりエッジでトリガーする必要がありますか?
各モジュールには次のような能力があると考えられます。 [1] データを保存できます。[2] データの演算ができる(算術演算)
モジュールのいくつかのプロパティ(それをリストするだけで、私は今心配しています。)[1]モジュール内のすべてのレジスタ/メモリ要素は、RAISINGエッジでトリガーされます。
これで、このアーキテクチャを使用してコンピューター プロセッサのモデルを作成できます。
Real Deal: FALLING egde がトリガーされるように「コントロール ユニットの次の状態レジスタ」が必要ですか? (なぜそう思うかは後述)
この制御信号は、入力と CURRENT STATE の組み合わせの結果です。SO は、現在の状態が変化すると制御信号が変化することを意味します。これは、立ち下がりエッジで状態が変化することを意味します [1]。したがって、状態の変化は、単にクロックの立ち下がりエッジで発生する「制御ユニット状態レジスタ」の変化です。そのため、「「コントロールユニットの次の状態レジスタ」をFALLINGエッジでトリガーする必要があるか」と考えています....私は正しいことを考えていますか?
はいの場合、同じ(コントロールユニット状態レジスタの立ち下がりエッジトリガー)が実際のプロセッサでも発生しているはずです。
私は何かを学んでいるので、許してください+私の間違いを修正してください
hardware - Chisel で X を取得するためにデフォルトを指定しないようにすることは可能ですか?
次のChiselコードは期待どおりに動作します。
io.rdData := UInt(0)
ただし、デフォルトが必要なため、指定しないとコンパイル時エラーになります。明示的に指定するX
か、デフォルトで X、erm を出力しないモジュールをデフォルトにする方法はありますか?
これを行う理由としては、出力がアサートされていない場合ren
は出力に依存するべきではなく、X を指定すると出力を指定できるため、最適化のために、X を指定することで合成ツールにドントケアであることを伝えることができます。
scala - テスト ハーネスのチゼル ランタイム エラー
このChiselコードは問題なく動作します:
ただし、これは小さなバリエーションですが、実行時エラーが発生します。
boolean - 4 ビットの数値を受け取り、数値の平方根を近似する 3 ビットの 2 進数出力を生成する組み合わせ回路
4 ビットの数値を受け取り、その数値の平方根を近似する 3 ビットの 2 進数出力を生成する組み合わせ回路を設計します。たとえば、平方根が 3.5 以上の場合、結果は 4 になります。平方根が < 3.5 かつ ≥ 2.5 の場合、結果は 3 になります。
入力の真理値表はこのようになりますか? (入力には A、B、C、D を使用しています)
「数値の平方根を近似する 3 ビットの 2 進数出力を生成する」という出力テーブルの生成に問題があります。ありがとうございました。