003回
簡単な論理回路・2

key :
D-FF セレクタ 保持回路 パルス作成


002の続き


・D-FF
動作 記号

reset == 0で初期化を行い
入力Dを次のクロックでQに出力する。

Verilog記述 タイミングチャート

always @(posedge clock or negedge reset) begin
 if (reset == 0)
  Q <= 0;
 else
  Q <= D;
end


D-FF記述において、reset == 0の時の動作を書き忘れない事。
このように、外部から入力データを貰い受ける際にはそれほど大きな問題はないけれど、
出力Qを入力Dにフィードバックする際に初期値が定まらないとその後どんなにクロックが入力されようと 値が変化しないので・・・・





・セレクタ
動作・記述 記号

セレクト信号sが0の場合、xをそのまま出力
1の場合、yをそのまま出力

assign z = (x==0)? x : y;

真理値表 回路詳細
sxyz
0000
0010
0101
0111
1000
1011
1100
1111


assign z = (x==0)? x : y;

assign z = (条件)? 真 : 偽;

結構お世話になる記述。if文みたいな感覚で使えます。




・保持
動作 記号

1shotのパルス信号を利用して、値を保持というか反転。

Verilog記述 タイミングチャート

always @(posedge clock or posedge resetb) begin
 if(resetb ==0)
  out <= 0;
 else if(swich==1)
  out <= out ^ swich;
 else
  out <= out;
end


回路図で書くとちょっと複雑だけれど、記述は簡単♪

この記述において、最後のelseは実は無くても大丈夫。無かった場合は値を保持するようにできているから。
けれども、逆に考えると記述しなかったら勝手に保持されるため、思いもよらぬラッチ信号が出来てしまったりするので elseを書いておく癖を付けるようにした方が良いかもしれない。




・パルス作成
動作 記号

非同期信号で回路を構成する際には必要ないかもしれないけど、 同期信号で回路を作らなくてはいけない場合が多いので安易に使いたい信号のnegedgeとかposedgeを使えないわけですよ。
そこで、使いたい信号を1度D-FFを通して1クロック分遅らせて元の信号と重ねれば・・・

Verilog記述 タイミングチャート

always @(posedge clock or negedge reset) begin
 if (reset == 0)
  Q <= 0;
 else
  Q <= D;
end


この信号を利用して信号の立ち上がりや立下り時の動作を行う。




とりあえずこんなもん。


[<<前へ | ↑Topへ戻る↑ | 次へ>>]