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

 
 
> Ошибка при инициализации регистра по reset, Может опять метастабильность ?
dsmv
сообщение May 24 2012, 11:17
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Обнаружил на мой взгляд странную ошибку.

Есть такой процесс:

Код
pr_reg: process( clk ) begin
    if( rising_edge( clk ) ) then
        if( reset_p='1' ) then
            reg_a<=init_val after 1 ns;
        elsif( data_en='1' ) then                                              
            reg_a( 63 downto 1 ) <= reg_a( 62 downto 0 ) after 1 ns;
            reg_a(0) <= reg_a(63) xor reg_a(62) xor reg_a(60) xor reg_a(59) after 1 ns;
        end if;
    end if;      
end process;





clk - 166 MHz

reset_p - асинхронный, но крайне длительный >100 ms

init_val - это константа.

data_en возникает намного позже reset_p

Я обнаружил при помощи ChipScope, что иногда reg_a инициализируется неправильным значением. После того, как я сделал reset_p синхронным - всё стало нормально.

Собственно вопрос - откуда здесь может быть ошибка ? Скорее всего reset_p заводится на входы сброса/установки, длительность reset_p очень большая. Времени на установку более чем достаточно. Получается, что ошибка возникает при асинхронном снятии reset - вместо сброса в 0 возникает установка в 1. Не понимаю.




Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Александр77
сообщение May 24 2012, 11:22
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 608
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Как-то привык в процессе не "анализировать" состояние внешнего сигнала напрямую.
Завожу переменную например
variable reset_s:std_logic
И в самом процессе синхронно присваиваю значение.
reset_s:=reset;
Далее уже обработка.
Длинных реакций на такой синтез не наблюдал..
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 14:10
Рейтинг@Mail.ru


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