はじめに
SZ410のSPIフラッシュメモリへのアクセス速度を改善した新しいSPIのIPコア(XPS-SPI-SZ410)を作成しました。 デフォルトLinuxイメージのブート時間が、以前と比較して約10秒短縮されます。FPGAプロジェクト | XPS-SPI + BBootv2.5使用 | XPS-SPI-SZ410 + BBootv2.6使用 |
---|---|---|
Linux起動時間 | 24秒 | 14秒 |
既に適用済みのプロジェクトは以下よりダウンロードできます。
ここではSUZAKUのデフォルトプロジェクトsz410-20080327を元に新SPIコアへの差し替え方法を説明します。 差し替え手順は以下となります。
- ファイルのダウンロード&解凍
- xps_spi_sz410_v1_00_aのコピー
- xps_proj.mhsの編集
- xps_proj.mssの編集
- xps_proj.ucfの編集
- BBootの上書きコピー
1. ファイルのダウンロード&解凍
XPS-SPI-SZ410およびBBootv2.6を入手するため、以下のファイルをダウンロードして展開してください。2. xps_spi_sz410_v1_00_aのコピー
sz410-20080502\pcores\xps_spi_sz410_v1_00_aをsz410-20080327\pcores以下にコピーしてください。3. xps_proj.mhsの編集
sz410-20080327\xps_proj.mhsをテキストエディタ等で開き、以下のように編集してください。
PORT SYS_RST_IN = SYS_RST_IN, DIR = I, RST_POLARITY = 1, SIGIS = RST
PORT SYS_CLK_IN = SYS_CLK_IN, DIR = I, SIGIS = CLK
PORT CNSL_RX = CNSL_RX, DIR = I
PORT CNSL_TX = CNSL_TX, DIR = O
PORT CNSL_CTSn = CNSL_CTSn, DIR = I
PORT CNSL_RTSn = CNSL_CTSn, DIR = O
PORT FPGA_RESET_EN = FPGA_RESET_EN_w, DIR = O
PORT BOOT_JP = BOOT_JP, DIR = I
PORT nLED = nLED, DIR = O, VEC = [0:0]
PORT SPI_SCK = SPI_SCK_O & SPI_SCK_O, DIR = O, VEC = [0:1] # 削除
PORT SPI_MISO = SPI_MISO_I_Ext, DIR = I, VEC = [0:1]
PORT SPI_MOSI = SPI_MOSI_O & SPI_MOSI_O, DIR = O, VEC = [0:1]
PORT SPI_SS = SPI_SS_O, DIR = O, VEC = [0:1]
PORT SPI_SCK = SPI_SCK, DIR = O, VEC = [0:1] # 追加
PORT SPI_MISO = SPI_MISO, DIR = I, VEC = [0:1]
PORT SPI_MOSI = SPI_MOSI, DIR = O, VEC = [0:1]
PORT SPI_SS = SPI_SS, DIR = O, VEC = [0:1]
・・・
BEGIN xps_spi # 削除
PARAMETER INSTANCE = spi_cntlr
PARAMETER HW_VER = 1.00.a
PARAMETER C_BASEADDR = 0xF0FF0000
PARAMETER C_HIGHADDR = 0xF0FF01FF
PARAMETER C_NUM_SS_BITS = 2
PARAMETER C_SCK_RATIO = 16
BUS_INTERFACE SPLB = plb_peripheral
PORT MISO_I = SPI_MISO_I
PORT MOSI_O = SPI_MOSI_O
PORT SCK_O = SPI_SCK_O
PORT SS_O = SPI_SS_O
END
BEGIN xps_spi_sz410 # 追加
PARAMETER INSTANCE = spi_cntlr
PARAMETER HW_VER = 1.00.a
PARAMETER C_SPLB_SMALLEST_MASTER = 64
PARAMETER C_MEM0_BASEADDR = 0xF0FF0000
PARAMETER C_MEM0_HIGHADDR = 0xF0FF01FF
BUS_INTERFACE SPLB = plb_peripheral
PORT SPI_MISO = SPI_MISO
PORT SPI_MOSI = SPI_MOSI
PORT SPI_SCK = SPI_SCK
PORT SPI_SS = SPI_SS
END
・・・
BEGIN util_vector_logic # 削除
PARAMETER INSTANCE = or_miso_ss
PARAMETER HW_VER = 1.00.a
PARAMETER C_SIZE = 2
PARAMETER C_OPERATION = or
PORT Op1 = SPI_MISO_I_Ext
PORT Op2 = SPI_SS_O
PORT Res = or_miso_Res
END
BEGIN util_reduced_logic # 削除
PARAMETER INSTANCE = reduced_miso
PARAMETER HW_VER = 1.00.a
PARAMETER C_SIZE = 2
PARAMETER C_OPERATION = and
PORT Op1 = or_miso_Res
PORT Res = SPI_MISO_I
END
4. xps_proj.mssの編集
sz410-20080327\xps_proj.mssをテキストエディタ等で開き、以下のように編集してください。
BEGIN DRIVER
PARAMETER DRIVER_NAME = spi # 削除
PARAMETER DRIVER_VER = 1.11.a
PARAMETER DRIVER_NAME = generic # 追加
PARAMETER DRIVER_VER = 1.00.a
PARAMETER HW_INSTANCE = spi_cntlr
END
5. xps_proj.ucfの編集
sz410-20080327\data\xps_proj.ucfをテキストエディタ等で開き、以下のように編集してください。
# SPI FLASH
Net SPI_SCK<1> LOC = V2 | IOSTANDARD = LVCMOS33; # 変更
Net SPI_SS<1> LOC = W2 | IOSTANDARD = LVCMOS33;
Net SPI_MISO<1> LOC = W3 | IOSTANDARD = LVCMOS33;
Net SPI_MOSI<1> LOC = V1 | IOSTANDARD = LVCMOS33;
# SPI EEPROM
Net SPI_SCK<0> LOC = R3 | IOSTANDARD = LVCMOS33; # 変更
Net SPI_SS<0> LOC = R4 | IOSTANDARD = LVCMOS33;
Net SPI_MISO<0> LOC = W6 | IOSTANDARD = LVCMOS33;
Net SPI_MOSI<0> LOC = R2 | IOSTANDARD = LVCMOS33;