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

 
 
6 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Правильное использование locked у PLL
Jackov
сообщение Jan 22 2015, 18:27
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Приветствую!

Имеется Cyclone4, а в нём имеется PLL.
Как известно PLL на рабочий режим выходит не сразу, сразу после запуска она выдаёт нестабильную частоту.
Тактировать схемы такой нестабильной частотой, понятное дело, нельзя - могут сбойнуть. Для этого в PLL предусмотрен специальный выход "locked". Доподлинно неизвестно синхронизирован ли этот выход с тактовой частотой выдаваемой PLL, или нет. Потому встаёт вопрос: как правильно использовать этот выход.
Я предлагаю такую схему:
Прикрепленное изображение

На Verilog-е выглядит так:
Код
module M1(
    ....................................
    (*chip_pin = "Y2"*) input inMHz50);


    wire Locked33_6, MHz33_6_;
    PLL1 PLL1(.c0(MHz33_6_), .locked(Locked33_6), .inclk0(inMHz50));
    wire Enable33_6Q;
    DFF Enable33_6(.q(Enable33_6Q), .d(Locked33_6), .clk(MHz33_6_), .clrn(1'd1), .prn(1'd1));
    wire MHz33_6;
    LCELL Cell(.out(MHz33_6), .in(Enable33_6Q & MHz33_6_));

    .......ля-ля-ля тополя.......
endmodule

LCELL нужен только для того чтобы на него сослаться в констрейнах, по другому я не сумел.

Сами констрейны выглядят так:
Код
derive_clock_uncertainty

#тактовая частота с генератора 50МГц
create_clock -period 50MHz -name {inMHz50} [get_ports {inMHz50}]

#тактовая частота с PLL
create_generated_clock -name MHz33_6_  -source [get_ports {inMHz50}] [get_pins {PLL1|altpll_component|auto_generated|pll1|clk[0]}] -divide_by 5 -multiply_by 7 -duty_cycle 70.00
create_generated_clock -name MHz33_6   -source [get_pins {PLL1|altpll_component|auto_generated|pll1|clk[0]}] [get_nets {Cell}] -invert

То что в названии частоты присутствует 33,6 МГц - это пережиток прошлого, сейчас там 70.
В последней строчке я и ссылаюсь на LCELL, "-invert" присутствует из-за того что компилятор по каким-то своим причинам инвертирует сигнал после LCELL.

Вопроса, собственно, два: Правильно ли использовать выход "locked" подобным образом? И если правильно, правильно ли заданы констрейны?

Сообщение отредактировал Jackov - Jan 22 2015, 18:28
Go to the top of the page
 
+Quote Post
Opex
сообщение Jan 23 2015, 08:46
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 13-03-11
Из: Екатеринбург
Пользователь №: 63 574



У xilinx есть клоковые буферы со входом enable, у альтеры, наверное, тоже есть подобное.
Можно использовать locked в качестве сигнала сброса.
Всякие хитрые манипуляции с тактовой, мне кажется, до добра не доведут..

И еще, обычно трассы для тактовых сигналов в плисах отделены от обычной логики, элемента "И" может и не оказаться, тогда клок разведется через логику, и опять в клоки. Такой каши лучше избегать.

Сообщение отредактировал Opex - Jan 23 2015, 09:00
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Jan 23 2015, 09:07
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



to Jackov Что мешает использовать этот сигнал в качестве сброса(инверсный)? Что на altera, что на xilinx я так и делаю.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 23 2015, 09:13
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(bogaev_roman @ Jan 23 2015, 12:07) *
to Jackov Что мешает использовать этот сигнал в качестве сброса(инверсный)? Что на altera, что на xilinx я так и делаю.

И я.
Код
module Reset_m (
  input    bit        res_ext,    //!< External reset (knob, port)
  input    bit        no_lock,    //!< PLL no locked reset
  input    bit        res_cmd,    //!< MCU command reset
  input    bit        clks,        //!< Slow Clock
output    bit        res_int        //!< Internal wide device reset
);
  bit            rest;        //!< Reset start
  assign rest = res_ext || no_lock || res_cmd;
  
  bit        [1:0]    ress;        //!< Reset sequence
  always_ff @(posedge rest, posedge clks) begin
    if (rest) ress <= '1;
    else ress <= {ress[0], 1'b0};
  end
  assign res_int = ress[1];

endmodule : Reset_m
Go to the top of the page
 
+Quote Post
Jackov
сообщение Jan 23 2015, 16:22
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(Opex @ Jan 23 2015, 11:46) *
У xilinx есть клоковые буферы со входом enable, у альтеры, наверное, тоже есть подобное.
Ммм... не совсем понял.

Цитата(Opex @ Jan 23 2015, 11:46) *
Всякие хитрые манипуляции с тактовой, мне кажется, до добра не доведут..
Согласен, сам такое не люблю. Но я же немножко. rolleyes.gif
Как я думаю, дребезгов, гонок и прочих гличей быть не должно.

Цитата(Opex @ Jan 23 2015, 11:46) *
И еще, обычно трассы для тактовых сигналов в плисах отделены от обычной логики, элемента "И" может и не оказаться, тогда клок разведется через логику, и опять в клоки. Такой каши лучше избегать.
Забыл написать, этот LCELL подключил к глобальному клоку, судя по Чип Планеру, действительно подключился.

Цитата(Opex @ Jan 23 2015, 11:46) *
Можно использовать locked в качестве сигнала сброса.
Цитата(bogaev_roman @ Jan 23 2015, 12:07) *
to Jackov Что мешает использовать этот сигнал в качестве сброса(инверсный)? Что на altera, что на xilinx я так и делаю.
Цитата(ViKo @ Jan 23 2015, 12:13) *
И я.
Не хотелось бы. Это до каждого триггера пойдёт линия сброса - усложняет трассировку, а если сброс делать синхронным то ещё и логику. Конечно, можно не каждый триггер сбрасывать, а только нужный, но это надо думать какие нужно, какие нет, а думать над этим желания нет, т.к. у меня в проекте сброс вообще не предусмотрен, ПЛИСка в устройстве одна и сбрасывать её попросту некому, да и ненужно это - запустилась и работает.
Go to the top of the page
 
+Quote Post
Hose
сообщение Jan 23 2015, 17:10
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 82
Регистрация: 7-01-15
Пользователь №: 84 450



Яков, начните с изучения плл. Он красиво нарисован в описании на семейство... И есть у меня такое подозрение, что там уже реализовано отключение выхода при отсутствии захвата. Если не найдете, или нет такой функции, то не стоит делать, поскольку захват плл - штука условная и аналоговая, учитывая ширину петли альтеровского плл. Устанете потом искать куда пропадают такты.
Go to the top of the page
 
+Quote Post
Opex
сообщение Jan 23 2015, 17:18
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 13-03-11
Из: Екатеринбург
Пользователь №: 63 574



Цитата(Jackov @ Jan 23 2015, 21:22) *
Ммм... не совсем понял.


У альтеры вон есть какой-то Clock Control Block, и у него есть вход enable, 0 подать, и не будет выходить клок.

Цитата(Jackov @ Jan 23 2015, 21:22) *
Не хотелось бы. Это до каждого триггера пойдёт линия сброса - усложняет трассировку, а если сброс делать синхронным то ещё и логику. Конечно, можно не каждый триггер сбрасывать, а только нужный, но это надо думать какие нужно, какие нет, а думать над этим желания нет, т.к. у меня в проекте сброс вообще не предусмотрен, ПЛИСка в устройстве одна и сбрасывать её попросту некому, да и ненужно это - запустилась и работает.


Вы вручную что ли все разводить собираетесь?
А кто без ресета все в нужное начальное состояние устанавливает?

Go to the top of the page
 
+Quote Post
SM
сообщение Jan 23 2015, 17:51
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Jackov @ Jan 23 2015, 19:22) *
Не хотелось бы. Это до каждого триггера пойдёт линия сброса - усложняет трассировку,

Это, с какого перепуга то? У Вас и так резет обязан быть. Вот к нему и примешать lock.
Go to the top of the page
 
+Quote Post
DuHast
сообщение Jan 23 2015, 18:36
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797



Только меня смущает, что на MHz33_6 не будет ни какой частоты?
Go to the top of the page
 
+Quote Post
Jackov
сообщение Jan 23 2015, 18:40
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(Hose @ Jan 23 2015, 20:10) *
Яков, начните с изучения плл. Он красиво нарисован в описании на семейство... И есть у меня такое подозрение, что там уже реализовано отключение выхода при отсутствии захвата. Если не найдете, или нет такой функции, то не стоит делать, поскольку захват плл - штука условная и аналоговая, учитывая ширину петли альтеровского плл. Устанете потом искать куда пропадают такты.
Что я могу сказать? Смотрел осциллографом, когда этот locked переходит в 1 частота к этому времени действительно стабилизируется. А без него схема сбоит.

