marseeさんからご指摘のあった信号のつなぎ目の部分でミスがあったので修正しました。
実は引数の部分で"int multi_in0[ARRAY_LIMIT]"のように、ポインタ表現ではなく変数表現で記載されていた場合を想定していなかった。 LLVM-IR上ではポインタになってるんだけどねぇ・・・
int marsee_example1(int multi_in0[ARRAY_LIMIT], int multi_in1[ARRAY_LIMIT], int multi_out[ARRAY_LIMIT]),
当分、途中の生成ファイルを出力しておこうかと思ったけど、ヘタすると元のソースコードを壊す可能性があるのでやっぱりやめた。
すごく安直だけど、次のようなテストベンチを作成して動作確認。
`timescale 1ns/1ns
module tb;
reg system_clock, system_reset;
reg __func_start;
wire __func_done;
wire __func_ready;
wire __gm_req;
wire __gm_rnw;
reg __gm_done;
wire [31:0] __gm_adrs;
wire [1:0] __gm_leng;
reg [31:0] __gm_di;
wire [31:0] __gm_do;
reg [31:0] __args_multi_in0;
reg [31:0] __args_multi_in1;
reg [31:0] __args_multi_out;
mar_ex_top u_mar_ex_top(
// system signals
.system_clock(system_clock),
.system_reset(system_reset),
.__func_start(__func_start),
.__func_done(__func_done),
.__func_ready(__func_ready),
// memory bus
.__gm_req(__gm_req),
.__gm_rnw(__gm_rnw),
.__gm_done(__gm_done),
.__gm_adrs(__gm_adrs),
.__gm_leng(__gm_leng),
.__gm_di(__gm_di),
.__gm_do(__gm_do),
// base address
// arguments
.__args_multi_in0(__args_multi_in0),
.__args_multi_in1(__args_multi_in1),
.__args_multi_out(__args_multi_out),
// call instruction
.dummy()
),
reg [31:0] gm_mem[0:1023];
initial begin
gm_mem[0]
writed: 2015/11/05/ 01:30:02