2017-07-01 11 views
-2

プロセッサのVHDLにシフトレジスタを開発したいと考えています。プロセッサの命令レジスタ(IR)には、シフト量を決定するセクションがあります。今私はこの操作を実装するためにチェックしたいと思います。任意のシフト量のシフトレジスタの実装

例えば、ビット番号5〜10はシフト量を示します。このセクションに "000001"がある場合、タイミング信号t1が発生すると、シフトレジスタが機能し、t2タイミング信号が到来するはずです。

なぜ、次のコードは、modelsimで実行しているときにシフトレジスタに影響を与えませんか?

IF sc=t1 AND R2 (10 DOWNTO 5)= "000001" THEN 
R2<=R2(62 DOWNTO 0) & R2(63); 
END IF; 
+1

このコードスニペットでは、問題を理解するには不十分です。 [最小限で完全で検証可能なサンプルの作成方法](https://stackoverflow.com/help/mcve) – ahmedus

+1

Stackoverflowは、[Tour](https://stackoverflow.com/tour)で導入された構造化フォーマットを使用しています。 。 [ヘルプセンター](https://stackoverflow.com/help)には、[質問する](https://stackoverflow.com/help/asking)に関するガイドラインが記載されています。 VHDLは、[MCVe](https://stackoverflow.com/help/mcve)が明確で具体的な刺激を提供することを要求するデザイン階層でネットによって相互接続された精巧な宣言とプロセス(精緻化された並行ステートメントを含む)あなたの質問がそのまま現れている問題はありません。 – user1155120

答えて

0

あなたのアプローチは正しいと思います。 VHDLで可能な限り最も定数値を使用することが常に優れているので、合成が容易になることができ、私はあなたのケース

process(clk, reset) 
begin 
    if reset then 
    --reset everything 
    elsif posedge(clk) then 
    if sc = t1 then 
    case R2(10 DOWNTO 5) 
     when "00001" => 
     R2 <= R2(62 DOWNTO 0) & R2(63) 
     when "00010" => 
    end if 
end process 

ためのコードを記述しますので、上記のコードは何をすべきかの単なるアイデアです。使用している実際のコードの詳細を表示する必要があります。

+0

あなたのお返事にとても感謝します。私の書かれたコードは正しい。実際、私はそれを見つけた別の場所で間違いを犯しました。 R2ではなく、命令レジスタにあるシフト量を比較する必要があります。 – Kooh

関連する問題