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

 
 
> Опять вопросы с синтезабельностью
arcer
сообщение Aug 31 2010, 16:11
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-10
Пользователь №: 57 029



Здравствуйте, товарищи!
Хочу сделать генератор хелловорлдный. Оказалось, нужно проинициализировать некоторые переменные без сигнала сброса. Делал таким образом:
input clc;
output reg outclc;
reg is_init;

always @(clc)
begin
if(is_init!=1)
begin
is_init =1;
//разная всякая инициализация
end
else
begin
//ну например,
outclc<=clc;
end
end

Синтезатор не кричал, в моделсиме красные полоски (не работает, как нужно)
Рассуждаю так: вначале is_init инеет несинтезируемое значение Х, чему в жизни отвечает "не знаю". Нельзя сказать, что (is_init!=1) истина или ложь.
Но я переписал так:

input clc;
output reg outclc;
reg is_init;

always @(clc)
begin
if(is_init==1)
begin
//ну например,
outclc<=clc;
end
else
begin
is_init =1;
//разная всякая инициализация
end
end

и на всех 4-х временных моделированиях моделсим выдавал то, чего мне было надо. Но ведь предидущие рассуждения отрицают возможность того, что можно сказать is_init==1 истина или ложь.
Подскажите , пожалуйста, это вообще синтезируемо (2-й вариант)? А если нет, то как можно провести инициализацию без сигнала сброса?

Заранее благодарен за помощь!
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 21)
bogaev_roman
сообщение Aug 31 2010, 16:24
Сообщение #2


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

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



Цитата(arcer @ Aug 31 2010, 20:11) *
Хочу сделать генератор хелловорлдный. Оказалось, нужно проинициализировать некоторые переменные без сигнала сброса.

Начальная инициализация для моделирования (синтезируемая, но реально в "железе" не учитывается):
Код
input clc;
output reg outclc=0;
reg is_init=0;

Если Вы хотели получить триггер сигналом outclc, то не получите, ибо нет триггера, работающего одновременно по фронту и срезу тактовой частоты, а записью
Цитата
always @(clc)
получите комбинационную логику.
Go to the top of the page
 
+Quote Post
arcer
сообщение Aug 31 2010, 16:31
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-10
Пользователь №: 57 029



Цитата(bogaev_roman @ Aug 31 2010, 19:24) *
Начальная инициализация для моделирования (синтезируемая, но реально в "железе" не учитывается):
Код
input clc;
output reg outclc=0;
reg is_init=0;

Если Вы хотели получить триггер сигналом outclc, то не получите, ибо нет триггера, работающего одновременно по фронту и срезу тактовой частоты, а записью получите комбинационную логику.

Т.е. для физической инициализации все равно нужен отдельный сигнал?
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Aug 31 2010, 16:34
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



В общем случае - да.
В некоторых архитектурах начальное состояние регистров документировано. Например, у Altera так бывает.
Go to the top of the page
 
+Quote Post
arcer
сообщение Aug 31 2010, 16:42
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-10
Пользователь №: 57 029



Цитата(Shtirlits @ Aug 31 2010, 19:34) *
В общем случае - да.
В некоторых архитектурах начальное состояние регистров документировано. Например, у Altera так бывает.

Хорошо, а если я напишу без инициализации:
always(posedge clc)
outclc<=~outclc;

outclc - не проинициализирован, но мне, к примеру, не суть значение, а суть его смена. Тогда, при моделировании, будет отображаться Х -значение на всей временной шкале. Но в реальной жизни, при прошивке, будет сигнал этот вырабатываться?
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Aug 31 2010, 16:42
Сообщение #6


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

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



Цитата(arcer @ Aug 31 2010, 20:31) *
Т.е. для физической инициализации все равно нужен отдельный сигнал?

Насколько мне известно, каждый триггер при включении платы будет иметь конкретное значение (0 или 1 - зависит от производителя). Если Вы хотите получить обычный делитель частоты, то какая разница в каком состоянии изначально будет триггер.
Обычно всегда используют сигнал сброса для инициализации - там где она нужна.
Цитата
Но в реальной жизни, при прошивке, будет сигнал этот вырабатываться?

Будет, только лучше
Код
always(posedge clc)
outclc<=~clc;


Сообщение отредактировал bogaev_roman - Aug 31 2010, 16:45
Go to the top of the page
 
+Quote Post
arcer
сообщение Aug 31 2010, 16:47
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-10
Пользователь №: 57 029



