西南交通大学计算机组成实验注1、引脚分配依照EP3C40F780C8芯片注2、一定要参照实验指导书阅读此文实验一:多路数据选择器的设计f=((~sel)a)+((sel)b)当sel=0时,f=a,否则f=b。引脚分配参考:a[3:0]AH12AF14AA8AB8b[3:0]AF12AG12AA10U8f[3:0]E24F22E22F21sel:AC5实验二基于原理图方式的3-8译码电路的设计f0=(~en)+(~a)(~b)(~c)f1=(~en)+(~a)(~b)cf2=(~en)+(~a)b(~c)f3=(~en)+(~a)bcf4=(~en)+a(~b)(~c)f5=(~en)+a(~b)cf6=(~en)+ab(~c)f7=(~en)+abcen为使能端,低电平有效,高电平时输出全为1。引脚分配参考:a:AH12,b:AF14,c:AA8,en:AC5f[7:0]F24H24H23L23L24M24J22AE8实验三四位加法器设计实验思路:用VerilogHDL语言编写一位全加器,再用原理图方式用四个全加器组合实现四位加法器。Adder.vmoduleAdder(a,b,cin,cout,sum);inputa,b,cin;outputcout,sum;assign{cout,sum}=a+b+cin;endmodule原理图:{cout,sum}=a+b+cincin为进位输入,cout为进位输出。引脚分配参考:a[3:0]AH12AF14AA8AB8b[3:0]AF12AG12AA10U8sum[3:0]E24F22E22F21cin:AC5,cout:F24实验四:七段LED数码管显示译码器设计本实验使用VerilogHDL实现。moduleExp4(f,clk,rst,in,out,sel);input[15:0]in;//输入inputf,clk,rst;//计数开关,时钟,置零开关outputreg[7:0]out;//数码管输出outputreg[2:0]sel;//数码管3-8译码器输出reg[15:0]counter;reg[3:0]data;regclk_alt;reg[9:0]l;//changefrequency变频段always@(posedgeclk)beginif(l=1023)l=0;elsel=l+1;clk_alt=l[2];end//select选择在哪一个数码管显示always@(posedgeclk)beginsel=sel+1;if(sel=4)sel=0;case(sel)0:data=counter[3:0];1:data=counter[7:4];2:data=counter[11:8];3:data=counter[15:12];endcaseend//countandreset计数和清零always@(posedgeclk_altorposedgerst)beginif(rst==1)counter=0;elseif(f==1)counter=in;elsecounter=counter+1;end//translate译码段,此处可以使用二进制或十六进制,后面的实验同,不再赘述。alwayscase(data)0:out=63;1:out=6;2:out=91;3:out=79;4:out=102;5:out=109;6:out=125;7:out=7;8:out=127;9:out=111;10:out=119;11:out=124;12:out=57;13:out=94;14:out=121;15:out=113;endcaseendmodule引脚分配参考:in[15:0]AH12AF14AA8AB8AF12AG12AA10U8AF5AH6AH7AH8AH14AG7AG8AF9out[7:0]M21G12G14G15G18F18G17G16sel[2:0]G9D22C22clk:A14,f:AC5,rst:AD4实验五:算数逻辑单元(ALU)设计moduleExp5(s,cin,d,wt,sel,out,slt,clk);input[2:0]s;//功能开关inputsel,cin,wt,clk;//选择输入开关,进位输入,写入开关,时钟input[15:0]d;//输入outputreg[7:0]out;//数码管输出outputreg[2:0]slt;//数码管3-8译码器输出reg[15:0]a;//暂存器areg[15:0]b;//暂存器breg[15:0]result;//计算结果reg[3:0]outdata;regcout;//选择显示的数码管always@(posedgeclk)beginslt=slt+1;if(slt=5)slt=0;case(slt)0:outdata=cout;1:outdata=result[15:12];2:outdata=result[11:8];3:outdata=result[7:4];4:outdata=result[3:0];endcaseend//译码alwayscase(outdata)0:out=63;1:out=6;2:out=91;3:out=79;4:out=102;5:out=109;6:out=125;7:out=7;8:out=127;9:out=111;10:out=119;11:out=124;12:out=57;13:out=94;14:out=121;15:out=113;endcase//选择输入到哪一个暂存always@(selorwt)beginif(wt==0)beginif(sel==0)a=d;elseb=d;endend//计算功能选择alwayscase(s)0:result=0;//置零1:result=a&b;//逻辑与2:result=a|b;//逻辑或3:result=a^b;//逻辑异或4:{cout,result}=a+b+cin;//算术加5:{cout,result}=a1;//a左移一位(含进位)6:result=a1;//a右移一位7:;//无功能endcaseendmodule引脚分配参考:d[15:0]AH12AF14AA8AB8AF12AG12AA10U8AF5AH6AH7AH8AH14AG7AG8AF9out[7:0]M21G12G14G15G18F18G17G16slt[2:0]G9D22C22s[2:0]AE4AC5AD4clk:A14,cin:AH11,sel:AE3,wt:AH10实验六CPU寄存器组的设计moduleExp6(RA,wt,rd,m,rst,clk,d,out,sel);input[1:0]RA;//通用寄存器选择inputrd,wt,rst,clk;//读开关,写开关,置零开关,时钟input[1:0]m;//功能选择input[15:0]d;//输入outputreg[7:0]out;//数码管输出outputreg[2:0]sel;//数码管3-8译码器输出reg[3:0]data;reg[15:0]R0;reg[15:0]R1;reg[15:0]R2;reg[15:0]R3;reg[15:0]mid;reg[15:0]counter;regclk_alt;reg[2:0]l;//变频段always@(negedgeclk)beginif(l=7)l=0;elsel=l+1;clk_alt=l[2];end//读写always@(RAorrdorwt)begincase(RA)0:beginif(rd==1&&wt==0)R0=d;elseif(rd==0&&wt==1)mid=R0;end1:beginif(rd==1&&wt==0)R1=d;elseif(rd==0&&wt==1)mid=R1;end2:beginif(rd==1&&wt==0)R2=d;elseif(rd==0&&wt==1)mid=R2;end3:beginif(rd==1&&wt==0)R3=d;elseif(rd==0&&wt==1)mid=R3;endendcaseend//PC寄存器always@(negedgeclk_alt)beginif(rst==0)counter=0;elsecase(m)0:;//无功能1:counter=counter-1;//减一计数2:counter=counter+1;//加一计数3:counter=mid;//置数endcaseend//输出always@(negedgeclk)beginsel=sel+1;if(sel=8)sel=0;case(sel)0:data=counter[15:12];1:data=counter[11:8];2:data=counter[7:4];3:data=counter[3:0];//前四位显示PC寄存器数值4:data=mid[15:12];5:data=mid[11:8];6:data=mid[7:4];7:data=mid[3:0];//后四位显示通用寄存器数值endcaseend//译码alwayscase(data)0:out=63;1:out=6;2:out=91;3:out=79;4:out=102;5:out=109;6:out=125;7:out=7;8:out=127;9:out=111;10:out=119;11:out=124;12:out=57;13:out=94;14:out=121;15:out=113;endcaseendmodule引脚分配参考:RA[1:0]AG10AG11,m[1:0]AE4AC5d[15:0]AH12AF14AA8AB8AF12AG12AA10U8AF5AH6AH7AH8AH14AG7AG8AF9out[7:0]M21G12G14G15G18F18G17G16sel[2:0]G9D22C22clk:A14,rst:AH11,rd:AE3,wt:AD4实验七运算器设计此实验用VerilogHDL和原理图实现ALU.vALU部分(功能参照实验五)moduleALU(s,cin,wt,sel,in,cout,out);input[2:0]s;inputsel,cin,wt;input[15:0]in;outputreg[15:0]out;outputregcout;reg[15:0]a;reg[15:0]b;always@(selorwt)beginif(wt==0)beginif(sel==0)a=in;elseb=in;endendalwayscase(s)0:out=0;1:out=a&b;2:out=a|b;3:out=a^b;4:{cout,out}=a+b+cin;5:{cout,out}=a2;6:out=a2;7:;endcaseendmoduleREG.vCPU寄存器组部分(功能参照实验六)moduleREG(in,out,slt,d,RA,wr,m,rst,clk,sel,mid);input[15:0]in;input[15:0]d;input[1:0]RA;inputwr,rst,clk,sel;//sel为选择开关,选择从ALU的输出出入或者外部输入input[1:0]m;outputreg[7:0]out;outputreg[2:0]slt;reg[3:0]data;reg[15:0]R0;reg[15:0]R1;reg[15:0]R2;reg[15:0]R3;outputreg[15:0]mid;reg[15:0]counter;regclk_alt,wt,rd;reg[2:0]l;always@(negedgeclk)beginif(l=7)l=0;elsel=l+1;clk_alt=l[2];end//ReadandWritealwaysbegincase(RA)0:beginif(wr==0)if(sel==1)R0=