春のプロジェクト2009/第4回
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[春のプロジェクト2009]]
*第4回 順序回路の設計 フリップフロップとカウンタ[#g7714398]
#contents
今回のポイント
-順序回路と組合せ回路の違いを知ろう!
-フリップフロップとカウンタの仕組みを知ろう!
-ブロッキング代入文とノンブロッキング代入文の違いも知ろう!
今回の内容
+フリップフロップを作ろう!
+フリップフロップを使って2ビットカウンタを作ろう!
+2ビットカウンタとは違う方向(抽象的に)から多ビットカウンタを作ろう!
**0. 基礎知識を身につけよう[#mb9210bb]
-順序回路
--現在の入力のみで出力が決まる回路。
-組合せ回路
--過去の内部状態と入力とで出力が決まる回路。
-ブロッキング代入文
--上の行から順番に代入。~
--初期値 a = 0, b = 0 とし下の回路を1サイクル実行すると "b = &color(red){1};"
always @ (posedge clk)
begin
a = 1;
b = a; //aは上で代入されている
end
-ノンブロッキング代入文
--すべて同時に代入。~
--初期値 a = 0, b = 0 とし下の回路を1サイクル実行すると "b = &color(red){0};"
always @ (posedge clk)
begin
a <= 1;
b <= a; //aはまだ初期値のまま
end
**1. フリップフロップを作ろう[#m70f9bbe]
-値を更新、保持、リセットする回路。
-動作は表1に記載。
**2. 2ビット・カウンタを作ろう[#pe7851e3]
-2ビットの値を更新、保持、リセット、インクリメントする回路。
-動作は表2に記載。
-完全同期式回路として作成。
-具体的に記述。
**3. 多ビット・カウンタを作ろう[#ld6819fb]
-2ビットカウンタの多ビット版。
-動作は表2と同じ。保持する値が増えただけ。
-抽象的に記述。(具体的に書くと回路が複雑になってしまうため。)
**4. シミュレーションをしよう[#wcf280cf]
-やりかたは前回と同じ。
--図4と同じ波形がでていたら正解。
テストベンチ
module counter_tb;
reg clk, reset, load, inc;
reg [15:0] d;
wire [15:0] q;
counter
counter(
.clk(clk),
.reset(reset),
.load(load),
.inc(inc),
.d(d),
.q(q)
);
initial
begin
clk = 0;
forever
begin
#50 clk = ~clk;
end
end
initial
begin
reset = 0;
load = 0;
inc = 0;
d = 16'h0000;
#100 reset = 1;
#100 inc = 1;
#300
begin
inc = 0;
load = 1;
d = 16'h1234;
end
#100
begin
inc = 1;
load = 0;
d = 16'h0000;
end
#500 reset = 1;
#100 $finish;
end // initial begin
initial
begin
$dumpfile("counter_sim.vcd");
$dumpvars(0,counter_tb);
end
endmodule
`include"counter.v"
-
----------------------------------------
提案、質問などあればお願いします。
#comment
終了行:
[[春のプロジェクト2009]]
*第4回 順序回路の設計 フリップフロップとカウンタ[#g7714398]
#contents
今回のポイント
-順序回路と組合せ回路の違いを知ろう!
-フリップフロップとカウンタの仕組みを知ろう!
-ブロッキング代入文とノンブロッキング代入文の違いも知ろう!
今回の内容
+フリップフロップを作ろう!
+フリップフロップを使って2ビットカウンタを作ろう!
+2ビットカウンタとは違う方向(抽象的に)から多ビットカウンタを作ろう!
**0. 基礎知識を身につけよう[#mb9210bb]
-順序回路
--現在の入力のみで出力が決まる回路。
-組合せ回路
--過去の内部状態と入力とで出力が決まる回路。
-ブロッキング代入文
--上の行から順番に代入。~
--初期値 a = 0, b = 0 とし下の回路を1サイクル実行すると "b = &color(red){1};"
always @ (posedge clk)
begin
a = 1;
b = a; //aは上で代入されている
end
-ノンブロッキング代入文
--すべて同時に代入。~
--初期値 a = 0, b = 0 とし下の回路を1サイクル実行すると "b = &color(red){0};"
always @ (posedge clk)
begin
a <= 1;
b <= a; //aはまだ初期値のまま
end
**1. フリップフロップを作ろう[#m70f9bbe]
-値を更新、保持、リセットする回路。
-動作は表1に記載。
**2. 2ビット・カウンタを作ろう[#pe7851e3]
-2ビットの値を更新、保持、リセット、インクリメントする回路。
-動作は表2に記載。
-完全同期式回路として作成。
-具体的に記述。
**3. 多ビット・カウンタを作ろう[#ld6819fb]
-2ビットカウンタの多ビット版。
-動作は表2と同じ。保持する値が増えただけ。
-抽象的に記述。(具体的に書くと回路が複雑になってしまうため。)
**4. シミュレーションをしよう[#wcf280cf]
-やりかたは前回と同じ。
--図4と同じ波形がでていたら正解。
テストベンチ
module counter_tb;
reg clk, reset, load, inc;
reg [15:0] d;
wire [15:0] q;
counter
counter(
.clk(clk),
.reset(reset),
.load(load),
.inc(inc),
.d(d),
.q(q)
);
initial
begin
clk = 0;
forever
begin
#50 clk = ~clk;
end
end
initial
begin
reset = 0;
load = 0;
inc = 0;
d = 16'h0000;
#100 reset = 1;
#100 inc = 1;
#300
begin
inc = 0;
load = 1;
d = 16'h1234;
end
#100
begin
inc = 1;
load = 0;
d = 16'h0000;
end
#500 reset = 1;
#100 $finish;
end // initial begin
initial
begin
$dumpfile("counter_sim.vcd");
$dumpvars(0,counter_tb);
end
endmodule
`include"counter.v"
-
----------------------------------------
提案、質問などあればお願いします。
#comment
ページ名: