ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
Main Menu
Tweet
Facebook
Line
:-?
フラット表示 前のトピック | 次のトピック
投稿者 スレッド
webadm
投稿日時: 2006-3-20 1:00
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3088
デザインのウォーミングアップ仕上げ
先の簡単なジャンケン判定装置は論理回路設計では序の口でまだ本格的なものではない。ウォーミングアップはまだ始まったばかりである。
今度は本格的なディジタル回路であるステートマシンのデザインを練習することにする。

題材はいくらでも転がっているが、いきなりコンピューターシステムの一部に目を向けても興味が失せるので、現実世界と親和性のある題材を探してみた。
そこで思いついたのが万年カレンダー時計である。

仕様をざっと書いてみる。

1MHzのクロック信号と時計あわせのためのプリセット信号を入力でき現在の年月日時分秒を出力する。
年月日時分秒値のプリセット値入力はロータリースイッチ等を接続することを前提にBCD値入力とする。
出力はそれぞれBCD値出力とする。閏年をサポートする。西暦1万年問題は考慮しなくてよい。
ブロック図は以下の通り。



入力信号数16ピン、出力信号数45ピン。合計信号61ピン。

代表的なタイミングチャートは以下の通り。



仕様策定段階でEPF8282LC84の最大user i/oピン数64ピンの制約に収まるようにプリセット入力を2桁ずつ選択してセットするようにしてピン数を節約。
直接7セグメントLEDを駆動させようとすると出力1桁あたり7本ピンが必要になるのでピン数は収まらないため7セグメントデコーダーを内蔵することは断念。
カレンダークロックはステートマシンの中では状態数が非常に多いのですべての状態についてタイミングチャートなり真理値表を書くことは現実的ではない。
従って代表的なプリセットと年替わりのケースを示すにとどめた。
ステートマシンでは仕様策定段階で既にそれを実現するために必要な構成回路要素をあらかじめ知っている必要がある。当然ながらその設計者も同水準の知識を有する必要がある。

仕様的には簡単に見えるが、実際に実現することを考え始めると様々な選択枝があり簡単では無いことがすぐわかる。
ステートマシンをデザイン入力するに先だってまず全体を複数の小ブロックから構成するように機能分割する必要がある。

仕様設計者は時計合わせのために必要な入力ピン数を節約するために設定項目をローターリースイッチでバイナリ値として入力するようにしている。
実際には該当する内部変数(ラッチ)をプリセットするために内部でバイナリ値をデコードすることを前提としている。
バイナリデコーダーがどんなものかをあらかじめお互いに知っていることが前提になる。
また内部変数(ラッチ)はプリセット時以外は毎秒次の秒までの間表示すべき値を保持すべく更新される。
このためプリセットには外部入力信号をそれ以外は内部信号を入力するように切り替えるデータセレクタが内部に必要になる。
バイナリデコーダーもデータセレクタも基本的な組み合わせ論理であるため真理値表や論理式で記述することができる。
あとは内部変数(ラッチ)を毎秒更新するための組み合わせ論理を考える必要がある。それと1MHzのクロックから秒クロックに分周する回路が必要である。

これらをブロック図に描くと以下の通り。



DECODERはnPRESET信号がアサートされている間だけSELECTバイナリ値をデコードし該当するデコード信号のみアサートする。
各デコード信号はそれぞれ該当するラッチの入力をCOMBINATION LOGICかVALUE入力かを切り替えるデータセレクタの入力となる。
DIVはCLOCK1Mを分周してCOMBINATION LOGICが次の時刻を更新するのに使用する1秒周期のクロックを生成する。
COMBINATION LOGICは1秒クロックとラッチの前回値を入力として更新時刻を出力する。

更に詳細に各ブロックの仕様を設計する。

DECODERは組み合わせ論理で以下の真理値表で表すことができる。



DIVは単純な分周カウンタ。

COMBINATION LOGICは複数の組み合わせ論理から構成されるもっとも複雑な部分。
分替わり、時替わり、日替わり、月替わり、年替わりには様々な条件が加わるため簡単ではない。
秒の更新は一番簡単で0〜59までは1秒毎に1ずつ増加し59から60に増加するタイミングで0に戻す。
秒が0に戻った際に分替わりのため分の値を1増加させる。59から60に増加するタイミングで0に戻す。
分が0に戻った際に時替わりのため時の値を1増加させる。23から24に増加するタイミングで0に戻す。
時が0に戻った際に日替わりのため日の値を1増加させる。この場合、現在の月の最終日から増加するタイミングで1に戻す。
日が1に戻った際に月替わりのため月の値を1増加させる。最終月から増加するタイミングで1に戻す。
月が1に戻った際に年替わりのため年の値を1増加させる。
月の最終日は2月を除いて各月によって31か30のいずれか。2月の場合は、現在の年が閏年か否かによって28か29となる。
年が400で割り切れる場合は閏年。その他の年で100で割り切れる場合は閏年でない例外がある以外は4で割り切れる年が閏年。
閏年の2月は29日が最終日となりそうでなければ28日が最終日。
一番難しいのが閏年の判定に割り算が必要なことである。割り算は組み合わせ論理では実現できない。
良く考えると4で割り切れるかどうかは、年のBCD4桁の一桁目の下位2ビットが共に0かどうかで判断できる。
100で割り切れるかどうかは、下2桁が共に0かどうかで判断できる。
400で割り切れるかどうかは、下2桁が共に0でかつ上位2桁が
00,04,08,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96
の場合だけに限られる。これなら力ずくで条件判定すればできなくもない。きっとデザインツールがいまいこと論理圧縮してくれるに違いない。

