|
как умножить частоту CLK |
|
|
|
Oct 1 2008, 16:06
|
Знающий
   
Группа: Свой
Сообщений: 820
Регистрация: 12-05-08
Из: Israel
Пользователь №: 37 440

|
Помогите новичку. Задача-сделать на FPGA XILINX преобразователь параллельной шины в некоторое количество сигналов LVDS, то есть несколько обычных регистров с параллельной загрузкой и последовательным выводом. Вопрос. Для тактирования этих регистров нужна частота в 1.5 раза больше, чем клок, который поступает на вход (частота клока на входе может быть от 25 до 165 mHz, частота данных параллельной шины в 2 раза меньше, то есть на каждый бит данных приходится один перепад клока) . Как, используя встроенный DCM, получить эту частоту, то есть поделить CLK на 2 и умножить на 3? Вообще, как описываются операции с PCM? должен ли это быть какой-то модуль на VHDL или это делается как-то иначе? Заранее благодарен за помощь.
|
|
|
|
|
 |
Ответов
|
Oct 1 2008, 16:50
|

Частый гость
 
Группа: Свой
Сообщений: 180
Регистрация: 17-05-05
Из: Санкт-Петербург
Пользователь №: 5 128

|
Вот вырезка из Xilinx ISE 9.2 для Spartan 3A на Verilog
// DCM_SP : In order to incorporate this function into the design, // Verilog : the following instance declaration needs to be placed // instance : in the body of the design code. The instance name // declaration : (DCM_SP_inst) and/or the port declarations within the // code : parenthesis may be changed to properly reference and // : connect this function to the design. Unused inputs // : and outputs may be removed or commented out.
// <-----Cut code below this line---->
// DCM_SP: Digital Clock Manager Circuit // Spartan-3E/3A // Xilinx HDL Language Template, version 9.2.4i
DCM_SP #( .CLKDV_DIVIDE(2.0), // Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 // 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0 .CLKFX_DIVIDE(1), // Can be any integer from 1 to 32 .CLKFX_MULTIPLY(4), // Can be any integer from 2 to 32 .CLKIN_DIVIDE_BY_2("FALSE"), // TRUE/FALSE to enable CLKIN divide by two feature .CLKIN_PERIOD(0.0), // Specify period of input clock .CLKOUT_PHASE_SHIFT("NONE"), // Specify phase shift of NONE, FIXED or VARIABLE .CLK_FEEDBACK("1X"), // Specify clock feedback of NONE, 1X or 2X .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"), // SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or // an integer from 0 to 15 .DFS_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for frequency synthesis .DLL_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for DLL .DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE .FACTORY_JF(16'hC080), // FACTORY JF values .PHASE_SHIFT(0), // Amount of fixed phase shift from -255 to 255 .STARTUP_WAIT("FALSE") // Delay configuration DONE until DCM LOCK, TRUE/FALSE ) DCM_SP_inst ( .CLK0(CLK0), // 0 degree DCM CLK output .CLK180(CLK180), // 180 degree DCM CLK output .CLK270(CLK270), // 270 degree DCM CLK output .CLK2X(CLK2X), // 2X DCM CLK output .CLK2X180(CLK2X180), // 2X, 180 degree DCM CLK out .CLK90(CLK90), // 90 degree DCM CLK output .CLKDV(CLKDV), // Divided DCM CLK out (CLKDV_DIVIDE) .CLKFX(CLKFX), // DCM CLK synthesis out (M/D) .CLKFX180(CLKFX180), // 180 degree CLK synthesis out .LOCKED(LOCKED), // DCM LOCK status output .PSDONE(PSDONE), // Dynamic phase adjust done output .STATUS(STATUS), // 8-bit DCM status bits output .CLKFB(CLKFB), // DCM clock feedback .CLKIN(CLKIN), // Clock input (from IBUFG, BUFG or DCM) .PSCLK(PSCLK), // Dynamic phase adjust clock input .PSEN(PSEN), // Dynamic phase adjust enable input .PSINCDEC(PSINCDEC), // Dynamic phase adjust increment/decrement .RST(RST) // DCM asynchronous reset input );
// End of DCM_SP_inst instantiation
Теперь открываем для вашего спартана User Guide -> Design Consideration -> DCM и штудируем что за что отвечает. Умножить на 3 и разделить на 2 не проблема.
вот только мне кажеться 1,5 это не совсем то что Вам нужно.
|
|
|
|
|
Oct 1 2008, 17:25
|
Знающий
   
