今度は、周波数カウンタを作ろうと思う

周波数標準は完成していませんし、10MHz のスプリッタの設計も終わっていないのですが、今日は周波数カウンタのことを考えていました。せっかく精度の高いオシレターが手に入ったのですから、周波数カウンタを作らない手はないだろうと思ったのです。
先日から、標準ロジック IC のリスト*1を眺めながらカウンタを探していたのですが、24ビットものカウンタやラッチを組むための、うまいデバイスが見つからないなあと思ってました。後で、実は 24ビットも要らないことに気づいたのですが、それはさておき、せっかくなので勉強を兼ねて、CPLD で実装してみるかと考え始めました。Xilinx の CoolRunner II の評価ボードが 5000円以下で買えることに加え、実際の CPLD も 300円以下で買えることが分かったからです*2。パッケージも、手頃な 44ピン QFP くらいから揃っているのです。
そんな訳で、(覚えている限り)生まれて初めて Verilog でディジタル回路の設計をしてみました。10MHz を基準クロックとするので、24ビットの分周器と、24ビットのカウンタと、24ビットのラッチ(兼シフトレジスタ)をバカ正直に書いてみたのですが、なんと、XC2C64A には収まりませんでした。ガーン!*3
しようがないなあ、XC2C256 でも使うかと思っていたのですが、このサイズになると高価ですし、ピン数も 100本もあって、なんだかもったいない感じです。しかし家に帰ってシャワーを浴びていたら思いつきました。1秒ステップで 8桁の周波数カウンタを作るにしても、24ビットカウンタやラッチなんて要らないということを。人間、制約のない条件で設計しようとすると、工夫が働かなくなるという見本みたいなものです。
明日、8ビットか 16ビットの回路で、XC2C64A に収まるかどうか試してみます。ちなみに、CPLD だけで組むつもりはなくて、外付けに PIC18 辺りを使おうと思ってます。(← それを先に言えよ、って感じ?)

後記

論理を見直して、ついでに非同期クロックを減らしたら、16ビット構成で XC2C64A に収まりました。まだまだ Verilog 初心者なので、分からないことが多すぎです。

*1:例の、CQ 出版社から出ている、7400 とか載っているあれ。

*2:JTAG プログラマも、純正品でなければ $20〜30 で入手可能みたい。

*3:たぶん、私の回路設計も甘いんだと思うのですが。