2016-04-01 11 views
-1

私はVHDLを初めて使っていますが、SRAMメモリにアクセスするためにALU、乗算器、バスアーキテクチャを備えたVHDLでプロセッサを作成しています。プロセッサは、32ビット命令(演算のタイプとメモリアドレスを含む)をデコードします。C言語の文をVHDLに書く

次のCコードをプロセッサに書き込むにはどうすればよいですか?

1st instruction: multiply a[0] with b[0] 
2nd instruction: add the result to c 

を9回繰り返します。

int i = 0; 
int c = 0; 

int a[10] = "0,1,2,3,4,5,6,7,8,9"; 
int b[10] = "1,0,-1,0,1,0,2,1,-1,1"; 

for (i = 0; i < 9; i++) c += (a[i]*b[i]); 

私はテストベンチで、このCコードのための命令のリストを記述します推測しています。

これは正しい方法ですか? forループを実装するより良い方法はありますか? tb_top.vhdに直接Cコードを書く方法はありますか?

答えて

0

もちろん、Cコードを手動でアセンブラコードに変換し、バイナリコードにアセンブルすることはできます。しかし、より良い選択肢は、お使いのプロセッサにCコンパイラおよび/またはアセンブラを使用することです。使用可能なプロセッサがなく、長い/多くのプログラムにプロセッサを使用する予定の場合は、gccの上に新しいコンパイラを作成し、新しいアセンブラをbinutilsの上に作成できます。

次に、バイナリ出力を命令ROMに配置します。メモリおよびI/Oデバイスなしでプロセッサ自体をシミュレートする場合は、テストベンチ内の命令ROMをエミュレートします。 std_logic_vectorの配列は、あなたのニーズに合わせなければならない:

type rom_t is array(natural range <>) of std_logic_vector(7 downto 0) ; 
constant rom : rom_t(0 to 63) := (
    0 => x"00", -- insert binary code of instruction at address 0 here 
    1 => x"00", -- instruction at address 1 
    -- and so on 
    others => x"00" -- fill remaining ROM with zero 
); 

の例では、各バイトを格納し、64のアドレスでROMを定義します。範囲とメモリの内容をニーズに合わせて更新する必要があります。

+0

ありがとうございます! –

関連する問題