Цитата(Opex @ Jan 23 2015, 20:18) *
У альтеры вон есть какой-то Clock Control Block, и у него есть вход enable, 0 подать, и не будет выходить клок.
Ага, спасибо за наводку, посмотрю.

Цитата(Opex @ Jan 23 2015, 20:18) *
Вы вручную что ли все разводить собираетесь?
Цитата(SM @ Jan 23 2015, 20:51) *
Это, с какого перепуга то?
Я, конечно, утверждать не берусь, но рассуждая логически, чем сложнее трассировка, тем хуже тайменги, а у меня и так констрейны с натяжкой сходятся.
Хотя если для асинхронного сброса есть специально выделенная сеть, как для клоков, тогда да, тогда усложнить не должно.

Цитата(Opex @ Jan 23 2015, 20:18) *
А кто без ресета все в нужное начальное состояние устанавливает?
Цитата(SM @ Jan 23 2015, 20:51) *
У Вас и так резет обязан быть. Вот к нему и примешать lock.
Ну почему же обязан? Кто ПЛИСку ресетить будет? Некому её ресетить. Я не знаю как у Хилых, но Альтера гарантирует при старте нулевые состояния на всех триггерах.

Цитата(DuHast @ Jan 23 2015, 21:36) *
Только меня смущает, что на MHz33_6 не будет ни какой частоты?
Она там есть, только 70 Мгц - имена старые остались.
Go to the top of the page
 
+Quote Post
DuHast
сообщение Jan 23 2015, 18:43
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797



Цитата(Jackov @ Jan 23 2015, 21:40) *
Она там есть, только 70 Мгц - имена старые остались.

У Вас
MHz33_6 = locked AND (locked задержанный на такт)
откуда там клок?
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 23 2015, 18:52
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Jackov @ Jan 23 2015, 21:40) *
Хотя если для асинхронного сброса есть специально выделенная сеть, как для клоков, тогда да, тогда усложнить не должно.

Именно так. Тем более, что домешивание LOCK к и так имеющемуся резету, добавит лишь один логический элемент во всю схему, никак более ее не изменив.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 23 2015, 19:00
Сообщение #13


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Вижу в Мегавизарде Альтеры Enable self-reset on loss lock. Отметить галкой и забыть про сбои.
Go to the top of the page
 
+Quote Post
Jackov
сообщение Jan 23 2015, 19:08
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(DuHast @ Jan 23 2015, 21:43) *
У Вас
MHz33_6 = locked AND (locked задержанный на такт)
откуда там клок?

Да, картинку криво нарисовал, верхний вход элемента И должен быть подключён к клоку от PLL.
Go to the top of the page
 
+Quote Post
Jackov
сообщение Jan 26 2015, 14:58
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(ViKo @ Jan 23 2015, 22:00) *
Вижу в Мегавизарде Альтеры Enable self-reset on loss lock. Отметить галкой и забыть про сбои.
Посмотрел, это не то.

Цитата(SM @ Jan 23 2015, 21:52) *
Именно так. Тем более, что домешивание LOCK к и так имеющемуся резету, добавит лишь один логический элемент во всю схему, никак более ее не изменив.
Нет желания возиться с этими сбросами, хотелось бы обойтись малой кровью.

Цитата(Opex @ Jan 23 2015, 20:18) *
У альтеры вон есть какой-то Clock Control Block, и у него есть вход enable, 0 подать, и не будет выходить клок.
Да, нашёл:
Прикрепленное изображение

Пожалуй остановлюсь на этом варианте. Завёл locked с PLL на вход разрешения напрямую, надеюсь пичёк в начале не проскочит.
Go to the top of the page
 
+Quote Post
Opex
сообщение Jan 26 2015, 15:18
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 13-03-11
Из: Екатеринбург
Пользователь №: 63 574



Xilinx, кстати, не рекомендует использовать такое отключение клока, а вместо этого использовать входы CE.

Xilinx® recommends that you use the CLB clock enable pin instead of gated clocks.
Gated clocks can cause glitches, increased clock delay, clock skew, and other undesirable
effects. Using clock enable saves clock resources, and can improve timing
characteristic and analysis of the design.
If you want to use a gated clock for power reduction, most FPGA devices now have a
clock enabled global buffer resource called BUFGCE. However, a clock enable is still the
preferred method to reduce or stop the clock to portions of the design.

Сообщение отредактировал Opex - Jan 26 2015, 15:18
Go to the top of the page
 
+Quote Post
Jackov
сообщение Jan 29 2015, 14:49
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(Opex @ Jan 26 2015, 18:18) *
а вместо этого использовать входы CE.

Это где они находятся?
Go to the top of the page
 
+Quote Post
Opex
сообщение Jan 29 2015, 15:24
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 13-03-11
Из: Екатеринбург
Пользователь №: 63 574



В триггерах всяких, и т.д.
Просто рекомендуется писать

if (enable) begin
...
end

если нужна отключаемая часть схемы, а что и как там конкретно отключится - среда сама разберется.
Почти то же самое, что и ресет, только просто на паузу ставится. Поддерживается аппаратно, дополнительных ресурсов не потребует, трассировку дополнительно не усложнит.
Go to the top of the page
 
+Quote Post
Jackov
сообщение Jan 29 2015, 19:06
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(Opex @ Jan 29 2015, 18:24) *
if (enable) begin
...
end

Обратно не понял. Если так написать, то это получится обыкновенный DV-триггер на базе D-триггера плисочного, и эта DV логика потребует ресурсов.
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 29 2015, 19:27
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Jackov @ Jan 29 2015, 22:06) *
DV-триггер на базе D-триггера плисочного,


Что такое DV-триггер?

А это синтезируется, скорее всего, в подачу сигнала "enable" на вход CE "обычного плисочного триггера", а на вход его данных будет подано то, что внутри этого условия описано.
Go to the top of the page
 
+Quote Post
Jackov
сообщение Jan 29 2015, 20:36
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(SM @ Jan 29 2015, 22:27) *
Что такое DV-триггер?
Если V == 1, триггер работает как обычный D, если V == 0, хранит своё состояние. Как-то так:
Прикрепленное изображение


Цитата(SM @ Jan 29 2015, 22:27) *
А это синтезируется, скорее всего, в подачу сигнала "enable" на вход CE "обычного плисочного триггера", а на вход его данных будет подано то, что внутри этого условия описано.
CE это который вот этот?
Прикрепленное изображение

Кстати да, этот вход давно мне покоя не даёт. Где-то слышал или читал, что это разрешение клока. Но это разрешение надо подавать синхронно клоку или необязательно? И как к нему достучатся из верилога? Что-то мне подсказывает, что одним таким условием не обойдёшься, скорее всего надо ещё и настройки компилятора крутить.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 29 2015, 20:50
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Jackov @ Jan 29 2015, 23:36) *
Кстати да, этот вход давно мне покоя не даёт. Где-то слышал или читал, что это разрешение клока. Но это разрешение надо подавать синхронно клоку или необязательно? И как к нему достучатся из верилога? Что-то мне подсказывает, что одним таким условием не обойдёшься, скорее всего надо ещё и настройки компилятора крутить.

Достучаться, как и написано выше
Код
always@(posedge clk)begin
    if(en) q <= d;
end

Go to the top of the page
 
+Quote Post
Krys
сообщение Feb 2 2015, 08:04
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(Opex @ Jan 26 2015, 21:18) *
Xilinx, кстати, не рекомендует использовать такое отключение клока, а вместо этого использовать входы CE.
CODE

Xilinx® recommends that you use the CLB clock enable pin instead of gated clocks.
Gated clocks can cause glitches, increased clock delay, clock skew, and other undesirable
effects. Using clock enable saves clock resources, and can improve timing
characteristic and analysis of the design.
If you want to use a gated clock for power reduction, most FPGA devices now have a
clock enabled global buffer resource called BUFGCE. However, a clock enable is still the
preferred method to reduce or stop the clock to portions of the design.

Судя из приведённого текста (к стати, дайте плиз линк на исходник), наоборот, хилинх рекомендует использовать именно такой глобальный тактовый буфер с входом разрешения.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 2 2015, 08:34
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Jackov @ Jan 29 2015, 23:36) *
Кстати да, этот вход давно мне покоя не даёт. Где-то слышал или читал, что это разрешение клока. Но это разрешение надо подавать синхронно клоку или необязательно? И как к нему достучатся из верилога? Что-то мне подсказывает, что одним таким условием не обойдёшься, скорее всего надо ещё и настройки компилятора крутить.


