#vhdl #vivado
#vhdl #вивадо
Вопрос:
У меня есть экземпляр сущности, у которой есть выходной порт 32 бита. Мне нужны только биты с 4 по 15, которые войдут в какой-то сигнал s_a
. Я думал, что смогу создать его таким образом, но Вивадо это не нравится:
WHATEVER: entity work.example_entity port map( o_port( 15 downto 4 ) =gt; s_a );
Я знаю, что вы можете сделать что-то аналогичное с портами in, и Vivado, похоже, согласен с этим, пока я устанавливаю все биты примерно так:
WHATEVER2: entity work.other_entity port map( i_port( 7 downto 4 ) =gt; ( others =gt; '0' ), i_port( 3 downto 0 ) =gt; s_b );
где i_port
находится входящий порт и s_b
какой-либо сигнал соответствующего размера и типа.
Есть ли какой-то способ извлечь только подмножество битов из выходного порта без подключения всего порта к сигналу полной ширины и извлечения битов из него?
Комментарии:
1. IEEE Std 1076-2008 6.5.6.3 Положения о портах «… Это ошибка, если порт режима in не подключен (см. 6.5.6.3) или не связан (см. 6.5.7.3), если его объявление не содержит выражения по умолчанию (см. 6.5.2). Это ошибка, если порт любого режима, отличного от in , не подключен или не связан, а его тип является неограниченным или частично ограниченным составным типом. Это ошибка, если некоторые из подэлементов составного формального порта подключены, а другие либо не подключены, либо не связаны». Ответ …нет. (Это согласуется с вашим опытом и двумя примерами.)
2. что значит «не нравится»? Это не очень конкретная ошибка. Помогает ли
o_port(3 downto 0 ) =gt; open,
покрытие неиспользуемых битов?3. @user_1818839 Ошибка
not all partial formals of 'o_port' have actual
в следующем . Я попробуюopen
.4. @aquaticapetheory вот что я подумал, и «open» должен позаботиться об этом. VHDL изо всех сил старается предупредить о таких пустяках, потому что они являются вероятными ошибками, и «открыть» говорит: «Я хотел это сделать» (точно так же, как мой кот, когда он падает с подоконника).