Перейти к содержанию
    

Аналог VirtalPin в ISE

У меня в проекте есть модуль (несколько), некоторые его порты пока подключить некуда. Если их оставить неподключёнными компилятор этот модуль оптимизирует, многое оттуда выкидывает с выводом целой кучи ворнингов. Во-первых, эти ворненги очень сильно мешаются, во-вторых мне хотелось бы иметь в проекте полные, неоптимизированные, модули.

В Квартусе есть очень удобная для этого штука - VirtalPin. Их можно подключить к пустым портам модуля и будет так как будто порты подключены к выводам ПЛИС и сминимизированы модули не будут, но по факту порты ни на какие выводы подключены не будут.

Нужно что-то подобное и в ISE.

Изменено пользователем Jackov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. У Xilinx в ISE ChipScope есть VIO (Virtual Input/Output) - см. ChipScope Pro Software and Cores User Guide UG029 (chipscope_pro_sw_cores_ug029.pdf).
2. Может быть вам поможет constraint 'S' - см. Constraints Guide UG625 (cgd.pdf) для ISE.
3. Может быть есть ещё какой-либо путь. Для моих нужд хватало п.2.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 часа назад, Beby сказал:

1. У Xilinx в ISE ChipScope есть VIO (Virtual Input/Output) - см. ChipScope Pro Software and Cores User Guide UG029 (chipscope_pro_sw_cores_ug029.pdf).

Сейчас использую сдвиговый регистр. Есть две незадействованные ноги, одну подключаю к клоку регистра, другую к последовательному входу данных, разряды регистра подключаю к неиспользуемым портам модулей. Но это, что и VIO, тоже костыли.

22 часа назад, Beby сказал:

2. Может быть вам поможет constraint 'S' - см. Constraints Guide UG625 (cgd.pdf) для ISE.

Здоровый документ, на какой странице смотреть? Да и поможет ли? UCF-файл на этапе синтеза не используется же.

Может какой-нибудь (*атрибут*) существует?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Jackov said:

Сейчас использую сдвиговый регистр. Есть две незадействованные ноги, одну подключаю к клоку регистра, другую к последовательному входу данных, разряды регистра подключаю к неиспользуемым портам модулей. Но это, что и VIO, тоже костыли.

Иногда XST (и прочие синтезаторы) занимаются нежелательной оптимизацией исходя их того, что схема подключена к сдвиговому регистру (сам попадал на токое в аналогичной ситуации).

 

1 hour ago, Jackov said:

Здоровый документ, на какой странице смотреть? Да и поможет ли? UCF-файл на этапе синтеза не используется же.

Может какой-нибудь (*атрибут*) существует?

В оглавлении ищем "Save Net Flag" и внимательно читаем. В подразделе Syntax Examples можно увидеть:

Quote

Verilog Syntax
Place the Verilog constraint immediately before the module or instantiation.
Specify the Verilog constraint as follows:
(* S = {YES|NO|TRUE|FALSE} *)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 15.05.2024 в 21:59, Beby сказал:

Иногда XST (и прочие синтезаторы) занимаются нежелательной оптимизацией исходя их того, что схема подключена к сдвиговому регистру

Странно, конечно, не должно быть такого. Он же не знает какая информация будет загружаться в сдвиговый регистр, а значит каждый разряд является уникальным источником.

 

В 15.05.2024 в 21:59, Beby сказал:

В оглавлении ищем "Save Net Flag" и внимательно читаем.

Сделал так:

(* S = YES *) CT #(4) CTBits(.Q(), .R(1'd0), .L(1'd0), .INC(1'd0), .D(4'dx), .C(1'd0), .aR(1'd0));

В ответ он ругается:

Цитата

<YES> is not declared.

Догадался написать в кавычках:

(* S = "YES" *)  ...

Ошибки уже нет, но получаю ворнинг:

Цитата

All outputs of instance <CTBits> of block <CT> are unconnected in block <Top>. Underlying logic will be removed.

Короче что-то не сработало.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

  Да, в общем то, и правильно ругнулся ISE.
Пожалуйста, внимательнее читайте документацию:

Quote

Save Net Flag
  The Save Net Flag (SAVE NET FLAG) constraint:
  • Is a basic mapping constraint.
  • When attached to nets or signals, affects mapping, placement, and routing by preventing the removal of unconnected signals.
  • Prevents the removal of loadless or driverless signals.
    – For loadless signals, Save Net Flag acts as a dummy OBUF load connected to the signal.
    – For driverless signals, Save Net Flag acts as a dummy IBUF driver connected to the signal.
  • Can be abbreviated as S NET FLAG.
  If you do not have Save Net Flag on a net, any signal that cannot be observed or controlled via a path to an I/O primitive is removed.
  Save Net Flag may prevent the trimming of logic connected to the signal.