Да, подавать надо с соблюдением Tsu и Th, но это проследит сам разводчик. Как достучаться - установить этот триггер в виде примитива (модуля) (для LatticeXP2, например, так - FD1P3AY ff_inst (.D(data), .SP(en), .CK(clk), .Q(data_out) ). Название примитива и имена портов следует смотреть в хелпе на конкретное семейство ПЛИС. Так как, используя условие в верилоге, синтезатор заведет его на CE только в том случае, если это будет выгоднее других способов по взвешенной оценке всех критериев оптимизации. Для того же Lattice, например, оно начинает пользоваться CE тогда, когда достаточно много триггеров его использует, так как CE, как и резеты, могут быть подключены к вторичным глобальным линиям, которые экономят ресурс разводки для сильно разветвленных сигналов.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 2 2015, 08:36
Сообщение #25


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Точно так же, как и подавать данные на D вход.
Могу даже предположить, что CE на самом деле не затрагивает тактовый сигнал никак, а манипулирует именно с данными. Можно влезть в структуру триггера и разобраться.
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 2 2015, 08:46
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(ViKo @ Feb 2 2015, 11:36) *
Можно влезть в структуру триггера и разобраться.

В среднестатистическом триггере затрагивает именно клок. Так как один элемент 2И-НЕ, нужный для реализации CE по клоку, это 4 транзистора, а 2-2И-ИЛИ + 1 инвертор, что надо для реализации по данным, аж считать лень сколько.... (на вскидку где-то 14 штук)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 2 2015, 09:01
Сообщение #27


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Книжка есть - Пухальский, Новосельцева. Цифровые устройства.
Там можно почитать, что да как.
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 2 2015, 09:03
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(ViKo @ Feb 2 2015, 12:01) *
Там можно почитать, что да как.

Есть куда более точные источники - например SPICE модели стандартных ячеек из технологических библиотек. Если не лень читать схему в виде SPICE описания, я выложу. У меня есть в запасе и те, где клок отключают, и где данные коммутируют аналоговыми ключами, первых больше, чем вторых.

PS
Хотя, извините, нет, не выложу. NDA, черт бы его побрал.
Go to the top of the page
 
+Quote Post
Opex
сообщение Feb 2 2015, 12:28
Сообщение #29


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 13-03-11
Из: Екатеринбург
Пользователь №: 63 574



Цитата(Krys @ Feb 2 2015, 13:04) *
Судя из приведённого текста (к стати, дайте плиз линк на исходник), наоборот, хилинх рекомендует использовать именно такой глобальный тактовый буфер с входом разрешения.


Вы прочитали невнимательно.
ug626 - Synthesis and Simulation Design Guide.

Go to the top of the page
 
+Quote Post
Jackov
сообщение Feb 2 2015, 16:27
Сообщение #30


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(SM @ Feb 2 2015, 11:34) *
Как достучаться - установить этот триггер в виде примитива (модуля)
Проблематично, слишком много таких триггеров.
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 2 2015, 16:45
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Jackov @ Feb 2 2015, 19:27) *
Проблематично, слишком много таких триггеров.

А Вам зачем об этом думать? Синтезатор что ли что-то куда-то впихнуть не может?

Если их много, их можно в цикле "for generate" расставить... например...
Go to the top of the page
 
+Quote Post
Jackov
сообщение Feb 2 2015, 18:21
Сообщение #32


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(SM @ Feb 2 2015, 19:45) *
А Вам зачем об этом думать? Синтезатор что ли что-то куда-то впихнуть не может?

Если их много, их можно в цикле "for generate" расставить... например...

Видимо я чего-то недопонимаю.
Стоит задача заблокировать работу схемы в момент когда ПЛЛ выдаёт нестабильную частоту. Для этого вывод lock у ПЛЛ заводим на вход СЕ триггерам, притом всем (можно не всем, а только критичным) триггерам в схеме, ибо все триггеры должны быть заблокированы. И вот не совсем понято как это написать. Приходит на ум способ описания асинхронного сброса
Код
always @(posedge CLK or posedge aReset)
begin
    if(aReset)
    begin    Q = 1'd0; end
        else begin Q = D; end
end

Только вместо aReset должен быть этот самый СЕ, но как я разумею в Верилоге такого нет.
А как через generate организовать, чёт не соображу.
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 2 2015, 18:35
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Извращение какое. Зачем его разводить по всей схеме? Пустите весь клок через него, используя элемент навроде DCS у Lattice ( стр. 19-20 в документе ), если уж так приспичит. Хотя, самое правильное, пускать его именно на асинхронный резет вместе с общим резетом, так как, при сбое, lock может пропасть уже после того, как сам клок сбойнет. Детектор lock-а не умеет предугадывать сбои. Хотя я за все время ни разу не видел такое вживую, чтобы лок пропадал при стабильном входном клоке.
Go to the top of the page
 
+Quote Post
Krys
сообщение Feb 3 2015, 03:36
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(Opex @ Feb 2 2015, 18:28) *
Вы прочитали невнимательно.
очень внимательно. Написано: не используйте гейтед клок. Но если всё же надо, то используйте глобальный буфер с разрешением. Глобальный буфер с разрешением - не совсем гейтед клок.


Цитата(Jackov @ Feb 3 2015, 00:21) *
Только вместо aReset должен быть этот самый СЕ, но как я разумею в Верилоге такого нет.
Откройте тот самый документ от Opex: http://www.xilinx.com/support/documentatio...inx14_7/sim.pdf Стр. 62, там один в один Ваш код. Ну и что, что название сброс, а не разрешение? Для машины нет разницы, как Вы его назвали.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Opex
сообщение Feb 3 2015, 08:57
Сообщение #35


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 13-03-11
Из: Екатеринбург
Пользователь №: 63 574



Цитата(Krys @ Feb 3 2015, 08:36) *
очень внимательно. Написано: не используйте гейтед клок. Но если всё же надо, то используйте глобальный буфер с разрешением. Глобальный буфер с разрешением - не совсем гейтед клок.


The BUFGCE primitive creates an enabled clock buffer using the BUFGMUX select mechanism.
BUFGCE is a global clock buffer with a single gated input.

...most FPGA devices now have a clock enabled global buffer resource called BUFGCE.
Тот самый глобальный буфер с разрешением. А дальше
However, a clock enable is still the preferred method to reduce or stop the clock to portions of the design.
Противопоставление СЕ этому буферу.

Go to the top of the page
 
+Quote Post
Krys
сообщение Feb 3 2015, 09:41
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Это всё понятно. Однако просто гейтед клок в их понимании - это когда тактовая стробируется прямо на обычных лутах. Это страшно, и чтобы было не так страшно они советуют ставить глобальный буфер с разрешением.
Ну а фраза
Цитата
a clock enable is still the preferred method
- тут есть слово предпочтительный, но не значит же, что mandatory. Т.е. кто разобраться сам не может - ему подсказывают, что раз не можете, тогда не парьтесь, а поверьте нам. Но кто может разобраться - тот уж сам выберет, что ему надо. preferred - это не категорично.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Opex
сообщение Feb 3 2015, 15:02
Сообщение #37


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 13-03-11
Из: Екатеринбург
Пользователь №: 63 574



Советуем использовать одно, но лучше используйте другое?
Я, наверное, еще не очень понимаю их хитрую индийскую логику laugh.gif
Go to the top of the page
 
+Quote Post
Jackov
сообщение Feb 3 2015, 17:41
Сообщение #38


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(Krys @ Feb 3 2015, 06:36) *
там один в один Ваш код.
Не совсем, у меня в always-е два сигнала фигурируют, там один. Попробую завтра так сделать, отпишусь что получилось.
Go to the top of the page
 
+Quote Post
Krys
сообщение Feb 4 2015, 03:09
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(Opex @ Feb 3 2015, 21:02) *
Советуем использовать одно, но лучше используйте другое?
Я, наверное, еще не очень понимаю их хитрую индийскую логику :laugh:
Вам что, надо выкрутиться любой ценой? Или в каком-то информационном состязании победить, закрыв глаза на всё?

Я освежу историю, с чего всё началось.

Был совет использовать глобальный буфер с разрешением.
Вы сказали, что так делать не рекомендуется, приведя фрагмент текста на английском, где сказано, что не рекомендуется гейтед клок, а вместо этого лучше глобальный буфер с разрешением.
Я возразил, что наоборот рекомендуется.
И тут Вы начали выкручиваться.

Моё понимание того фрагмента на английском: "гейтед клок не рекомендуется, лучше вместо него глобальный буфер с разрешением (не являющийся в чистом виде тем, что они понимают под гейтед клок). Но предпочтительным остаётся использование CE в каждом триггере".
И ещё раз: "предпочтительно CE, но и глобальный буфер вполне пойдёт вместо чистого гейтед клока. Вот гейтед клок - тут уж точно лучше не использовать". Что значит "предпочтительно"? Это может значить, например, что с весовым коэффициентом 51% предпочтительно CE, но во многих случаях (например 49%) удобнее глобальный буфер с разрешением. Так что тут разработчик должен оценить все обстоятельства и принять решение, одно из двух, оба не возбраняются. Если он не в состоянии принять решение - то тогда ему говорят предпочтительно CE.

