Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Генератор на ПЛИС
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
admin
Оказывается генератор на ПЛИС (делали на 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ов - понижаем.
smile.gif)
Работает smile.gif) Генерит частоту где-то в районе 10ов мегагерц.
makc
Так подобные фокусы делали еще на микросхемах 155 серии. smile.gif

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

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

PPS: А некоторые ПЛИС (Spartan XL) имеют встроенный генератор на борту. Только его стабильность тоже оставляет желать лучшего.
pergunt
А что за элемент в SPARTAN XL - является генератором и какая частота?
(Что-то в библиотеке и даташите не увидел)?
Uuftc
Цитата(makc @ Jan 31 2005, 11:37)
PPS: А некоторые ПЛИС (Spartan XL) имеют встроенный генератор на борту. Только его стабильность тоже оставляет желать лучшего.
*


О как ...
а в spartan3 нет?
а то я уже стал задумываться, как done не отпускать и пользоваться TCK
или BSCAN_SPARTAN3 ...
makc
Цитата(pergunt @ Jan 31 2005, 12:22)
А что за элемент в 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.


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

Цитата(Uuftc @ Jan 31 2005, 12:31)
Цитата(makc @ Jan 31 2005, 11:37)

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


О как ...
а в spartan3 нет?
*



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

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


Не пойму зачем нужны такие сложности? Неужели нельзя поставить обыкновенный генератор?
Uuftc
Цитата(makc @ Jan 31 2005, 13:05)
Не пойму зачем нужны такие сложности? Неужели нельзя поставить обыкновенный генератор?
*


В моей схеме Spartan3 питается clk от DDS. посторонний клок нужен лиш для того, чтоб запустить DDS - у нее видете-ли после ресета - 0 Hz частота blush.gif
Andy-P
На сайте Xilinx есть статья: Six Easy Pieces (Non-Synchronous Circuit Tricks) 04/02/2003 By Peter Alfke Director, Applications Engineering,
где описана реализация Stable RC Oscillator w00t.gif
makc
А еще можно сделать нечто подобное. На 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;


Цитата(Andy-P @ Jan 31 2005, 13:55)
На сайте Xilinx есть статья: Six Easy Pieces (Non-Synchronous Circuit Tricks) 04/02/2003 By Peter Alfke Director, Applications Engineering,
где описана реализация Stable RC Oscillator w00t.gif
*


Я так понял, что человеку нужен встроенный в кристалл генератор. smile.gif
Andy-P
Цитата(makc @ Jan 31 2005, 15:00)
Цитата(Andy-P @ Jan 31 2005, 13:55)
На сайте Xilinx есть статья: Six Easy Pieces (Non-Synchronous Circuit Tricks) 04/02/2003 By Peter Alfke Director, Applications Engineering,
где описана реализация Stable RC Oscillator w00t.gif
*


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



Генератор, описанный в статье, использует в качестве активных усилительных элементов внутренние ячейки 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 "
makc
Цитата(Andy-P @ Jan 31 2005, 15:18)
Генератор, описанный в статье, использует в качестве активных усилительных элементов внутренние ячейки FPGA, а времязадающие элементы – два резистора и конденсатор.
*


Вот именно. Т.е. он требует внешних элементов, а значит не может считаться в полной мере внутренним. Скорее, комплексным. smile.gif
sK0T
Цитата(udofun @ Jan 31 2005, 12:29)
Код
a : node;
b : node;
c : node;

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

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


Небольшое уточнение: если не сделать a = LCELL(LCELL(!b)); то частота будет постоянно срываться.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.