VHDLの勉強を始めて数日になるのですが、ある参考書に載っている記述が理解できませんので、質問させていただきました。
「基本クロックに同期してleをトグルする」という説明の後に、下記の様な
記述がありました(信号名などはオリジナルとは変えてます)。
一番不明なのは、”latch”信号です。
2~5行めを簡単に説明すると、”clk”の立ち上がりで、in1とlatchが
0であった場合、leが反転し、latchが1になるということだと思いますが、
いまいち理解が出来ません。
6、7行目をみてもさっぱりで、in1とlatchが1だったら
latchが1になる。
これは、いったい何を意味しているのでしょうか。
ブロック図的なものでもあればわかりやすいのかもしれませんが、
そのあたりの説明は一切載ってませんので、どう考えてよいのかがわ
からないのです。
はじめは、T型フリップフロップのイメージかと思ったのですが、
どうも違うようです。
このlatch信号の意味をどなたかわかる方がいらっしゃいましたら
ご教授願いたいのですが、よろしくお願いします。
process (clk)
if clk'event and clk = '1' then
if in1 = '0' and latch ='0' then
le <= not le;
latch <='1';
elsif in1 = '1' and latch = '1' then
latch <= '0';
elsif in1 = '0' and latch = '1' then
latch <= '1';
end if;
end process;
No.1ベストアンサー
- 回答日時:
手元にコンパイラもシミュレータも無いので、自信は
有りませんが回答してみます。
ついでに、私はVerlog 派 なのですが…
初期値 in1 = 0,latch = 0 と、します。
if in1 = '0' and latch ='0' then を、状態A
elsif in1 = '1' and latch = '1' then を、状態B
elsif in1 = '0' and latch = '1' then を、状態C
と、します。
初期値より、先ず状態A になります。
この時、leの出力は反転、latch は 1 に変化します。
ここで in1 = 0 latch = 1 になるので、状態は C に遷移します。
状態C では、latch = 1になるので、
in1 = 0 latch = 1 なので、状態は C のままです。
状態C の時に、in1 = 1 になると、状態はBに遷移し latch = 0に
なります。
in1 = 1 latch = 0 となります。
この状態を定義する条件が有りませんので、仮に状態X と定義
します。
恐らく、状態X の時は 出力が不変になると思います。
状態X の時、in1 = 0 になると、latch = 0を受け継ぎ、状態Aに
遷移します。
以降、先頭に戻る。
この回路は全体として、in1 = 0 をきっかけとする、ワンショット
トリガ回路で、in1 を入力する度に、leを反転、保持を行っている
のでは無いでしょうか?
これは、状態A から 状態Cに遷移中 の時、latch が 0から1 に変化
するまで、入力 in1 が …1,0,1,0… と変化しても、le の出力状態を
保証しているのだと思います。
従って、latch は 出力le の状態を保持する為の信号 なのでは
ないでしょうか?
余談ですが、begin と end ifが足りない様な気がするのですが、
大丈夫でしょうか?
更に余談ですが、if文 を使う時は、必ず else を明記し、
不明な状態を無くした方が良いと思います。
if、elseif の条件に当てはまらない状態が発生した場合、
必ず、出力保持とは限りません。
コンパイラやターゲットLSI に寄っては出力が変わって来る事が
あります。
中には、出力が不定になるものも有ります。
同じ理由から、switch case には default を明示する事を
お勧めします。
回答ありがとうございます。
かなりわかり安い回答で助かりました。
勉強を始めて数日であるのと、一日1時間ほどしか出来ないので、なかなか
理解が深まりませんが、示していただいたように、状態の遷移を考えることで、
なんとなく理解できたような気がします。
ただ、ちょっと理解が難しいです。
内部信号の考え方や、ラッチの考え方の理解が出来ていないのだと思います。
ハード的に回路図を書くのとは、若干視点を変える必要がありそうです。
ですが、ハード的に24ビットカウンタなどかなり作るの大変ですが、
HDLでは簡単に出来ることを知って、かなりわくわくしてます。
これからも少しずつではありますが、精進していきます。
追伸:確かにbiginとかありませんね。
まだまだです。
これから精進します。
No.2
- 回答日時:
何をしたいのか本当のところは、それだけの情報ではわかりませんが。
とりあえず、その記述だと、in1の立下りで leが反転するようになっていますね。(clkの周波数は、in1の周波数よりもずっと早いとした場合)
つまり、1周期前のclk立ち上がりでin1が1で、今回のclk立ち上がりでin1が0になるとleが反転します。
「latchの意味」というのは答えづらい質問ですが、そうですね、in1が入力、latchが内部状態だと思えば、その回路はミーリ型のステートマシンになってます。
#ちなみに日本でHDLを勉強するならVerilogをすすめます。FPGAなんかだとサンプルがVHDLで書かれている場合もあるんで、VHDLで始めるというのもあることはあるんですが、実際に仕事でHDLを触っている人は大多数がVerilogで組んでいると思います。
回答ありがとうございます。
ステートマシンですか。
なるほど、テキストの先を見ると、ミーリ型とかムーア型とか出てきますね。
ということは、今の私の知識では、理解できない状態だったのですね。
NO.1さんの回答にも書きましたが、内部状態の理解が難しいです。
ステートマシンというのが関係しているとなれば、先を読むことで、理解できそうでです。
希望がわいてきました。
ありがとうございます。
あと、Verilogが多いというのは、まったく知りませんでした。
いろいろ調べてみましたが、大体は、どっちでも良いってのが一般的でした。
あと、C言語に似てるということと、VHDLを理解すると、Verilogも
理解がしやすく、Verilogを先にやった人は、VHDLをやろうとすると、
少しと惑うと書いてあったので、VHDLのテキスト買って勉強始めました。
アドバイスいただきうれしいのですが、今から変更するのは、かなり勇気が
いりますので、とりあえず、このままがんばってみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) エクセル VBA 難しいです 1 2023/02/21 15:39
- Visual Basic(VBA) VBAでのループ順序について 3 2023/03/13 10:55
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- 英語 Greater stress was reported in axial direction at 1 2022/07/20 12:46
- Visual Basic(VBA) エクセル VBAについて 2 2022/05/16 16:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
C言語で矩形波生成方法
-
プログラムについての質問です...
-
printfとputcharの違いは
-
4Kの外部モニターに出力すると...
-
VBAでテキスト出力時のスペース...
-
プログラミングの問題です。至...
-
VBAで出力したCSVファイルの先...
-
発電機の出力について
-
昨日SSDを増設したら、PCが点か...
-
複数起動してるエクセルを一括...
-
coutで出力した文字を消去する...
-
加速度センサを用いて速度計測
-
wsprintfで浮動小数を扱うには?
-
printfの書式%.*s
-
makeで文字化けする。migwのmak...
-
OBS配信すると、マイクが途切れ...
-
無線とかアンテナに関しの質問...
-
C言語 putchar関数
-
ACCESS クエリ→フォーム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
4Kの外部モニターに出力すると...
-
MMDでavi出力が出来ない
-
プログラムについての質問です...
-
コンセントの電力は入力と出力...
-
AIに回答させるって
-
OBS配信すると、マイクが途切れ...
-
VBAでテキスト出力時のスペース...
-
cout と cerrの違い
-
アクセスでエクセルに出力する...
-
printfとputcharの違いは
-
ACCESS クエリ→フォーム...
-
VBAのExecメソッドで画面を非表...
-
テキストファイルから特定の文...
-
COBOLのMOVEで桁数が異なる場合
-
VBAで有効数字の設定
-
coutで出力した文字を消去する...
-
Windows Formアプリからコンソ...
-
KEYENCEのシーケンスプログラム...
-
CRC16計算について
おすすめ情報