ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
Main Menu
Tweet
Facebook
Line
:-?
フラット表示 前のトピック | 次のトピック
投稿者 スレッド
webadm
投稿日時: 2008-9-24 9:10
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3088
周波数カウント動作は出来た
どうやらPRESET時の初期値が0以外だとおかしなカウンタ論理になるらしいことが判明。とりあえず原理動作確認のために初期値はall0として、プリスケーラーが間違って分周しすぎていたのを修正して動作シミュレーションをやり直してみた。結果、与えていた2.9999MHz+45.5kHz=3.0454MHzがちゃんとカウント出来たヽ(´ー`)ノ



あとは初期値が0以外にした場合をやってみよう。初期値も当初間違えていて、455を足したら0になるBCD値でないといけないのをバイナリで計算していた。本来は100000-455=99545を与えないといけなかった。



なんとちゃんと正しく中間周波数分を差し引いた値(30454-455=29999)がカウントされるじゃないか。

結局、

・プリスケーラー値を間違えていた
・カウンタ初期値をBCDでなくバイナリ値で与えていた

のが原因だった..orz

自爆とはこのこと。

しかし今度のQuartusはPlace & Routeでかなりすごい最適化をするようになってシミュレーターの値を見ると意図したのとは全然違うのでバグではないかと誤解してしまう。外部から見た挙動は同じだが内部論理と挙動がまるで違っている。

今回の場合は、初期値に99545を指定すると、最後に出力ラッチする際にカウンタ値と初期値に対応したBCD値で排他的論理和を取っている。

すなわち初期値が9の桁のBCDカウンタはデザイン上では以下の様に変化することを意図していた

9->0->1->2->3->4->5->6->7->8->9->0

Quartusの最適化によってカウンタは初期値によらず常に0から開始し、以降指定された初期値と設計上の期待値と排他的論理和をとった値を遷移する特殊なカウンタに変更された。

デザイン上意図していたカウンタ出力の遷移

1001(9)->0000(0)->0001(1)->0010(2)->0011(3)->...

これに初期値1001(9)を排他的論理和をとった値を最適化されたカウンタは遷移する

0000(0)->1001(9)->1000(8)->1011(B)->1010(A)->...

という具合に一見すると変な遷移をするようになる。最終的に初期値である1001(9)と排他的論理和をとれば設計者が期待していたとおりのカウンタの出力が得られることがわかる。

つまり最終値はB0CDCとなった場合初期値99545を排他的論理和を取ると

1011 0000 1100 1101 1100
B 0 C D C
xor
1001 1001 0101 0100 0101
9 9 5 4 5

0010 1001 1001 1001 1001
2 9 9 9 9

という仕掛けになっていた。

いやまったくすごい、こういう最適化論理は人間が最初から意図してRTL記述するのは大変なので感心した。

周波数カウンタ動作はこれでよしとしよう(´∀` )

もうほとんど終わったも同然。

P.S

ちなみにシミュレーション時間は入力する信号の周波数が10分の1になったので劇的に短くなり、4分で終わるようになった。これだと1秒間分をやっても20分、1分間分だと20時間で終わることになる。
フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
   Poorman's MSM5524 webadm 2008-8-12 11:11
     トップレベル webadm 2008-8-13 5:51
     FREQUENCY COUNTERブロック webadm 2008-8-14 20:05
     CLOCK DIVIDERブロック webadm 2008-9-8 10:54
     CONTROLブロック webadm 2008-9-14 23:10
     CLOCK TIMERブロック webadm 2008-9-16 5:20
     DISPLAYブロック webadm 2008-9-17 10:16
     RTLスケルトン入力 webadm 2008-9-18 13:18
     RTL: FREQUENCY COUNTER webadm 2008-9-18 22:49
     RTL: CLOCK DIVIDER webadm 2008-9-19 5:14
     RTL: CONTROL webadm 2008-9-19 8:56
     RTL: CLOCK TIMER webadm 2008-9-22 10:27
     RTL: DISPLAY webadm 2008-9-23 8:56
     動作シミュレーション webadm 2008-9-24 3:36
       Re: 動作シミュレーション webadm 2008-9-24 5:08
         周波数カウンターモードのシミュレーション webadm 2008-9-24 5:41
           QuartusのState Machine Viewer webadm 2008-9-24 6:18
             どうやらバグではないようだ webadm 2008-9-24 7:17
           » 周波数カウント動作は出来た webadm 2008-9-24 9:10
               時計とタイマー関連 webadm 2008-9-25 20:06
     VFDドライバ回路 webadm 2008-9-26 7:47
       Re: VFDドライバ回路 webadm 2008-10-1 10:08
         Re: VFDドライバ回路 webadm 2008-10-5 23:29
           Re: VFDドライバ回路 webadm 2008-10-6 11:09
             Re: VFDドライバ回路 webadm 2011-2-23 0:50
     XILINX ISEでコンパイルしてみた webadm 2008-9-29 11:07
     CLOCK TIMERモジュール無しでコンパイルしてみた webadm 2008-10-5 11:56
       Re: CLOCK TIMERモジュール無しでコンパイルしてみた webadm 2008-10-5 12:37
     冬休みの課題にしよう webadm 2008-12-16 9:49
       主要部品が届いた webadm 2008-12-24 20:21
         OKI MSM5524RS入手 webadm 2011-1-4 22:55
           Re: OKI MSM5524RS入手 webadm 2011-1-10 5:06

投稿するにはまず登録を
 
ページ変換(Google Translation)
サイト内検索