欢迎来到天天文库
浏览记录
ID:29124415
大小:718.50 KB
页数:10页
时间:2018-12-16
《《cpu设计实验报告》word版》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、CPU设计实验报告姓名:学号:邮箱:一、实验目的:1、掌握硬件描述语言VHDL和EDA工具QuartusII;利用VHDL设计16位串行CPU,实现算术和逻辑运算指令、转移指令、访存指令、堆栈指令和控制指令;2、掌握CPU的调试和测试方法。二、实验内容:1、运用硬件描述语言VHDL实现寄存器堆和算数逻辑单元设计、指令集和指令格式、时序设计和整体结构设计、指令译码器的设计、访存单元的设计、调试单元的设计;2、上机调试。三、实验步骤:1、寄存器堆的设计寄存器堆由16个16位寄存器组成。其中reset是异步清0端,reset=0时将所有寄存器清0。
2、dr_sel和sr_sel是目标寄存器和源寄存器编号,dr_out和sr_out输出目标寄存器和源寄存器的内容。reg_sel指定一个寄存器编号,将该寄存器内容送给reg_out,这两个端口用于调试时观察每个寄存器的值。reg_en是写允许端。reg_en=“01”时,在clk的上升沿将from_alu写入dr_sel指定的寄存器;reg_en=“10”时,在clk的上升沿将from_mem写入dr_sel指定的寄存器。reg_en取其他值时不改变寄存器堆的值。设计方法:subtypeWORDisstd_logic_vector(15down
3、to0);typeREGISTERARRAYisarray(0to15)ofWORD;signalreg_bank:REGISTERARRAY则reg_bank就是我们所需要的寄存器堆。写寄存器堆的方法:reg_bank(conv_integer(dr_sel))<=from_alu;读寄存器堆的方法:dr_out<=reg_bank(conv_integer(dr_sel));其中,conv_integer是STD_LOGIC_UNSINGED程序包提供的函数,将标准逻辑矢量转换成整数,作为reg_bank的下标。2、算数逻辑单元设计ALU
4、可以实现16种运算。alu_func是运算功能选择,alu_a和alu_b是两个操作数,c_in是进位标志输入,用于实现ADC和SBB。alu_o是运算结果,c、s、z、o分别是进位标志,符号标志,零标志和溢出标志。ALU功能如下图所示:设计方法:7条算术运算指令可以调用Quartus提供的模块lpm_add_sub实现。在库使用说明中增加:LIBRARYLPM;USELPM.LPM_COMPONENTS.ALL;在构造体的ARCHITECTURE和BEGIN关键字之间,用COMPONENT语句声明该模块:COMPONENTlpm_add_s
5、ubGENERIC(lpm_width:NATURAL;lpm_direction:STRING;lpm_type:STRING;lpm_hint:STRING);PORT(dataa:INSTD_LOGIC_VECTOR(lpm_width-1DOWNTO0);datab:INSTD_LOGIC_VECTOR(lpm_width-1DOWNTO0);cin:INSTD_LOGIC;result:OUTSTD_LOGIC_VECTOR(lpm_width-1DOWNTO0);cout:OUTSTD_LOGIC;overflow:OUTSTD_
6、LOGIC);ENDCOMPONENT;并定义几个信号:SIGNALaddsub_cin:STD_LOGIC;SIGNALaddsub_c:STD_LOGIC;SIGNALaddsub_o:STD_LOGIC;SIGNALaddsub_a:STD_LOGIC_VECTOR(15DOWNTO0);SIGNALaddsub_b:STD_LOGIC_VECTOR(15DOWNTO0);SIGNALaddsub_r:STD_LOGIC_VECTOR(15DOWNTO0);在构造体中,用GENERICMAP和PORTMAP语句说明lpm_add_sub
7、的连接方式:ALU_ADDSUB:lpm_add_subGENERICMAP(lpm_width=>16,lpm_direction=>"ADD",lpm_type=>"LPM_ADD_SUB",lpm_hint=>"ONE_INPUT_IS_CONSTANT=NO,CIN_USED=YES")PORTMAP(dataa=>addsub_a,datab=>addsub_b,cin=>addsub_cin,result=>addsub_r,cout=>addsub_c,overflow=>addsub_o);实现7条算术运算指令时,addsub
8、_a、addsub_b、addsub_cin的取值如下:按照上述取值方法,addsub_r和addsub_o就是这7条指令的运算结果和溢出标志。对于ADD和ADC指
此文档下载收益归作者所有