Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: начальное значение триггеров после прошивки, altera
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
bogaev_roman
Добрый день, Уважаемые форумчане. Насколько я помню в fpga altera после загрузки прошивки по умолчанию все триггеры находятся в 0, тема даже обсуждалось. Проблема в том, что начальство просит меня тыкнуть пальцем в официальную документацию - может кто-нибудь кинет ссылку или название документа, где это может быть прописано? Память (RAM), насколько я помню, находится в неопределенном состоянии?
Спасибо.
Realking
Цитата(bogaev_roman @ Oct 5 2016, 10:40) *
Добрый день, Уважаемые форумчане. Насколько я помню в fpga altera после загрузки прошивки по умолчанию все триггеры находятся в 0, тема даже обсуждалось. Проблема в том, что начальство просит меня тыкнуть пальцем в официальную документацию - может кто-нибудь кинет ссылку или название документа, где это может быть прописано? Память (RAM), насколько я помню, находится в неопределенном состоянии?
Спасибо.


http://quartushelp.altera.com/14.0/mergedP...p_dont_care.htm

может это их убедит
bogaev_roman
Цитата(Realking @ Oct 5 2016, 11:47) *

Я думаю подойдет и это, спасибо. Хотя по этой настройке вышел на явное указание:
Цитата
Registers in the device core always power up to a low (0) logic level on all Altera
devices. However, there are ways to implement logic such that registers behave as if
they were powering up to a high (1) logic level.

И эта фраза в документе хандбука на квартус в главе Recommended HDL Coding Styles. biggrin.gif
Vascom
Но в целом на это лучше не надеяться и использовать явную установку в "0" или "1" по асинхронному сигналу reset. Тогда код будет одинаково работать на любой FPGA, ASIC и при симуляции.
bogaev_roman
Цитата(Vascom @ Oct 5 2016, 13:08) *
Но в целом на это лучше не надеяться и использовать явную установку в "0" или "1" по асинхронному сигналу reset. Тогда код будет одинаково работать на любой FPGA, ASIC и при симуляции.

Естественно, это вопрос скорее теоретический. Возник он исходя из того - а что будет если не завести внешнюю кнопку сброса (ну или чего то подобного по типу пустить счетчик по включению питания) и внешний генератор запустится позже (я сам обычно пускаю сброс основной по ~locked), чем зальется прошивка. Понятно, что такого быть не должно.
likeasm
Цитата(Vascom @ Oct 5 2016, 12:08) *
Но в целом на это лучше не надеяться и использовать явную установку в "0" или "1" по асинхронному сигналу reset. Тогда код будет одинаково работать на любой FPGA, ASIC и при симуляции.

Вопрос упирается в экономию соединений. Нет reset, значит нет лишних лишних связей. Если начальная установка происходит один раз в конце конфигурации, то лучше reset не тянуть, а вместо этого, если позволяет ПЛИС, инициализировать триггеры средствами языка.
dvladim
Цитата(bogaev_roman @ Oct 5 2016, 12:15) *
Естественно, это вопрос скорее теоретический.

Регистры в ПЛИС естественно сбросятся. Вопрос, скорее, в возможном нарушении recovery/removal на триггерах, поскольку внутренний сброс никак не синхронизирован с внешними сигналами.
yes
а атрибуты, которыми указать, что триггер в 1 - есть? у ксайлинсов вроде так.
ну и еще по поводу сброса - в современных ПЛИС нету отдельных цепей сброса - то есть будут тратиться ресурсы (глобальный интерконект)
нужно ли это?

но это общее рассуждение, нужно смотреть конкретное семейство.

например Гейслер принципиально не делает сброса (только для очень редких регистров)) - утверждает, что сильно улучшает этим времянку среднестатистическую (для произвольной ПЛИС и вендора). это создавало определенные проблемы и я с ним достаточно долго спорил, потом плюнул и поправил свою копию его либы.

Tiro
Цитата(yes @ Oct 7 2016, 20:34) *
а атрибуты, которыми указать, что триггер в 1 - есть? у ксайлинсов вроде так.


Импульс сброса длительностью 1 такт

Код
//    Synchronization timers
//    Don't use asynchronous "dev_clrn" signal with external superviser

    reg    clear_event;
    initial clear_event = 1'b 1;

    always @( posedge clock ) clear_event <= 1'b 0;


Или еще вариант установки и способ применения.

CODE

// Synchronization timers
// Don't use asynchronous "dev_clrn" signal with external superviser

reg clear_event = 1'b 1;

always @( posedge clock ) clear_event <= 1'b 0;

// Autoreload timer ( 1 ms )

wire sample_1ms;

timer_n #( .NBITS ( 15 ), .NTICKS ( 24_999 ) )
u25 (
.clock ( clock ),
.clear ( 1'b 0 ),
.load ( sample_1ms | clear_event ),
.count ( 1'b 1 ),
.done ( sample_1ms )
);

// Global clear trigger and interval timer ( 100 ms )

wire clear_done;
reg clear;

always @( posedge clock, posedge clear_event )

if ( clear_event ) clear <= 1'b 1;
else if ( clear_done ) clear <= 1'b 0;

timer_n #( .NBITS ( 7 ), .NTICKS ( 100 ) )
u26 (
.clock ( clock ),
.clear ( 1'b 0 ),
.load ( clear_event ),
.count ( sample_1ms & !clear_done ),
.done ( clear_done )
);

// Module asynchronous clear trigger and interval timer ( 10 ms )

wire logic_clear_done;
reg logic_clear;

always @( posedge clock, posedge clear )

if ( clear ) logic_clear <= 1'b 1;
else if ( logic_clear_done ) logic_clear <= 1'b 0;

timer_n #( .NBITS ( 4 ), .NTICKS ( 10 ) )
u27 (
.clock ( clock ),
.clear ( 1'b 0 ),
.load ( clear ),
.count ( sample_1ms & !logic_clear_done ),
.done ( logic_clear_done )
);



Такие сигналы можно заводить на асинхронные входы сброса/установки триггеров, они синхронизированы с клоком.
dm.pogrebnoy
Вот небольшая статься про сбросы http://www.eetimes.com/document.asp?doc_id=1278998
При старте, во время глобального сброса, значения всех элементов ПЛИС выставляются в соответствии с атрибутом INIT, в статье об этом упоминается относительно Xilinx. Но, скорее всего у Альтеры все то же самое.
Tiro
Цитата(dm.pogrebnoy @ Oct 8 2016, 20:56) *
Вот небольшая статься про сбросы http://www.eetimes.com/document.asp?doc_id=1278998

Позвольте предложить еще статью Clifford Cummings Synchronous Resets? Asynchronous Resets?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.