Página 1 de 1

DCM no Spartan 3

MensagemEnviado: 09 Jul 2013 01:32
por mastk
Alguém sabe como ligar essa b*****?
Estou usando o ISE 14.1 Web.
Desde de já obrigado.

http://www.xilinx.com/support/documentation/application_notes/xapp462.pdf

Nesse documento tem uma explicação, só que já não é mais valida.

Re: DCM no Spartan 3

MensagemEnviado: 09 Jul 2013 07:12
por msamsoniuk
mastk escreveu:Alguém sabe como ligar essa *u*ceta?
Estou usando o ISE 14.1 Web.
Desde de já obrigado.

http://www.xilinx.com/support/documentation/application_notes/xapp462.pdf

Nesse documento tem uma explicação, só que já não é mais valida.


opa! :)

bom, nao sei como esta seu clock de entrada e como estara a saida... mas tem essa receita de bolo q eu uso para o DCM em modo DFS:

Código: Selecionar todos
module fpga_top(
   input REF_CLK, // esse cara em um pino de clock
   ... // outros sinais in/out
);

// system clock, note o comentario abaixo, ele eh muito importante
    // cuidado aqui embaixo:
    wire SYS_CLK; // synthesis attribute clock_buffer of SYS_CLK is bufg;
    // cuidado ali em cima!
    wire SYS_PLL; // status locked/unlocked.
    reg SYS_RES = 1; // reset interno
    reg [7:0] RESET = 255;

    always@(negedge REF_CLK)
    begin
        RESET <= RESET?RESET-1:0;
    end
   
    always@(posedge REF_CLK)
    begin
        SYS_RES <= |RESET;
    end

    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(4),                         // Can be any integer from 1 to 32
      .CLKFX_MULTIPLY(15),                      // Can be any integer from 2 to 32
      .CLKIN_DIVIDE_BY_2("FALSE"),              // TRUE/FALSE to enable CLKIN divide by two feature
      .CLKIN_PERIOD(244),                       // Specify period of input clock
      .CLKOUT_PHASE_SHIFT("NONE"),              // Specify phase shift of NONE, FIXED or VARIABLE
      .CLK_FEEDBACK("NONE"),                    // 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_1
    (
      //.CLK0(CLK0),            // 0 degree DCM CLK output
      //.CLK180(CLK180),        // 180 degree DCM CLK output
      //.CLK270(CLK270),        // 270 degree DCM CLK output
      //.CLK2X(CLKOUT),         // 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(SYS_CLK),          // DCM CLK synthesis out (M/D)
      //.CLKFX180(CLKFX180),    // 180 degree CLK synthesis out
      .LOCKED(SYS_PLL),         // DCM LOCK status output
      //.PSDONE(DFS_PSDONE),    // Dynamic phase adjust done output
      //.STATUS(DFS_STATUS),    // 8-bit DCM status bits output
      //.CLKFB(CLK0),           // DCM clock feedback
      .CLKIN(REF_CLK),          // Clock input (from IBUFG, BUFG or DCM)
      //.PSCLK(PSCLK),          // Dynamic phase adjust clock input
      .PSEN(1'b0),              // Dynamic phase adjust enable input
      //.PSINCDEC(PSINCDEC),    // Dynamic phase adjust increment/decrement
      .RST(SYS_RES)             // DCM asynchronous reset input
    );   

    ... // resto do codigo

endmodule


verilog, obviamente, pq VHDL eh para tolos hehehe... esse cara, por exemplo, pega o REF_CLK de 4MHz, divide por 4 e multiplica por 15 para produzir 15MHz. o modulo DCM foi produzido por um daqueles templates prontos q tem lah no tool da lampada, e eh especifico para uma spartan-3E (XC3S100E). se vc estiver usando outro modelo, tem q ver se o template nao tem um ajuste FACTORY_JF diferente.

mas, como vc pode ver, a maioria do codigo do template esta comentada. cheguei nisso partindo de tudo comentado, clock aplicado na entrada, clock medido na saida e fui descomentando item por item ali ateh entender como funciona. tem N opcoes, mas o DFS foi suficiente para minha aplicacao, talvez seja suficiente para a sua tambem. vc precisa prestar atencao nos parametros de configuracao, em especial CLKIN_PERIOD, que especifica o periodo de entrada em nanosegundos. no DFS eu nao exijo nenhuma relacao de fase e sincronismo, mas obviamente a fase e sincronismo serao relativamente consideradas, visto que o clock de saida segue o clock de entrada.

o reset ali eh um cara chato e importante: o clock demora um tempo para estabilizar, soh entao o RESET deve liberar o DFS para operar, do contrario o DFS nao funciona direito.

bom, sobre versao do tool: para spartan-3E eu uso o 10.1 mesmo... versoes mais novas, realmente, soh uso se for para spartan-6. o q eu vejo eh que nao vale a pena usar a ultima versao: eh maior, consome mais memoria, mais processamento e o tool em si fica pior a cada ano que passa. o esquematico e a simulacao no 10.1 eu acho mais bonitas tb hahaha

Re: DCM no Spartan 3

MensagemEnviado: 11 Jul 2013 11:04
por mastk
Estou usando VHDL mesmo.
Verilog tem suas vantagens, só que ainda assim, precisaria investir um tempo para migrar e VHDL ainda é útil.

Re: DCM no Spartan 3

MensagemEnviado: 11 Jul 2013 12:52
por pbernardi
O modo de se instancias o DCM existe tanto em verilog quanto em VHDL. Verifique esse documento aqui, tem um modelo para Verilog e VHDL:

http://www.xilinx.com/support/documenta ... n3_hdl.pdf

Esse é pra Spartan-3, mas as outras devem ser bem parecidas. Seu usar outra FPGA, veja o documento equivalente, o módulo DCM pode ter algumas variações.

Re: DCM no Spartan 3

MensagemEnviado: 12 Jul 2013 14:03
por mastk
Caramba, valeu pbernardi, é o que eu procurava e mais.