Итого: на исходный вопрос можно ли использовать глобальный буфер с разрешением ответ - вполне, и это следует в частности из того текста на английском.

Цитата(Jackov @ Feb 3 2015, 23:41) *
Не совсем, у меня в always-е два сигнала фигурируют, там один
Ну да, у Вас асинхронный сброс, не вчитался. Просто сотрите его из олвейза ))) Будет сброс синхронный, а засинтезируется он как клок енэйбл. И наверняка (потом покажете кусок схемы) он ляжет как дополнительный вход LUTа, стоящего перед входом данных триггера. По опыту, не хочет синтезатор подключать сигналы типа CE к соответствующим входам триггера, лучше ему через LUT. Ну на то есть причины конечно (хотя это касается Xilinx, в Альтере может и захочет).


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Opex
сообщение Feb 4 2015, 16:02
Сообщение #40


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 13-03-11
Из: Екатеринбург
Пользователь №: 63 574



Цитата(Krys @ Feb 4 2015, 08:09) *
Вам что, надо выкрутиться любой ценой? Или в каком-то информационном состязании победить, закрыв глаза на всё?

Откуда выкрутиться? Я куда-то попал?
Во все глаза искал совет использовать BUFGCE, видел только CE. Ткните уже носом, куда смотреть.
Я вот вижу:
Xilinx® recommends that you use the CLB clock enable pin instead of gated clocks.
If you want to use a gated clock for power reduction, most FPGA devices now have a
clock enabled global buffer resource called BUFGCE. However, a clock enable is still the
preferred method to reduce or stop the clock to portions of the design.

Перевод такой:
Xilinx рекомендует использовать CLB CE вместо gated clocks.
В ПЛИСах теперь есть BUFGCE, однако лучше использовать CE.

Неправильно перевожу? Или есть другой источник сведений?

Цитата(Krys @ Feb 4 2015, 08:09) *
Моё понимание того фрагмента на английском: "гейтед клок не рекомендуется, лучше вместо него глобальный буфер с разрешением

Понял, у меня с английским проблемы.

Приоритет по предпочтительности использования:

1) BUFGCE.
2) CLB CE.
3) Gated clock.

Так получается?
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 4 2015, 17:55
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Opex @ Feb 4 2015, 19:02) *
1) BUFGCE.
2) CLB CE.
3) Gated clock.

Так получается?

Нет. Не так.

1) CLB CE.
2) BUFGCE.
3) Gated clock.

Но, в данном, конкретном случае, явно BUFGCE просится, ввиду особенности задачи.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 4 2015, 18:23
Сообщение #42


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Топикстартеру надо пересмотреть свою позицию:
Цитата
Это до каждого триггера пойдёт линия сброса - усложняет трассировку, а если сброс делать синхронным то ещё и логику. Конечно, можно не каждый триггер сбрасывать, а только нужный, но это надо думать какие нужно, какие нет, а думать над этим желания нет, т.к. у меня в проекте сброс вообще не предусмотрен, ПЛИСка в устройстве одна и сбрасывать её попросту некому, да и ненужно это - запустилась и работает.
Go to the top of the page
 
+Quote Post
Krys
сообщение Feb 5 2015, 02:27
Сообщение #43


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(ViKo @ Feb 5 2015, 00:23) *
Топикстартеру надо пересмотреть свою позицию:
В чём конкретно?


Цитата(SM @ Feb 4 2015, 23:55) *
1) CLB CE.
2) BUFGCE.
3) Gated clock.
Но, в данном, конкретном случае, явно BUFGCE просится, ввиду особенности задачи.
Поддерживаю. Да и задача то вполне распространённая. Поэтому я и говорю "предпочтительно" - это может означать например 51% против 49% случаев, так что грань в решении весьма неоднозначная, нужно учитывать свои особенности.
А приоритеты я бы даже так расставил:
1) CLB CE.
2) BUFGCE.
100) Gated clock
, показывая, что BUFGCE довольно близко к CLB CE и лишь немного уступает последнему для общего случая (для конкретного может не уступать).

Цитата(Opex @ Feb 4 2015, 22:02) *
Откуда выкрутиться? Я куда-то попал?
Вам возразили. Для многих это недопустимо, и надо с этим не соглашаться до последнего во что бы то ни стало.


Цитата(Opex @ Feb 4 2015, 22:02) *
Xilinx® recommends that you use the CLB clock enable pin instead of gated clocks.
If you want to use a gated clock for power reduction, most FPGA devices now have a
clock enabled global buffer resource called BUFGCE. However, a clock enable is still the
preferred method to reduce or stop the clock to portions of the design.

Перевод такой:
Xilinx рекомендует использовать CLB CE вместо gated clocks.
В ПЛИСах теперь есть BUFGCE, однако лучше использовать CE.

Неправильно перевожу? Или есть другой источник сведений?
Нет, другого источника нет, кроме, пожалуй, опыта и сухого остатка от прочтения других доков возможно и от других плис. Переводите наверное правильно. Но вот воспринимаете не совсем (ИМХО). Я бы перевёл так:
1. Xilinx рекомендует использовать CLB CE вместо gated clocks.
2. Но если всё же gated clocks нужен, то В ПЛИСах теперь есть BUFGCE,
3. Однако лучше предпочтительнее использовать CE. При том даже не так. Дословный перевод данного пункта более мягкий: "тем не менее, CE всё ещё является предпочтительным методом...". Т.е. так написано, чтобы показать отсутствие категоричности в использовании CE вместо BUFGCE.



--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 5 2015, 06:08
Сообщение #44


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Krys, перечитайте тему с начала, что не задавать неотвечаемое.

Диву даюсь - обсуждаются способы манипуляции тактовой частотой, которая еще не установилась.
Go to the top of the page
 
+Quote Post
Krys
сообщение Feb 5 2015, 07:07
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(ViKo @ Feb 5 2015, 12:08) *
Krys, перечитайте тему с начала, что не задавать неотвечаемое.
Почему же неотвечаемое? Перефразирую вопрос: что в процитированном Вами фрагменте Вам не понравилось?


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 5 2015, 08:34
Сообщение #46


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Krys @ Feb 5 2015, 05:27) *
100) Gated clock

Да не 100) он, а именно 3). Просто, его надо уметь готовить - им пугают не знающих, так как легко можно получить глитчи в клоке при некорректном использовании. Но стоит подумать пару минут, и нарисовать диаграммы включение и выключения, и все встанет на свои места, как избежать этих глитчей. Во всем остальном (почти, еще задержка будет другая, но вполне детерминированная) он от BUFGCE, где безглитчевая схема встроена, и ее самому описывать не надо, не отличается.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 5 2015, 08:44
Сообщение #47


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Krys @ Feb 5 2015, 10:07) *
Почему же неотвечаемое? Перефразирую вопрос: что в процитированном Вами фрагменте Вам не понравилось?

"думать над этим желания нет" - а там, может, всего от пары триггеров и зависит зависание всей схемы. Это еще надо умудриться подвесить схему.
"усложняет трассировку" - для сброса есть специально выделенные цепи, вплоть до глобального сброса каждого триггера.
- я не смотрел конкретно, но разве та галочка в мегавизарде self-reset on loss lock не спасает, пока тактовая частота не установится?
Go to the top of the page
 
+Quote Post
Krys
сообщение Feb 5 2015, 09:01
Сообщение #48


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(SM @ Feb 5 2015, 14:34) *
Да не 100) он, а именно 3)

Тогда так:
1) CLB CE.
1,15) BUFGCE.
3) Gated clock.

)))))


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Jackov
сообщение Feb 5 2015, 16:50
Сообщение #49


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(Jackov @ Feb 3 2015, 20:41) *
Не совсем, у меня в always-е два сигнала фигурируют, там один. Попробую завтра так сделать, отпишусь что получилось.

Цитата(Krys @ Feb 4 2015, 06:09) *
Ну да, у Вас асинхронный сброс, не вчитался. Просто сотрите его из олвейза ))) Будет сброс синхронный, а засинтезируется он как клок енэйбл. И наверняка (потом покажете кусок схемы) он ляжет как дополнительный вход LUTа, стоящего перед входом данных триггера. По опыту, не хочет синтезатор подключать сигналы типа CE к соответствующим входам триггера, лучше ему через LUT. Ну на то есть причины конечно (хотя это касается Xilinx, в Альтере может и захочет).
В общем вот. Имеем такой код:
Код
module test(output reg Q, input D, En, input Clk);
    always @(posedge Clk)
    begin
        if(En)
        begin
            Q = D;
        end
    end
endmodule
Синтезатор, вроде, ссинтезировал правильно
Прикрепленное изображение
А вот как развелось

Прикрепленное изображение

