试验1:四位加减法器设计
1.试验任务:设计带借位、进位的4位二进制减法、加法器。
2.试验规定:要考虑借位、进位。在软件环境下,编写源文献并用器件实现。
3.试验过程:
原理分析:多位减加法器的构成有两种方式:并行进位和串行进位方式。并行进位加法器,串行进位是将全加器进行级联构成的,这种方式电路会比较简朴。本次试验中采用了自底向上(Bottom-Up)的分层次电路设计措施。实际上,VerilogHDL语言中的加减运算符为程序设计提供了很大的便利,本次试验又采用它实现了加减法器。
VerilogHDL源文献设计:
[1].运用算术运算符的程序设计:
moduleadderandsubtracter(s,k,cin,cout);
inputcin,k;
parameter[3:0]aa=4'b0100;
parameter[3:0]bb=4'b0101;
outputcout;
output[3:0]s;
regcout,s;
?always@(k)
?begin
if(k==1)
? {cout,s}<=aa+bb+cin;
? else
{cout,s}=aa-bb-cin;
?end
endmodule
[2].自底向上(Bottom-Up)的分层次电路设计措施的VerilogHDL源文献。
moduleAdderandsubtracter1bit(k,A,B,Cin,Sum,Cout);
inputA,B,Cin,k;
outputSum,Cout;
parameter[3:0]A=4b0100;
parameter[3:0]B=4b0101;
assignSum=(((A^k)^B)^Cin)^k;
assignCout=((A^k)B)|((A^k)Cin)|(BCin);
endmodule
moduleAdderorsubtracter4bit(k,First,Second,Carry_In,Sum_out,Carry_out);
input[0:3]First,Second;
inputCarry_in;
output[0:3]Sum_out;
outputCarry_out;
wire[0:2]Car;
?always@(k)
begin
if(k==0)
Adderandsubtracter1bit
A1(First[3],Second[3],Carry_in,Sum_out[3],Car[2]);
A2(First[2],Second[2],Car[2],Sum_out[3],Car[1]);
A3(First[3],Second[3],Car[1],Sum_out[3],Car[0]);
A4(First[3],Second[3],Car[0],Sum_out[3],Carry_out);
else
Adderandsubtracter1bit
A1(First[3],Second[3],Carry_in,Sum_out[3],Car[2]);
A2(First[2],Second[2],Car[2],Sum_out[3],Car[1]);
A3(First[3],Second[3],Car[1],Sum_out[3],Car[0]);
A4(First[3],Second[3],Car[0],Sum_out[3],Carry_out);
end
endmodule
编译源文献:
在主界面Process窗口中双击TranslateDesign,对所编辑的代码进行综合,通过后会出现绿色对号。
管脚的分派:
在Diamond主界面中,点击Tools-Spreadsheetview,打开Spreadsheetview
框。在pin一栏中填入各输入输出映射的管脚。其中定义37、38、39、40.为数据输出显示位。54为进位位或借位位,控制键,52为加减法切换键。
烧录程序,器件实现:
在Diamond主界面中,进入Tools-Programmer,在State栏出现PASS,即阐明烧写成功。
4.试验成果及分析:
1)用加减法运算符实现:在试验板上可以看到,发光二极管在不带进位的状况下,即cin为0时,这时应按下试验板上控制进位位与借位位的按键54时,显示为1001,在不按下按键时,即进位位cin为1时为1010,可知带进位的加法器功能完全实现;
在按下控制加减法器按键52,并且同步按下54时,为不带借位的减法器输出为1111,不按下54时,即为有借位