

(変更前の RTL ブロック構成)

(変更後の構成)

ブロック構成の変更は、上図の上半分と下半分に分けて説明します。
ブロック構成の変更の一つ目は、次のように
アドレス・デコーダと、バス調停の二つを一つにします。
(Bus Arbiter) + (Bus) + (Address Decoder)
↓
(Bus) + (Bus Arbiter & Addres Decoder)
先の図では、上半分の変更に相当します。
それぞれのブロックの、変更前の記述は次のとおりです。
■バス調停(変更前)
{{incex2(block/bus_arbiter1.cpp)}}
■アドレス・デコーダ(変更前)
{{incex2(block/address_decoder1.cpp)}}
■変更後は、以上のアドレス・デコーダとバス調停を
合せて次の一つにします。
{{incex2(block/address-decoder-bus-arbiter.cpp)}}
■Bus の部分は次のように書き換えます 。Bus の部分の変更前:
{{incex2(block/bus1.cpp)}}
■Bus の部分の変更後:
3,4 行目 の HBUSREQ/HBUSGRNT の行がなくなり、代りに
ARBT_ADEC_IF の arbt になります。また
10,11 行目が 8 行目の arbt -> Arbitration( ) に変っています。
{{incex2(block/bus2.cpp)}}
■変更前のクロック部分は次の通りですが、これは変更後はなくなります。
{{incex2(block/clock1.cpp)}}
ブロック構成の変更の二つ目は、
前の図の下半分の SDRAM controller です。
ここは、6 個のモジュールからなっていたものを、一つのモジュールにします。
その部分だけを取出して変更の様子を図で示すと次のようになります。

この中の変更を次に六組の記述で示します。
■.1 初めは Bus Slave1 と Bus Slave2 を合せて SDRAM_Controller とする部分です。
{{incex2(block/bus-slave1.cpp)}}
{{incex2(block/bus-slave2.cpp)}}
以上の二つ Bus_Slave1 と Bus_Slave2 は 良く似ていて、
1,10,14 行目が違うだけです。
これらを一つの main にして、次のように書きます。
上の slave1 の 14 行目の
slv_start->write(1); は、下の 16 行目の
SDRAM_Register_Control() に変換します。
上の slave2 の 14 行目の
reg_start -> write(1); は下の 18 行目の
sdm_cmd_ACT(); に変換します。
{{incex2(block/main.cpp)}}
■.2 次の一組は図中央上の SDRAM_controller 部分です。
(変更前)
{{incex2(block/sdram-controller1.cpp)}}
(変更後)
{{incex2(block/sdram-controller2.cpp)}}
■.3 三組目は図中央下の register controller 部分です。
(変更前)
{{incex2(block/register1.cpp)}}
(変更後)
{{incex2(block/register2.cpp)}}
■.4 四組目は図右上の Bus Response 部分です。
(変更前)
{{incex2(block/bus-response1.cpp)}}
(変更後)
{{incex2(block/bus-response2.cpp)}}
■.5 五組目は図右下の Refresh Timer 部分です。
変更前は次のとおりですが、変更後は不要となり、記述はありません。
(変更前)
{{incex2(block/refresh-timer.cpp)}}
■.6 六組目は全体の接続構成を示す記述ですが、変更後は必要なくなります。
(変更前)
{{incex2(block/top.cpp)}}