課題1.2

同期/非同期16ビット加算器を作成しましょう。

// 16ビット加算器記述例
module adder (in0, in1, clk, rst, out_reg, out_wire);

// パラメータ宣言.後にビット幅の変更を容易に行える
parameter data_width = 16;

// 加算機の入力信号.各々16ビット
input  [data_width-1:0] in0,in1;
input           clk,rst;

// 加算機の出力信号.クロックに同期.16ビット
output [data_width-1:0] out_reg;
// 加算機の出力信号.クロックに非同期.16ビット
output [data_width-1:0] out_wire;

// 計算結果を保持するレジスタ
reg    [data_width-1:0] out_reg;
// 計算結果を出力するためのワイヤ
wire   [data_width-1:0] out_wire;

/* ワイヤへの代入はassign文で行う.クロックに非同期.右辺は条件演算子 */
assign out_wire = (rst)? 0 : in0 + in1;

// クロックの立ち上がりに同期
always @(posedge clk) begin
 // リセットが入力されたら計算結果をリセット
 if(rst) begin
   out_reg <= 0;
 end
 // リセットが入力されていなければ計算結果を保持
 else begin
   out_reg <= in0 + in1;
 end

end
endmodule

課題1.2.1

上記のソースコードを記述し、シミュレーションを行い動作確認をしてください。

課題1.2.2

課題1.2.1の動作確認から2つの出力の違い(クロックに同期、非同期であることの差異)を考察してください。