しかーし、このページを作っているヒネクレモノは、そう素直な答えはしないのである(^^;
しかも、質問の中には「以下に問題を示しますので解答の方、よろしくお願いします。」なんてコメントがある。
そーなると、もー意地でも素直にゃ答えないw だって普通、せめて「回答お願いします」だろー。
「解答お願いします」ってのは、「私の代わりに問題を解きなさい」って言ってるんだもの。。。。
たとえ誤変換だとしても、誰が素直に答えるかってのw
そういうワケて、問題文の構成は全く無視して、Tamuro流の回路を作ってしまおう。
信号点灯パターン1周期が40+5+5+20+5+5=80秒=32クロックになってるんで、
5bitバイナリーカウンタを作って、そのカウント値によって点灯パターンを変える回路を作ってまう。
つまり、時間カウントと信号点灯状態をひっくるめて、1個のカウンタで内部状態を作ってしまう。
そうすると、5bitバイナリーカウンタのカウント値と信号点灯パターンの対応は、下表の通り。
カウント値の範囲 |
カウント値の2進数表示 |
その状態の時間 |
点灯する信号 |
東西信号 |
南北信号 |
0〜1 |
5'b00000〜5'b00001 |
2.5秒× 2= 5秒 |
r1とr2が点灯 |
○○● |
○○● |
2〜17 |
5'b00010〜5'b10001 |
2.5秒×16=40秒 |
b1とr2が点灯 |
●○○ |
○○● |
18〜19 |
5'b10010〜5'b10011 |
2.5秒× 2= 5秒 |
y1とr2が点灯 |
○●○ |
○○● |
20〜21 |
5'b10100〜5'b10101 |
2.5秒× 2= 5秒 |
r1とr2が点灯 |
○○● |
○○● |
22〜29 |
5'b10110〜5'b11101 |
2.5秒× 8=20秒 |
r1とb2が点灯 |
○○● |
●○○ |
30〜31 |
5'b11110〜5'b11111 |
2.5秒× 2= 5秒 |
r1とy2が点灯 |
○○● |
○●○ |
いちお、初期値が両方の信号が赤点灯にしてある。それが一番安全っぽい。
5bitバイナリ-カウンターの出力を、上位からQ4,Q3,Q2,Q1,Q0として、各ランプが点灯する条件を書くと、
値が'1'の時に点灯ってコトにして、以下のようになる。
R1 |
= |
( not(Q4) and not(Q3) and not(Q2) and not(Q1) ) or ( Q4 and ( Q3 or Q2)
) |
B1 |
= |
not( R1 ) and not( (Q4 and Q1) ) |
Y1 |
= |
not( R1 ) and ( Q4 and Q1 ) |
R2 |
= |
not( B2 or Y2 ) |
B2 |
= |
( Q4 and not(Q3) and Q2 and Q1) or ( Q4 and Q3 and ( NOT(Q2) or not(Q1)
) ) |
Y2 |
= |
( Q4 and Q3 and Q2 and Q1 ) |
作りやすいR1、B2、Y2を先に作って、他の値はそれらを使ってゴマカしてる。。。
うーん、、、、我ながら、なんて気ママな作り方(^^;
もちっと賢い式が出来そうだけど、まぁ今日の気分からして、こんなもんかな(^^;
で、以上の内容をそのまま回路にすると、↓こうなる。

他のページで同期回路とか完全同期設計とか言ってるクセに、いきなり非同期カウンタ使ってるし(^^;
しかも出力FlipFlopを初期化でクリアしてるから、せっかく初期値を「両方赤」にしてても意味ないし(^^;
まぁ、この回路構成で出力FlipFlopを置かないと、同期カウンタ使ったってハザードが出てしまう。
ハザードが出ると、本来消灯しているべきタイミングでランプが一瞬光っちゃったりしてミットモナイ。
だから、この回路構成だと出力FlipFlopは必須だ。
んで、入力信号がクロックとリセットだけで、かつ出力段で同期を取るなら、非同期カウンタ使ってもそう悪くはないかな。。
なぁんて、すっごい言い訳。。。。こんな言い訳しても、LSIやFPGAでは使えない回路だってコトにゃ変わりない。
まぁ今日の気分てコトでカンベンしてくれ(^^;
あー上に書いた論理式で「R1=・・・・」とか書いてるけど、そこでのR1ってのは、「R1を生成するFlipFlopのD入力」って意味だわ。
なのに回路図はFlopFlopの出力をR1って名前にしてる。
ちーとマズいなぁ。回路と論理式とが、明らかに一致してないなぁ。まぁ黙ってりゃ誰も気づかないだろう(^^;
んで、この回路をシミュレーションしてみると、ほれ↓ちゃんと動くべさ。 |