2026.02.27
2026.02.12
LM1983を使った画像機器の外部同期
2台のCMOSイメージセンサ機器を外部同期することができるようになりました。
CMOSイメージセンサといっても、1個あたり数十万円する高価で特殊なやつです。お客様から貸与されて基板を作ってイメージセンサごと納めるという形で画像機器を作っています。高いセンサなのでめっちゃ緊張します。
さて、次の動画はその2台の同期のようすです。
緑の波形がマスタ側の垂直同期信号、黄色の波形がスレーブ側の垂直同期信号です。
外部同期をOFFにしていると2台の機器は別々のクロックで動くのでだんだんずれていきますが、外部同期をONにするとぴったりと一致します。
2台の装置間を1本の同軸ケーブルでつないで、クロックよ水平/垂直の同期信号を同期させるためにLM1981とLM1983を使って、ようやく動くようになりました。
2026.02.11
LM1983をユーザー定義フォーマットで使うためのレジスタ設定
苦節半年。TexasInstrument社のLM1983というビデオクロックジェネレータのPLL1をユーザー定義フォーマットでようやくロックさせることができました!
LM1983というGenlock PLLは様々な映像信号に対応できるPLLなのですが、ユーザ定義フォーマットで使えるようにするためのレジスタ設定には苦労します。
このPLL ICにはAFD(Auto Format Detect)という機能があります。AFDを使うと水平同期や垂直同期信号の幅から画像フォーマットを自動的に認識してくれます。AFDを使わない場合は自分でレジスタに画像フォーマットを設定する必要があります。
まず、AFDがどのようにして画像フォーマットを識別しているかというと、ぶっちゃけ水平同期信号の周波数だけで見ています。正確にいえば20回分の水平同期信号の間にある27MHzクロックの数を数えて画像フォーマットを識別しています。
NTSCやPAL、1080pといった標準的な画像フォーマットであれば当然ながらこのICは知っているのですが、CMOSイメージセンサのような独自の水平垂直周波数で動くカメラの場合には標準フォーマットにはあてはまりません。
そこで、ユーザ定義フォーマットを使う場合には0x51,0x52,0x53,0x54にあるAutoLockHighValueとAutoLockLowValueというレジスタに上限と下限を設定するのですが、ほかにもいろいろとやらなければならない設定があります。
ユーザ定義フォーマットを使う場合でもAFDは必須ではないのですが、AutoLockValueの設定は必要です。
まずはAFDを使わない設定のやりかたについて説明します。
●AFDを使わない設定
0x05 0x0b・・・レジスタ0x05に0x0bを書き、AFDをdisableにする。Genlockモード
0x51 AutoLockHighValue の上位8bit
0x52 AutoLockHighValue の下位8bit
0x53 AutoLockLowValue の上位8bit
0x54 AutoLockLowValue の下位8bit
0x55 Rの上位2bit
0x56 Rの下位8bit
0x57 Nの上位2bit
0x58 Nの下位8bit
0x20 0x1f・・・ユーザフォーマット指定
重要なポイントはレジスタ0x20に0x1fを指定するのを一番最後に行わなければならないということでした。AutoLockやRの値よりも先に設定するとユーザ定義フォーマットでロックしません。
また、AutoLockHighValue とAutoLockLowValue は、AFDを使わない場合でも指定してください。これらの値を求めるには、まず理想的な中心値を
AutoLockValue = 27000 / 水平周波数(kHz) ×20
で求め、AutoLockHighValue = AutoLockValue + 100、AutoLockLowValue = AutoLockValue - 100とすればよいでしょう。
RとNはPLLの分周比です。水平周波数* N / R = 27MHzになるように決めます。
なお、AFDを使った場合はPLL1のロックが完了してもInput formatは3e(Unknown)となりますが、これで正常です。1fを書き込んでも変化しません。
●AFDを使う設定
AFDを使う場合は以下のようになります。
0x05 0x2b・・・AFDを有効。Genlockモード。デフォルトの設定
0x5d 0x80・・・EN_USERMODEフラグを立て、AFDでユーザモードを認識できるようにする
0x51 AutoLockHighValue の上位8bit
0x52 AutoLockHighValue の下位8bit
0x53 AutoLockLowValue の上位8bit
0x54 AutoLockLowValue の下位8bit
0x55 Rの上位2bit
0x56 Rの下位8bit
0x57 Nの上位2bit
0x58 Nの下位8bit
AFDを使った場合、PLL1のロックが完了するとInput formatは1f(User Defined)となります。
●AFDとTOFを使う設定
LM1983にはTOF(Top of Frame)という機能があります。インタレース等のフォーマットであってもフレームの先頭を教えてくれる信号です。
このICは、垂直同期の間の水平同期信号の数を数えているようで、TOFレジスタの値と実際に数えた値が一致するとより確実に画像フォーマットを特定できるようです。
RとNを設定した後で以下の設定を行います。
0x11 0x04を設定(デフォルトでは[5:4]が11 Never Alignなので、00 Auto-Alignにする)
0x5a 垂直ライン数の上位5bit
0x5b 垂直ライン数の下位8bit
これでTOFが有効になるのですが、垂直同期信号間に含まれる水平ラインの数が変わるとPLLのロックが外れるので、ユーザ定義フォーマットで使用する場合のメリットはあまりないと思います。
●ロックを速くする方法
ユーザ定義フォーマットではPLL1がロック判定になるまで5秒くらいかかりますが、速くするには以下の設定が有効です。
0x2d 0x01 Lock Step Sizeを変更0x08→0x01に減らす
0x1c 0x1f Loss of Lock Thresholdを0x10→0x1fに増量
これで1秒くらいでロックするようになります。
●ロックするまでの過程
LM1983にはチャージポンプに与えている信号を内蔵ADCで見ることができます。このADC値も含めてロックするまでの過程を見てみます。
① AFD非使用(デフォルトのロック速度)
おおよそ6.5秒でロック信号(青)が立ち上がっています。PLL1ロック信号(レジスタ0x06のbit4)が安定したときには、PLL1(27MHz)、PLL2(74.25MHz)の周波数は±2Hzくらいの範囲に落ち着いています。
② AFD使用(デフォルトのロック速度)
AFDを使用した場合でも、ロック時間には差はありません。
③ AFD非使用(ロック高速化)
ロック高速化を行った場合、フラグが立つまでの時間は早くなりますが、この時点では周波数は数百Hzずれています。ADC電圧の傾向がちょっと変わっています。
④ AFD使用(ロック高速化)
AFDを使用してもロックフラグが立つまでの時間や波形には変化はありませんでした。
●まとめ
LM1983をユーザ定義フォーマットで使用するためのレジスタ設定方法を見つけました。
また、レジスタ2d(LockStepSize)と1c(Loss of Lock Threshold)を設定すればロックフラグが立つまでの時間を短くすることはできますが、周波数の偏差が落ち着く時間にはそれほど差はありませんでした。
それから、LM1983は水平同期信号のみでロックできるので、FINは固定でも構わないようです。TOFを使うならVINは必要です。TOF非使用ならVINを固定しても動くかどうかはわかりません。
2026.02.10
Cosmo-Kの販売を終了します
2017年から販売しておりましたKintex-7ベースのPCI Expressボード「Cosmo-Kシリーズ」は、在庫限りで販売を終了させていただくことにいたしました。
Kinte-7とPCI Expressという組み合わせのPCI Expressボードが一つの役目を終えたと感じております。
長い間のご愛顧、ありがとうございました。
在庫情報はこちらです。
思い起こせば、私は2006年ごろからPCI ExpressのIPコアを開発していたようです。毎日のように徹夜してFPGAのロジックをVHDLで書き、Spartan-3とTI社のPHYを使って特電PCI Expressボードという製品を作ったのが16年前のことでした。Core 2では動くがXeonでは動かないなど、チップセットによりパケットの形式が細かいところで異なっているなど、驚きの連続でした。
その後、CQ出版様のInterface誌でPCI Expressの連載を担当させていただき「FPGAでゼロから作るPCI Express」という本まで出版させていただきました。
また、その後Spartan-6を使ったEXPARTAN-6TというPCI Expressボードを経て、最終的にはKintex-7でAXIバスに統合されDMAまで統合されたPCI Expressにたどり着きました。
この20年の間にFPGAでPCI Expressを取り巻く環境は劇的に便利になりました。FPGAのGTXの端子をPCIeのソケットにつなぎ、GUIのツールで操作してベンダID等を設定すれば誰でもPCIeカードが作れる時代になりました。
中国製の安価なFPGAボードも数多く出ています。
私の役目も終えたと感じ、FPGAベースのPCI Expressのボード開発の幕を下ろさせていただきます。後継機種の開発予定はございません。
Cosmo-KのページにはXILINXのハードウェアPCIe機能や、XDMAコアの使い方や、割り込みの使い方など、様々な技術情報を残しております。皆さまが各社FPGAボードでハードウェアPCIe機能やXDMAを使いたいときにお役に立てれば幸いです。
2026.02.09
ADF4382Aのバイアス回路
ADF4382Aで、コイルを使ってバイアスを与えるという回路をシミュレーションしていたのですが、バイアスを与えるコイルを基板の裏面に配置してシミュレーションしたら、案の定、Viaがスタブになって周波数特性を持ってしまいました。
Viaを使ってBIAS-Tを作るのが間違いでした。
純正評価ボードのパターンを見てみると、このように横にLを出しています。
パターンの配線幅はおそらく0.4mmくらい。だから、0603サイズのインダクタを使うのでしょう。
このインダクタの先にあるViaはパワープレーンにつながっています。
そして、基板裏面にVCCのパターンを作り、そこを10pFのコンデンサでGNDに落としています。
重要な知見が得られました。
BIAS-Tは基板表面で横に出すのが正解です。Viaを使って裏から供給してはいけません。また、0603サイズのインダクタはパッドサイズがMSLの線幅とほぼ等しいので、使い方によってはよいパフォーマンスを発揮すると思われます。
2026.02.08
ADF4382Aボードの設計再開2
ADF4382AとミキサICの間をマイクロストリップラインでつなぐことを考えています。
その接続部分だけを切り抜いたのがこちら。
これは当然ながら通ります。パッドの形状とかパッドと周囲のGNDの間のギャップの影響を調べるのが主でした。
少し設計を進めていたら、ADF4382Aとミキサの間を曲げることにしました。
シミュレーションしてみると、いい感じ・・かと思ったらS11だ。
あれれ、全然通らない。
どうやら、曲線部分で全反射しているのです。
これはシミュレーターが時間ドメインのTLMという方法で計算しているためでした。
TLMはメッシュが直方体なので曲線部分のシミュレーションが難しいそうなのです。
曲線で曲がっているのに、凸凹したやつに正面からぶつかって反射しているイメージだそうで、今回のような20GHzくらいの基板だと正確に出ないようなのです。
周波数ドメイン解析のHEMにしたら想定どおりの結果になりました。
TLMは爆速で便利なのですが、条件によってはS11が0dBに張り付くという最悪の結果になってしまいます。
2026.02.07
ADF4382Aボードの設計再開
中国が春節に入って基板が作れなくなる前に基板を作りたいと思い、ADF4382Aのボードの設計を再開しています。
去年の12月に設計したときにはこんな感じで終わったと思います。
当初のプランでは1インチ四方に納めたかったのですが、コネクタが大きくてあきらめました。
どうせ目的のサイズに収まらないならと思い、少し広げてOCXOを乗せることにしました。
で、OCXO用にも電源回路を乗せています。
さて、ADF4382Aの出力端子にはインダクタ経由からVCCを供給して、いわゆるBIAS-T回路を構成しなければなりません。
評価ボードのBIAS-T回路がこれです。
なんと、1.4nHです。
1.4nHといったら1.4mm配線の持つインダクタンスと同じくらいです。本当に意味があるのだろうかと思ってしまいます。
10GHzや20GHzに対しては数十Ωなので理論的には正しそうです。
評価ボードに使われている推奨部品は0201DS-1N3XJEWで、これは0603(mm)の部品です。ちっさ。
こうしてADF4382Aの回路はこうなりました。
ADF4382Aの下にあるのはミキサICです。次はこのミキサICとの接続を考えることにします。
2026.02.05
LM1983のPLL1が初めてロックした
LM1983を使ったGenlockをデバッグしているのですが、なかなかPLL1がロックしないので困っていました。
PLL1というのは27MHzを作るPLLで、PLL2がそれを基に148.5MHz(または74.25MHz)を作るPLLです。
このPLL1がロックしないと、外部の画像機器からの信号にロックできているとはいえません。
回路の設計、特にPLLのループフィルタなどに間違いがあるのかと悩んでいたのですが、なんと、標準画像フォーマットのタイミングで同期信号を入れてあげればロックすることがわかったのです。
水平周波数を37.5kHzにすると720P50として認識します。
33.75kHzにすると1080p30として認識します。
なんと、水平周波数しか見ていないことがわかりました!
垂直同期信号の周波数や、垂直期間内に何個の水平同期信号があるか、というのは数えていないようです。もしかするとTOF機能を有効にすれば効いてくるのかもしれませんが、使わなければ水平同期信号の周期だけで見ているようでした。
で、ユーザ定義フォーマットを使うにはAutoLockHighValueとAutoLockLowValueを設定すればよいことはわかったのですが、画像フォーマット1f(UserDefined)として認識はされるのですがPLL1がロックしないのです。























最近のコメント