エンジニア風味 (Engineer-taste)

電子系エンジニアのメモ帳

FT232HのSYNC 245 FIFOモード(クロック制御編)

FT232HのSync245Modeで、FT232H自体はちゃんと動いているはずなのに、データをロスするという状況を解析してみました。

下図のように、Sync Clockによりカウンタもしくは外付けのFIFOメモリなどからデータをPCに転送するとします。

f:id:engineer-paju:20190211145136p:plain
FT232Hと外部FIFO

#TXEがLowのときにデータが取り込まれ、Highのときには取り込まれないのですが、FT232Hからのクロックは常に出ています。
なので、#TXEがHighのときにはカウンタotFIFOが動かないようにCONTROLブロックでCLKを止めるようにします。

f:id:engineer-paju:20190211150033p:plain
CLK停止ロジック1
しかし、#TXEとCLKのタイミングは、下図のようになっているので、
f:id:engineer-paju:20190211150136p:plain
CLKとTXEタイミング
#TXEがLowになったところで、短いパルス(グリッジ)が出てしまい、カウンタ(外部FIFO)のデータが1つずれてしまいます。
f:id:engineer-paju:20190211150328p:plain
グリッジによる誤動作
そのため、データが1コ抜けてしまいます(FT232Hは、#TXEがLowの間のCLKinの立ち上がりでデータを拾うので。※正確には#TXEがLowになって、受け側の回路が#WEをLowに下げたときの、CLKinの立ち上がりでデータを拾っていく)。

CONTROLブロックを下図のようにすれば、

f:id:engineer-paju:20190211150447p:plain
CLK停止ロジック2
カウンタ(FIFO)の制御信号は下のようになって、
f:id:engineer-paju:20190211150549p:plain
グリッジ防止対策済み
データ抜けは、なくなります。