Такое ощущение, что надо чего-то в настройках повращать.
Запускал в Квартуе 9.1 для Циклона 4.

Цитата(SM @ Feb 4 2015, 20:55) *
1) CLB CE.
2) BUFGCE.
3) Gated clock.

Но, в данном, конкретном случае, явно BUFGCE просится, ввиду особенности задачи.
Поясните ньюфагу по хардкору. Если всё правильно понял, то Gated clock - это разрешение клока на триггере, BUFGCE - переключатель клоков с входом разрешения. CLB CE - это что за зверь?


Цитата(ViKo @ Feb 4 2015, 21:23) *
Топикстартеру надо пересмотреть свою позицию:
Разверните мысль, пожалуйста.

Сообщение отредактировал Jackov - Feb 5 2015, 16:51
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 5 2015, 16:56
Сообщение #50


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Развернул уже, и не раз.
Go to the top of the page
 
+Quote Post
Jackov
сообщение Feb 5 2015, 17:10
Сообщение #51


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(ViKo @ Feb 5 2015, 19:56) *
Развернул уже, и не раз.
Да, увидел.

Цитата(ViKo @ Feb 5 2015, 11:44) *
"думать над этим желания нет" - а там, может, всего от пары триггеров и зависит зависание всей схемы. Это еще надо умудриться подвесить схему.
Точно нет. Проект большой. Это надо все автоматы сбрасывать (а их больше десятка), кое-какие регистры, в общем надо долго и нудно в этом копаться.

Цитата(ViKo @ Feb 5 2015, 11:44) *
"усложняет трассировку" - для сброса есть специально выделенные цепи, вплоть до глобального сброса каждого триггера.
Да, мне уже объяснили. И в связи с этим я начал кое-что переосмысливать. Если асинхронный сброс действительно распространяется по выделенным линиям и он ни как не усложняет трассировку, тогда может быть имеет смысл сбрасывать асинхронно все триггеры, и не ломать голову какие нужно сбрасывать, а какие нет?

Цитата(ViKo @ Feb 5 2015, 11:44) *
- я не смотрел конкретно, но разве та галочка в мегавизарде self-reset on loss lock не спасает, пока тактовая частота не установится?
Это не то. Не помню точно что это, но точно не то. Скорее всего там речь идёт о частоте от генератора, а у нас ПЛЛ в самом начале нестабильную частоту выдаёт, и вот это надо как-то задавить.



Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 5 2015, 17:17
Сообщение #52


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Jackov @ Feb 5 2015, 20:10) *
Это не то. Не помню точно что это, но точно не то. Скорее всего там речь идёт о частоте от генератора, а у нас ПЛЛ в самом начале нестабильную частоту выдаёт, и вот это надо как-то задавить.

Да ну... как написано, сброс при потере захвата ФАПЧ, так и будет. Перезагрузка. Значит, пока ФАПЧ не установилась, состояние "загрузки" будет оставаться. Не будет же ПЛИС вечно перезагружаться при включении.
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 5 2015, 17:23
Сообщение #53


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Jackov @ Feb 5 2015, 20:10) *
И в связи с этим я начал кое-что переосмысливать. Если асинхронный сброс действительно распространяется по выделенным линиям и он ни как не усложняет трассировку, тогда может быть имеет смысл сбрасывать асинхронно все триггеры, и не ломать голову какие нужно сбрасывать, а какие нет?


Ну, только, некоторые, обычно, надо и предустанавливать... По этой части недавно темка была, где я подробно все описал, что и как надо делать, чтобы после такого асинхронного резета все завелось без сбоев - http://electronix.ru/forum/index.php?showtopic=125343. Та тема немного о другом, но и применима к Вашему случаю - все сбрасываете асинхронно, а вот на разрешение работы триггеров, инициирующих первичные процессы в системе, в тех случаях, когда это может привести к метастабильности от неудачного отпускания резета, подаете слегка задержанный сигнал того же резета, синхронизированный с клоком. Получите минимум занятых ресурсов.

Только не догадайтесь завести этот резет на резет PLL - оно тогда само себя заклинит через Lock sm.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 5 2015, 17:27
Сообщение #54


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(SM @ Feb 5 2015, 20:23) *
а вот на разрешение работы триггеров, инициирующих первичные процессы в системе, в тех случаях, когда это может привести к метастабильности от неудачного отпускания резета, подаете слегка задержанный сигнал того же резета, синхронизированный с клоком.

как показано в сообщении №4 rolleyes.gif
Go to the top of the page
 
+Quote Post
Jackov
сообщение Feb 5 2015, 19:13
Сообщение #55


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(ViKo @ Feb 5 2015, 20:17) *
Да ну...
Я устанавливал эту галку - не помогло, на старте частота нестабильна.

Цитата(SM @ Feb 5 2015, 20:23) *
Та тема немного о другом, но и применима к Вашему случаю - все сбрасываете асинхронно, а вот на разрешение работы триггеров, инициирующих первичные процессы в системе, в тех случаях, когда это может привести к метастабильности от неудачного отпускания резета, подаете слегка задержанный сигнал того же резета, синхронизированный с клоком. Получите минимум занятых ресурсов.
Ну я так и не пойму зачем эти сложности, если асинхронные сбросы триггеров подключаются к глобальным линиям? Не проще ли сбрасывать все триггеры разом, предварительно засинхронизировать асинхронный сброс?
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 5 2015, 19:27
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Jackov @ Feb 5 2015, 22:13) *
Не проще ли сбрасывать все триггеры разом, предварительно засинхронизировать асинхронный сброс?

Ну если это возможно, засинхронизировать его со всем необходимым сразу, то, конечно, проще. Но в реальности, обычно, так не бывает, поэтому оказывается проще оставить сброс асинхронным, но отодвинуть начало работы схемы на 1-2 такта от сброса, сделав сдвинутый по времени enable в одной...двух точках, отвечающих за начало работы. Хотя, для проекта, полностью работающего на одном клоке, наверное это не актуально.
Go to the top of the page
 
+Quote Post
Jackov
сообщение Feb 5 2015, 19:34
Сообщение #57


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(SM @ Feb 5 2015, 22:27) *
Ну если это возможно, засинхронизировать его со всем необходимым сразу, то, конечно, проще. Но в реальности, обычно, так не бывает, поэтому оказывается проще оставить сброс асинхронным, но отодвинуть начало работы схемы на 1-2 такта от сброса, сделав сдвинутый по времени enable в одной...двух точках, отвечающих за начало работы. Хотя, для проекта, полностью работающего на одном клоке, наверное это не актуально.

Я понял, Вы про многоклоковый дизайн. Да, у меня именно такой. Спасибо за наводку.
Go to the top of the page
 
+Quote Post
Krys
сообщение Feb 6 2015, 04:15
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(Jackov @ Feb 5 2015, 22:50) *
А вот как развелось

Прикрепленное изображение
Ну как я и предсказывал:
Цитата(Krys @ Feb 4 2015, 09:09) *
Будет сброс синхронный, а засинтезируется он как клок енэйбл. И наверняка (потом покажете кусок схемы) он ляжет как дополнительный вход LUTа, стоящего перед входом данных триггера. По опыту, не хочет синтезатор подключать сигналы типа CE к соответствующим входам триггера, лучше ему через LUT. Ну на то есть причины конечно (хотя это касается Xilinx, в Альтере может и захочет).
Кто может ответить, почему к аппаратному входу CE триггера не подключает такие вещи? (я могу предположить некоторые причины, но не уверен).

К стати, вопрос: как получить такую схему после разводки в Квартусе (коллеге надо, квартус 9.0, плисина FLEX10K), т.е. что куда нажать, чтобы вывело?



Цитата(Jackov @ Feb 5 2015, 22:50) *
Если всё правильно понял, то Gated clock - это разрешение клока на триггере, BUFGCE - переключатель клоков с входом разрешения. CLB CE - это что за зверь?
Ну этот документ и термины от Xilinx, в альтере, кажется, это называется Ripple Clock. Но предлагаю Вам этот документ всё же прочитать, буквально пару страниц, вокруг того абзаца на английском, там есть все разъяснения и примеры, что есть что. В двух словах:
Вы немного перепутали:
CLB CE - это "разрешение клока на триггере".
BUFGCE - правильно.
Gated clock - питание входов CLK триггеров от выхода логики (триггер или лут), зачастую с подключением этого выхода к глобальной линии.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
des00
сообщение Feb 6 2015, 05:20
Сообщение #59


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Jackov @ Feb 5 2015, 23:50) *
Синтезатор, вроде, ссинтезировал правильно
Прикрепленное изображение
А вот как развелось

Прикрепленное изображение

Такое ощущение, что надо чего-то в настройках повращать.
Запускал в Квартуе 9.1 для Циклона 4.

