仁木/春のプロジェクト2009/第4回
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[仁木/春のプロジェクト2009]]
*第4回 順序回路の設計 フリップフロップとカウンタ [#xe2f4843]
**0. 基礎知識を身につけよう [#gbd70a51]
-順序回路
--現在の入力のみで出力が決まる回路。
-組合せ回路
--過去の内部状態と入力とで出力が決まる回路。
-ブロッキング代入文(組み合わせ回路で推奨)
--上の行から順番に代入。~
--初期値 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. フリップフロップを作ろう [#y1448e5f]
-動作は?
入力はCLK,RESET,d。出力はq。主に記憶保持で使われる。
--主な動作としては、
1,resetは非同期で0の場合リセットされqは0に
2,CLKが立ち上がった(↑)とき、リセットが1ならばdを出力。
3,CLKが立ち上がり以外のとき且つリセットが1ならば、値の保持。
-posedgeってなに?
posedgeは立ち上がりを、negedgeは立下りを意味する。
ex.
posedge clk //クロックの立ちあがり
negedge clk //クロックの立下り
**2. 2ビット・カウンタを作ろう [#t51c58fd]
-動作は?
2ビットの値を更新、保持、リセット、インクリメントする回路。
--主な動作としては
1,resetが0のときは非同期でqは0(リセット)
(2,以降はresetは1)
2,CLK↑かつ、loadが1のときqはd(更新)
3,CLK↑かつ、incが1のときqはq+1(インクリメント)
4,CLK↑のみ(保持)
5,CLK↑以外(保持)
-完全同期式回路ってなに?
X個の回路にresetやCLKが大元からそのまま直結しているのでX個の回路で同時に
resetや立ち上がり等動作する。そのような回路のこと。
この回路の場合は同期ラッチ、非同期リセットが同時に起こる。
利点としては、微妙なタイミングを考慮する必要が無く、設計が容易になり、バグが発生しなくなる。
-具体的な記述
具体的な記述とは、おもに回路図を意識してつくる。
FFのインスタンス化から、途中の組み合わせ回路の論理式まで考えて記述する必要があり、中身の動作は分かりやすいがめんどくさい。(とおもった)
また、基本的に規模を大きくすると大変複雑な回路になってしまう。
本書では2bitカウンタのみこの記述法を使っていた。
**3. 多ビット・カウンタを作ろう [#b621b1c2]
-抽象的な記述
具体的な論理式は使わず、alwaysとif文などを使ってloadが1ならば値更新、といったように動作自体の記述をする。
内部の構造は分かりづらいが、記述量が少なくすみ全体としては分かりやすい。(とおもった)
ex.
always @(posedge clk or negedge reset) //clkの立ち上がり、またはresetの立下りが発生したとき以下の文を実行
if(!reset)q <=0; //resetが0のときqは0(リセット)
else if(load)q<=d; //loadが1のときqにdを代入(更新)
else if(inc)q<=q+1; //incが1のときq+1(インクリメント)
**4. シミュレーションをしよう [#i48c9468]
-foreverってなに
同じ文を繰り返し実行するときに使う。
ex.
forever //シミュレーションが終わるまで以下の文を繰り返し実行
#50 clk=~clk; //50単位時間町値を反転する
シミュレーション確認済み、問題なし。
終了行:
[[仁木/春のプロジェクト2009]]
*第4回 順序回路の設計 フリップフロップとカウンタ [#xe2f4843]
**0. 基礎知識を身につけよう [#gbd70a51]
-順序回路
--現在の入力のみで出力が決まる回路。
-組合せ回路
--過去の内部状態と入力とで出力が決まる回路。
-ブロッキング代入文(組み合わせ回路で推奨)
--上の行から順番に代入。~
--初期値 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. フリップフロップを作ろう [#y1448e5f]
-動作は?
入力はCLK,RESET,d。出力はq。主に記憶保持で使われる。
--主な動作としては、
1,resetは非同期で0の場合リセットされqは0に
2,CLKが立ち上がった(↑)とき、リセットが1ならばdを出力。
3,CLKが立ち上がり以外のとき且つリセットが1ならば、値の保持。
-posedgeってなに?
posedgeは立ち上がりを、negedgeは立下りを意味する。
ex.
posedge clk //クロックの立ちあがり
negedge clk //クロックの立下り
**2. 2ビット・カウンタを作ろう [#t51c58fd]
-動作は?
2ビットの値を更新、保持、リセット、インクリメントする回路。
--主な動作としては
1,resetが0のときは非同期でqは0(リセット)
(2,以降はresetは1)
2,CLK↑かつ、loadが1のときqはd(更新)
3,CLK↑かつ、incが1のときqはq+1(インクリメント)
4,CLK↑のみ(保持)
5,CLK↑以外(保持)
-完全同期式回路ってなに?
X個の回路にresetやCLKが大元からそのまま直結しているのでX個の回路で同時に
resetや立ち上がり等動作する。そのような回路のこと。
この回路の場合は同期ラッチ、非同期リセットが同時に起こる。
利点としては、微妙なタイミングを考慮する必要が無く、設計が容易になり、バグが発生しなくなる。
-具体的な記述
具体的な記述とは、おもに回路図を意識してつくる。
FFのインスタンス化から、途中の組み合わせ回路の論理式まで考えて記述する必要があり、中身の動作は分かりやすいがめんどくさい。(とおもった)
また、基本的に規模を大きくすると大変複雑な回路になってしまう。
本書では2bitカウンタのみこの記述法を使っていた。
**3. 多ビット・カウンタを作ろう [#b621b1c2]
-抽象的な記述
具体的な論理式は使わず、alwaysとif文などを使ってloadが1ならば値更新、といったように動作自体の記述をする。
内部の構造は分かりづらいが、記述量が少なくすみ全体としては分かりやすい。(とおもった)
ex.
always @(posedge clk or negedge reset) //clkの立ち上がり、またはresetの立下りが発生したとき以下の文を実行
if(!reset)q <=0; //resetが0のときqは0(リセット)
else if(load)q<=d; //loadが1のときqにdを代入(更新)
else if(inc)q<=q+1; //incが1のときq+1(インクリメント)
**4. シミュレーションをしよう [#i48c9468]
-foreverってなに
同じ文を繰り返し実行するときに使う。
ex.
forever //シミュレーションが終わるまで以下の文を繰り返し実行
#50 clk=~clk; //50単位時間町値を反転する
シミュレーション確認済み、問題なし。
ページ名: