Jump to content

    
Sign in to follow this  
RadiatoR

Местонахождение hard SPI в чипе ICE5LP1K-SG48I

Recommended Posts

Всех приветствую.

В чипе есть 1 hard SPI. Он находится внизу чипа слева или справа. Как определить? Или где найти?

В мануале не нашел, точнее там есть пример для чипа с двумя SPI и их расположением, а с одним нету.

Я отладил железяку на icebreaker плате. Там стоит чип с двумя SPI и проблем не возникло. Сейчас делаю плату с ICE5LP1K-SG48I, в нем 1 SPI и не ясно где находится. Самого чипа на руках нет, эмпирически проверить не могу.

Самое смешное, что если сгенерить проект в iceCube и в залезть в генератор SPI, то он может сгенерировать код для обоих SPI =(, не выдав предупреждений и ошибок, хотя чип в проекте указан. При этом если посмотреть на chip planner, то в нем по прежнему есть оба SPI и I2C, хотя I2C тоже всего 1. Такое ощущение, что в planner'е просто шаблонная форма.

Верхние кружки - это I2C, нижние SPI. Но должно быть только 1/1.

fpga_spi_missing.thumb.png.1f3a0f43d6b6d6e43fbbae9210e4f7e2.png

Может использовал кто?

Заранее благодарю.

Share this post


Link to post
Share on other sites

Добрый день.

Согласно iCE5LP1KPinout.xlsx  и/или iCE40UltraUltraPlusSG48PinMigration.xlsx   SPI1 находится в BANK1

IOB_32a_SPI_SO - pin 14

IOB_33b_SPI_SI - pin 17

IOB_34a_SPI_SCK - pin 15

IOB_35b_SPI_CSN - pin 16

Или Вас интересует именно расположение IP SPI1 на кристалле?

iCE40UltraUltraPlusSG48PinMigration.xlsx iCE5LP1KPinout.xlsx

Share this post


Link to post
Share on other sites
27 minutes ago, _pv said:

это не тот spi, а конфигурационный.

 

а вообще какая разница какой из spi левый или правый?

Верно, интересует не конфигурационный, а пользовательский.

Дело в том, что для выбора модуля нужно обратиться к нему по разному адресу. Адрес зависит от расположения на кристалле (по крайней мере в версиях с двумя так).

И второй момент - лучше располагать выводы так, чтобы они были ближе физически к модулю.

Share this post


Link to post
Share on other sites

А посмотрите исходник, который iCEcube2 генерирует для hardened SPI в iCE5LP1K.

Если мне склероз не изменяет, то там прописывается адрес используемого аппаратного SPI (ADDR7:4).

 

Share this post


Link to post
Share on other sites

Так и есть.

Помимо общей обертки генератор создает 2 instance:

    SB_SPI #(.BUS_ADDR74("0b0000")) SB_SPI_INST_LT /* synthesis SPI_CLK_DIVIDER=23 */  (.SBCLKI(SBCLKi), .SBRWI(wb_we_ix), .SBSTBI(wb_stb_ix), .SBADRI7(wb_adr_ix[7]), .SBADRI6(wb_adr_ix[6]), .SBADRI5(wb_adr_ix[5]), .SBADRI4(wb_adr_ix[4]), .SBADRI3(wb_adr_ix[3]), .SBADRI2(wb_adr_ix[2]), .SBADRI1(wb_adr_ix[1]), .SBADRI0(wb_adr_ix[0]), .SBDATI7(wb_dat_ix[7]), .SBDATI6(wb_dat_ix[6]), .SBDATI5(wb_dat_ix[5]), .SBDATI4(wb_dat_ix[4]), 
                .SBDATI3(wb_dat_ix[3]), .SBDATI2(wb_dat_ix[2]), .SBDATI1(wb_dat_ix[1]), .SBDATI0(wb_dat_ix[0]), .MI(SPI2_MI), .SI(SPI2_SI), .SCKI(SPI2_SCKi), .SCSNI(SPI2_SCSNi), .SBDATO7(hard00_SBDATo[7]), .SBDATO6(hard00_SBDATo[6]), .SBDATO5(hard00_SBDATo[5]), .SBDATO4(hard00_SBDATo[4]), .SBDATO3(hard00_SBDATo[3]), .SBDATO2(hard00_SBDATo[2]), .SBDATO1(hard00_SBDATo[1]), 
                .SBDATO0(hard00_SBDATo[0]), .SBACKO(hard00_SBACKO), .SPIIRQ(SPIPIRQ[0]), .SPIWKUP(SPIPWKUP[0]), .SO(SPI2_SO), .SOE(SPI2_SOoe), .MO(SPI2_MO), .MOE(SPI2_MOoe), .SCKO(SPI2_SCKo), .SCKOE(SPI2_SCKoe), .MCSNO3(SPI2_MCSNo[3]), .MCSNO2(SPI2_MCSNo[2]), .MCSNO1(SPI2_MCSNo[1]), .MCSNO0(SPI2_MCSNo[0]), .MCSNOE3(SPI2_MCSNoe[3]), 
                .MCSNOE2(SPI2_MCSNoe[2]), .MCSNOE1(SPI2_MCSNoe[1]), .MCSNOE0(SPI2_MCSNoe[0])) ; 
    SB_SPI #(.BUS_ADDR74("0b0010")) SB_SPI_INST_RT /* synthesis SPI_CLK_DIVIDER=23 */  (.SBCLKI(SBCLKi), .SBRWI(wb_we_ix), .SBSTBI(wb_stb_ix), .SBADRI7(wb_adr_ix[7]), .SBADRI6(wb_adr_ix[6]), .SBADRI5(wb_adr_ix[5]), .SBADRI4(wb_adr_ix[4]), .SBADRI3(wb_adr_ix[3]), .SBADRI2(wb_adr_ix[2]), .SBADRI1(wb_adr_ix[1]), .SBADRI0(wb_adr_ix[0]), .SBDATI7(wb_dat_ix[7]), .SBDATI6(wb_dat_ix[6]), .SBDATI5(wb_dat_ix[5]), .SBDATI4(wb_dat_ix[4]), 
                .SBDATI3(wb_dat_ix[3]), .SBDATI2(wb_dat_ix[2]), .SBDATI1(wb_dat_ix[1]), .SBDATI0(wb_dat_ix[0]), .MI(SPI1_MI), .SI(SPI1_SI), .SCKI(SPI1_SCKi), .SCSNI(SPI1_SCSNi), .SBDATO7(hard10_SBDATo[7]), .SBDATO6(hard10_SBDATo[6]), .SBDATO5(hard10_SBDATo[5]), .SBDATO4(hard10_SBDATo[4]), .SBDATO3(hard10_SBDATo[3]), .SBDATO2(hard10_SBDATo[2]), .SBDATO1(hard10_SBDATo[1]), 
                .SBDATO0(hard10_SBDATo[0]), .SBACKO(hard10_SBACKO), .SPIIRQ(SPIPIRQ[1]), .SPIWKUP(SPIPWKUP[1]), .SO(SPI1_SO), .SOE(SPI1_SOoe), .MO(SPI1_MO), .MOE(SPI1_MOoe), .SCKO(SPI1_SCKo), .SCKOE(SPI1_SCKoe), .MCSNO3(SPI1_MCSNo[3]), .MCSNO2(SPI1_MCSNo[2]), .MCSNO1(SPI1_MCSNo[1]), .MCSNO0(SPI1_MCSNo[0]), .MCSNOE3(SPI1_MCSNoe[3]), 
                .MCSNOE2(SPI1_MCSNoe[2]), .MCSNOE1(SPI1_MCSNoe[1]), .MCSNOE0(SPI1_MCSNoe[0])) ; 

Вводные параметры и есть адресация:

#(.BUS_ADDR74("0b0000"))
#(.BUS_ADDR74("0b0010"))

 

Это генератор с чистой душой создает verilog описание двух модулей. Хотя он всего 1 =(

Здесь я для примера в генераторе установил обе галочки SPI левый и правый. То есть генератор универсальный. Он всего лишь создает описание.

 

PS. Синтезировать оба SPI он не смог - выругался, что в чипе только 1 SPI. Сейчас синтезирую только 1 SPI, но поиграюсь адресами.

Боюсь он не отреагирует на это, т.к. адрес SPI это всего лишь параметр #(.BUS_ADDR74("0b0010")) =(. Остается только надеяться, что адрес существующего будет 0b0000 и он будет находиться слева...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this