Перейти к содержанию
    

Генератор на ПЛИС

Оказывается генератор на ПЛИС (делали на Altera APEX)

делается довольно просто:

 

a : node;
b : node;
c : node;

a = LCELL( not b);
b = LCELL( not c);
c = LCELL( not a);

 

частота - с любого nod'а - a, b, или c.

 

LCELL-ами можно подбирать частоту, т.е. добавляем LCELLов - понижаем.

:))

Работает :)) Генерит частоту где-то в районе 10ов мегагерц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так подобные фокусы делали еще на микросхемах 155 серии. :)

 

Только вот есть одна проблема у этого генератора - стабильность частоты. И из-за нестабильности этой частоты область применения подобного решения очень ограничена.

 

PS: На подобном принципе основана и схема удвоения частоты входного сигнала без использования PLL и DLL.

 

PPS: А некоторые ПЛИС (Spartan XL) имеют встроенный генератор на борту. Только его стабильность тоже оставляет желать лучшего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что за элемент в SPARTAN XL - является генератором и какая частота?

(Что-то в библиотеке и даташите не увидел)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PPS: А некоторые ПЛИС (Spartan XL) имеют встроенный генератор на борту. Только его стабильность тоже оставляет желать лучшего.

 

О как ...

а в spartan3 нет?

а то я уже стал задумываться, как done не отпускать и пользоваться TCK

или BSCAN_SPARTAN3 ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что за элемент в SPARTAN XL  - является генератором и какая частота?

(Что-то в библиотеке и даташите не увидел)?

 

Есть он в даташите, и в библиотеке он тоже есть, только пользоваться им я не рекомендую. А называется он в библиотеке OSC4. По поводу частоты в даташите написано следующее:

On-Chip Oscillator

Spartan Series devices include an internal oscillator. This

oscillator is used to clock the power-on time-out, for configuration

memory clearing, and as the source of CCLK in

Master configuration mode. The oscillator runs at a nominal

8 MHz frequency that varies with process, Vcc, and temperature.

The output frequency falls between 4 MHz and

10 MHz.

 

Т.е. качество этого генератора оставляет желать лучшего. :(

 

PPS: А некоторые ПЛИС (Spartan XL) имеют встроенный генератор на борту. Только его стабильность тоже оставляет желать лучшего.

 

О как ...

а в spartan3 нет?

 

В Spartan3, если я правильно понимаю, ничего такого нет. В нем есть встроенный генератор для загрузки прошивки в Master-режиме, но воспользоваться им, как я понимаю, в обычной работе не удастся. Да и не понятно, зачем это может понадобиться...

 

а то я уже стал задумываться, как done не отпускать и пользоваться TCK

или BSCAN_SPARTAN3 ...

 

Не пойму зачем нужны такие сложности? Неужели нельзя поставить обыкновенный генератор?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не пойму зачем нужны такие сложности? Неужели нельзя поставить обыкновенный генератор?

 

В моей схеме Spartan3 питается clk от DDS. посторонний клок нужен лиш для того, чтоб запустить DDS - у нее видете-ли после ресета - 0 Hz частота :blush:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На сайте Xilinx есть статья: Six Easy Pieces (Non-Synchronous Circuit Tricks) 04/02/2003 By Peter Alfke Director, Applications Engineering,

где описана реализация Stable RC Oscillator :w00t:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А еще можно сделать нечто подобное. На Spartan-2 со Speedgrade 5 должно давать период около 15 нс:

 

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity clk_gen is    
   Port (  en    : in std_logic;
     clk : out std_logic
    );
end clk_gen;

architecture RTL of clk_gen is
signal a: std_logic_vector( 2 downto 0 ) := (others => '0');
attribute keep : string;
attribute keep of a: signal is "true";
signal c: std_logic := '0'; 
begin

clk <= c;

OSCLoopback:      
    a(2) <= not a(1);
    a(1) <= not a(0);
    a(0) <= not a(2) and en;

Synchroniser:
    process( a(0) )
    begin
 if rising_edge(a(0)) then
     c <= not c;
 end if;
    end process;
end RTL;

 

На сайте Xilinx есть статья: Six Easy Pieces (Non-Synchronous Circuit Tricks) 04/02/2003 By Peter Alfke Director, Applications Engineering,

где описана реализация Stable RC Oscillator :w00t:

 

Я так понял, что человеку нужен встроенный в кристалл генератор. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На сайте Xilinx есть статья: Six Easy Pieces (Non-Synchronous Circuit Tricks) 04/02/2003 By Peter Alfke Director, Applications Engineering,

где описана реализация Stable RC Oscillator :w00t:

 

Я так понял, что человеку нужен встроенный в кристалл генератор. :)

 

Генератор, описанный в статье, использует в качестве активных усилительных элементов внутренние ячейки FPGA, а времязадающие элементы – два резистора и конденсатор.

 

"This RC oscillator is, to a first-order, insensitive to variations in Vcc, input threshold, and thus temperature. The oscillator starts and runs under any combination of external conditions -- it cannot stop. The internal latch prevents fast double-pulses while the input slowly passes through the input threshold. The only drawback is the need for three dedicated device pins.

This circuit was tested with R = 470 kilohm and C = 0.01 microfarad (10,000 pF). Over a wide temperature range of -40 to +100 degrees C, the frequency varied between 93.9 and 108.1 Hz, with a duty cycle between 48.1 % and 48.7 % (!). Some of the frequency variation may be due to the temperature coefficient of the external components.

These experimental results suggest that f = 0.47 / RC "

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Генератор, описанный в статье, использует в качестве активных усилительных элементов внутренние ячейки FPGA, а времязадающие элементы – два резистора и конденсатор.

 

Вот именно. Т.е. он требует внешних элементов, а значит не может считаться в полной мере внутренним. Скорее, комплексным. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

a : node;
b : node;
c : node;

a = LCELL( not b);
b = LCELL( not c);
c = LCELL( not a);

Работает :)) Генерит частоту где-то в районе 10ов мегагерц.

 

Небольшое уточнение: если не сделать a = LCELL(LCELL(!b)); то частота будет постоянно срываться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...