实验五:加法器
无符号加法器
- 把加法器的输出信号改成4比特位宽
- 代码
module TEST_5(
IN1 ,
IN2 ,
OUT );
input[3:0] IN1, IN2;
output[3:0] OUT;
reg[3:0] OUT;
always@(IN1 or IN2) begin
OUT = IN1 + IN2;
end
endmodule
- 波形仿真
- 结论:当正确结果大于15后只能输出正确结果的后4位。
- 把加法器的输入信号改成8比特位宽
- 代码
module TEST_5(
IN1 ,
IN2 ,
OUT );
input[7:0] IN1, IN2;
output[5:0] OUT;
reg[5:0] OUT;
always@(IN1 or IN2) begin
OUT = IN1 + IN2;
end
endmodule
- 波形仿真
- 结论:输出为8bit位宽的无符号加法器没有产生溢位,并且输出为8bit位宽的无符号加法器和输出为4bit位宽的无符号加法器输出延迟时间相差不大。猜测信号输出宽度的大小影响计算结果,但是不会影响信号的延迟时间的长短。
实验六:补码加法器
- 把加法器的输出信号改成4比特位宽
- 代码
module TEST_6( IN1 , IN2 , OUT ); input signed [3:0] IN1, IN2; output signed [3:0] OUT; reg signed [3:0] OUT; always@(IN1 or IN2) begin OUT = IN1 + IN2; end endmodule
- 波形仿真
- 结论:只能输出结果的后四位
把加法器的输入信号改成8比特位宽
- 代码
module TEST_6( IN1 , IN2 , OUT ); input signed [7:0] IN1, IN2; output signed [3:0] OUT; reg signed [3:0] OUT; always@(IN1 or IN2) begin OUT = IN1 + IN2; end endmodule
波形仿真
实验七:带流水线的加法器
不改变流水线的级数,把加法器的输入信号改成8比特位宽
- 代码
module adder_pipe( IN1 , IN2 , CLK1 , CLK2 , OUT ); input [7:0] IN1, IN2; input CLK1; output [4:0] OUT; reg [7:0] in1_d1R, in2_d1R; reg [4:0] adder_out, OUT; always@(posedge CLK1) begin // 生成D触发器的always块 in1_d1R <= IN1; in2_d1R <= IN2; OUT <= adder_out; end always@(in1_d1R or in2_d1R) begin // 生成组合逻辑的always 块 adder_out = in1_d1R + in2_d1R; end endmodule
- 波形仿真
- 结论:与不加流水线的加法器相比,带流水线的加法器即在加法器的输入与输出都连接了D触发器,有效的减少了组合逻辑的竞争与冒险,从而明显减少了“毛刺”的长度。
在8比特输入位宽的情况下,在输入上再添加一级流水线
- 代码
module adder_pipe( IN1 , IN2 , CLK1 , CLK2 , OUT ); input [7:0] IN1, IN2; input CLK1,CLK2; output [4:0] OUT; reg [7:0] in1_d1R, in2_d1R; reg [4:0] adder_out, OUT; always@(posedge CLK1) begin // 生成D触发器的always块 in1_d1R <= IN1; OUT <= adder_out; end always@(posedge CLK2) begin in2_d1R <= IN2; end always@(in1_d1R or in2_d1R) begin // 生成组合逻辑的always 块 adder_out = in1_d1R + in2_d1R; end endmodule
- 波形仿真
- 结论:流水线的级数越高,毛刺也随之越短,但输出的时延也会相应的对一个时钟周期。