004b回
ちょっと複雑な論理回路

key :
alwaysを用いた記述


一応あれでも動くのだけれど、最終的な出力を見る際には、信号を1つ1つ追ってみなければ分かり辛い所がある。
作っている最中はいいかもしれないけど、時間を置いてから見たり他人が見たりした際には動作を把握するまでにちょっくら時間がかかる。
そこで、先ほどの記述を更に簡単に


・簡単な記述

module cnt_10(clock,reset,cnt_en,data_set,data,Q);
input clock,reset,cnt_en,data_set;
input [3:0] data;
output [3:0] Q;
reg [3:0] Q;

always @(posedge clock or negedge reset) begin
 if (reset == 0)
  Q <= 4'h0;
 else if (data_set == 1'b1)
  Q <= data;
 //else if ((Q[3] & Q[0] == 1) && (cnt_en == 1))
 else if ((Q == 4'h9) && (cnt_en == 1))
  Q <= 4'h0;
 else if (cnt_en == 1)
  Q <= Q + 4'h1;
 else
  Q <= Q;
end

endmodule


先ほどの記述より、どの信号が入ったさいにどのような動作を行うかがはっきりと分かる。
//else if ((Q[3] & Q[0] == 1) && (cnt_en == 1))
else if ((Q == 4'h9) && (cnt_en == 1))
はどちらも同じ動作だが、コメントアウトしてない下の記述の方がより分かりやすい。
今後、回路を記述する際、メインはこの記述方法になる。



次回はテストベンチ。


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