同期/非同期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つの出力の違い(クロックに同期、非同期であることの差異)を考察してください。 |