|
|
  |
Правильное использование locked у PLL |
|
|
|
Feb 6 2015, 09:31
|

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

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

Гуру
     
Группа: Свой
Сообщений: 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, так будет надёжнее, чем по косвенным признакам оценивать, как же это легло.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Feb 11 2015, 16:41
|
Местный
  
Группа: Участник
Сообщений: 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 - не константа. Собака такой.
|
|
|
|
|
Feb 11 2015, 18:13
|
Частый гость
 
Группа: Свой
Сообщений: 75
Регистрация: 13-03-11
Из: Екатеринбург
Пользователь №: 63 574

|
Цитата Пользуясь случаем, хочу спросить. Почему синтезатор не даёт использовать generate внутри always-а? Если generate разворачивается в набор строчек, то какая ему разница где их разворачивать? generate можно за always вынести, смысл такой же останется. Через цикл так надо писать: Код Q[i] = &D[i*4+3 -: 4];
|
|
|
|
|
Feb 11 2015, 18:25
|
Местный
  
Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485

|
Цитата(Opex @ Feb 11 2015, 21:13)  generate можно за always вынести, смысл такой же останется. Он у меня и так вынесен. Почему его туда занести нельзя - вот в чём вопрос.
|
|
|
|
|
Feb 13 2015, 03:14
|

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

|
Цитата(Jackov @ Feb 11 2015, 22:41)  Вы мне так и не подсказали, как получить такую схему после разводки в Квартусе (коллеге надо, квартус 9.0, плисина FLEX10K), т.е. что куда нажать, чтобы вывело? Заранее спасибо. По теме: ну и что, что "Ква триггеры разметал по всему кристаллу"? ))) Главное CE задействовал же.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Feb 13 2015, 09:34
|

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

|
Цитата(Krys @ Feb 13 2015, 06:14)  Вы мне так и не подсказали, как получить такую схему после разводки в Квартусе (коллеге надо, квартус 9.0, плисина FLEX10K), т.е. что куда нажать, чтобы вывело? Заранее спасибо. По теме: ну и что, что "Ква триггеры разметал по всему кристаллу"? ))) Главное CE задействовал же. Сначала жмете Chip Planner, потом на нужном логическом элементе шлепаете два раза мышкой, включится Resource Property Editor. Только для FLEX, ACEX такого нет, помнится. Разметал по кристаллу - чтобы кристал нагревался равномерно.
|
|
|
|
|
Feb 16 2015, 03:27
|

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

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