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

 
 
> Правильное использование 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
6 страниц V  « < 4 5 6  
Start new topic
Ответов (75 - 89)
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  « < 4 5 6
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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