ovs_pavel 0 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба День добрый. Не подскажет кто, какие опции выставить синтезатору ISE 12.3, чтобы он не выкидывал регистр конвейера. Упрощенный пример ниже: reg [7:0] rg_a; reg [7:0] rg_b; reg [7:0] rg_c; always @ (posedge clk) begin rg_a <= In; rg_b <=rg_a; rg_c <=rg_b; end Далее в теле проекта используется выходы регистров rg_b и rg_с. Ну синтезатор и выкидывает rg_a, а входы In подключает к rg_b. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба Можно использовать атрибут KEEP. Что касается опций, синтезатор ведь не меняет алгоритм? Он не может просто взять и выкинуть регистр. Возможно, rg_a переехал в IO cell. Ещё XST в таких случаях любит запаковать всё в сдвиговый регистр, где-то глубоко в опциях XST запрятана настройка минимального числа последовательных регистров, при котором их можно паковать в один сдвиговый. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ovs_pavel 0 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба Можно использовать атрибут KEEP. Что касается опций, синтезатор ведь не меняет алгоритм? Он не может просто взять и выкинуть регистр. Возможно, rg_a переехал в IO cell. Ещё XST в таких случаях любит запаковать всё в сдвиговый регистр, где-то глубоко в опциях XST запрятана настройка минимального числа последовательных регистров, при котором их можно паковать в один сдвиговый. Просто использовались два регистра, чтобы не вводить полные названия rg_a и rg_b. Часть данных бралась с rg_a и часть с rg_b. Причем rg_a был размещен в IOB'ах (были заданы констрейны в ucf - файле: INST "rg_a*" IOB = true ;). Все компилилось. Вставил дополнительный регистр rg_c, т.е. rg_a остался в IOB'ах, а данных cтали браться с rg_b и rg_c, т.е. просто задержка на такт (конвейризация). PAR айса выдал - не могу найти rg_a, т.е. выполнить констрейны ((. Полез в PlanAhead там их действительно нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба Воспользуйтесь Sinthesys Constaint S. Его надо навешивать на net. Детали можно найти в XST User Guide. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба Просто использовались два регистра, чтобы не вводить полные названия rg_a и rg_b. Часть данных бралась с rg_a и часть с rg_b. Причем rg_a был размещен в IOB'ах (были заданы констрейны в ucf - файле: INST "rg_a*" IOB = true ;). Все компилилось. Вставил дополнительный регистр rg_c, т.е. rg_a остался в IOB'ах, а данных cтали браться с rg_b и rg_c, т.е. просто задержка на такт (конвейризация). PAR айса выдал - не могу найти rg_a, т.е. выполнить констрейны ((. Полез в PlanAhead там их действительно нет. Это обычное дело, и потому на все имена, которые упоминаются в констрейнах, атрибут KEEP лучше навешивать заблаговременно, даже если имена ещё не выкидываются. Только внешние порты никогда не переименовываются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ovs_pavel 0 9 октября, 2012 Опубликовано 9 октября, 2012 · Жалоба Воспользуйтесь Sinthesys Constaint S. Его надо навешивать на net. Детали можно найти в XST User Guide. Что то я никак не могу найти этот констрейн (смотрю UG687. XST User Guide for Virtex-6 and Spartan-6 Devices). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ovs_pavel 0 9 октября, 2012 Опубликовано 9 октября, 2012 · Жалоба Спасибо всем. Получилось следующим образом: (* KEEP = "TRUE" *) reg [31:0] rg_a; (* KEEP = "TRUE" *) reg [31:0] rg_b; (* KEEP = "TRUE" *) reg [31:0] rg_c; Айс в этом случае ничего не убирает и в usf - файле можно вводить констрейны на размещение rg_a в IOB. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 10 октября, 2012 Опубликовано 10 октября, 2012 · Жалоба Что то я никак не могу найти этот констрейн (смотрю UG687. XST User Guide for Virtex-6 and Spartan-6 Devices).Вот, пожалуйста: XST User Guide for Virtex-6, Spartan-6, and 7 Series Devices (UG687 (v 14.1) April 24, 2012) страница 355 "The Save (S or SAVE) constraint". Для net лучше применять S, а XST и сам его истолкует правильно, и сконвертирует в подмножество необходимых MAP'у constraint'ов, навесив их на ссинтезированные instance. Т.к. при языковом описании описываются именно net, а не instance, то использование S получается более предпочтительным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться