[an error occurred while processing this directive]
Помогите новичку побороть MaxPlusII (+)
(«Телесистемы»: Конференция «Программируемые логические схемы и их применение»)

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

Отправлено _Aquarius_ 24 июля 2003 г. 11:58

VHDL в MaxPlusII 10.0 (full).
Регистр на VHDL имеет вид:
...
cr10_i <=( data_in_r(10) and (not be_mask_r(10) and write) ) or
( cr10_r and not(not be_mask_r(10) and write) );
cr8_i <=( data_in_r( 8) and (not be_mask_r( 8) and write) ) or
( cr8_r and not(not be_mask_r( 8) and write) );
...
srcr_reg_p:process (clk,nRst) is
begin
if nRst='0' then
cr10_r<='0'; cr8_r<='0';
elsif rising_edge(clk) then
cr10_r<=cr10_i; cr8_r<=cr8_i;
end if;
end process srcr_reg_p;

Проблема в том, что на выходе cr10_r,cr8_r всегда 0. Думаю, что MaxPlus неправильно оптимизирует выражение для cr10_i,cr8_i ? Самое интерессное начинается, когда входы триггера cr10_i,cr8_i, ... делаются выходами модуля ( в целях тестирования) - тогда вдруг все работает как и задумано!

Переписывание выражения в виде :

1) cr10_i <=( data_in_r(10) and (not be_mask_r(10) and write) ) or
( cr10_r and ( be_mask_r(10) or not write) );

2) cr10_i <= data_in_r(10) when be_mask_r(10)='0' and write='1' else cr10_r;
дает тот же результат.

Вопрос: Как все-таки это побороть? может это глюк MaxPlus? именно этой версии ? может кто-то уже сталкивался с такими приколами?

Спасибо за ответы.


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

Ответы


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

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

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

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

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


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

E-mail: info@telesys.ru