Цитата(bogaev_roman @ Aug 31 2010, 19:42) *
Насколько мне известно, каждый триггер при включении платы будет иметь конкретное значение (0 или 1 - зависит от производителя). Если Вы хотите получить обычный делитель частоты, то какая разница в каком состоянии изначально будет триггер.
Обычно всегда используют сигнал сброса для инициализации - там где она нужна.

Будет.

Платы или плиски? Т.е. свойством задавать стартовое значение владеет плата или сама аппаратная часть микросхемы?

Цитата(bogaev_roman @ Aug 31 2010, 19:42) *
Будет, только лучше
Код
always(posedge clc)
outclc<=~clc;

А часы инвертировать - принципиально?
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Aug 31 2010, 16:48
Сообщение #8


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

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



Цитата(arcer @ Aug 31 2010, 20:44) *
Платы или плиски? Т.е. свойством задавать стартовое значение владеет плата или сама аппаратная часть микросхемы?

В ПЛИС (у альтера вроде 0):
Цитата
В некоторых архитектурах начальное состояние регистров документировано. Например, у Altera так бывает.


Код
always(posedge clc)
outclc<=~clc;


Извиняюсь, у Вас правильно вначале написано было, просто мозги к вечеру того... smile3046.gif

Сообщение отредактировал bogaev_roman - Aug 31 2010, 16:50
Go to the top of the page
 
+Quote Post
arcer
сообщение Aug 31 2010, 16:50
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-10
Пользователь №: 57 029



слово "в некоторых" смущает. Значит в некоторых может и не быть определенного значения?
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Aug 31 2010, 16:53
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



QUOTE (bogaev_roman @ Aug 31 2010, 20:42) *
Будет, только лучше
CODE
always(posedge clc)
outclc<=~clc;

Это работает не так, как код выше и в известных мне FPGA будут трудности с таким использованием клока.
Тут обсуждается периодически использование тактового сигнала как данных.
Поясните, чем же это лучше?
Go to the top of the page
 
+Quote Post
arcer
сообщение Aug 31 2010, 16:56
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-10
Пользователь №: 57 029



Цитата(Shtirlits @ Aug 31 2010, 19:53) *
Тут обсуждается периодически использование тактового сигнала как данных.
Поясните, чем же это лучше?

Может использование меньшего количества входных пинов?smile.gif

Сообщение отредактировал arcer - Aug 31 2010, 16:56
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Aug 31 2010, 16:56
Сообщение #12


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

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



Цитата(arcer @ Aug 31 2010, 20:50) *
слово "в некоторых" смущает. Значит в некоторых может и не быть определенного значения?

Ну Вы даташит почитайте на конкретную Плис, там должно быть явно все прописано. Да и в любом случае не видел ни одного серьезного проекта без сброса.
Цитата
Это работает не так, как код выше и в известных мне FPGA будут трудности с таким использованием клока.

Я уже понял свою неправоту и написал все в посту выше. smile.gif
ЗЫ Сходу нашел описалово для stratixIV - триггеры в нуле и RAM в нуле при отсутствии .mif файла

Сообщение отредактировал bogaev_roman - Aug 31 2010, 17:04
Go to the top of the page
 
+Quote Post
arcer
сообщение Aug 31 2010, 17:07
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-10
Пользователь №: 57 029



Цитата(bogaev_roman @ Aug 31 2010, 19:56) *
Да и в любом случае не видел ни одного серьезного проекта без сброса.

К счастью нашел на плате какую-то кнопочку. Попробую ее резетом заделать}:->

Цитата(bogaev_roman @ Aug 31 2010, 19:56) *
Я уже понял свою неправоту и написал все в посту выше. smile.gif

А почему именно Ваш вариант не должен работать? Выглядит так работоспособно...:-О

Сообщение отредактировал arcer - Aug 31 2010, 17:11
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Aug 31 2010, 17:18
Сообщение #14


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

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



Цитата(arcer @ Aug 31 2010, 21:07) *
А почему именно Ваш вариант не должен работать? Выглядит так работоспособно...:-О

Код
always(posedge clc)
outclc<=~clc;

По идее присвоение будет происходить по событию - фронт clk, ну и присваиваться всегда будет инвертированная единица, т.е. на outclc будет всегда 0.
Go to the top of the page
 
+Quote Post
arcer
сообщение Aug 31 2010, 17:20
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-10
Пользователь №: 57 029



Цитата(bogaev_roman @ Aug 31 2010, 20:18) *
Код
always(posedge clc)
outclc<=~clc;