Ничего удивительного. Именно для вашего примера, использование сигнала En, как сигнала разрешения ENA триггера в LE не эффективно. Причины объясняются тут Cyclone IV Device Handbook -> Logic Elements and Logic Array Blocks in Cyclone IV Devices -> Logic Array Blocks.
Цитата
.....
Each LAB consists of the following features:
■ 16 LEs
■ LAB control signals
■ LE carry chains
■ Register chains
■ Local interconnect
......
LAB Control Signals
Each LAB contains dedicated logic for driving control signals to its LEs. The control
signals include:
■ Two clocks
■ Two clock enables
■ Two asynchronous clears
■ One synchronous clear
■ One synchronous load
.......

Логический вывод из этого думаю сможете сделать самостоятельно. Это кстати касается всех современных ПЛИС.


--------------------
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 6 2015, 05:44
Сообщение #60


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(des00 @ Feb 6 2015, 08:20) *
Логический вывод из этого думаю сможете сделать самостоятельно. Это кстати касается всех современных ПЛИС.


Вот, кстати, именно в данном случае, в проекте из одного триггера, это логике и не поддается. По разводке оба варианта одинаковы (какая разница, завести enable на LAB CE, или на LUT, все равно куда-то заводить, конкуренции между этими сигналами в данной схеме нет), а вот лишний LUT занят (кол-во LUT - вроде как один из критериев оптимизации).

И, кстати, это далеко не всех ПЛИС и сред касается:
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 6 2015, 05:52
Сообщение #61


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(SM @ Feb 6 2015, 08:44) *
Вот, кстати, именно в данном случае, в проекте из одного триггера, это логике и не поддается.

Видимо, потому, что правильнее управлять данными, а не тактами. О чем я выше намекал.
Go to the top of the page
 
+Quote Post
des00
сообщение Feb 6 2015, 05:55
Сообщение #62


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(SM @ Feb 6 2015, 13:44) *
Вот, кстати, именно в данном случае, в проекте из одного триггера, это логике и не поддается. По разводке оба варианта одинаковы (какая разница, завести enable на LAB CE, или на LUT, все равно куда-то заводить, конкуренции между этими сигналами в данной схеме нет), а вот лишний LUT занят (кол-во LUT - вроде как один из критериев оптимизации).

Немного не корректно. В случае использования clkena для одного LE из LAB, у вас "убивается" весь LAB. Т.е. вы уже не можете использовать триггеры других 15 ти LE. А LUT можете использовать либо для многолютовой комбинаторики либо для нагрузки триггеров из другого LAB. И в общем случае это приведет к перерасходу ресурсов разводки и не возможности register packing. Тоже самое касается сигналов sclr и sload. А то что ква делает так, ну вот такой у него оптимизатор. Даже в проекте из одного триггера на миллионный чип. Кстати LAB в первых сыклонах был 10LE и там чудно делались сложные (с использованием сигналов clear/load/enable) 40 бит аккумуляторы. В старших, пришлось кое где уйти на 32 бита.
Цитата
И, кстати, это далеко не всех ПЛИС и сред касается:

Как я понимаю это ячейка латекса, подскажите что за чип, посмотрю даташит, вполне возможно что у них в аналоге LAB есть дополнительные ключи на отключение clkena части триггеров от общего управления

UPD. В стратиксе 5 ом, в LAB 10ALM, в каждом 4 ре триггера. И там, цена желания что бы на счетчике был именно clkena (ручная вставка dffeas примитивов) еще выше.

UPD2. Посмотрел на вашу картинку внимательнее. Судя по всему верхняя половина LE не задействована. Вам повезло, "убийство" верхнего триггера вы не заметили. Вот будет у вас более плотный дизайн, тогда думаю обратите на это внимание sm.gif


--------------------
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 6 2015, 06:09
Сообщение #63


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(des00 @ Feb 6 2015, 08:55) *
И в общем случае это приведет к перерасходу ресурсов разводки

А причем тут "общий случай" и какие-то гипотетические триггеры и сигналы, которые могут быть нужны и которых нет? У нас случай вполне себе частный, и конкретный, от автора:
Код
module test(output reg Q, input D, En, input Clk);
    always @(posedge Clk)
    begin
        if(En)
        begin
            Q = D;
        end
    end
endmodule


1) В части разводки конкуренции нет, больше цепей нет в принципе, следовательно, критерий отпадает (умножается на коэфф. конкуренции = 0).
2) В части нужности других CE - тоже нет, тоже критерий отпадает (умножается на коэфф. конкуренции = 0).
3) В части нужности других триггеров в LAB - опять, конкуренции нет, опять, критерий отпадает (умножается на коэфф. конкуренции = 0).
4) А вот LUT - он и ток кушает, и место (area) занимает, так что критерий имеет вес. Вот его и следует соптимизировать, заведя сигнал на CE.

Цитата(des00 @ Feb 6 2015, 08:55) *
Как я понимаю это ячейка латекса, подскажите что за чип, посмотрю даташит, вполне возможно что у них в аналоге LAB есть дополнительные ключи на отключение clkena части триггеров от общего управления

Нет там таких ключей, CE тоже общий. Любой смотрите на выбор, разводится одинаково (я проверил на XO2, XO3, XP, XP2, ECP2, ECP3). Просто, там, оптимизатор делает свою работу более логично, нежели квартус.

PS
А когда количество enable-ов от одного сигнала возрастает, так, тем более, есть прямой смысл их объединять в кучу и заводить на CE, и не только на LAB/SLICE CE, но и в более глобальные ресурсы разводки.
Go to the top of the page
 
+Quote Post
des00
сообщение Feb 6 2015, 06:16
Сообщение #64


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(SM @ Feb 6 2015, 14:09) *
А причем тут "общий случай"? У нас случай вполне себе частный, и конкретный, от автора:
Код
module test(output reg Q, input D, En, input Clk);
    always @(posedge Clk)
    begin
        if(En)
        begin
            Q = D;
        end
    end
endmodule


1) В части разводки конкуренции нет, больше цепей нет в принципе, следовательно, критерий отпадает (умножается на коэфф. конкуренции = 0).
2) В части нужности других CE - тоже нет, тоже критерий отпадает (умножается на коэфф. конкуренции = 0).
3) В части нужности других триггеров в LAB - опять, конкуренции нет, опять, критерий отпадает (умножается на коэфф. конкуренции = 0).
4) А вот LUT - он и ток кушает, и место (area) занимает, так что критерий имеет вес. Вот его и следует соптимизировать, заведя сигнал на CE.


Нет там таких ключей, CE тоже общий. Любой смотрите на выбор, разводится одинаково (я проверил на XO2, XO3, XP, XP2, ECP2, ECP3). Просто, там, оптимизатор делает свою работу более логично, нежели квартус.

Это все софистика при решении задачи о сферическом коне в вакууме. Вы гуру вам виднее и опыта у вас больше.

Мои результаты по утаптыванию проектов в чипы от альтер приводил на форуме кучу раз. 99.5-99.8 % занятого дспешным кодом третьего сыклона, хлопающего на частоте 192МГц (у него триггерная 250). Всё после изучения даташитов и логических выводов о работе квартуса.


--------------------
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 6 2015, 06:18
Сообщение #65


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(des00 @ Feb 6 2015, 09:16) *
Это все софистика при решении задачи о сферическом коне в вакууме.

А Вы вернитесь в мир реальный, к реальному элементарному исходнику из одного триггера, о котором речь в теме идет, и который неоптимально укладывается квартусом. А не о забитии 99% кристалла.

PS
Может, если ему дать больше приоритета на Area, и заведет? Я сейчас посмотрел, в моей среде по умолчанию стоит и Area, и Timing driven.

UPD:
Убрал "Area", ничего не поменялось...
Go to the top of the page
 
+Quote Post
Krys
сообщение Feb 6 2015, 06:39
Сообщение #66


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(des00 @ Feb 6 2015, 11:55) *
В случае использования clkena для одного LE из LAB, у вас "убивается" весь LAB
Ну значит я правильно подозревал причину. В Xilinx это называется, кажется, control set.


Цитата(ViKo @ Feb 6 2015, 11:52) *
Видимо, потому, что правильнее управлять данными, а не тактами. О чем я выше намекал.
Тактами управлять правильнее с точки зрения энергопотребления. А какие преимущества имеет управление данными?


Цитата(SM @ Feb 6 2015, 11:44) *
И, кстати, это далеко не всех ПЛИС и сред касается:
Xilinx этим тоже грешит.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 6 2015, 06:41
Сообщение #67


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Krys @ Feb 6 2015, 09:37) *
А какие преимущества имеет управление данными?

Простоту алгоритма коррекции таймингов между разными клок-доменами. Короче говоря, мозгов много не надо, чтобы развести такой проект. Меньше энергии расходуется на разводку sm.gif - экономим газ! (правда потом жжем его жрущими девайсами)

Цитата(Krys @ Feb 6 2015, 09:39) *
Xilinx этим тоже грешит.

