[an error occurred while processing this directive]
|
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: info@telesys.ru