|
Опять вопросы с синтезабельностью |
|
|
|
Aug 31 2010, 16:11
|
Участник

Группа: Участник
Сообщений: 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-й вариант)? А если нет, то как можно провести инициализацию без сигнала сброса?
Заранее благодарен за помощь!
|
|
|
|
|
Aug 31 2010, 16:24
|
Профессионал
    
Группа: Свой
Сообщений: 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) получите комбинационную логику.
|
|
|
|
|
Aug 31 2010, 16:31
|
Участник

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

|
Цитата(bogaev_roman @ Aug 31 2010, 19:24)  Начальная инициализация для моделирования (синтезируемая, но реально в "железе" не учитывается): Код input clc; output reg outclc=0; reg is_init=0; Если Вы хотели получить триггер сигналом outclc, то не получите, ибо нет триггера, работающего одновременно по фронту и срезу тактовой частоты, а записью получите комбинационную логику. Т.е. для физической инициализации все равно нужен отдельный сигнал?
|
|
|
|
|
Aug 31 2010, 16:42
|
Участник

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

|
Цитата(Shtirlits @ Aug 31 2010, 19:34)  В общем случае - да. В некоторых архитектурах начальное состояние регистров документировано. Например, у Altera так бывает. Хорошо, а если я напишу без инициализации: always(posedge clc) outclc<=~outclc; outclc - не проинициализирован, но мне, к примеру, не суть значение, а суть его смена. Тогда, при моделировании, будет отображаться Х -значение на всей временной шкале. Но в реальной жизни, при прошивке, будет сигнал этот вырабатываться?
|
|
|
|
|
Aug 31 2010, 16:42
|
Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Aug 31 2010, 16:47
|
Участник

Группа: Участник
Сообщений: 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; А часы инвертировать - принципиально?
|
|
|
|
|
Aug 31 2010, 16:48
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(arcer @ Aug 31 2010, 20:44)  Платы или плиски? Т.е. свойством задавать стартовое значение владеет плата или сама аппаратная часть микросхемы? В ПЛИС (у альтера вроде 0): Цитата В некоторых архитектурах начальное состояние регистров документировано. Например, у Altera так бывает. Код always(posedge clc) outclc<=~clc; Извиняюсь, у Вас правильно вначале написано было, просто мозги к вечеру того...
Сообщение отредактировал bogaev_roman - Aug 31 2010, 16:50
|
|
|
|
|
Aug 31 2010, 16:50
|
Участник

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

|
слово "в некоторых" смущает. Значит в некоторых может и не быть определенного значения?
|
|
|
|
|
Aug 31 2010, 16:53
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
QUOTE (bogaev_roman @ Aug 31 2010, 20:42)  Будет, только лучше CODE always(posedge clc) outclc<=~clc; Это работает не так, как код выше и в известных мне FPGA будут трудности с таким использованием клока. Тут обсуждается периодически использование тактового сигнала как данных. Поясните, чем же это лучше?
|
|
|
|
|
Aug 31 2010, 16:56
|
Участник

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

|
Цитата(Shtirlits @ Aug 31 2010, 19:53)  Тут обсуждается периодически использование тактового сигнала как данных. Поясните, чем же это лучше? Может использование меньшего количества входных пинов?
Сообщение отредактировал arcer - Aug 31 2010, 16:56
|
|
|
|
|
Aug 31 2010, 16:56
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(arcer @ Aug 31 2010, 20:50)  слово "в некоторых" смущает. Значит в некоторых может и не быть определенного значения? Ну Вы даташит почитайте на конкретную Плис, там должно быть явно все прописано. Да и в любом случае не видел ни одного серьезного проекта без сброса. Цитата Это работает не так, как код выше и в известных мне FPGA будут трудности с таким использованием клока. Я уже понял свою неправоту и написал все в посту выше.  ЗЫ Сходу нашел описалово для stratixIV - триггеры в нуле и RAM в нуле при отсутствии .mif файла
Сообщение отредактировал bogaev_roman - Aug 31 2010, 17:04
|
|
|
|
|
Aug 31 2010, 17:07
|
Участник

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

|
Цитата(bogaev_roman @ Aug 31 2010, 19:56)  Да и в любом случае не видел ни одного серьезного проекта без сброса. К счастью нашел на плате какую-то кнопочку. Попробую ее резетом заделать}:-> Цитата(bogaev_roman @ Aug 31 2010, 19:56)  Я уже понял свою неправоту и написал все в посту выше.  А почему именно Ваш вариант не должен работать? Выглядит так работоспособно...:-О
Сообщение отредактировал arcer - Aug 31 2010, 17:11
|
|
|
|
|
Aug 31 2010, 17:18
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(arcer @ Aug 31 2010, 21:07)  А почему именно Ваш вариант не должен работать? Выглядит так работоспособно...:-О Код always(posedge clc) outclc<=~clc; По идее присвоение будет происходить по событию - фронт clk, ну и присваиваться всегда будет инвертированная единица, т.е. на outclc будет всегда 0.
|
|
|
|
|
Aug 31 2010, 17:20
|
Участник

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

|
Цитата(bogaev_roman @ Aug 31 2010, 20:18)  Код always(posedge clc) outclc<=~clc; По идее присвоение будет происходить по событию - фронт clk, ну и присваиваться всегда будет инвертированная единица, т.е. на outclc будет всегда 0. ах да, туплю малость...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|