В выделенных местах указано, что constraint 'S' (или 'SAVE') работает для цепей или сигналов.
Вы же пытались прицепить его к модулю - и, естественно, он не сработал.

Судя по всему, в Constraints Guide UG625 (v. 14.5) в Virilog описании присутствует ошибка, очень похожая на кривой Copy+Paste, т.к. для остальных 3-х видов примеров фигурируют только net или signal:

Quote

Syntax Examples
  The syntax examples in this section show how to use this constraint with particular tools or methods. If a tool or method is not listed, you cannot use this constraint with it.

Schematic Syntax
• Attach to a net or signal
• Attribute Name
  SAVE NET FLAG
• Attribute Values
  – TRUE
  – FALSE

VHDL Syntax
Declare the VHDL constraint as follows:
attribute S: string;
Specify the VHDL constraint as follows:
attribute S of signal_name : signal is ”{YES|NO|TRUE|FALSE }”;

Verilog Syntax
Place the Verilog constraint immediately before the module or instantiation.
Specify the Verilog constraint as follows:
(* S = {YES|NO|TRUE|FALSE} *)

UCF and NCF Syntax
NET $SIG_9 S;
Do not remove the net or signal named $SIG_9.

XCF Syntax
BEGIN MODEL entity_name
  NET "signal_name " s=true;
END;

С другой стороны, в XST User Guide for Virtex-4, Virtex-5, Spartan-3, and Newer CPLD Devices UG627 (v 14.5) March 20, 2013 говорится, что constraint 'S' можно и на net, и на block цеплять. Примеров тоже не привели. Возможно, на стадии Synthesis оно работает и на module, и на net, но на стадии MAP только для net.

Я пользовался для "loadless signals" при VHDL описании - ни разу не подводило: Synthesis переживали все сигналы, а дальше мне было и не нужно - уже на MAP к нимм стыковался ChopScope ILA. Когда некоторые сигналы забывали подключить в ILA, блоки их порождающие так и продолжали оставаться в проекте с их было хорошо видно в FPGA Editor'е. Естественно, данная ситуация порождала Warning'и о loadless signals на стадии P&R и Bitgen.
Обращу внимание на такой момент: практически у каждого семейства свой синтезатор, со своими заморочками. Столкнулся с этим при переходе от Virtex-5 к Virtex-6 - пришлось достаточно много править VHDL кода. Ну и когда пришлось в старое изделие на Virtex-6 портировать код отлаженный для Virtex-7/Kintex-7 тоже кое-что вылазило - делали даже запрос Xilinx на устранение ошибок в синтезаторе.
У меня constraint 'S' (прицепленный к "loadless signals") при VHDL описании работал без нареканий в Spartan-3A/6, Virtex-5/6/7 и Kintex-7.

Попробуйте прицепить constraint 'S' ко всем net, которые у вас "loadless signals" или "driverless signals".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 18.05.2024 в 13:03, Beby сказал:

В выделенных местах указано, что constraint 'S' (или 'SAVE') работает для цепей или сигналов.

В 18.05.2024 в 13:03, Beby сказал:

С другой стороны, в XST User Guide for Virtex-4, Virtex-5, Spartan-3, and Newer CPLD Devices UG627 (v 14.5) March 20, 2013 говорится, что constraint 'S' можно и на net, и на block цеплять. Примеров тоже не привели. Возможно, на стадии Synthesis оно работает и на module, и на net, но на стадии MAP только для net.

Мда, в UG625 есть противоречие, сначала пишут

Цитата

Applicable Elements
• Nets
• Signals

потом

Цитата

Verilog Syntax
Place the Verilog constraint immediately before the module or instantiation.
Specify the Verilog constraint as follows:
(* S = {YES|NO|TRUE|FALSE} *)

 

 

В 18.05.2024 в 13:03, Beby сказал:

Попробуйте прицепить constraint 'S' ко всем net, которые у вас "loadless signals" или "driverless signals".

Перебрал все варианты, но ни

(* S = "YES" *) CT #(4) CTBits(.Q(), .R(1'd0), .L(1'd0), .INC(1'd0), .D(4'dx), .C(1'd0), .aR(1'd0));

ни

(* S = "YES" *) wire [3:0]Q;

(* S = "YES" *) wire R, L, INC, C, аR;

CT #(4) CTBits(.Q(Q), .R(R), .L(L), .INC(INC), .D(4'dx), .C(C), .aR(aR));

ни запись в UCF-файле

...

NET Q S;

...

результатов не дали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...