[an error occurred while processing this directive]
Продолжение темы
(«Телесистемы»: Конференция «Языки описания аппаратуры (VHDL и др.))

миниатюрный аудио-видеорекордер mAVR

Отправлено GVS 22 февраля 2004 г. 06:39

Уже было обсуждение этой темы, но я хочу продолжить. А именно о списке чувствительности и о синхронизации процессов. Я в свое время создал блок обработки изображения, который состоял из нескольких плат, на которых были расположены ПЛИС с кварцевыми генераторами. Первя плата вырабатывала синхроимпульс, а остальные синхронизировались в соответствии с ним.По началу прект был написан на AHDL. Нормально работал, за некоторыми исключениями,о которых позже.Когда я познакомился с VHDL я переделал весь проект, и он работал точно так же. Затем я решил перейти на проектирование с помощью Active-HDL и тут начались приключения. Во первых мой проект не симулировался в functional simulation. Но ведь в Quartus и Leonardo все шло на ура. Разобровшись я понял что мой проект был написан не корректно с позиций классического VHDL. А именно:Например я часто использовал функцию D триггера:
FUNCTION DTrig(data:std_logic_vector; signal clk:std_logic)RETURN std_logic_vector is
variable q: std_logic_vector (data'LENGTH-1 downto 0);
BEGIN
IF (clk'event and clk = '1') THEN
q := data;
END IF;
return q;
END ;

Вроде корректно, а оказалось нет. С позиций классического VHDL мы обращаемся к этой функции всякий раз как в первый раз, и выходное значение обнуляется, т.е не сохраняется предыдущее значение, а QUARTUS, Leonardo и т.д. интерпритирует это по другому. Пришлось переделать эту функцию в процедуру.
Например такой простой процес
Process (clock)
BEGIN
T1<=T;
END ;
Вылядит по разному при функциональном симулировании и после синтеза. При функциональном сивулировании T1 равен T после прихода каждого фронта clock. А после синтеза мы видим, что T1 равен T сразу, вне зависимости от clock.
Теперь о синхронизации. Я для синхронизации использовал функцию подобную приведенному выше D триггеру. При симмулировании в Quartus все было хорошо. При симмулировании в Active-HDL получается, что в некоторый момент, когда фронты clock и T совпадают то импульс пропускается. Именно пропускается, а не образуется с приходом следующего фронта clock. Кто прав Quartus или Active_HDL. У меня в блоке иногда происходит рассинхронизация, которая выглядит как волнистый изгиб прямой линии. Может в этом причина?
А вообще у меня возник вопрос. Может ли VHDL являться таким стандартом как об этом говорят, если лубая фирма,будь то даже очень авторитетная, берет на себя право интерпритировать его по своему?

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru