[an error occurred while processing this directive]
|
Как обычно на VHDL описывается запись в регистр по условию?
if (CE = '1') then REG <= Din; end if;
В результате мы получаем, что СЕ должен подойти ко ВСЕМ триггерам регистра REG и разрешить запись в эти регистры.
В качестве оптимизации можно предложить следующий механизм
Введем дополнительно
REG1, REG2 - регистры аналогичные REG. пусть будут 64 битные.
CE1 - 4 битный регистр, СЕ2 - 16 битный регистр.
и опишем следующим образом
process (CLK)
if (CLK'event and CLK='1') then
REG1 <= Din;
REG2 <= REG1;
for i in 0 to 3 loop
CE1(i) <= CE;
CE2(i) <= CE1(0);
CE2(i+4) <= CE1(1);
CE2(i+8) <= CE1(2);
CE2(i+12) <= CE1(3);
end loop;
for I in 0 to 64 loop
if (CE2(i/4)='1') then REG(i)<= REG2(i);
end loop;
end if; -- CLK
end process;
Таким образом мы получаем увелечение задержки выполнения (НО ОНО КОНВЕЙЕРИЗИРОВАНО) на 2 такта. Увеличение ОБЪЕМА РЕСУРСОВ в 3 с хвостиком раза, НО сокращение длины цепей разрешения с 64 до 4, и соответсвующее ускорение. Изменяя выще описанные характеристики, делая не 2 промежуточных, а 1 регистр, деля не до 4 длины связей, а например до 16 итп, можно экономить, но оставаться в заданой скорости.
E-mail: info@telesys.ru