Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Минимальный skew на Циклоне
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
-=Vitaly=-
Здравствуйте.

Есть следующая задачка. Имею входную частоту 80 Мгц, из нее с надо сделать 4 частоты около 100 КГц, 200 КГц, 500 КГц, 1 МГц. Микросхема ALTERA -EP1C6Q240-PQFP. Но каждая частота должна присутствовать на 2 х ножках плиса в прямом и инвертированном виде. Очень желательно получить минимальній skew между инвертированной и неинвертированной частотами.
Как это лучше сделать??

Вариант 1. Поделить частоту, до требуемого значения, а потом подать на блок PLL для инвертирования и оттуда на ножки плис??

СПС
alexadmin
Цитата(-=Vitaly=- @ May 21 2007, 13:16) *
Вариант 1. Поделить частоту, до требуемого значения, а потом подать на блок PLL для инвертирования и оттуда на ножки плис??


Поделить триггерами до нужного значения, проинвертировать логикой, поставить еще один ряд триггеров. Триггеры разместить в IOB. разбег будет равен разбегу прихода клока в эти иобы.
dxp
Цитата(-=Vitaly=- @ May 21 2007, 16:16) *
Есть следующая задачка. Имею входную частоту 80 Мгц, из нее с надо сделать 4 частоты около 100 КГц, 200 КГц, 500 КГц, 1 МГц. Микросхема ALTERA -EP1C6Q240-PQFP. Но каждая частота должна присутствовать на 2 х ножках плиса в прямом и инвертированном виде. Очень желательно получить минимальній skew между инвертированной и неинвертированной частотами.
Как это лучше сделать??

Сформируйте эти сигналы внутри ПЛИС, используйте выходные триггеры в IO элементах микросхемы - подайте эти сигналы на входы данных этих триггеров, тактируйте эти триггеры одним и тем же клоком - наружу они будут вываливаться максимально одновременно. Точнее, по-моему, труднее получить.
-=Vitaly=-
Цитата(dxp @ May 21 2007, 12:41) *
Сформируйте эти сигналы внутри ПЛИС, используйте выходные триггеры в IO элементах микросхемы - подайте эти сигналы на входы данных этих триггеров, тактируйте эти триггеры одним и тем же клоком - наружу они будут вываливаться максимально одновременно. Точнее, по-моему, труднее получить.


А скважность при таком редиме не поплывет?? Надо 50 %.
Всем спасибо, кстати мой вариант отпал практически сразу, pll на такой низкой частоте не заводиться.
dxp
Цитата(-=Vitaly=- @ May 21 2007, 16:45) *
А скважность при таком редиме не поплывет?? Надо 50 %.

А причем тут скважность? Какую сделаете, такая и будет. Сигналы-то Вы внутри ПЛИС формируете, а уж только потом заводите на триггеры IO элементов. А клок - он их только тактирует и все. Если поданные на выход сигналы будут иметь сважность 2, то и на выходе они будут такими же, только выравненными по фронтам с точностью до перекоса клока, который есть величина небольшая - во всяком случае лучше не получится.
-=Vitaly=-
Цитата(dxp @ May 21 2007, 14:03) *
потом заводите на триггеры IO элементов

Всем большущий a14.gif , особенно DXP beer.gif
Ого, а как произвести эту чудную операцию в VERILOGe, ничего подобного не встречал, есть аттрибуты какие-то?

Это в Аssignment Editor->Logic Options выбрать регистр и присвоить ему Fast Output Enable Register??
dxp
Цитата(-=Vitaly=- @ May 21 2007, 19:20) *
Ого, а как произвести эту чудную операцию в VERILOGe, ничего подобного не встречал, есть аттрибуты какие-то?

Это в Аssignment Editor->Logic Options выбрать регистр и присвоить ему Fast Output Enable Register??

Да, именно так. А в самом верилоге можно директиву задать для пинов модуля верхнего уровня. В доке все описано.
sazh
Да, именно так. А в самом верилоге можно директиву задать для пинов модуля верхнего уровня. В доке все описано
////////////////////////
Если директиву задать, тогда и на пины наверно надо тоже в тексте задавать.
А то ведь это все не дублируется автоматом в редакторе ассигнований.
По идее все должно быть в одном месте для наглядности.
-=Vitaly=-
Спасибо Всем, выкладываю код

Код
`timescale 1 ns / 1 ps

module CLOCK_DIV ( CLK80MHz ,SELECT_CLK ,CLK_OUT,CLK_OUT_INV );

output CLK_OUT;
reg CLK_OUT;
output CLK_OUT_INV;
reg CLK_OUT_INV;
input CLK80MHz;
input [3:0] SELECT_CLK;

reg [8:0] DIVIDER;
reg CLK_OUT_INT;
wire CLK_OUT_INV_INT;

always@(posedge CLK80MHz)
    DIVIDER<=DIVIDER+1;
    
always@(SELECT_CLK,DIVIDER)
    casex(SELECT_CLK)
        4'b0001:CLK_OUT_INT<=DIVIDER[8]; //freq=156250 Hz;
        4'b0010:CLK_OUT_INT<=DIVIDER[7]; //freq=312500 Hz;
        4'b0100:CLK_OUT_INT<=DIVIDER[6]; //freq=625000 Hz;
        4'b1000:CLK_OUT_INT<=DIVIDER[5]; //freq=1250000 Hz;
        default: CLK_OUT_INT<=DIVIDER[5];
    endcase      
    
assign CLK_OUT_INV_INT=!CLK_OUT_INT;
    
always@(posedge CLK80MHz)
    begin
    CLK_OUT_INV<=CLK_OUT_INV_INT;
    CLK_OUT<=CLK_OUT_INT;      
    end
    
endmodule


Даже без мапа в IOB получились довольно приемлемые результаты skew около 1нс и даже чуть меньше. Спасибо еще раз!! a14.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.