📄 add.v
字号:
//`timescale 1ns/10ps
module Add(
InData_1,
InData_2,
OutData
);
parameter Data_Width = 20;
input [Data_Width-1:0] InData_1;
input [Data_Width-1:0] InData_2;
output [Data_Width-1:0] OutData;
reg [Data_Width-1:0] OutData;
reg [Data_Width-2:0] temp;
always @(InData_1 or InData_2) begin
case({InData_1[Data_Width-1], InData_2[Data_Width-1]})
// + +
2'b00: begin
temp = InData_1[Data_Width-2:0] + InData_2[Data_Width-2:0];
OutData = {1'b0, temp};
end
// + -
2'b01: begin
if(InData_1[Data_Width-2:0] == InData_2[Data_Width-2:0])
OutData = 0;
else if(InData_1[Data_Width-2:0] > InData_2[Data_Width-2:0]) begin
temp = (InData_1[Data_Width-2:0] + (~InData_2[Data_Width-2:0]) + 1'b1);
OutData = {1'b0, temp};
end
else begin
temp = (~InData_1[Data_Width-2:0] + InData_2[Data_Width-2:0] + 1'b1);
OutData = {1'b1, temp};
end
end
// - +
2'b10: begin
if(InData_1[Data_Width-2:0] == InData_2[Data_Width-2:0])
OutData = 0;
else if(InData_1[Data_Width-2:0] > InData_2[Data_Width-2:0]) begin
temp = (InData_1[Data_Width-2:0] + (~InData_2[Data_Width-2:0]) + 1'b1);
OutData = {1'b1, temp};
end
else begin
temp = (~InData_1[Data_Width-2:0] + InData_2[Data_Width-2:0] + 1'b1);
OutData = {1'b0, temp};
end
end
// - -
default: begin
temp = InData_1[Data_Width-2:0] + InData_2[Data_Width-2:0];
OutData = {1'b1, temp};
end
endcase
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -