Понимание примитива SB_IO в Lattice ICE40

Я играю с cliffordwolf / picorv32, и у меня возникли проблемы с пониманием следующего фрагмента в picosoc (ссылка на источник):

SB_IO #(
    .PIN_TYPE(6'b 1010_01),
    .PULLUP(1'b 0)
) flash_io_buf [3:0] (
    .PACKAGE_PIN({flash_io3, flash_io2, flash_io1, flash_io0}),
    .OUTPUT_ENABLE({flash_io3_oe, flash_io2_oe, flash_io1_oe, flash_io0_oe}),
    .D_OUT_0({flash_io3_do, flash_io2_do, flash_io1_do, flash_io0_do}),
    .D_IN_0({flash_io3_di, flash_io2_di, flash_io1_di, flash_io0_di})
);

Я нашел графическое описание примитива SB_IO в технологии Lattice iCE40. документацию библиотеки, но я до сих пор не могу понять ее назначение, потому что мне слишком сложно ее интерпретировать. Есть еще один вопрос о примитиве, после прочтения которого я можно было бы предположить, что он создает какое-то двунаправленное соединение, но я не мог понять, как это связано с тем, чтобы выходной контакт был "трехсторонним".

Я был бы признателен за высокоуровневое описание эффекта ячейки SB_IO в этой конкретной конфигурации. Какой вывод подключен к какому выводу? Какие входы, а какие выходы? Какова цель создания экземпляра этой ячейки?


person nalzok    schedule 31.03.2020    source источник
comment
Единственное, что не показывает готовую корреляцию между 4 контактами Verilog и площадкой ввода-вывода SB на стр.87 PDF-файла, на который вы предоставляете ссылку, - это то, что подключено к контактам пэда (flash_io_buf [3: 0]). .PIN_TYPE описывает, как программируются мультиплексоры. Нет подтягивания, и защелки кажутся неиспользованными. Здесь есть вопрос по программированию или вы задаете вопрос об оборудовании не на том сайте?   -  person    schedule 01.04.2020
comment
Привет @ user1155120, я предполагаю, что вопрос о влиянии подсчета экземпляров ячейки является вопросом программирования? Вот предыстория на случай, если вам интересно: я только что изучил основы Verilog, но никогда не видел таких примитивов FPGA, как SB_IO. Причина, по которой я возился с этим, заключается в том, что инструктор моего курса FPGA побуждает нас участвовать в конкурсе FPGA (что имеет смысл: это был бы отличный способ научиться), и для этого мне нужно включить picosoc в свой дизайн .   -  person nalzok    schedule 01.04.2020
comment
@ user1155120 Кроме того, контакты контактной площадки flash_io_buf [3:0] здесь и далее не используются, поэтому у этого экземпляра должны быть какие-то побочные эффекты?   -  person nalzok    schedule 01.04.2020
comment
Это контакты ввода-вывода.   -  person    schedule 01.04.2020
comment
@ user1155120 Контакты ввода-вывода относятся к контактам за пределами корпуса микросхемы, верно? Я думал, что flash_io3, flash_io2, flash_io1, flash_io0 это контакты ввода-вывода, а не flash_io_buf [0:3] o_O.   -  person nalzok    schedule 01.04.2020
comment
Этот вопрос обсуждается в Meta.   -  person Cody Gray    schedule 02.04.2020


Ответы (1)


Этот экземпляр использовался, потому что в то время Yosys недостаточно хорошо поддерживал трехстороннее состояние в Verilog, теперь он поддерживает, но в целом поддержка трех состояний в инструментальных средствах FPGA не всегда заслуживает доверия.

Его можно заменить следующим универсальным Verilog, повторяющимся 4 раза от 0 до 4.

assign flash_io0 = flash_io0_oe ? flash_io0_do : 1'bz;
assign flash_io0_di = flash_io0;
person gatecat    schedule 02.04.2020
comment
Спасибо, это действительно помогло! Интересно, что такое flash_io_buf, как упоминалось выше @ user1155120. Является ли, скажем, flash_io_buf[0] псевдонимом flash_io0 после вывода / создания экземпляра? - person nalzok; 02.04.2020
comment
flash_io_buf[0] - это имя экземпляра SB_IO, оно не имеет ничего общего с проводами или контактами - person gatecat; 02.04.2020