実機では期待通りの動作を行うのでシミュレーションと実機の動作不一致が起こっている。・CLK0とCLK1は同じように見えるが、信号の代入によってシミュレータの内部では1デルタサイクルのずれ(デルタ遅延)が発生している。・CLK0でインクリメントしたCOUNTも、CLK0に比べて1デルタサイクルずれている。ここでCNT_NGはCNT1の立ち上がりエッジ(CLK0の立ち上がりエッジ処理の次のデルタサイクル)で処理されるが、シミュレーションサイクルの処理規定により、この時既にCOUNTが更新されてしまっている。前例は、故意に動作不一致を起こすコードを記述したが、次の例ではVHDLの記述制約のために動作不一致を起こした例を紹介する。クロックイネーブルを作るクロックを一度、ローカル信号に入れる。;このコンポーネントは、あるFPGAのクロック関連の回路を生成するために作られたものだ。このように関連性のある回路を一つのコンポーネントにまとめる事は頻繁に行われていると思う。ソースコード中のコメントにもあるように、VHDLではポートに出力する信号は内部で参照出来ない制約がある。そのためこの例の場合、出力するクロックと内部で使用するクロックが1デルタサイクルずれて、このコンポーネントから出力するクロックでクロックイネーブルを使用するとシミュレーションと実機の動作不一致を起こす。ns;のような記述をしたが、これはデルタ遅延を発生させている。13:22説明を読んでよく理解できました。デルタ遅延には、悩まされることが良くあります。シミュレーション時にだけ遅延を入れたりしています。出力はなるべく、必要がなくても内部信号にいったん代入してから出すようにしています。内部信号を使用する出力信号とデルタ遅延をあわせるため。13:15私も問題が起こりそうな所は内部でデルタ遅延をあわせて出力するようにしています。昔、この問題でシミュレーションと実機の動作不一致が起こりModelsimのバグかと思うほど悩み実機あわせをした経験があります。問い合わせ・連絡先ta_bo__@livedoor.com本サイトは以下のアクセス解析を使用しております。