[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Сам пользовался - меньше мороки с собиранием разрядов (+ быстродействие), но нужно учитывать задержку на такт. Каюсь, сам лоханулся - примерчик выдает на такт больше, а с использованием лишнего разряда еще один добавится. Прилагаю пример, остальное дело вкуса. Главное, чтобы мозги работали. С Новым Годом, господа!
-- =========================================================================
include "lpm_counter";
constant width = 4;
subdesign pulse_cnt
(
clk :input; -- тактовый
num[width-1..0] :input; -- шина задания количества импульсов
pulse1 :output; -- выходной импульс
pulse2 :output; -- выходной импульс
pulse3 :output; -- выходной импульс
)
variable
pulse1 :dffe;
pulse_3 :node;
pulse3 :node;
pulse_cnt1 :lpm_counter with (lpm_width = width);
pulse_cnt2 :lpm_counter with (lpm_width = width+1);
pulse_cnt3 :lpm_counter with (lpm_width = width);
begin
pulse_cnt1.clock = clk;
pulse_cnt1.sload = pulse_cnt1.cout;
pulse_cnt1.data[] = !num[]+1;
pulse1 = pulse_cnt1.cout;
pulse1.clk = clk;
pulse_cnt2.clock = clk;
pulse_cnt2.sload = pulse2;
pulse_cnt2.data[] = !(vcc,num[])+2;
pulse2 = pulse_cnt2.q[width];
pulse_cnt3.clock = clk;
pulse_cnt3.sclr = pulse_3;
pulse_cnt3.data[] = num[];
pulse_3 = pulse_cnt3.q[]==(num[]-1);
pulse3 = dffe(pulse_3,clk,,,);
end;
-- =========================================================================
E-mail: info@telesys.ru