реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как сказать синтезатору чтобы он не выкидывал регистры конвейера
ovs_pavel
сообщение Oct 8 2012, 11:36
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



День добрый. Не подскажет кто, какие опции выставить синтезатору 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.
Go to the top of the page
 
+Quote Post
Timmy
сообщение Oct 8 2012, 12:58
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Можно использовать атрибут KEEP. Что касается опций, синтезатор ведь не меняет алгоритм? Он не может просто взять и выкинуть регистр. Возможно, rg_a переехал в IO cell. Ещё XST в таких случаях любит запаковать всё в сдвиговый регистр, где-то глубоко в опциях XST запрятана настройка минимального числа последовательных регистров, при котором их можно паковать в один сдвиговый.
Go to the top of the page
 
+Quote Post
ovs_pavel
сообщение Oct 8 2012, 14:36
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Цитата(Timmy @ Oct 8 2012, 16:58) *
Можно использовать атрибут KEEP. Что касается опций, синтезатор ведь не меняет алгоритм? Он не может просто взять и выкинуть регистр. Возможно, rg_a переехал в IO cell. Ещё XST в таких случаях любит запаковать всё в сдвиговый регистр, где-то глубоко в опциях XST запрятана настройка минимального числа последовательных регистров, при котором их можно паковать в один сдвиговый.


Просто использовались два регистра, чтобы не вводить полные названия rg_a и rg_b. Часть данных бралась с rg_a и часть с rg_b. Причем rg_a был размещен в IOB'ах (были заданы констрейны в ucf - файле: INST "rg_a*" IOB = true wink.gif. Все компилилось.
Вставил дополнительный регистр rg_c, т.е. rg_a остался в IOB'ах, а данных cтали браться с rg_b и rg_c, т.е. просто задержка на такт (конвейризация). PAR айса выдал - не могу найти rg_a, т.е. выполнить констрейны ((. Полез в PlanAhead там их действительно нет.
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Oct 8 2012, 16:13
Сообщение #4


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Воспользуйтесь Sinthesys Constaint S. Его надо навешивать на net.
Детали можно найти в XST User Guide.
Go to the top of the page
 
+Quote Post
Timmy
сообщение Oct 8 2012, 17:50
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(ovs_pavel @ Oct 8 2012, 18:36) *
Просто использовались два регистра, чтобы не вводить полные названия rg_a и rg_b. Часть данных бралась с rg_a и часть с rg_b. Причем rg_a был размещен в IOB'ах (были заданы констрейны в ucf - файле: INST "rg_a*" IOB = true wink.gif. Все компилилось.
Вставил дополнительный регистр rg_c, т.е. rg_a остался в IOB'ах, а данных cтали браться с rg_b и rg_c, т.е. просто задержка на такт (конвейризация). PAR айса выдал - не могу найти rg_a, т.е. выполнить констрейны ((. Полез в PlanAhead там их действительно нет.

Это обычное дело, и потому на все имена, которые упоминаются в констрейнах, атрибут KEEP лучше навешивать заблаговременно, даже если имена ещё не выкидываются. Только внешние порты никогда не переименовываются.
Go to the top of the page
 
+Quote Post
ovs_pavel
сообщение Oct 9 2012, 04:54
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Цитата(Boris_TS @ Oct 8 2012, 20:13) *
Воспользуйтесь Sinthesys Constaint S. Его надо навешивать на net.
Детали можно найти в XST User Guide.


Что то я никак не могу найти этот констрейн (смотрю UG687. XST User Guide for Virtex-6 and Spartan-6 Devices).
Go to the top of the page
 
+Quote Post
ovs_pavel
сообщение Oct 9 2012, 06:39
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Спасибо всем. Получилось следующим образом:

(* 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.
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Oct 10 2012, 08:37
Сообщение #8


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(ovs_pavel @ Oct 9 2012, 08:54) *
Что то я никак не могу найти этот констрейн (смотрю 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 получается более предпочтительным.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 01:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016