Added sign extension for 3 bits up to 8 bits

This commit is contained in:
WilliamMiceli
2019-03-16 13:23:22 -04:00
parent ef8b9c92e5
commit b621f5a46b

View File

@@ -992,6 +992,321 @@ module sign_extend_2bit_tb();
end
endmodule
module sign_extend_3bit(
input wire [2:0] A,
output wire [8:0] B);
assign B = {{6{A[2]}},A};
endmodule
//testbench
module sign_extend_3bit_tb();
reg [2:0] A;
wire [8:0] B;
sign_extend_3bit tb0(
.A(A),
.B(B));
initial begin
A = 3'b000;
#5
A = 3'b001;
#5
A = 3'b010;
#5
A = 3'b011;
#5
A = 3'b100;
#5
A = 3'b101;
#5
A = 3'b110;
#5
A = 3'b111;
#5
$finish;
end
endmodule
module sign_extend_4bit(
input wire [3:0] A,
output wire [8:0] B);
assign B = {{5{A[3]}},A};
endmodule
//testbench
module sign_extend_4bit_tb();
reg [3:0] A;
wire [8:0] B;
sign_extend_4bit tb0(
.A(A),
.B(B));
initial begin
A = 4'b0000;
#5
A = 4'b0001;
#5
A = 4'b0010;
#5
A = 4'b0011;
#5
A = 4'b0100;
#5
A = 4'b0101;
#5
A = 4'b0110;
#5
A = 4'b0111;
#5
A = 4'b1000;
#5
A = 4'b1001;
#5
A = 4'b1010;
#5
A = 4'b1011;
#5
A = 4'b1100;
#5
A = 4'b1101;
#5
A = 4'b1110;
#5
A = 4'b1111;
#5
$finish;
end
endmodule
module sign_extend_5bit(
input wire [4:0] A,
output wire [8:0] B);
assign B = {{4{A[4]}},A};
endmodule
//testbench
module sign_extend_5bit_tb();
reg [4:0] A;
wire [8:0] B;
sign_extend_5bit tb0(
.A(A),
.B(B));
initial begin
A = 5'b00000;
#5
A = 5'b00010;
#5
A = 5'b00100;
#5
A = 5'b00110;
#5
A = 5'b01000;
#5
A = 5'b01010;
#5
A = 5'b01100;
#5
A = 5'b01110;
#5
A = 5'b10000;
#5
A = 5'b10010;
#5
A = 5'b10100;
#5
A = 5'b10110;
#5
A = 5'b11000;
#5
A = 5'b11010;
#5
A = 5'b11100;
#5
A = 5'b11110;
#5
$finish;
end
endmodule
module sign_extend_6bit(
input wire [5:0] A,
output wire [8:0] B);
assign B = {{3{A[5]}},A};
endmodule
//testbench
module sign_extend_6bit_tb();
reg [5:0] A;
wire [8:0] B;
sign_extend_6bit tb0(
.A(A),
.B(B));
initial begin
A = 6'b000000;
#5
A = 6'b000100;
#5
A = 6'b001000;
#5
A = 6'b001100;
#5
A = 6'b010000;
#5
A = 6'b010100;
#5
A = 6'b011000;
#5
A = 6'b011100;
#5
A = 6'b100000;
#5
A = 6'b100100;
#5
A = 6'b101000;
#5
A = 6'b101100;
#5
A = 6'b110000;
#5
A = 6'b110100;
#5
A = 6'b111000;
#5
A = 6'b111100;
#5
$finish;
end
endmodule
module sign_extend_7bit(
input wire [6:0] A,
output wire [8:0] B);
assign B = {{2{A[6]}},A};
endmodule
//testbench
module sign_extend_7bit_tb();
reg [6:0] A;
wire [8:0] B;
sign_extend_7bit tb0(
.A(A),
.B(B));
initial begin
A = 7'b0000000;
#5
A = 7'b0001000;
#5
A = 7'b0010000;
#5
A = 7'b0011000;
#5
A = 7'b0100000;
#5
A = 7'b0101000;
#5
A = 7'b0110000;
#5
A = 7'b0111000;
#5
A = 7'b1000000;
#5
A = 7'b1001000;
#5
A = 7'b1010000;
#5
A = 7'b1011000;
#5
A = 7'b1100000;
#5
A = 7'b1101000;
#5
A = 7'b1110000;
#5
A = 7'b1111000;
#5
$finish;
end
endmodule
module sign_extend_8bit(
input wire [7:0] A,
output wire [8:0] B);
assign B = {A[7],A};
endmodule
//testbench
module sign_extend_8bit_tb();
reg [7:0] A;
wire [8:0] B;
sign_extend_8bit tb0(
.A(A),
.B(B));
initial begin
A = 8'b00000000;
#5
A = 8'b00010000;
#5
A = 8'b00100000;
#5
A = 8'b00110000;
#5
A = 8'b01000000;
#5
A = 8'b01010000;
#5
A = 8'b01100000;
#5
A = 8'b01110000;
#5
A = 8'b10000000;
#5
A = 8'b10010000;
#5
A = 8'b10100000;
#5
A = 8'b10110000;
#5
A = 8'b11000000;
#5
A = 8'b11010000;
#5
A = 8'b11100000;
#5
A = 8'b11110000;
#5
$finish;
end
endmodule
module sub_9bit(
input wire [8:0] A,
input wire [8:0] B,