加藤/春のプロジェクト/第2回
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[加藤/春のプロジェクト]]
*第2回 4ビット加算器を設計しよう [#w5d6cfcf]
*** 1.4ビット加算器の設計 [#g6d8bce1]
-assign文とalways文の違い
--レジスタ宣言とは?
---reg 変数名 で宣言する。
---レジスタ型変数は、レジスタにも信号線にもなる。
--always内の代入文の左辺は?
---''レジスタ宣言''で宣言された''レジスタ型変数''でなければならない。
--assign内の代入文の左辺は?
---''ネット宣言''で宣言された''ネット型変数''でなければならない。
-4ビット加算器を3通りの方法で記述する
--それぞれの記述方法の違いは?
---1.すべての信号線の論理を定義する(最も原始的)
---2.すでに設計したモジュールを部品として利用する方法(モジュールインスタンス化)
---3.算術演算子を用いる方法
--それぞれの記述方法の例
---1.すべての信号線の論理を定義
module adder4(a, b, s);
input [3:0] a, b;
output [3:0] s;
wire [2:0] c; // 繰り上がりのためのネット(信号線)
// assign文
assign s[0] = a[0] ^ b[0];
assign c[0] = a[0] & b[0]; // 1けた目の繰り上がりの確認
assign s[1] = a[1] ^ b[1] ^ c[0];
assign c[1] = (a[1] & b[1]) | (b[1] & c[0]) | (c[0] & a[1]);
assign s[2] = a[2] ^ b[2] ^ c[1];
assign c[2] = (a[2] & b[2]) | (b[2] & c[1]) | (c[1] & a[2]);
assign s[3] = a[3] ^ b[3] ^ c[2];
endmodule
---2.すでに設計したモジュールを部品として利用する方法
module adder4(a, b, s);
input [3:0] a, b;
output [3:0] s;
wire [2:0] c;
// モジュールfaをインスタンス化したものを使う
fa fa0(.a(a[0]), .b(b[0]), .cin(0), .s(s[0]), .cout(c[0])); // モジュールfaをインスタンス化したfa0
fa fa1(.a(a[1]), .b(b[1]), .cin(c[0]), .s(s[1]), .cout(c[1])); // 同じようにインスタンス化したfa1
fa fa2(.a(a[2]), .b(b[2]), .cin(c[1]), .s(s[2]), .cout(c[2])); // 同じようにインスタンス化したfa2
fa fa3(.a(a[3]), .b(b[3]), .cin(c[2]), .s(s[3])); // 同じようにインスタンス化した同じようにインスタンス化したfa3
endmodule
---3.算術演算子を用いる方法
module adder4(a, b, s);
input [3:0] a, b;
output [3:0] s;
reg [3:0] s;
// always文
always @(a or b)
s = a + b;
endmodule
***2. 補数表現 [#qf77a4e0]
-1の補数とは?
--ビット列の各ビットを反転させたもの
-2の補数とは?
--1の補数に1を加えたもの
***3. Verilog HDLの演算子 [#g7fc6c75]
| ビット、シフト演算子 |
| << | 左辺を右辺だけ左シフト |
| >> | 左辺を右辺だけ右シフト |
終了行:
[[加藤/春のプロジェクト]]
*第2回 4ビット加算器を設計しよう [#w5d6cfcf]
*** 1.4ビット加算器の設計 [#g6d8bce1]
-assign文とalways文の違い
--レジスタ宣言とは?
---reg 変数名 で宣言する。
---レジスタ型変数は、レジスタにも信号線にもなる。
--always内の代入文の左辺は?
---''レジスタ宣言''で宣言された''レジスタ型変数''でなければならない。
--assign内の代入文の左辺は?
---''ネット宣言''で宣言された''ネット型変数''でなければならない。
-4ビット加算器を3通りの方法で記述する
--それぞれの記述方法の違いは?
---1.すべての信号線の論理を定義する(最も原始的)
---2.すでに設計したモジュールを部品として利用する方法(モジュールインスタンス化)
---3.算術演算子を用いる方法
--それぞれの記述方法の例
---1.すべての信号線の論理を定義
module adder4(a, b, s);
input [3:0] a, b;
output [3:0] s;
wire [2:0] c; // 繰り上がりのためのネット(信号線)
// assign文
assign s[0] = a[0] ^ b[0];
assign c[0] = a[0] & b[0]; // 1けた目の繰り上がりの確認
assign s[1] = a[1] ^ b[1] ^ c[0];
assign c[1] = (a[1] & b[1]) | (b[1] & c[0]) | (c[0] & a[1]);
assign s[2] = a[2] ^ b[2] ^ c[1];
assign c[2] = (a[2] & b[2]) | (b[2] & c[1]) | (c[1] & a[2]);
assign s[3] = a[3] ^ b[3] ^ c[2];
endmodule
---2.すでに設計したモジュールを部品として利用する方法
module adder4(a, b, s);
input [3:0] a, b;
output [3:0] s;
wire [2:0] c;
// モジュールfaをインスタンス化したものを使う
fa fa0(.a(a[0]), .b(b[0]), .cin(0), .s(s[0]), .cout(c[0])); // モジュールfaをインスタンス化したfa0
fa fa1(.a(a[1]), .b(b[1]), .cin(c[0]), .s(s[1]), .cout(c[1])); // 同じようにインスタンス化したfa1
fa fa2(.a(a[2]), .b(b[2]), .cin(c[1]), .s(s[2]), .cout(c[2])); // 同じようにインスタンス化したfa2
fa fa3(.a(a[3]), .b(b[3]), .cin(c[2]), .s(s[3])); // 同じようにインスタンス化した同じようにインスタンス化したfa3
endmodule
---3.算術演算子を用いる方法
module adder4(a, b, s);
input [3:0] a, b;
output [3:0] s;
reg [3:0] s;
// always文
always @(a or b)
s = a + b;
endmodule
***2. 補数表現 [#qf77a4e0]
-1の補数とは?
--ビット列の各ビットを反転させたもの
-2の補数とは?
--1の補数に1を加えたもの
***3. Verilog HDLの演算子 [#g7fc6c75]
| ビット、シフト演算子 |
| << | 左辺を右辺だけ左シフト |
| >> | 左辺を右辺だけ右シフト |
ページ名: