公開日:2025/09/27
title.png

36th Season


#36-4 RTCユニット再設計

 以前、中華FPGAボードで設計した実時間時計RTC400ユニットですが、まだCmod A7ボード(FPGA)への移植が未完了でした。
 今回はその移植に際して、実用的で現実的な解へ落とし込んでみたいと思います。

旧RTC400ユニット

 旧RTC400ユニットを設計した時の記事をリンクしておきます。

  「#22-9 RTCを設計する(プロローグ)

  「#22-10 RTCを設計する(エピローグ)

 読んでいただくと解るのですが、無駄に、まじめに設計してしまった印象があります。何が無駄か、って?

 挙句の果てに、システムクロックを可変にしても、実時間を刻めるようにと導入したclk_mhz[7:0]信号が、非整数比分周器に適用できず、移植がとん挫していました。

非整数比分周器

 非整数比分周器の設計記事は、こちらを参照して見てください。

a229_fracdiv.png

 クロックの分周比は、24MHz:32,768Hzで間違いありません。このままでは、特に24MHz=24,000,000Hzの方の数値が大き過ぎて扱い難いため、まず、最大公約数GCDを求めました。24MHzと32,768Hzの最大公約数は、512と判りました。

  24MHz:32,768Hz=46,875:64 (両辺GCD=512で除した)

 24,000,000が46,875(16ビット)まで小さくなったこともさることながら、32,768の方も64まで小さくなったのはGoodでした。

 ここで、システムクロック24MHzを可変にしようとした時、まず、組み合わせ論理でGCDを求める事が困難なため、数値を小さくすることができず、演算ビット幅が増加して回路規模も増大するという結果に陥りました。これが移植を躊躇わせていた元凶です。

実時間時計RTC400Sユニット

 今回新規設計するのは旧RTC400ユニットに対して、RTC400Sユニットとなります。最後の「S」は、Synchronous clock editionと言う事で、「同期クロック版」となります。旧RTC400ユニットが非同期のclk32k(32kHzクロック)で日時を刻んだのに対して、RTC400Sユニットはシステムクロックclk(24MHz)だけで日時を刻みます。

 以下図にブロック図を示し、説明を続けます。

a364_rtc400s.png

※薄黄色の箱はCPUからアクセス可能なI/Oレジスタです。

 一本の同期クロックで動作するようになって、ブロック図の見た目は大きく変わっています。しかし本来、非同期クロック間で通信するためのハンドシェーク機構などはそのまま残って機能しているので、回路規模、使い方に至るまで、旧RTC400ユニットと同様です。

I/Oレジスタ表

 I/Oレジスタについては、ほぼ、旧RTC400ユニットと同じですので、こちらを参照してください。旧RTC400ユニットとの差分についてのみ、以下に特記します。

  旧RTC400ユニットと、RTC400Sユニットの差分:

 それ以外は、日時の書き込み手順読み出し手順を含めて旧RTC400ユニットと同じです。

デザイン

 時計アプリケーションへの応用を鑑みて、RTC400SユニットSPI-TFT制御STFT61ユニットを搭載したMSOC115RT1608マイコンを作成しました。

 Cmod A7ボード等、XilinxのFPGAに書き込むのに必要な、Moscoviumマイコンの設計データ(Vivadoのプロジェクトファイル一式を含む)はGitHubで提供しています。以下バナーよりアクセスしてください。

btn_moscovium.png

 デザイン(回路)をCmod A7ボードに書き込む手順については、こちらをご確認ください。

コンパイル

 MSOC115RT1608マイコンのコンパイル(論理合成・配置配線)結果を以下に示します。

  コンパイル結果:

 RTC400Sユニット単体では、284LUT、153FF程の回路規模でした。
 旧RTC400ユニットはCmod A7ボードでコンパイルしていないため比較できませんが、非整数比分周器以外の回路は、ほぼそのまま使っているため、回路規模は同等だと思われます。
 RTCは、秒カウンタから、年カウンタまで、全てBCDカウンタで、52ビットカウンタ(秒8、分8、時8、日8、月8、年12)です。その手前、秒未満のカウンタ(プリスケーラ)も、合わせて28ビットカウンタ(BCD8、μs10、ms10)なので、他のタイマユニット(SYSTIMユニットやTIM162ユニット等)と比べても、論理規模は少々大きく見えます(下表)。

タイマ
ユニット
カウンタ
ビット数
LUT数 F/F数 備考
ビット数内訳
RTC400S 80 284 153 =8+8+8+8+8+12+(8+10+10)
SYSTIM 124 262 253 =32+32+32+(8+20)
TIM162 32 123 148 =16+(16)
TIMLED5 24 108 141 =8+(16)

 カウンタのビット数には、プリスケーラのビット数(丸カッコ内)も含んでいます。


 サポートが切れてツールが使用できなくなり、ごみ🚮と化した中華FPGAボードから、Cmod A7ボードへ乗り換えて随分と経ちましたが、漸く、移植したいと考えていた全ユニットの移植を完了しました。最後になったのは、システムクロック周波数fcpuが変化しても、設定信号clk_mhz[7:0]さえ追従していれば実時間を刻むことのできる実時間時計RTC400Sユニットでした。


btn_arduino.png

btn_prev.png btn_next.png

home