RadiatoR 0 August 10, 2020 Posted August 10, 2020 · Report post Всех приветствую. В чипе есть 1 hard SPI. Он находится внизу чипа слева или справа. Как определить? Или где найти? В мануале не нашел, точнее там есть пример для чипа с двумя SPI и их расположением, а с одним нету. Я отладил железяку на icebreaker плате. Там стоит чип с двумя SPI и проблем не возникло. Сейчас делаю плату с ICE5LP1K-SG48I, в нем 1 SPI и не ясно где находится. Самого чипа на руках нет, эмпирически проверить не могу. Самое смешное, что если сгенерить проект в iceCube и в залезть в генератор SPI, то он может сгенерировать код для обоих SPI =(, не выдав предупреждений и ошибок, хотя чип в проекте указан. При этом если посмотреть на chip planner, то в нем по прежнему есть оба SPI и I2C, хотя I2C тоже всего 1. Такое ощущение, что в planner'е просто шаблонная форма. Верхние кружки - это I2C, нижние SPI. Но должно быть только 1/1. Может использовал кто? Заранее благодарю. Quote Share this post Link to post Share on other sites More sharing options...
andrew_su 1 August 11, 2020 Posted August 11, 2020 · Report post Добрый день. Согласно 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 Quote Share this post Link to post Share on other sites More sharing options...
_pv 27 August 11, 2020 Posted August 11, 2020 · Report post это не тот spi, а конфигурационный. а вообще какая разница какой из spi левый или правый? Quote Share this post Link to post Share on other sites More sharing options...
RadiatoR 0 August 11, 2020 Posted August 11, 2020 · Report post 27 minutes ago, _pv said: это не тот spi, а конфигурационный. а вообще какая разница какой из spi левый или правый? Верно, интересует не конфигурационный, а пользовательский. Дело в том, что для выбора модуля нужно обратиться к нему по разному адресу. Адрес зависит от расположения на кристалле (по крайней мере в версиях с двумя так). И второй момент - лучше располагать выводы так, чтобы они были ближе физически к модулю. Quote Share this post Link to post Share on other sites More sharing options...
StewartLittle 13 August 12, 2020 Posted August 12, 2020 · Report post А посмотрите исходник, который iCEcube2 генерирует для hardened SPI в iCE5LP1K. Если мне склероз не изменяет, то там прописывается адрес используемого аппаратного SPI (ADDR7:4). Quote Share this post Link to post Share on other sites More sharing options...
RadiatoR 0 August 12, 2020 Posted August 12, 2020 · Report post Так и есть. Помимо общей обертки генератор создает 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 и он будет находиться слева... Quote Share this post Link to post Share on other sites More sharing options...
dvlwork 0 August 20, 2020 Posted August 20, 2020 · Report post Не исключено, что физически их два, а программно ограничено одним. Quote Share this post Link to post Share on other sites More sharing options...