これでおおよその設計情報は出そろったので次はHDLを書いてみることにする。回路図入力はできないことはないが体力が無いのでご容赦を。
フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
 » デザインのウォーミングアップ仕上げ webadm 2006-3-20 1:00
     仕上げた結果 webadm 2006-3-20 21:10
       仕上げの感想 webadm 2006-3-21 23:10
         7セグメントLEDデコーダー内蔵版もできた webadm 2006-3-22 22:05
           いよいよ製作開始と思ったら webadm 2006-4-2 2:14
             Max+plus IIでもFLEX10Kは使える webadm 2006-4-2 2:48
             先行手配した部品が届いた webadm 2006-4-9 1:01
               FPGAまわりの回路図作成にとりかかる webadm 2006-4-15 21:30
                 部品ライブラリから作らないといけない webadm 2006-4-15 23:38
                   あともう少し webadm 2006-4-19 0:31
                     部品を載せ忘れていた webadm 2006-4-21 2:01
                       図面完成 webadm 2006-4-22 9:32
                         FPGAのピンアサインではまる webadm 2006-4-23 21:01
                           いよいよ万年時計基板製作開始 webadm 2006-5-5 20:59
                             やっとLEDスイッチボード製作完了 webadm 2006-5-7 14:02
                               ダイナミック点灯テスト webadm 2006-5-8 11:25
                                 またしても原因はハンダ付け不良だった webadm 2006-5-9 2:00
                                   FPGAボードも組み上がった webadm 2006-5-12 12:41
                                     火入れしてみた結果 webadm 2006-5-13 2:49
                                       メタステーブルとかではなさそうな気がする webadm 2006-5-13 14:44
                                         条件付きでPassive Serialでのダウンロードは出来た webadm 2006-5-15 2:46
                                           誤動作の例 webadm 2006-5-15 4:25
                                             また一つの事実が明らかに webadm 2006-5-15 5:47
                                               やはり電源とグランドの引き回しが悪いのか webadm 2006-5-17 0:29
                                                 とりあえず万年時計としての動作確認 webadm 2006-5-17 0:49
                                                   自作FPGAボード挙動不審のまとめ webadm 2006-5-20 19:28
                                                     純正ByteBlaster IIだとJTAGが正常に使える時がある webadm 2006-5-20 20:17
                                                       更に驚くべき事実が発覚 webadm 2006-5-20 22:49
                                                         純正でも再現性が悪い事実 webadm 2006-5-20 23:27
                                                           とおもったら今度はまともになった webadm 2006-5-20 23:42
                                                             今度は魔法の手出現 webadm 2006-5-21 4:37
                                                               一転して問題は収束の方向へ向かう webadm 2006-5-21 5:11
                                                                 ぬか喜びだった webadm 2006-5-21 5:54
                                                                   Verilog HDLではまる webadm 2006-5-28 4:38
                                                                     まっさらなディレクトリから始めればVerilog HDLも問題なかった webadm 2006-5-28 19:25
                                                                       verilog HDL版の万年カレンダー時計 webadm 2006-5-30 20:34
                                                                         AHDLとVerilog HDLの比較 webadm 2006-5-31 12:50
                                                                           VHDLでもはまる webadm 2006-6-3 14:26
                                                                             Config ROMでの動作確認はどうしたものか webadm 2006-6-10 14:04
                                                                               15.974MHzのキンセキのオシレーターの謎 webadm 2006-6-11 13:35
                                                                                 Re: 15.974MHzのキンセキのオシレーターの謎 webadm 2006-6-11 15:02
                                                                                   BTTFごっこ webadm 2006-6-12 4:39
                                                                                     NICTのコンテスト webadm 2006-6-15 1:45
                                                                                       FPGAベースIPパケットフィルター webadm 2006-6-15 4:05
                                                                                         AHDLでフィルタリング判定論理書いてみた webadm 2006-6-15 10:15
                                                                                           EP1C6T144C6に入るみたいだ webadm 2006-6-15 18:18
                                                                                             少し工夫 webadm 2006-6-15 20:55
                                                                                               とどのつまりCAM(Content Adressable Memory)だな webadm 2006-6-16 0:59
                                                                                                 CACHEメモリでも良い webadm 2006-6-16 5:08
                                                                                                   とりあえず2wayなら webadm 2006-6-18 16:51

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