Hello, "Alexander Borovsky" <***@vast.spb.ru>
On Fri, 11 Mar 2005 16:43:29 +0000 (UTC), you wrote:
AB> Скажем на MAX3128 надо сделать 16тиканальный 4хбитный ШИМ, как оно проще
AB> делается? Параметры шима будет задавать контроллер естественно.
Процитирую сам себя...
From: Dmitry Kuznetsov <***@orc.ru>
Newsgroups: fido7.ru.embedded
Subject: Re: Посоветуйте ПЛИС
Date: Mon, 18 Jun 2001 12:14:54 +0000 (UTC)
From: Dmitry Kuznetsov <***@orc.ru>
Newsgroups: fido7.ru.embedded
Subject: Re: Микросхемка ШИМ или ПИД
Date: Tue, 11 Sep 2001 20:27:22 +0000 (UTC)
Если задать NUMBER = 16 и WIDTH = 4, то в МАХ3128 влезает...
================ цитата ON =================
Хочу сделать следующее: Мне нужно 96 ШИМов 8-ми разрядных,
хочу взять 12 ПЛИС (еще незнаю каких) и организовать по 8
ШИМов в каждой ПЛИС.
Вот накидал для MAX+ на AHDL.
Код не претендует на оптимальность и безглючность.
А для оценки сойдет и такой.
PARAMETERS ( NUMBER = 96, WIDTH = 8 );
CONSTANT nu = NUMBER; CONSTANT aw = CEIL(LOG2(nu));
CONSTANT dw = WIDTH;
SUBDESIGN pwm_96 (
a[aw-1..0], d[dw-1..0], /wr, clk, /rst : INPUT;
out[nu-1..0] : OUTPUT;
)
VARIABLE
cnt[dw-1..0] : DFF; -- общий счетчик
set : LCELL; -- установка триггеров в "1"
reg[nu-1..0][dw-1..0] : DFFE; -- значения PWM
fix[nu-1..0] : DFFE; -- триггеры PWM
cmp[nu-1..0] : LCELL; -- компараторы сброса в "0"
BEGIN
cnt[].clk = clk; cnt[] = cnt[] + 1; cnt[].clrn = /rst;
set = cnt[]==0;
reg[][].clk = /wr; fix[].clk = !clk;
FOR i IN nu-1 TO 0 GENERATE
reg[i][].ena = a[]==i; reg[i][] = d[];
cmp[i] = reg[i][]==cnt[];
fix[i].ena = set # cmp[i]; -- два окна для триггера
fix[i].d = set & !cmp[i]; -- (установка и сброс)
END GENERATE;
out[] = fix[];
END;
================ цитата OFF =================
<< Алкоголь - мое топливо! Я - могучий робот! Б-и-и-и-п!
<<
Dmitry Kuznetsov, Moscow, http://www.orc.ru/~dkuzn/index.htm
[Team Беговая Черепаха] [Team LEXX]
*