По идее присвоение будет происходить по событию - фронт clk, ну и присваиваться всегда будет инвертированная единица, т.е. на outclc будет всегда 0.

ах да, туплю малость...
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Aug 31 2010, 17:29
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



QUOTE (bogaev_roman @ Aug 31 2010, 21:18) *
CODE
always(posedge clc)
outclc<=~clc;

По идее присвоение будет происходить по событию - фронт clk, ну и присваиваться всегда будет инвертированная единица, т.е. на outclc будет всегда 0.

Не согласен, зависит от перекоса сети клока и пути доставки клока на вход данных регистра.
Может быть разный результат в зависимости от частоты.
Вплоть до нарушения setup & hold time с соответствующими последствиями.
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Aug 31 2010, 17:53
Сообщение #17


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

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



Цитата(Shtirlits @ Aug 31 2010, 21:29) *
Не согласен, зависит от перекоса сети клока и пути доставки клока на вход данных регистра.
Может быть разный результат в зависимости от частоты.
Вплоть до нарушения setup & hold time с соответствующими последствиями.

Ну а тут я, пожалуй, не соглашусь. Если не брать в расчет невыполнение времянок и там каких-то хитрых условий, то путь который проделает сигнал на вход тактовой частоты триггера будет короче пути на информационный вход триггера.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Aug 31 2010, 18:34
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Если короче, то на сколько короче? А что будет, если на полпериода кроче, или на целый период?
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Sep 1 2010, 09:19
Сообщение #19


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

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



Цитата(Shtirlits @ Aug 31 2010, 22:34) *
Если короче, то на сколько короче? А что будет, если на полпериода кроче, или на целый период?

Будет невыполнение времянок, ну а вообще это практически нереальная ситуация, в данном примере. Если брать самые последние ПЛИС - хоть virtex6, хоть stratixIV, то максимальная частота переключения триггера - 600МГц. Ну и где можно потерять ~1ns?
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Sep 1 2010, 16:22
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Какая проблема с потерять 1nS на линии данных в относительно большом корпусе?
Да хоть две!
А если микросхема не пустая и сигнал проходит не по самому оптимальному пути?

Чтобы было наглядно, берем входную ножку поближе к буферу глобальной сети клока,
в идеале, специально для этого придуманную,
а регистр с клоком на входе данных принудительно ставим на максимальном от неё расстоянии.
Констрейн maxskew злостно нарушается.
Получаем skew 2.7nS в конкретном примере - Virtex6 VLX75 FF784.
Это означает, что мегагерцах эдак на двухстах вы поймаете задний фронт этим регистром.

В аттаче исходный текст и архив с UCF-файлом - форум не ест расширения vhdl и ucf.
Прикрепленные файлы
Прикрепленный файл  skew.vhd ( 536 байт ) Кол-во скачиваний: 27
Прикрепленный файл  skew.rar ( 224 байт ) Кол-во скачиваний: 13
 
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Sep 1 2010, 17:03
Сообщение #21


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

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



Цитата(Shtirlits @ Sep 1 2010, 20:22) *
Какая проблема с потерять 1nS на линии данных в относительно большом корпусе?
Да хоть две!
А если микросхема не пустая и сигнал проходит не по самому оптимальному пути?
Чтобы было наглядно, берем входную ножку поближе к буферу глобальной сети клока,
в идеале, специально для этого придуманную,
а регистр с клоком на входе данных принудительно ставим на максимальном от неё расстоянии.
Констрейн maxskew злостно нарушается.
Получаем skew 2.7nS в конкретном примере - Virtex6 VLX75 FF784.
Это означает, что мегагерцах эдак на двухстах вы поймаете задний фронт этим регистром.
В аттаче исходный текст и архив с UCF-файлом - форум не ест расширения vhdl и ucf.

biggrin.gif Да-да, нашаманили, верю...даже странно малое значение получили, у меня на стратикс4 по диагонали до 5ns доходит обычная задержка сигнала...
Я предвидел такой расклад в предыдущем посте
Цитата
ну а вообще это практически нереальная ситуация, в данном примере
.
Ну а серьезно - уберите "если" и САПР всегда найдет хотя бы один свободный триггер рядом с буфером глобальной сети, ну не видел я реально работающих проектов, которые были забиты более чем на 90%, а в Вашем случае получается загрузка на 100% хоть и отдельного куска ПЛИС.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Sep 1 2010, 17:40
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Ну, если принимать во внимание удачу, то её я вам и пожелаю в большом количестве.
Go to the top of the page
 
+Quote Post

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

 


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


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