[Verilog] 飽和符号対応加算器
概要
- 2入力、符号対応(入力の最上位ビットが正負を表す)、加算時の飽和対応の加算器
- 入出力データ幅はパラメータ化
- モジュール内にレジスタなし

ソース
Module
module signed_saturating_adder #(
parameter DATA_WIDTH = 32
)(
input [DATA_WIDTH - 1:0] in_a,
input [DATA_WIDTH - 1:0] in_b,
output [DATA_WIDTH - 1:0] out
);
wire sign_a, sign_b;
assign sign_a = in_a[DATA_WIDTH - 1];
assign sign_b = in_b[DATA_WIDTH - 1];
wire [DATA_WIDTH:0] add_checker;
assign add_checker = {sign_a, in_a} + {sign_b, in_b};
wire saturated_flag;
assign saturated_flag = (sign_a)? !add_checker[DATA_WIDTH - 1]: add_checker[DATA_WIDTH - 1];
wire [DATA_WIDTH - 1:0] saturated_value;
assign saturated_value = (sign_a)? {1'b1, {(DATA_WIDTH - 1){1'b0}}}:{1'b0, {(DATA_WIDTH - 1){1'b1}}};
assign out = (sign_a ^ sign_b)? in_a + in_b : (saturated_flag)? saturated_value:add_checker[DATA_WIDTH - 1:0];
endmodule
テストベンチなどはこちら: https://edaplayground.com/x/VMLd
プログラミング風景を動画にしました





ディスカッション
コメント一覧
まだ、コメントがありません