前回までは process が一つだけある例題だけだったけど、今回は process が二つ以上ある場合にどう書いたら良いかを学ぼう。
process が複数ある場合は、それぞれの process の記述の他にトップレベルの記述が必要になる。トップレベルでは、各 process の接続関係を記述する。以下の例題 (tutorial3_1.chc) を見てみよう。
process process1(clkin uint#1 clk, rstin uint#1 rst, in uint#2 din, out uint#2 dout)
{
while (1) {
dout = din;
}
}
process process2(clkin uint#1 clk, rstin uint#1 rst, in uint#2 din, out uint#2 dout)
{
while (1) {
dout = din;
}
}
toplevel logicboy(in uint#1 pin<85> clk, in uint#1 pin<49>rst, in uint#2 pin<30,31,32> din, out uint#2 pin<27-29> dout)
{
com uint#2 d;
process1(clk, rst, din, d);
process2(clk, rst, d, dout);
}
二つの process、process1 と process2 がある。
まず process1。クロック clk とリセット rst。din は入力、dout は出力。process の中身は、ただ din からの入力を dout に出力してるだけだ。
わかりやすくするために process2 も全く同じ記述にした。
最後にトップレベルの書き方。単に接続関係だけが記述できる。logicboy がトップレベルの名前で、process の場合と同様、一つ目のパラメータがクロック、二つ目がリセットだ。din は入力、dout は出力。
com というのは、接続用の信号。
process1(clk, rst, din, d);というが process1 のインスタンスで、パラメータはトップレベルの入出力か、com で宣言した信号のいずれかだけが書ける。clk, rst, din はトップレベルのclk, rst, din、d は com で宣言した信号だ。
process2(clk, rst, d, dout); が process2 のインスタンス。
最後に、ピン指定の方法を話すね。トップレベルの記述がある場合、ピン指定は、必ずトップレベルで指定する。この例では、clk が 85 ピンに、rst が 49 ピンに割り当てられる。din のビット 0 が 30 ピン、ビット 1 が 31 ピンに割り当てられる。dout も同様、27 ピン〜 29 ピンに割り当てられる。pin<27,28,29> と書いても、pin<27-29> と書いても同じだよ。
今回はここまで。次回はいよいよ、ブロック RAM の使い方を説明するよ。