Группа: Свой
Сообщений: 820
Регистрация: 12-05-08
Из: Israel
Пользователь №: 37 440

|
Цитата(Sergei_Ilchenko @ Oct 1 2008, 20:50)  Вот вырезка из Xilinx ISE 9.2 для Spartan 3A на Verilog // DCM_SP : In order to incorporate this function into the design, // Verilog : the following instance declaration needs to be placed // instance : in the body of the design code. The instance name // declaration : (DCM_SP_inst) and/or the port declarations within the // code : parenthesis may be changed to properly reference and // : connect this function to the design. Unused inputs // : and outputs may be removed or commented out.
// <-----Cut code below this line---->
// DCM_SP: Digital Clock Manager Circuit // Spartan-3E/3A // Xilinx HDL Language Template, version 9.2.4i
DCM_SP #( .CLKDV_DIVIDE(2.0), // Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 // 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0 .CLKFX_DIVIDE(1), // Can be any integer from 1 to 32 .CLKFX_MULTIPLY(4), // Can be any integer from 2 to 32 .CLKIN_DIVIDE_BY_2("FALSE"), // TRUE/FALSE to enable CLKIN divide by two feature .CLKIN_PERIOD(0.0), // Specify period of input clock .CLKOUT_PHASE_SHIFT("NONE"), // Specify phase shift of NONE, FIXED or VARIABLE .CLK_FEEDBACK("1X"), // Specify clock feedback of NONE, 1X or 2X .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"), // SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or // an integer from 0 to 15 .DFS_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for frequency synthesis .DLL_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for DLL .DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE .FACTORY_JF(16'hC080), // FACTORY JF values .PHASE_SHIFT(0), // Amount of fixed phase shift from -255 to 255 .STARTUP_WAIT("FALSE") // Delay configuration DONE until DCM LOCK, TRUE/FALSE ) DCM_SP_inst ( .CLK0(CLK0), // 0 degree DCM CLK output .CLK180(CLK180), // 180 degree DCM CLK output .CLK270(CLK270), // 270 degree DCM CLK output .CLK2X(CLK2X), // 2X DCM CLK output .CLK2X180(CLK2X180), // 2X, 180 degree DCM CLK out .CLK90(CLK90), // 90 degree DCM CLK output .CLKDV(CLKDV), // Divided DCM CLK out (CLKDV_DIVIDE) .CLKFX(CLKFX), // DCM CLK synthesis out (M/D) .CLKFX180(CLKFX180), // 180 degree CLK synthesis out .LOCKED(LOCKED), // DCM LOCK status output .PSDONE(PSDONE), // Dynamic phase adjust done output .STATUS(STATUS), // 8-bit DCM status bits output .CLKFB(CLKFB), // DCM clock feedback .CLKIN(CLKIN), // Clock input (from IBUFG, BUFG or DCM) .PSCLK(PSCLK), // Dynamic phase adjust clock input .PSEN(PSEN), // Dynamic phase adjust enable input .PSINCDEC(PSINCDEC), // Dynamic phase adjust increment/decrement .RST(RST) // DCM asynchronous reset input );
// End of DCM_SP_inst instantiation Теперь открываем для вашего спартана User Guide -> Design Consideration -> DCM и штудируем что за что отвечает. Умножить на 3 и разделить на 2 не проблема.
вот только мне кажеться 1,5 это не совсем то что Вам нужно. Дайте, пожалуйста, ссылку на цитируемую выдержку. Что касается коэффициента 1.5 - я собираюсь передавать по одной паре LVDS каждые 3 бита параллельной шины. Было бы лучше передавать не 3, а скажем 4 бита, потому что тогда я бы обошелся меньшим количеством сигналов на выходе, но тогда частота клока LVDS должна бы была быть 165 x 2 = 330 mHz, а это превышает быстродействие указанной FPGA (до 640 mBps, если мне не изменяет память).
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|