Не грешит, а показывает взвешенный подход, где один триггер, там одно, где кристалл под завязку - там другое.
Go to the top of the page
 
+Quote Post
Krys
сообщение Feb 6 2015, 06:49
Сообщение #68


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(SM @ Feb 6 2015, 12:18) *
А Вы вернитесь в мир реальный, к реальному элементарному исходнику из одного триггера, о котором речь в теме идет, и который неоптимально укладывается квартусом. А не о забитии 99% кристалла
Про сферического коня - это правильно. Пример тривиальный. Зачем ругать синтезатор из-за ошибки на тривиальных примерах? Да, формально это ошибка, но ругать надо, когда будет неоптимально синтезить нормальные проекты.
Предлагаю засинтезить проект по защёлкиванию шины данных (размером с количество "теряемых" триггеров) по клоку, стробируемому по CE. В этом случае хотя бы синтезатору будет видно, что совершенно все триггеры имеют CE, и ничего не потеряется, если подать CE прямо на соответствующий выделенный аппаратный вход триггера.
Можно ещё дополнительно усложнить задачу, подобрав на входе триггера такую комбинационную функцию, которая бы занимала все входы LUT'а. В этом случае добавление к этой функции ещё одного сигнала приводит к необходимости ещё одного лута, а это уж точно неоптимально (просто в тривиальном примере от добавления сигнала CE к LUT'у ничего страшного не происходит, т.к. ещё есть свободные входы).


Цитата(SM @ Feb 6 2015, 12:41) *
Не грешит, а показывает взвешенный подход, где один триггер, там одно, где кристалл под завязку - там другое.
Да я пробовал и на неплотных проектах. Да вообще где ни пробовал - там это везде наблюдалось. Из чего я сделал для себя эмпирический вывод, что с этим надо смириться, CE он добавляет не на аппаратный выделенный вход триггера, а замешивает в LUT.


Цитата(SM @ Feb 6 2015, 12:41) *
Простоту алгоритма коррекции таймингов между разными клок-доменами
А если домен один - то нет преимуществ?


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 6 2015, 06:57
Сообщение #69


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Krys @ Feb 6 2015, 09:49) *
А если домен один - то нет преимуществ?

Ну это, смотря как этот enable делать. Я имел в виду нечто вроде DCS/BUFGCE/Gated_clock - таким образом, каждый enable создает свой домен, экономя потребление (отключается целый сегмент дерева тактовых сигналов). Но затраты на разводку увеличиваются - так как начинаются проблемы с коррекцией HOLD-ов на междоменных переходах. А подача на CE с точки зрения затратности ресурсов на разводку идентична мультиплексору данных.

Цитата(Krys @ Feb 6 2015, 09:49) *
Зачем ругать синтезатор из-за ошибки на тривиальных примерах?

Из соображений логики. Раз на тривиальном сделал неоптимально, значит и на нетривиальном где-то лажанется по этой же причине....
Go to the top of the page
 
+Quote Post
des00
сообщение Feb 6 2015, 07:01
Сообщение #70


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(SM @ Feb 6 2015, 13:18) *
А Вы вернитесь в мир реальный, к реальному элементарному исходнику из одного триггера, о котором речь в теме идет, и который неоптимально укладывается квартусом. А не о забитии 99% кристалла.

Вот именно что пример высосан из пальца и все вот это:
Цитата
1) В части разводки конкуренции нет, больше цепей нет в принципе, следовательно, критерий отпадает (умножается на коэфф. конкуренции = 0).
2) В части нужности других CE - тоже нет, тоже критерий отпадает (умножается на коэфф. конкуренции = 0).
3) В части нужности других триггеров в LAB - опять, конкуренции нет, опять, критерий отпадает (умножается на коэфф. конкуренции = 0).
4) А вот LUT - он и ток кушает, и место (area) занимает, так что критерий имеет вес. Вот его и следует соптимизировать, заведя сигнал на CE.

Именно софистика. ответы на 1-3 дал постом выше : "А то что ква делает так, ну вот такой у него оптимизатор". а по пункту 4 ре вы сами вчитайтесь в вашу фразу с точки зрения ПЛИСа и в котором 5к лютов и а фоне потребления этого чипа в статике этот LUT как мертвому припарка.
Понимаю что вам, как асикостроителю, все это чуждо и вызывает бурю негодования. Но, как уже писал, на настоящих реальных проектах поголовное использование сигналов разрешения в качестве clkena триггеров приведет к результату более низкого качества, чем результат полученный со взвешенным использованием того самого clkena (квартус тоже это делает).


--------------------
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 6 2015, 07:06
Сообщение #71


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(des00 @ Feb 6 2015, 10:01) *
а фоне потребления этого чипа в статике этот LUT как мертвому припарка.

Вот это, как раз, голимая демагогия. Для оптимизатора есть лишь больше, или меньше, даже если на 1 LSB числа, используемого в расчетах.

Цитата(des00 @ Feb 6 2015, 10:01) *
поголовное использование сигналов разрешения в качестве clkena

Оно должно быть не поголовное, а оптимальное, на любых проектах. Зачем искать оправдания для банального глюка оптимизатора?
Go to the top of the page
 
+Quote Post
des00
сообщение Feb 6 2015, 07:12
Сообщение #72


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(SM @ Feb 6 2015, 14:06) *
Вот это, как раз, голимая демагогия. Для оптимизатора есть лишь больше, или меньше, даже если на 1 LSB числа, используемого в расчетах.


Оно должно быть не поголовное, а оптимальное, на любых проектах. Зачем искать оправдания для банального глюка оптимизатора?

для вас это глюк, для меня это изученная фича, имеющая под собой логические обоснования. задали вопрос - объяснил логику такого поступка, остальные вопросы www.altera.com.


--------------------
Go to the top of the page
 
+Quote Post
Krys
сообщение Feb 6 2015, 07:47
Сообщение #73


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(des00 @ Feb 6 2015, 13:12) *
задали вопрос - объяснил логику такого поступка
Не-не-не ))) Объяснения "ну вот такой вот синтезатор, хоть убейте" не годятся )))

Цитата(des00 @ Feb 6 2015, 13:12) *
имеющая под собой логические обоснования
Объяснили логику поступка Вы только при рассмотрении реальных больших нормальных проектов. На маленьких и тривиальных проектах такое поведение логике не подчиняется. Ну пожалуй за исключением того, что увеличение потребления на маленьких проектах неощутимо, поэтому до звезды, как поступить.


Цитата(des00 @ Feb 6 2015, 13:12) *
для вас это глюк, для меня это изученная фича
Я бы всё же называл это стандартным термином "known bugs and issues" )) Всё же надо признать, что формально для тривиального проекта это бага. Пусть и ни на что не влияющая.


Цитата(SM @ Feb 6 2015, 12:57) *
Из соображений логики. Раз на тривиальном сделал неоптимально, значит и на нетривиальном где-то лажанется по этой же причине....
А если на тривиальном не сделал неоптимально, то всё равно может лажануться на крупном ))) Не застрахуешься. Это как к людям, "отбывшим в местах не столь отдалённых", относятся с недоверием, скажем, при приёме на работу: один раз оступился, значит обязательно ещё раз оступится.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 6 2015, 09:04
Сообщение #74


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(des00 @ Feb 6 2015, 10:12) *
для вас это глюк,

Это не "для меня" глюк. Ничего личного. Это просто глюк, и все тут. Суть его я объяснил - если ресурс (свободные триггеры, LUT CE, и т.п.) не занят, то и нечего его "зажимать" непонятно для чего. Я даже предполагаю, для чего он это делает - вероятно, для упрощения себе жизни при инкрементальных размещении и разводке, так как он (глюк) появился как раз примерно в одно время с этими инкрементальными фичами... С инкрементальной точки зрения, конечно, зажопить 7 триггеров про запас выгоднее, чем освободить 1 LUT. Но это никак не оптимально с точки зрения размещения конкретного проекта. Совсем старые версии более эффективно задействовали CE в простых проектах. Да и вообще за квартусом замечено, чем новее версия, тем менее эффективно использование ресурсов ПЛИС (может, чтобы более толстые кристаллы покупали... а может из-за ленивости программистов...). У меня даже был конкретный случай, когда я активно пользовался альтерой, где-то в районе 8-9-х версий квартуса, что после очередного обновления перестал влезать проект, отлично влезавший и работавший ранее и с квартусом, и даже с Max+plus... А уж увеличение area на ровном месте с увеличением версии квартуса, так это вообще, норма жизни.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 6 2015, 09:10
Сообщение #75


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Для проверки забейте 4 входных сигнала вместо 1. Например, по И объедините. LUT весь используется, и Quartus будет вынужден использовать CE.
А потом посмотрите быстродействие для обоих вариантов.
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 6 2015, 09:25
Сообщение #76


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(ViKo @ Feb 6 2015, 12:10) *
и Quartus будет вынужден использовать CE.
А потом посмотрите быстродействие для обоих вариантов.

