计算机组成原理实验报告1评语:课中检查完成的题号及题数:课后完成的题号与题数:成绩:自评成绩:95实验报告实验名称:基于Verilog语言的运算器和存储器设计与实现日期:2015.11.2班级:10011303学号:2013302534姓名:杨添文一、实验目的:1、了解运算器的组成结构。2、掌握运算器的工作原理。3、掌握静态随机存储器RAM工作特性及数据的读写方法。二、实验内容:1、基本运算器实验。2、静态随机存储器实验。三、项目要求及分析:1、基本运算器实验:要求:验证和实现运算器的数据运算功能。这些运算除了常规的加、减、乘、除等基本的算术运算之外,还包括能进行“逻辑判断”的逻辑处理能力,即“与”、“或”、“非”这样的基本逻辑运算以及数据的比较、移位等操作。分析:(1)运算器原理图如下图所示计算机组成原理实验报告2运算器内部含有三个独立运算部件,分别为算术、逻辑和移位运算部件,要处理的数据存于暂存器A和暂存器B,三个部件同时接受来自A和B的数据,各部件对操作数进行何种运算由控制信号S3…S0来决定,任何时候,多路选择开关只选择三部件中一个部件的结果作为ALU的输出。如果是算术运算,还将置进位标志FC,在运算结果输出前,置ALU零标志。(2)ALU和外围电路的连接如下图所示:(图中的小方框代表排针座)(3)运算器的逻辑功能表如表所示:运算类型S3S2S1S0功能计算机组成原理实验报告3逻辑运算0000F=A(直通)0001F=B(直通)0010F=AB(FZ)0011F=A+B(FZ)0100F=/A(FZ)移位运算0101F=A逻辑右移B(取低3位)位(FZ)0110F=A逻辑左移B(取低3位)位(FZ)0111F=A算术右移B(取低3位)位(FZ)1000F=A循环右移B(取低3位)位(FZ)算术运算1001F=A加B(FC,FZ)1010F=A加B加Cn(FC,FZ)1011F=A减B(FC,FZ)1100F=A减1(FC,FZ)1101F=A加1(FC,FZ)1110(保留)1111(保留)2、静态随机存储器实验:要求:实现静态随机存储器的读写操作,通过软件中的数据通路图来观测实验结果。分析:(1)实验原理图如下图所示:存储器数据线接至数据总线,数据总线上接有8个LED灯显示D7…D0的内容。地址线接至地址总线,地址总线上接有8个LED灯显示A7…A0的计算机组成原理实验报告4内容,地址由地址锁存器(74LS273,位于PC&AR单元)给出。数据开关(位于IN单元)经一个三态门(74LS245)连至数据总线,分时给出地址和数据。地址寄存器为8位,接入6116的地址A7…A0,6116的高三位地址A10…A8接地,所以其实际容量为256字节。(2)实验中的读写控制逻辑如下图所示:IOM用来选择是对I/O还是对MEM进行读写操作,RD=1时为读,WR=1时为写。四、具体实现:1、基本运算器实验:(1)按下图连接实验电路,并检查无误。图中将用户需要连接的信号用圆圈标明(其它实验相同)。(2)将时序单元的状态开关置为‘单步’档,MEM单元的编程开关置为‘运行’档。(3)打开电源开关,如果听到有‘嘀’报警声,说明有总线竞争现象,功能1000X100X010不选择读写写计算机组成原理实验报告5应立即关闭电源,重新检查接线,直到错误排除。然后按动CON单元的CLR按钮,将运算器的A、B和FC、FZ清零。(4)用输入开关向暂存器A置数。①拨动CON单元的SD27…SD20数据开关,形成二进制数01100101(或其它数值),数据显示亮为‘1’,灭为‘0’。②置LDA=1,LDB=0,按动时序单元的TS按钮,产生一个T2上沿,则将二进制数01100101置入暂存器A中,暂存器A的值通过ALU单元的A7…A0八位LED灯显示。(5)用输入开关向暂存器B置数。①拨动CON单元的SD27…SD20数据开关,形成二进制数10100111(或其它数值)。②置LDA=0,LDB=1,按动时序单元的TS按钮,产生一个T2上沿,则将二进制数10100111置入暂存器B中,暂存器B的值通过ALU单元的B7…B0八位LED灯显示。(6)改变运算器的功能设置,观察运算器的输出。置ALU_B=0、LDA=0、LDB=0,然后按表1-1-1置S3、S2、S1、S0和Cn的数值,并观察数据总线LED显示灯显示的结果。如置S3、S2、S1、S0为0010,运算器作逻辑与运算,置S3、S2、S1、S0为1001,运算器作加法运算。如果实验箱和PC联机操作,则可通过软件中的数据通路图来观测实验结果,方法是:打开软件,选择联机软件的“【实验】—【运算器实验】”,打开运算器实验的数据通路图,如下图所示。进行上面的手动操作,每按动一次TS按钮,数据通路图会有数据的流动,反映当前运算器所做的操作,或在软件中选择“【调试】—【单周期】”,其作用相当于将时序单元的状态开关置为‘单步’档后按动了一次TS按钮,数据通路图也会反映当前运算器所做的操作。计算机组成原理实验报告62、静态随机存储器实验:(1)关闭实验系统电源,按下图连接实验电路,并检查无误,图中将用户需要连接的信号用圆圈标明。(2)将时序单元的状态开关置为‘单步’档(时序单元的介绍见附录二),MEM单元的编程开关置为‘运行’档。(3)将CON单元的IOR开关置为1(使IN单元无输出),打开电源开计算机组成原理实验报告7关,如果听到有‘嘀’报警声,说明有总线竞争现象,应立即关闭电源,重新检查接线,直到错误排除。(4)给存储器的00H、01H、02H、03H、04H地址单元中分别写入数据11H、12H、13H、14H、15H。由前面的存储器实验原理图可以看出,由于数据和地址由同一个数据开关给出,因此数据和地址要分时写入,先写地址,具体操作步骤为:先关掉存储器的读写(WR=0,RD=0),然后利用数据开关设定地址,输出地址到数据总线(IOR=0),最后打开地址寄存器门控信号(LDAR=1),按动TS产生T2脉冲,即将地址打入到AR中。再写数据,具体操作步骤为:先关掉存储器的读写(WR=0,RD=0)和地址寄存器门控信号(LDAR=0),然后利用数据开关给出要写入的数据,输出数据到数据总线(IOR=0),最后使存储器处于写状态(WR=1,RD=0,IOM=0),按动TS产生T2脉冲,即将数据打入到存储器中。写存储器的流程如下图所示(以向00地址单元写入11H为例):(5)依次读出第00、01、02、03、04号单元中的内容,观察上述各单元中的内容是否与前面写入的一致。同写操作类似,也要先给出地址,然后进行读,地址的给出和前面一样,而在进行读操作时,应先关闭IN单元的输出(IOR=1),然后使存储器处于读状态(WR=0,RD=1,IOM=0),此时数据总线上的数即为从存储器当前地址中读出的数据内容。读存储器的流程如下图所示(以从00地址单元读出11H为例):计算机组成原理实验报告8(6)如果实验箱和PC联机操作,则可通过软件中的数据通路图来观测实验结果,方法是:打开软件,选择联机软件的“【实验】—【存储器实验】”,打开存储器实验的数据通路图,如下图所示。进行上面的手动操作,每按动一次TS按钮,数据通路图会有数据的流动,反映当前存储器所做的操作(即使是对存储器进行读,也应按动一次TS按钮,数据通路图才会有数据流动),或在软件中选择“【调试】—【单周期】”,其作用相当于将时序单元的状态开关置为‘单步’档后按动了一次TS按钮,数据通路图也会反映当前存储器所做的操作。3、用Verilog语言在Modelsim上实现:源代码:计算机组成原理实验报告9modulelogic_operation#(parameterISA_WIDTH=4,DATA_WIDTH=8)(inputsys_clock,inputsys_reset,input[ISA_WIDTH-1:0]control,input[DATA_WIDTH-1:0]data_a,input[DATA_WIDTH-1:0]data_b,outputreg[DATA_WIDTH-1:0]result);integeri;always@(posedgesys_clockorposedgesys_reset)beginif(sys_reset==1'b0)beginresult=4'b0;endelsebegincase(control)4'b0000:beginfor(i=0;iDATA_WIDTH;i=i+1)result[i]=data_a[i];end4'b0001:beginfor(i=0;iDATA_WIDTH;i=i+1)result[i]=data_b[i];end4'b0010:beginfor(i=0;iDATA_WIDTH;i=i+1)result[i]=data_a[i]&data_b[i];end4'b0011:beginfor(i=0;iDATA_WIDTH;i=i+1)result[i]=data_a[i]|data_b[i];end4'b0100:begin计算机组成原理实验报告10for(i=0;iDATA_WIDTH;i=i+1)result[i]=~data_a[i];enddefault:;endcaseendendendmodule五、调试运行结果:实验结果以表格方式呈现:六、思考题的解答与分析:1、基本运算器实验:(1)利用上述运算器能否实现大于8位二进制数的算术运算?如果能,需要采取什么样的措施?答:可以利用上述运算器实现大于8位的二进制算数运算,前提是,将上述两个寄存器连接起来实现一个16位的寄存器,输入与输出都可以利用这个寄存器。(2)给出一组数据,验证桶形移位器的功能。答:设计了一个8位桶形移位器,能左右进行循环移位,移位的数量计算机组成原理实验报告11可以在0~7进行变化。以下是源代码,3位选择移位数,还有一位是方向选择:moduleshifter1(IN,S,d,out);input[7:0]IN;input[2:0]S;inputd;output[7:0]out;reg[7:0]out;always@(INorSord)beginif(~d)case(S)3'b000:beginout=IN;end3'b001:beginout[7]=IN[0];out[6:0]=IN[7:1];end3'b010:beginout[7:6]=IN[1:0];out[5:0]=IN[7:2];end3'b011:beginout[7:5]=IN[2:0];out[4:0]=IN[7:3];end3'b100:beginout[7:4]=IN[3:0];out[3:0]=IN[7:4];end计算机组成原理实验报告123'b101:beginout[7:3]=IN[4:0];out[2:0]=IN[7:5];end3'b110:beginout[7:2]=IN[5:0];out[1:0]=IN[7:6];end3'b111:beginout[7:1]=IN[6:0];out[0]=IN[7];endendcaseelseif(d)case(S)3'b000:beginout=IN;end3'b001:beginout[0]=IN[7];out[7:1]=IN[6:0];end3'b010:beginout[1:0]=IN[7:6];out[7:2]=IN[5:0];end3'b011:beginout[2:0]=IN[7:5];out[7:3]=IN[4:0];end3'b100:begin计算机组成原理实验报告13out[3:0]=IN[7:4];out[7:4]=IN[3:0];end3'b101:beginout[4:0]=IN[7:3];out[7:5]=IN[2:0];end3'b110:beginout[5:0]=IN[7:2];out[7:6]=IN[1:0];