ULX3Sでクロックの分周と逓倍
分周と逓倍(ていばい)
100MHzのクロックから25MHzや10MHzのクロックを作るのが分周
100MHzのクロックから125MHzや200MHzのクロックを作るのが逓倍
FPGAでクロックの分周や逓倍をするにはPLLを使うと良いらしい
PLL(Phase-Locked Loop)
PLLの役目としては、外から入っきたクロックをPLLに入れ、クロックを2倍にしたり、半分にしたり、位相をずらして立ち上がりではなく立ち下がりにするとか、こういう動きをして内部にクロックを供給する役目があります
ULX3Sでクロックの分周・逓倍するには、ECP5で使えるPLL「EHXPLLL」を利用する
EHXPLLLを生で使うのは大変なので、ecppll コマンドでソース生成するのがおすすめ
code:sh
$ ecppll --clkin_name clki -i 25 --clkout0_name clko_50 -o 50 --clkout1_name clko_50_90 --clkout1 50 --phase1 90 -f pll.v
sdiv 12
Pll parameters:
Refclk divisor: 1
Feedback divisor: 2
clkout0 divisor: 12
clkout0 frequency: 50 MHz
clkout1 divisor: 12
clkout1 frequency: 50 MHz
clkout1 phase shift: 90 degrees
VCO frequency: 600
code:生成されたpll.v
module pll
(
input clki, // 25 MHz, 0 deg
output clko_50, // 50 MHz, 0 deg
output clko_50_90, // 50 MHz, 90 deg
output clko_100, // 100 MHz, 0 deg
output locked
);
(* FREQUENCY_PIN_CLKI="25" *)
(* FREQUENCY_PIN_CLKOP="50" *)
(* FREQUENCY_PIN_CLKOS="50" *)
(* FREQUENCY_PIN_CLKOS2="100" *)
(* ICP_CURRENT="12" *) (* LPF_RESISTOR="8" *) (* MFG_ENABLE_FILTEROPAMP="1" *) (* MFG_GMCREF_SEL="2" *)
.PLLRST_ENA("DISABLED"),
.INTFB_WAKE("DISABLED"),
.STDBY_ENABLE("DISABLED"),
.DPHASE_SOURCE("DISABLED"),
.OUTDIVIDER_MUXA("DIVA"),
.OUTDIVIDER_MUXB("DIVB"),
.OUTDIVIDER_MUXC("DIVC"),
.OUTDIVIDER_MUXD("DIVD"),
.CLKI_DIV(1),
.CLKOP_ENABLE("ENABLED"),
.CLKOP_DIV(12),
.CLKOP_CPHASE(5),
.CLKOP_FPHASE(0),
.CLKOS_ENABLE("ENABLED"),
.CLKOS_DIV(12),
.CLKOS_CPHASE(8),
.CLKOS_FPHASE(0),
.CLKOS2_ENABLE("ENABLED"),
.CLKOS2_DIV(6),
.CLKOS2_CPHASE(5),
.CLKOS2_FPHASE(0),
.FEEDBK_PATH("CLKOP"),
.CLKFB_DIV(2)
) pll_i (
.RST(1'b0),
.STDBY(1'b0),
.CLKI(clki),
.CLKOP(clko_50),
.CLKOS(clko_50_90),
.CLKOS2(clko_100),
.CLKFB(clko_50),
.CLKINTFB(),
.PHASESEL0(1'b0),
.PHASESEL1(1'b0),
.PHASEDIR(1'b1),
.PHASESTEP(1'b1),
.PHASELOADREG(1'b1),
.PLLWAKESYNC(1'b0),
.ENCLKOP(1'b0),
.LOCK(locked)
);
endmodule
参考
learn-fpga
PLLの分周/逓倍(ていばい)
FPGAのPLLの使い方!ロック信号と一緒にクロック出力してみた
ASIC屋が疑問に感じる「FPGAにおけるPLLの同期設計は?」
ecppllコマンド
「I’d like to configure a ECP5 PLL (EHXPLLL) to certain input and output clocks. Do I really need to download Lattice Diamond or something like that or is it on any doc? Tips?」
https://gyazo.com/cb50fa99e991d282a8f4b2381d9de4d0