この中

1 自由課題
まず,Verilog-HDL を記述する前に,以下の項目を紙にまとめて,チェックを受けること。
1. 回路の機能の説明(日本語+図表)
2. トップレベルブロック図と内部ブロックの説明
3. 各ブロックの入出力,状態,内部レジスタ等の表
難易度: (*)=> 簡単, (**)=> 普通, (***)=> 難しい
課題 1.(**)
8bit データの加算、減算、右 1 ビットシフト、比較を行う ALU を設計しなさい。
手順 1: 加算、減算、右 1 ビットシフト、比較のモジュールをそれぞれ作成する。
手順 2: 2bit の制御信号により信号を選択する 8bit データの 4 入力 1 出力のセレク
タモジュールを作る
手順 3: 手順 2 で作成した module 内で手順 1 の module 呼び出しを行う。
課題 2.(**) ステートマシン:図 1 に示す状態遷移図を Verilog-HDL で記述する。
説明:状態は A, B, C, D の 4 状態がある。SW1, SW2, SW3 の信号により、以下のように
状態が変わる。
1)
2)
3)
4)
5)
SW1 が 1 になると、状態 A になる。
状態 A の場合、SW2 が 1 になると状態 B になる。
状態 B の場合、SW2 が 1 になると状態 A になり、SW3 が 1 になると状態 D になる。
状態 C の場合、SW2 が 1 になると状態 A になり、SW3 が 1 になると状態 B になる。
状態 D の場合、SW2 が 1 になると状態 A になり、SW3 が 1 になると状態 C になる。
ただし、A=00, B=01, C=10, D=11 とする。
図 1: ステートマシン (状態遷移図)
4{1
手順 1: CASE 文を用いて書く。まずパラメータ宣言を行い、パラメータで状態を
表す。
手順 2: パラメータの値 (状態) により場合分けを行い、それぞれの場合 (状態) にお
ける、SW2, SW3 の値に応じて処理を変化させる。
手順 3: SW1 が 1 のとき初期状態 (パラメータを 00) と設定する。
課題 3.(*)
クロックによりカウントアップする 4bit グレイコード・カウンタを設計しなさい。
手順 1: グレイコード発生部を funtion 文で記述する。(ヒント:ase 文を用い、下
記のテーブルに従い、現カウンタ値 ount を次カウンタ値に書き換える。)
手順 2: always 文を用い、クロック入力時に funtion 文を呼び出す。リセット信号
に対しては、リセット値 0000 にするか、funtion 文にするかを if 文を用い
て選択する。
説明:グレイコードカウンタとは、出力が常に 1bit 変換するカウンタで、クロックにより
以下のテーブルのようにカウンタ値が変化する。
現カウンタ値
次カウンタ値
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
0000
課題 4.(****) デコーダ:8 ビットレジスタ"PC" が示すアドレスのメモリ値をレジスタ"IR"
に代入し、"IR" の上位 3 ビットの値により、以下の表の動作をさせる。
手順 1: 213 個のメモリを構成し (reg 宣言)、PC, ACC, IR のレジスタを定義する。
手順 2: 動作内容を Verilog-HDL で記述する。
手順 3: CASE 文を用いてレジスタ"IR" の上位 3 ビットの値によりデコードする。
4{2
\IR" の上位 3 ビット \動作"
000
レジスタ"IR" の下位 13 ビットの値のアドレスのメモリ値を
レジスタ"PC" に代入する。
001
レジスタ"IR" の下位 13 ビットの値のアドレスのメモリ値に
レジスタ"PC" の値を加えてレジスタ"PC" に代入する。
010
レジスタ"IR" 下位 13 ビットのアドレスにあるメモリの値を
レジスタ"ACC" に代入する。
011
レジスタ"ACC" の値をレジスタ"IR" 下位 13 ビットのアドレ
100
101
110
課題 5.(**)
1)
2)
3)
4)
スにあるメモリに代入する。
動作しない。
レジスタ"ACC" にレジスタ"IR" 下位 13 ビットのアドレスに
あるメモリを減算する
ACC が負の場合、レジスタ"PC" の値を 1 加える。
自動販売機:次のような仕様を持つ自動販売機を設計しなさい。
10 円と 100 円の 2 種類の硬貨のみ受け付ける。
商品の定価は 120 円である。
120 円以上硬貨が投入されたら、商品とお釣りを出力する。
10 円の投入と 100 円の投入は同時に起こらないものとする。
手順 1: 自然言語の仕様をもとに、module の入出力信号、レジスタ変数を決定する。
入力信号としては、100 円投入信号、10 円投入信号がある。出力信号として
は、商品出力信号、お釣り出力信号、お釣り金額信号がある。内部レジスタ
変数としては、投入金額の合計を表す変数がある。
手順 2: 状態遷移図を記述する。
手順 3: 状態遷移図を Verilog-HDL で記述する。
4{3
課題 6.(***)
次のような仕様を持つ演算ブロックを設計しなさい。
sum =
X X [i℄
15
i=0
1) X [i℄ は 8 ビットの整数であり、メモリに格納されているものとする。
3) メモリには以下に示す module を使用する。
module ram(q, a, d, we, lk);
output[7:0℄ q;
input [7:0℄ d;
input [6:0℄ a;
input we, lk;
reg [6:0℄ read_add;
reg [7:0℄ mem [15:0℄;
always (posedge lk) begin
if (we)
mem[a℄ <= d;
read_add <= a;
end
assign q = mem[read_add℄;
endmodule
手順 1: 演算ブロックを module 記述し、メモリと並列に動作させる。
手順 2: 演算ブロックに、メモリアクセスに必要なポートを持たせ、さらに外部か
らの開始信号を受け取るポート (start)、および外部に終了信号を知らせる
ポート (nish) を持たせる。
手順 3: 演算ブロックに、アドレスを出力させると同時に、メモリデータを取り込
み、加算させる。加算結果はレジスタ変数に格納する。
以下に追加課題を列挙します。好みなどに応じて、入出力や仕様を追加してください。
課題 7.(**) n 面ダイスを設計しなさい。
n 面ダイスとは、n 個の面を持つサイコロであり、高速にカウントを行うカウンタによっ
て実現できる。次の特徴を持つものとする。
1) 入力 start が 1 のときダイスの目が動きはじめ、入力 stop が 1 のときダイスの目がス
トップする。
2) 入力 set 信号と同時に入力されたデータで、ダイスの面の数を n に変更できる。
4{4
課題 8.(**) パラレルシリアル変換回路を設計しなさい。
パラレルシリアル変換回路とは、多ビット (例えば 8 ビット) の信号 (パラレル信号) を受
け取り、1 ビットの信号列 (シリアル信号) に変換し出力する回路である。設計する回路は以
下の特徴を持つものとする。
1) 出力は、MSB(Most Signiant Bit, 最上位ビット) から出力する。
2) シリアル信号の出力中は、valid 信号を 1 にする。
課題 9.(**) 信号機の制御回路を設計しなさい。
信号機は、赤、青、黄の三色のライトを持ち、基本的には青 (進め) が点灯している。歩行
者がボタンを押すと、ある時間置いて、黄色信号を経て、赤信号になる。赤信号からしばら
くして、青信号に戻る。
1) どのように信号が変化するかや、時間経過の詳細は、設計者が適当に決めてよい。
2) 回路の仕様として、状態遷移図も記述せよ。
課題 10.(***)
1)
2)
3)
4)
ストップウォッチを設計せよ。
回路に入力されるクロック周期は 1Hz とする。
ストップウォッチは、start(開始)、stop(終了)、reset(リセット) 入力を持つ。
経過時間 (分、秒) を出力する。
経過時間 (分、秒) はリセット信号によって、0 分 0 秒にリセットされる。
課題 11.(**) タイマ回路を設計しなさい。
タイマ回路とは、設定した時間が経過したら、パルスを一つ発生する回路である。設計す
るタイマ回路は以下の特徴を持つものとする。
1) 入力 strobe が 1 のときに入力されるデータが設定時間となり、レジスタに保持される。
2) 停止状態と動作状態の二つの状態を持つ動作管理用のステートマシンを持つ。
課題 12.(**) SIMD(Single Instrution Multiple Data) 加算器を設計しなさい。
設計は、以下の特徴を持つものとする。
1) 演算器のビット幅は 32 ビットとする。
2) 2 つのモードを持ち、32 ビットの加算か、8 ビットの 4 つの加算どちらかを実行できる。
課題 13.(**) パターン発生回路を設計しなさい。
パターン発生回路とは、1 ビットの入力を持ち、特定のパターンが入力されたら、パルス
を 1 サイクル出力する回路である。
1) パターンはレジスタに記憶するものとする。
2) パターンのビット幅は、3 ビットとする。
4{5
課題 14.(**) PWM(パルス幅変調) 回路を設計しなさい。
PWM 回路とは、周期とパルス幅を与えたときに、その条件を満たす波形を生成する回路
である。
1) 周期とパルス幅はそれぞれレジスタに格納する。
2) 周期とパルス幅を設定したレジスタは、それぞれ 1 ビットの書き込み制御用信号を持つ。
課題 15.(***) 変速器制御用回路の設計
次の仕様を持つ車の変速器制御用 IC を設計せよ。表 1 に示すように、ギアは3段変速で、
車速が速くなる際は、30km/h でギア 1 から 2 へ、60km/h でギア 2 から 3 へ変更となる。一
方、車速が遅くなる際は、50km/h でギア 3 から 2 へ、20km/h でギア 2 から 1 へ変更となる。
1) 回路の入力は、速度センサから受け取る車速を表す信号 veloity とせよ。
2) 回路の出力は、ギアの段数を表す信号 gear とせよ。
D4 D5 D6
ギア
1
2
3
車速 (km/h)
up
30
60
-
down
20
50
表 1: 変速機制御用 IC の仕様
D3
1
2
3
D2
4
5
6
D1
7
8
9
D0
*
0
#
図 2: プッシュホンのキー配列
課題 16.(**) プッシュホンのキー制御用回路を設計せよ。
プッシュホンのキー配列を図 2 に示す。
1) 入力は、D0 から D6 までの計 7 個の 1 ビット信号である。キーが押されると、D0 から
D6 のうち、対応する信号が 1 となる。例えば、キー 5 が押されると、信号 D2 と D5 が
1 となり、他の信号 (D0, D1, D3, D4, D6) は 0 となる。
2) 出力信号は、keyout とし、押されたボタンに対応する 16 進数を出力するものとする。
ただし、アスタリスク (*) には 16 進数の A, シャープ (#) には 16 進数の B を対応させ
るものとする。
課題 17.(***) 正弦 (sin) 波出力回路を設計せよ。
sin 波を 8 ビットのディジタルデータとして出力する回路を設計せよ。
1) 入力信号は、クロック lk, リセット rst とせよ。
2) リセット後、n クロック目で、sin(n 10=360) の値を出力 sinout に出力せよ。つまり、
各クロックで 10 度だけ位相をずらした sin の値を順次出力せよ。
3) 出力信号 sinout は、8 ビットのデジタル出力 (-128 から+127 の範囲の値をとる) に量
子化せよ。なお負の数は 2 の補数で表現せよ。
4) ヒント:最初に、各クロックで出力すべき sinout の値を決定せよ。
4{6