Принудете щифта във Verilog до определена честота

Опитах се да потърся отговора на това, но безуспешно. Получавам проблеми, когато повторно синтезирам кода си и подозирам, че това се дължи на проблеми с часовника.

Използвам DCM за умножаване на външен кристален осцилатор от 25MHz до 50MHz. Мисля обаче, че инструментът няма да знае каква честота всъщност е кристалният осцилатор, тъй като е външен физически компонент. Моят код е по-долу:

//since our crystal oscillator is only 25Mhz, we use a DCM to multiply it by two since the desired is 50Mhz
DCM #(
    .CLKFX_DIVIDE   (2), 
    .CLKFX_MULTIPLY (4) 
) dcm_master (
    .CLKFB    (CLK_FB), 
    .CLKIN    (CLK_crystal), 
    .RST      (DcmReset),    
    .CLK0     (MasterClk0Unbuf), 
    .CLK90    (), 
    .CLK180   (), 
    .CLK270   (), 
    .CLK2X    (), 
    .CLK2X180 (),    
    .CLKFX    (MasterClkFxUnBuf), 
    .CLKFX180 (),
    .CLKDV    (), 
    .LOCKED   (DcmLocked),
    .STATUS   (),
    .PSCLK    (1'b0),
    .PSEN     (1'b0),
    .PSINCDEC (1'b0),
    .PSDONE   ()    
); 

//we provide feedback to the DCM's phase input (possibly not neccessary)
BUFG bufg_master_dcm_clk_0  ( .I(MasterClk0Unbuf),  .O(CLK_FB) );
BUFG bufg_master_dcm_clk_fx ( .I(MasterClkFxUnBuf), .O(CLK_FX) );

//code taken from xilinx. We toggle using a bufgmux between the onboard and external clock
// BUFGMUX: Global Clock Buffer 2-to-1 MUX
// Spartan-3
// Xilinx HDL Libraries Guide, version 13.2
BUFGMUX BUFGMUX_inst (
.O(CLK), // Clock MUX output
.I0(CLK_FX), // Clock0 input
.I1(CLK_local), // Clock1 input
.S(sw[6]) // Clock select input
);

Този код в ucf ще принуди ли инструмента да разпознае изхода на моя DCM като 50MHz?

PIN "bufg_master_dcm_clk_fx.O" TNM_NET = CLK50;
TIMESPEC TS_CLKBuf = PERIOD "CLK50" 100 MHz HIGH 50%;  

Освен това, правилно ли използвам BUFG? Xilinx казва, че трябва да използвам IBUFG, за да свържа външния часовник към моя DCM, и получавам грешки, че моите BUFG могат да адресират само половината чип (което си представям, че ще стане обезпокоително).

Благодаря,

Нейтън


person Nathan Hutton    schedule 18.03.2013    source източник
comment
Има ли причина да не можете просто да използвате always @ (posedge CLK or negedge CLK)?   -  person N8TRO    schedule 19.03.2013
comment
@Nathan G - извежда грешка, ако се опитате да направите това - Стилът на описание, който използвате, за да опишете регистър или резе, не се поддържа в текущата версия на софтуера. Не мога лесно да си представя как бихте карали джапанки от двата ръба на часовника.   -  person Nathan Hutton    schedule 19.03.2013
comment
Това въпрос ли е относно прилагането на часовникови ограничения за синтез, а не за изпълнение на Verilog?   -  person Morgan    schedule 25.03.2013
comment
@Morgan - Това е правилно   -  person Nathan Hutton    schedule 27.03.2013


Отговори (2)


Мисля, че ограниченията на часовника ви са изключени. Трябва да ограничите входа към DCM -- DCM знае какво да прави с изходите. Ето какво бих използвал:

NET clk_in TNM_NET = tnm_clk_in;
TIMESPEC TS_clk_in = PERIOD tnm_clk_in 40ns;

където clk_in е кристалът (CLK_crystal във вашия случай). Уверете се, че кристалът е свързан към щифт за часовник на вашето устройство.

person Doov    schedule 02.07.2013

Бих искал първо да тествам това. За семейството на Spartan-3 FPGA, използвайки един от DCM. Това е шаблонът, който ISE произвежда.

Забележете, че има специален CLK2X.

Също така, въз основа на ръководството за потребителя: .CLKFB трябва да се управлява от източник BUFG.

     wire i_FeedBack;
     wire o_FeedBack;

     BUFG clkFBBuf(
            .I(i_FeedBack),
            .O(o_FeedBack)
     );


     DCM #(
 [...]
  .CLKFX_DIVIDE(1),   // Can be any integer from 1 to 32
  .CLKFX_MULTIPLY(2), // Can be any integer from 2 to 32
 [..]

 ) DCM_inst (
      .CLK0(i_FeedBack),     // 0 degree DCM CLK output
      .CLK2X(CLK2X),   // 2X DCM CLK output
      [...]
      .CLKFX(CLKFX),   // DCM CLK synthesis out (M/D)
      .CLKFB(o_FeedBack),   // DCM clock feedback
      .CLKIN(clk),   // Clock input (from IBUFG, BUFG or DCM)
      [...]
   );
person GCon    schedule 29.06.2013