|
Генератор клока на самой ПЛИС |
|
|
|
May 15 2009, 09:42
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 13-05-09
Пользователь №: 49 005

|
Можно ли сделать (делал ли кто-то) генератор клока на самой ПЛИС? Примерно так, как на приложенной схеме - типовая схема на двух инверторах. X, Y, Z входы/выходы ПЛИС и на них R и C, задающие частоту. S - внутренний сигнал. Первый элемент сделан AND, чтобы компилятор не мог просто соединить X и Z; кроме того, в моей задаче нужно, чтобы клок можно было отключать. Частота клока требуется очень небольшая (единицы КГц), и не хочется городить внешний генератор. Тип ПЛИС - один из младших MAX7000S (питание 5 В).
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
(1 - 9)
|
May 15 2009, 09:56
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(maharaj @ May 15 2009, 13:42)  Можно ли сделать (делал ли кто-то) генератор клока на самой ПЛИС? По такой схеме нельзя (схема работает за счет того, что лог. элемент является, в общем, аналоговым усилителем, а пути внутри ПЛИС намного сложнее). А вот добавив снаружи одногейтовый триггер шмитта, или используя ПЛИС, у которой есть входы с ТШ - другое дело. И еще вариант - реализация ТШ на ПЛИС при помощи двух резисторов, сопротивлением значительно выше зарядно-разрядного резистора. Тоже работает.
|
|
|
|
|
May 15 2009, 10:03
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 15-10-08
Из: Воронеж
Пользователь №: 40 984

|
Если не требуется высокая точность и стабильность по частоте, то в altera генератор можно сделать на основе LCELL Код library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_signed.all; LIBRARY altera_mf; USE altera_mf.altera_mf_components.all;
entity clk_gen is port( ena : in STD_LOGIC; clk : out STD_LOGIC ); end clk_gen;
architecture a of clk_gen is COMPONENT LCELL PORT (a_in : IN STD_LOGIC; a_out : OUT STD_LOGIC); END COMPONENT;
signal out_reg : STD_LOGIC_VECTOR(3 downto 0) := (others => '0');
begin
out_reg(0) <= ena and out_reg(3);
LCELL1 : LCELL PORT MAP( a_in => out_reg(0), a_out=> out_reg(1) ); LCELL2 : LCELL PORT MAP( a_in => out_reg(1), a_out=> out_reg(2) ); out_reg(3) <= not(out_reg(2));
clk <= out_reg(2); end a;
|
|
|
|
|
May 15 2009, 12:30
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 13-05-09
Пользователь №: 49 005

|
Спасибо всем, кто отликнулся. Вопрос прояснился. ОК. Цитата(vv_gulyaev) Если не требуется высокая точность и стабильность по частоте, то в altera генератор можно сделать на основе LCELL Тут две LCELL используются просто как линия задержки, так что генерить будет на частоте, соответствующей быстродействию ячеек, верно? Получится сколько-то МГц, мне же надо КГц-ы, придется делить - если останутся триггеры на это дело, то можно, иначе все равно придется делать на RC. Пока проект не сделан, непонятно, влезем ли в минимальную (7032), потому не знаю, есть ли запас по триггерам. В любом случае спасибо за код - может, пригодится.
|
|
|
|
|
May 15 2009, 16:01
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 15-10-08
Из: Воронеж
Пользователь №: 40 984

|
Цитата(maharaj @ May 15 2009, 16:30)  Тут две LCELL используются просто как линия задержки, так что генерить будет на частоте, соответствующей быстродействию ячеек, верно? Получится сколько-то МГц Да, частота будет сколько-то МГц.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|