Ничего он не будет вынужден. Он еще может это на 2-х лутах собрать. К сожалению, проверить не могу, нет сейчас квартуса. А быстродействие все равно уложится в заданные констрейны, разница в 1 лут это примерно сотня-две пикосекунд, мелочь, если он и в тривиальном случае не задействует быстрый прямой CE. Но это догадки.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 6 2015, 09:31
Сообщение #77


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(SM @ Feb 6 2015, 12:25) *
Ничего он не будет вынужден. Он еще может это на 2-х лутах собрать. К сожалению, проверить не могу, нет сейчас квартуса. А быстродействие все равно уложится в заданные констрейны, разница в 1 лут это примерно сотня-две пикосекунд, мелочь, если он и в тривиальном случае не задействует быстрый прямой CE. Но это догадки.

То, что уложится, понятно. Но максимальную тактовую частоту покажет. На двух LUT - это уже слишком неоптимально, не такой он глупый, Quartus.
Jackov проверит, надеюсь. smile3046.gif
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 6 2015, 09:43
Сообщение #78


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(ViKo @ Feb 6 2015, 12:31) *
Но максимальную тактовую частоту покажет.

Но для оптимизации по этому критерию его (ква) надо еще зажать констрейном, чтобы он начал решать этот вопрос. По умолчанию ему не за чем минимизировать эти пути по времени.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 6 2015, 09:56
Сообщение #79


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(SM @ Feb 6 2015, 12:43) *
Но для оптимизации по этому критерию его (ква) надо еще зажать констрейном, чтобы он начал решать этот вопрос. По умолчанию ему не за чем минимизировать эти пути по времени.

Задать оптимизацию по скорости, а не по площади. Еще есть третий вариант - баланс между первый и вторым. Не знаю, как там по умолчанию задано.
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 6 2015, 09:59
Сообщение #80


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(ViKo @ Feb 6 2015, 12:56) *
Задать оптимизацию по скорости

Для оптимизации по скорости надо, кроме режима самой оптимизации, еще и скорость задать. Ни одна среда не занимается оптимизацией до тех пор, пока что-то оптимизируется. Все среды оптимизируют до тех пор, пока все пути не уложится в констрейны. Пути, не описанные в констрейнах, оптимизации по скорости не подлежат изначально.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 6 2015, 10:04
Сообщение #81


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Не уверен, но помню, что галки SPEED, AREA еще со времен MAXPlus+II были, когда даже слова такого "constraint" никто (я) не знал.
Ок, зададим 1000 МГц, пусть попыхтит.
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 6 2015, 10:20
Сообщение #82


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(ViKo @ Feb 6 2015, 13:04) *
Не уверен, но помню, что галки SPEED, AREA еще со времен MAXPlus+II были

Они меняют стоимости тех или иных критериев. А констрейны задают, к каким путям эти критерии применять.
Go to the top of the page
 
+Quote Post
Krys
сообщение Feb 6 2015, 11:04
Сообщение #83


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(ViKo @ Feb 6 2015, 15:10) *
Для проверки забейте 4 входных сигнала вместо 1. Например, по И объедините. LUT весь используется, и Quartus будет вынужден использовать CE.
А потом посмотрите быстродействие для обоих вариантов.
Тогда уж более очевидный тестовый проект, как я предлагал:
Цитата(Krys @ Feb 6 2015, 12:49) *
Предлагаю засинтезить проект по защёлкиванию шины данных (размером с количество "теряемых" триггеров) по клоку, стробируемому по CE. В этом случае хотя бы синтезатору будет видно, что совершенно все триггеры имеют CE, и ничего не потеряется, если подать CE прямо на соответствующий выделенный аппаратный вход триггера.
Можно ещё дополнительно усложнить задачу, подобрав на входе триггера такую комбинационную функцию, которая бы занимала все входы LUT'а. В этом случае добавление к этой функции ещё одного сигнала приводит к необходимости ещё одного лута, а это уж точно неоптимально (просто в тривиальном примере от добавления сигнала CE к LUT'у ничего страшного не происходит, т.к. ещё есть свободные входы).

И посмотреть сразу в виде схемы после PAR, так будет надёжнее, чем по косвенным признакам оценивать, как же это легло.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Jackov
сообщение Feb 11 2015, 16:41
Сообщение #84


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(Krys @ Feb 6 2015, 14:04) *
Тогда уж более очевидный тестовый проект, как я предлагал:

Набросал код. 16 триггеров, у каждого 4-х входовое И.
Код
module test #(parameter N = 16) (output reg [N-1:0]Q, input [N*4-1:0]D, input En, input Clk);
    wire [N-1:0]CombLogic;
    genvar i;
    generate
        for(i = 0; i < N; i = i + 1)
        begin: i_
            assign CombLogic[i] = &D[i*4+3:i*4];
        end
    endgenerate

    always @(posedge Clk)
    begin
        if(En)
        begin
            Q = CombLogic;
        end
    end
endmodule

РТЛ:
Прикрепленное изображение


Компиляция:

Прикрепленное изображение

Как видим, теперь вход EN используется.

Однако, Ква триггеры разметал по всему кристаллу:
Прикрепленное изображение

Такие пироги.

Пользуясь случаем, хочу спросить. Почему синтезатор не даёт использовать generate внутри always-а?
Если generate разворачивается в набор строчек, то какая ему разница где их разворачивать?

И ещё, пытался этот код написать без generate-а, вот так:
Код
module test #(parameter N = 16) (output reg [N-1:0]Q, input [N*4-1:0]D, input En, input Clk);
    always @(posedge Clk)
    begin
        if(En)
        begin
            integer i;
            for(i = 0; i < N; i = i + 1)
            begin
                Q[i] = &D[i*4+3:i*4];
            end
        end
    end
endmodule
Ругается вот на это &D[i*4+3:i*4], говорит, что i - не константа. Собака такой.
Go to the top of the page
 
+Quote Post
Opex
сообщение Feb 11 2015, 18:13
Сообщение #85


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 13-03-11
Из: Екатеринбург
Пользователь №: 63 574



Цитата
Пользуясь случаем, хочу спросить. Почему синтезатор не даёт использовать generate внутри always-а?
Если generate разворачивается в набор строчек, то какая ему разница где их разворачивать?


generate можно за always вынести, смысл такой же останется.

Через цикл так надо писать:
Код
    Q[i] = &D[i*4+3 -: 4];

Go to the top of the page
 
+Quote Post
Jackov
сообщение Feb 11 2015, 18:25
Сообщение #86


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(Opex @ Feb 11 2015, 21:13) *
generate можно за always вынести, смысл такой же останется.
Он у меня и так вынесен. Почему его туда занести нельзя - вот в чём вопрос.
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 11 2015, 19:19
Сообщение #87


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Jackov @ Feb 11 2015, 21:25) *
Почему его туда занести нельзя - вот в чём вопрос.

Стандарт языка не позволяет. Се ля ви.
Go to the top of the page
 
+Quote Post
Krys
сообщение Feb 13 2015, 03:14
Сообщение #88


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(Jackov @ Feb 11 2015, 22:41) *
Компиляция:

Прикрепленное изображение
Вы мне так и не подсказали, как получить такую схему после разводки в Квартусе (коллеге надо, квартус 9.0, плисина FLEX10K), т.е. что куда нажать, чтобы вывело? Заранее спасибо.

По теме: ну и что, что "Ква триггеры разметал по всему кристаллу"? ))) Главное CE задействовал же.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 13 2015, 09:34
Сообщение #89


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Krys @ Feb 13 2015, 06:14) *
Вы мне так и не подсказали, как получить такую схему после разводки в Квартусе (коллеге надо, квартус 9.0, плисина FLEX10K), т.е. что куда нажать, чтобы вывело? Заранее спасибо.
По теме: ну и что, что "Ква триггеры разметал по всему кристаллу"? ))) Главное CE задействовал же.

Сначала жмете Chip Planner, потом на нужном логическом элементе шлепаете два раза мышкой, включится Resource Property Editor. Только для FLEX, ACEX такого нет, помнится.
Разметал по кристаллу - чтобы кристал нагревался равномерно.
Go to the top of the page
 
+Quote Post
Krys
сообщение Feb 16 2015, 03:27
Сообщение #90


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(ViKo @ Feb 13 2015, 15:34) *
Сначала жмете Chip Planner, потом на нужном логическом элементе шлепаете два раза мышкой, включится Resource Property Editor. Только для FLEX, ACEX такого нет, помнится.
Спасибо, тогда понятно, почему мы это не нашли ))) Чип планер не поддерживается в принципе для этого семейства. Как люди раньше без этого всего работали? )))


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post

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

 


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


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