読者です 読者をやめる 読者になる 読者になる

Tech と Culture

テクノロジーとカルチャー

YCbCr-RGB変換モジュールRTL AMBA slave 2(仮)

基本的なAMBAの仕様は理解できましたが、Leonシステムに組み込めるようにするにはGrlibに特有な部分もすり合わせて記述せねばなりません。Grlibには一般的なAMBAインターフェースがパッケージとして提供されていますので、それを使用します。
genericに記述された非常に分かりやすいパッケージですので、記述も簡単にできます。
最初にパッケージをインクルードする必要があります。

yccrgb-vhd1.png

最初のieeeライブラリは定番のものです。私は算術パッケージは numeric_std を使用することに決めています。
次のgrlibパッケージがGaisler Researchから提供されているものです。
grlib.amba -- AMBAパッケージ: AMBA 信号等の定義や役に立つ関数郡が含まれています。
grlib.stdlib -- 一般的な関数郡が定義されています。ビット幅の異なるstd_logic_vectorの足し算等。
grlib.devices -- 後ほど述べる、AMBAのコンフィグ信号のための定義パッケージ。

その他に
techmap.gencomp もインクルードします。YCC-RGB変換モジュールの中でFIFOのために2ポート同期SRAMを使用しますが、このSRAMXilinxに依存したものを使用せずに、Grlibの中の2ポート同期SRAMインスタンスします。 この方法により、トップレベルでコンフィグレーションすることによってAlteraやその他のデバイスにマッピング変更が一発でできるようになります。そのためにこのファイルをインクルードします。

Grlibでは、各AHBモジュールをトップレベルにPlug&Playで簡単にインスタンスできるように、各モジュールがモジュール情報を出力するピンをAMBAバスに追加しています。これらの値をgeneric文で指定できるようにコーディングしておきます。

generic文中にある、以下の値はAMBAバスに接続する時に使用する値です。このモジュールをインスタンスする際に指定します。

shindex : インスタンスする時に番号を一つづつつけていき、信号を選択するときにこの番号を使用します。shindexはスレーブインターフェースの番号です。
haddr : スレーブ側の開始アドレスを指定します。
hmask :  スレーブのアドレス中で使用エリアをマスクしたい時に指定します。今回はマスクしません。
hirq : 割り込み信号を使用したいときに番号を決めます。
pindex : APBインターフェースの番号です。
paddr : APBインターフェースの開始アドレスを指定するために使用します。
pmask : APBの使用アドレスをマスクしたいときに使用します。
mhindex : マスターインターフェース(変換後にメモリに書き込む側)の番号を指定します。
chprot : マスター側のprot信号を指定します。

また、入出力ポートはgrlib.ambaで定義されている信号を使用します。これらの設定により、Plug&Playのインスタンスが可能になります。

yccrgb-vhd2.png

指定した値をこのように準備されている関数を用いて定数として、AMBAインターフェースに出力するように記述します。

例: ahbso.hconfig <= shconfig;

VENDOR名は、本当はVENDOR_GAISLERではないのですが、とりあえず今はこのままで。