2016-05-27 58 views
0

VHDLに変更されたMIPS命令セットを使用して32ビットCPUを作成しようとしています。私は現在、プログラムカウンタがジャンプ値に等しくなるようなジャンプ命令でない限り、次の命令に対して1だけインクリメントするようにプログラムカウンタを取得しようとしています。VHDL 10ビットプログラムカウンタを1ずつインクリメント

entity PC is 
Port (PC_IN  : in STD_LOGIC_VECTOR (9 downto 0); --New PC in value (PC+1 or jump) 
     PC_OUT : out STD_LOGIC_VECTOR (9 downto 0); --PC out to instruction memory 
     Jump_Inst : in STD_LOGIC_VECTOR(9 downto 0); --Jump address 
     Jump  : in STD_LOGIC; --Jump MUX 
     clk  : in STD_LOGIC); 
end PC; 

architecture Behavioral of PC is 
begin 

PC_IN <= (PC_IN + "0000000001") when (Jump = '0') 
else Jump_Inst;  

process(clk) 
begin 
    if rising_edge(clk) then --If it is the next clock cycle (i.e time for the next instruction) 
    PC_OUT <= PC_IN; 

end if; 
end process;  
end Behavioral; 

この行でエラーが発生します。PC_IN <= (PC_IN + "0000000001") when (Jump = '0')エラーがから成り、それは+演算子を使用して私のように、多分出力する必要pc_inないように、ここではオペレータの0定義pc_inオブジェクトの中に "「+」マッチを更新することはできませんか?

誰もが次の命令のために1ずつ増加する私のプログラムカウンタを取得する方法を知っていますか?どんな助けもありがとう。ありがとう。

+0

信号ジャンプは、すべての制御信号が作成される別のファイルで宣言されます。次に、PC、命令メモリ、レジスタ、制御などをリンクするcpuというオーバヘッドファイルでコンポーネントの減速とポートマップを使用してPCファイルにリンクします。 – oodan123

+0

モードのオブジェクトへの割り当てを変更できないため、変更する必要があります代わりにPC_Outに? – oodan123

答えて

2

PC_INはstd_logic_vectorとして定義されます。ライブラリは使用中ではありませんが、デフォルトでは、+std_logic_vectorの演算子はstd_logic_1164にありません。これは+は、このコンテキストで定義されていない、あなたの興が

0 definitions of operator "+" match here

です:あなたのエラーメッセージに注意してください。 +演算子を使用するには、そのサポートを持つライブラリを組み込み、適切な型を使用する必要があります。

あなたの他のエラー:

cannot update 'in' object pc_in

あなたがinポートを設定することができないことを示しています。特にPC_INは入力ですが、PC_INをドライブしようとしています。おそらく、あなたはPC_OUTを運転することを意味しますか?

私は別の方法に言及しませんが、あなたはおそらく、この場合にnumeric_stdを使用する必要があります。例:

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 

... 

PC_OUT <= std_logic_vector(unsigned(PC_IN) + 1) when (Jump = '0') else Jump_Inst; 
+0

問題を解決したようです。私はまだオブジェクト内の更新についてのエラーを取得していますが、増加する値があります。ご協力いただきありがとうございます。 – oodan123

+0

@ oodan123 'PC_IN'が入力であり、あなたがそれを割り当てているため、 'オブジェクトpc_in'の' can not update'に関するエラーがあります。あなたはおそらく 'PC_OUT'を割り当てるべきです。私はそれを明確にするために私の答えを更新しました。 (信号割り当てはプロセスで発生シーケンシャル条件信号割当なし)非-2008改訂に準拠VHDLツールの – PlayDough

+0

: 'もしジャンプ=「0」を PC_OUT <= STD_LOGIC_VECTOR(符号なし(PC_IN)+ 1)。 else PC_OUT <= Jump_Inst; end if; '-2008には、std_logic_vectorを符号なしとして扱い、型変換なしで" + "を提供するパッケージnumeric_std_unsignedもあります。 – user1155120

関連する問題