ソフトでタイマを使うときは、だいたいカウントダウンするレジスタに初期値を突っ込んでGO!というくらいだと思う。
まあ、分周とかそんなのはあるかもしれないが、基本的にはカウンタと同じイメージだ。
マイコンだとタイマユニットの数が決まっているので、違う分周で動かしたり、さらにカウンタを用意してソフト的に分周させたりさせるけど、FPGAだったら実はそこまで考えずに使えるものかもしれない。
まあ、そういう考察はさておき、自分が期待通りに操作できているかを確認するために、クロックをVHDLでカウントして、どっかのGPIOをパタパタさせたものをロジアナで計測してみるのは悪くないと思う。
50MHz・・・ってことよね?
PS_CLKにはそのまま入っているのに、L16にはPHYが挟まっているので、あまり自信がない。
RMIIは50MHzだったような気がするので、妥当なのかなぁ。
50M = 0x2FAF080ということで、32bitに収まる。
おっと待て、最上位が2だから、26bitでよいのか。。。と思ったが、28bitほしいといわれた。
これで計測すると、100KHzサンプリングでほぼ400msecになった。
architecture Behavioral of blink_led is signal counter : std_logic_vector(27 downto 0) := x"2FAF080"; signal flag : std_logic := '0'; begin ld0 <= flag; process(clk) begin if clk'event and clk = '1' then counter <= counter - 1; if counter = x"0000000" then flag <= not flag; counter <= x"2FAF080"; end if; end if; end process; end Behavioral;
ええっと?
50,000,000回カウントして400msecということは・・・2.5倍の速度?
0x7735940にすると、だいたい1秒くらいになっているようだけど、うちのロジアナだとそんなに長いスパンは精度が保てないので、あきらめて10分の1にしよう。
値を0xBEBC20にして、400KHzで計測して、だいたい100msecと言ってよいだろう。
10進数だと、12,500,000。
12.5x106回カウントして100msecだから、Hzに換算すると10倍して125MHzか。
ZYBOのマニュアルにも、125MHzという数字は出ていた。
めんどうがらずに、訳そう。
Zynq-Z7010のPL部は、2つのMMCMと2つのPLLを持っている。
4つのPS部のクロックも、125MHzの外部参照クロックも、MMCMやPLLの入力として使うことができる。
あ、もう少し続きがあった。
Figure 13(上の方に載せた図)はZYBOのクロック概略を示している。
Ethernet PHY空のクロック出力は125MHzの参照クロックとしてPL部が使う。
ああ、書いてあるとおりなんだ。。。
大したことはやらなかったけれども、計算した値で動かして、計算した結果を出すというのは、私の中では意味があることだった。
(計算結果は後付けだけどね)
わからんところは、ちょっとずつ潰していけばよいのだ。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。