十六位运算器ALU实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

学生实验报告实验名称用VerilogHDL语句实现16位运算器的功能实验日期2013年10月19学号2012551212姓名李超班级12计算机科学与技术一班一、实验目的与要求1、了解运算器的组成结构;2、掌握算术逻辑运算器的工作原理;3、掌握简单运算器的数据传送通道4、掌握用VerilogHDL实现16位简单运算器的设计二、实验原理74LS181的逻辑功能表图中,S0到S3是四个控制端,用于选择进行何种运算。M用于控制ALU进行算术运算还是逻辑运算。当M=0时,M对进位信号没有任何影响,Fi值与操作数Ai,Bi以及地位向本位进位Cn+1有关,所以M=0时进行算术运算。操作数用补码表示,“加”只算术加,运算时考虑进位;“+”指逻辑加,不考虑进位;减法运算时,减法取反码运算后用加法器实现,结果输出为A减B减1在最末位产生一个强迫进位(加1),以得到A减B的结果。当M=1时,封锁了各位的进位输出Cn+i=0,因此各位的运算结果Fi仅与操作数Ai,Bi有关,此时进行逻辑运算。三、实验内容与步骤1.根据书85面的逻辑功能表编写VerilogHDL语句,编译,仿真等步骤。实验代码SN74181:modulesn74181(A,B,S,Cn,M,F,C);parameterbit_width=4;output[bit_width-1:0]F;outputC;input[bit_width-1:0]A,B,S;inputCn,M;regC;regY=0;reg[bit_width-1:0]F;regt;initialC=0;always@(S)begincase(S)4'b0000:beginif(M){t,F}=~{1'b0,A};elsebeginif(Cn){t,F}={1'b0,A};else{t,F}={1'b0,A}|1;endend4'b0001:beginif(M){t,F}=~({1'b0,A}|{1'b0,B});elsebeginif(Cn){t,F}={1'b0,A}|{1'b0,B};else{t,F}={1'b0,A}|{1'b0,B}+1;endend4'b0010:beginif(M){t,F}=~{1'b0,A}&{1'b0,B};elsebeginif(Cn){t,F}={1'b0,A}|({1'b0,~B});else{t,F}=({1'b0,A}|({1'b0,~B}))+1;endend4'b0011:beginif(M){t,F}=0;elsebeginif(Cn){t,F}={t,F}-1;else{t,F}=0;endend4'b0100:beginif(M){t,F}=~({1'b0,A}&{1'b0,B});elsebeginif(Cn){t,F}={1'b0,A}+({1'b0,A}&({1'b0,~B}));else{t,F}={1'b0,A}+({1'b0,A}&({1'b0,~B}))+1;endend4'b0101:beginif(M){t,F}={1'b0,~B};elsebeginif(Cn){t,F}=({1'b0,A}&({1'b0,~B}))+({1'b0,A}|{1'b0,B});else{t,F}=({1'b0,A}&({1'b0,~B}))+({1'b0,A}|{1'b0,B})+1;endend4'b0110:beginif(M){t,F}={1'b0,A}^{1'b0,B};elsebeginif(Cn){t,F}={1'b0,A}-{1'b0,B}-1;else{t,F}={1'b0,A}-{1'b0,B};endend4'b0111:beginif(M){t,F}={1'b0,A}&({1'b0,~B});elsebeginif(Cn){t,F}={1'b0,A}&({1'b0,~B})-1;else{t,F}={1'b0,A}&({1'b0,~B});endend4'b1000:beginif(M){t,F}={1'b0,~A}|{1'b0,B};elsebeginif(Cn){t,F}={1'b0,A}+({1'b0,A}&{1'b0,B});else{t,F}={1'b0,A}+({1'b0,A}&{1'b0,B})+1;endend4'b1001:beginif(M){t,F}={1'b0,~(A^B)};elsebeginif(Cn){t,F}={1'b0,A}+{1'b0,B}+1;else{t,F}={1'b0,A}+{1'b0,B};endend4'b1010:beginif(M){t,F}={1'b0,B};elsebeginif(Cn){t,F}=({1'b0,A}&{1'b0,B})+({1'b0,A}|({1'b0,~B}));else{t,F}=({1'b0,A}&{1'b0,B})+({1'b0,A}|({1'b0,~B}))+1;endend4'b1011:beginif(M){t,F}={1'b0,A}&{1'b0,B};elsebeginif(Cn){t,F}={1'b0,A}&{1'b0,B}-1;else{t,F}={1'b0,A}&{1'b0,B};endend4'b1100:beginif(M){t,F}=1;elsebeginif(Cn){t,F}={1'b0,A}+{1'b0,A};else{t,F}={1'b0,A}+{1'b0,A}+1;endend4'b1101:beginif(M){t,F}={1'b0,A}|({1'b0,~B});elsebeginif(Cn){t,F}={1'b0,A}+({1'b0,A}|{1'b0,B});else{t,F}={1'b0,A}+({1'b0,A}|{1'b0,B})+1;endend4'b1110:beginif(M){t,F}={1'b0,A}|{1'b0,B};elsebeginif(Cn){t,F}={1'b0,A}+({1'b0,A}|({1'b0,~B}));else{t,F}={1'b0,A}+({1'b0,A}|({1'b0,~B}))+1;endend4'b1111:beginif(M){t,F}={1'b0,A};elsebeginif(Cn){t,F}={1'b0,A}-1;else{t,F}={1'b0,A};endendendcaseC=t;endEndmoduleSHIFT:moduleshift(A,choose,result);parameterbit_width=16;input[bit_width-1:0]A;input[1:0]choose;output[bit_width-1:0]result;reg[bit_width-1:0]result;always@(Aorchoose)begincase(choose)2'b01:beginresult=A1;end2'b10:beginresult={A[0],A[15:1]};end2'b11:beginresult=$signed(A)1;endendcaseendEndmoduleALU16:modulealu_16(r,overflow,z,result,c,n,p,x);parameterwidth=16;input[width-1:0]r;input[1:0]x;output[width-1:0]result;outputoverflow,z,c,p,n;reg[width-1:0]a,b;reg[3:0]s;reg[1:0]sh;regcn,m,ov;wireco1,co2,co3;wire[width-1:0]co,re1,re2;always@(xorr)begincase(x)2'b11:begina=r;end2'b10:beginb=r;end2'b00:begins=r[3:0];sh=r[5:4];m=r[8];cn=r[12];endendcaseendsn74181u_sn74181_1(.A(a[3:0]),.B(b[3:0]),.S(s),.M(m),.Cn(cn),.C(co1),.F(re1[3:0]));sn74181u_sn74181_2(.A(a[7:4]),.B(b[7:4]),.S(s),.M(m),.Cn(co1),.C(co2),.F(re1[7:4]));sn74181u_sn74181_3(.A(a[11:8]),.B(b[11:8]),.S(s),.M(m),.Cn(co2),.C(co3),.F(re1[11:8]));sn74181u_sn74181_4(.A(a[15:12]),.B(b[15:12]),.S(s),.M(m),.Cn(co3),.C(overflow),.F(re1[15:12]));shiftu_shift(.A(a),.choose(sh),.result(re2[15:0]));assignresult=(sh?re2:re1);assignz=~|result;assignn=result[15];Endmodule仿真波形图按照模式一电路图结构图设置对应的引脚参数。确认无误后,配置文件下载CLOCK9CLOCK5CLOCK2CLOCK0SPEAKER扬声器NO.1PIO11-PIO8PIO15-PIO12PIO48PIO49D15D16HEXHEXPIO32PIO33PIO34PIO35PIO36PIO37PIO38PIO39D1D2D3D4D5D6D7D8实验电路结构图译码器译码器译码器译码器FPGA/CPLD目标芯片12345678PIO3-PIO0PIO7-PIO4HEXHEX键1键2键3键4键5键6键7键8PIO39-PIO32PIO31-PIO28PIO27-PIO24PIO23-PIO20PIO19-PIO16引脚锁定四.实验验证与测试选择移位操作,当输入四个5时,输出为四个A,结果正确,当x为11时输入四个1,x为10时输入四个1,将s设为9,Cn设为0时,则执行加法,输出应为四个2,将是设为6,Cn设为1时,执行减法输出应为四个零。五.实验过程中出现的问题及处理情况(包括实验现象、原因分析、排故障的方法等)在本次实验当中首先出现的问题是不知如何锁定引脚,后来在同学的帮助下看懂了电路结构图,然后按照老师给的引脚对照表进行引脚锁定。接着又发现有部分功能无法实现,在老师的提醒下,才发现然来是没有取反,以及没有打上括号,导致在优先级出现问题。可能是软件的问题,是的A和B的取反功能无法实现,所以后来才会用ta和tb代替A和B的反。至此,试验才算完成,在本次试验中,学习到了很多的知识,知道了按照哪种流程完成计算机组成原理实验,以及学会简单的使用VerilogHDL语句。做实验是一个需要很多耐性和细心的过程,切记不可急躁,有不懂的地方可以向老师和同学请教,有志者事竟成。

1 / 19
下载文档,编辑使用

©2015-2020 m.111doc.com 三一刀客.

备案号:赣ICP备18015867号-1 客服联系 QQ:2149211541

×
保存成功