Jackov 1 14 мая Опубликовано 14 мая (изменено) · Жалоба У меня в проекте есть модуль (несколько), некоторые его порты пока подключить некуда. Если их оставить неподключёнными компилятор этот модуль оптимизирует, многое оттуда выкидывает с выводом целой кучи ворнингов. Во-первых, эти ворненги очень сильно мешаются, во-вторых мне хотелось бы иметь в проекте полные, неоптимизированные, модули. В Квартусе есть очень удобная для этого штука - VirtalPin. Их можно подключить к пустым портам модуля и будет так как будто порты подключены к выводам ПЛИС и сминимизированы модули не будут, но по факту порты ни на какие выводы подключены не будут. Нужно что-то подобное и в ISE. Изменено 14 мая пользователем Jackov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 14 мая Опубликовано 14 мая · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 15 мая Опубликовано 15 мая · Жалоба 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-файл на этапе синтеза не используется же. Может какой-нибудь (*атрибут*) существует? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 15 мая Опубликовано 15 мая · Жалоба 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} *) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 18 мая Опубликовано 18 мая · Жалоба В 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. Короче что-то не сработало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 18 мая Опубликовано 18 мая · Жалоба Да, в общем то, и правильно ругнулся 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". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 23 мая Опубликовано 23 мая · Жалоба В 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; ... результатов не дали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться