UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 22259

7.1i EDK - レングス レジスタ設定を使用するとマスタ IP の作成/インポートで 0x4 以上のトランザクションが実行されない

説明

キーワード : 7.1, peripheral, IPIF, opb, plb, byte, transaction, ペリフェラル, バイト, トランザクション

重要度 : 標準

概要 :
EDK で、OPB/PLB バスのマスタとなるカスタム IP コアを生成しました。

user_logic.vhd に記述されたこのコアには、PLB/OPB バスにアクセスするレジスタの設定に関するセクションがあります。 その 1 つは、レングス レジスタです。

-- Length Register (C_BASEADDR + 0x10C):
-- bit 0-15 - Transfer Length (This 16-bit value is used to specify the
-- number of bytes (1 to 65,536) to transfer during user logic
-- master read or write operations)

このレジスタを 4 バイト (32 bits) 以外のバイトに設定すると、コアが正常に機能しません。 たとえば、12 バイト (32 ビット ワードが 3 つ) に設定すると、PLB/OPB バスに 3 つのライトまたはリードが現れるはずですが、12 バイトではなく、4 バイトのみが送信されます。

これはなぜですか。





ソリューション

この問題は、次のようにして修正できます。

Create/import Peripheral Wizard を使用してコアを生成する際、ステップ 6 で [Generate Template driver files to help you implement software interface] オプションをオンにします。 このオプションにより、コアに対してソフトウェア ドライバ ファイルが生成されます。

<peripheral_name>.h ファイルの定数定義セクションで、レングス ファイル ID が次のように定義されています。

/**
* User Logic Master Space Offsets
* -- MASTER_CR : user logic master module control register
* -- MASTER_SR : user logic master module status register
* -- MASTER_LA : user logic master module local address (IP2IP_Addr) register
* -- MASTER_RA : user logic master module remote address (IP2Bus_Addr) register
* -- MASTER_LENGTH : user logic master module data transfer length (bytes) register
* -- MASTER_BE : user logic master module byte enable register
* -- MASTER_GO_PORT : user logic master module go bit (to start master operation)
*/
#define MASTER_USER_MASTER_SPACE_OFFSET (0x00000000)
#define MASTER_MASTER_CR_OFFSET (MASTER_USER_MASTER_SPACE_OFFSET + 0x00000000)
#define MASTER_MASTER_SR_OFFSET (MASTER_USER_MASTER_SPACE_OFFSET + 0x00000001)
#define MASTER_MASTER_LA_OFFSET (MASTER_USER_MASTER_SPACE_OFFSET + 0x00000004)
#define MASTER_MASTER_RA_OFFSET (MASTER_USER_MASTER_SPACE_OFFSET + 0x00000008)
#define MASTER_MASTER_LENGTH_OFFSET (MASTER_USER_MASTER_SPACE_OFFSET + 0x0000000C)
#define MASTER_MASTER_BE_OFFSET (MASTER_USER_MASTER_SPACE_OFFSET + 0x0000000E)
#define MASTER_MASTER_GO_PORT_OFFSET (MASTER_USER_MASTER_SPACE_OFFSET + 0x0000000F)

次の行があります。

#define MASTER_USER_MASTER_SPACE_OFFSET (0x00000000)

これを次のように変更します。

#define MASTER_USER_MASTER_SPACE_OFFSET (0x00000100)

これにより、必要なレングス レジスタ設定でコアが動作するようになるはずです。
AR# 22259
日付 04/17/2007
ステータス アーカイブ
種類 一般
このページをブックマークに追加