AXI プロトコルには、AWSIZE/ARSIZE は 3 ビット幅であるとあります。
しかし、PL のある Zynq プロセッシング システムの AXI インターフェイスでは、これらの信号は 2 ビットしかありません。
Zynq PS が AXI プロトコルに準拠していないのはなぜですか。
Zynq の AXI インターフェイスは AXI プロトコルに準拠しています。
しかし、インターフェイスおよびその関連データ幅の性質上、AxSIZE 信号には 2 ビットしか必要ありません。
『Zynq テクニカル リファレンス マニュアル』(UG585)の第 5 章によれば、インターフェイスおよび AxSIZE の幅は次のようになっています。
Zynq AXI インターフェイス | AxSIZE 幅 (ビット) | データ幅 (ビット) |
---|---|---|
M_AXI_GP{0:1} | AxSIZE[1:0] | 32 |
S_AXI_GP{0:1} | AxSIZE[1:0] | 32 |
S_AXI_HP{0:3} | AxSIZE[1:0] | 32/64 |
S_AXI_ACP | AxSIZE[1:0] | 64 |
上記の値は、Zynq プロセッシング システム (PS) の Unisim マクロ インスタンシエーションに対応しています。
このインスタンシエーションは、すべての Zynq デザインに共通のエレメントです。
これは ISE の <path>\Xilinx\14.x\ISE_DS\ISE\verilog\src\unisims\PS7.v にあります。
上記の値から、AXI インターフェイスの最大データ幅は 64 ビットであることがわかります。
AXI プロトコル仕様によれば、2'b11 の AxSIZE は、64 ビットの伝送サイズに対応します。
Zynq-7000 インターフェイスが 64 ビットを超えるデータ幅を持つことは考えられないので、AxSIZE の最上位ビットを使用する必要はありません。
このため、Zynq PS に対して、このビットは HDL でマスクされます。
このマスキングは、PS に関連付けられている HDL を確認するときにはっきりとあらわれます。
PS7.v には、次のようなコードがあります。
module PS7(
...
output [1:0] MAXIGP0AWSIZE;
....
endmodule
Moving to the PS HDL wrapper <path>\Xilinx\14.x\ISE_DS\EDK\hw\XilinxProcessorIPLib\pcores\processing_system7_vx\hdl\verilog\processing_system7.v
module processing_system7(
...
output [2:0] M_AXI_GP0_AWSIZE,
... );
...
assign M_AXI_GP0_AWSIZE[2:0] = {1'b0, M_AXI_GP0_AWSIZE_i[1:0]};
...
PS7 PS7_i (
...
.MAXIGP0AWSIZE (M_AXI_GP0_AWSIZE_i),
... );