[EDA与VHDL 实验报告]
[16位CPU设计]
0 / 19
16位cpu 设计
一、顶层系统设计
1.1 组成结构
CPU的结构如图所示。这是一个采用单总线系统架构的复杂指令系统结构的16 位CPU 。处理器包含了各种基本器件模块。他们是8个16位的寄存器reg0~ reg7、一个运算器ALU、一个移位寄存器Shifter、一个程序计数器PortCnt、一个指令寄存器InstrReg、一个比较器Comp、一个地址寄存器Addreg、和一个控制单元Control。这些模块公共用一组16 位的三台数据总线。
系统采用自顶向下的方法进行设计。顶层设计由微处理器和存储器通过一组双向数据总线连接,它们由一组地址总线和一些控制总线组成。处理器从外存储器中读取指令,并通过执行这些指令来运行程序。这些指令存储在指令寄存器中,并由控制单元译码。控制单元使得相应的信号互相作用,并使处理单元执行这些指令。
1.2. 指令系统设计
在设计处理器时首先要确定Cpu 具有哪些功能,并针对这些功能采用哪些指令,然后确定指令的格式。为了使设计的CPU 具有基本的运算功能,指令将设计成以下形式,可以分为如下几类.
●装载指令:指令从其他寄存器或存储器装载数据或是立刻赋值。
●存储指令:指令存储寄存器的值写到存储器
●分支指令:指令使处理器转到其它地址,一些分支指令为条件转移,另外一些为
无条件转移
●移位指令:这些指令用移位寄存器单元执行移位操作,实现数据传递
1.2.1 指令格式
所有的指令都包含五位操作码。
单字节指令在低6位指令中包含两个3 位寄存器,一个是源操作数寄存器,另一个是目的操作数寄存器。
双字节指令中,第一个字节中包含目标寄存器的地址,第二个字节中包含了指令地址或者操作数。
指令格式如下:
(1)单字指令
(2)双字指令
第一个字中包含目标寄存器的地址,第二个字中包含了指令地址或者操作数。
1.2.2 指令操作码
1.3. 顶层结构的VHDL 设计
CPU 原件的VHDL 描述
CPU_LIB.VHDL 用来说明连接各个原件之间的信号类型。描述了多个用于规定运算器功能、移位寄存操作和用于CPU 控制的状态的类型。
CPU_LIB.VHDL
library IEEE;
u IEEE.std_logic_1164.all;
u IEEE.std_logic_arith.all;
package cpu_lib is
type t_shift is (shftpass, shl, shr, rotl, rotr);
subtype t_alu is unsigned(3 downto 0);
constant alupass : unsigned(3 downto 0): "0000";
constant andOp : unsigned(3 downto 0): "0001";
中山大学博雅学院constant orOp : unsigned(3 downto 0): "0010";
constant notOp : unsignde(3 downto 0): "0011";
dota命令大全
constant xorOp : unsigned(3 downto 0): "0100";
constant plus : unsignde(3 downto 0): "0101";
constant alusub : unsigned(3 downto 0): "0110";
先中间后两边constant inc : unsignde(3 downto 0): "0111";
constant dec : unsigned(3 downto 0): "1000";
constant zero : unsignde(3 downto 0): "1001";
怀孕能吃红枣吗type t_comp is (eq, neq, gt, gte, lt, lte);
type state is (ret1, ret2, ret3, ret4, ret5, ret6, execute, nop, load, store, move,load2, load3,load4, store2, store3, store4, move2, move3, move4, incPc, bgtI3, bgtI4, bgtI5, bgtI6, bgtI7, bgtI8, bgtI9, bgtI10, braI2, braI3, braI4, braI5, braI6, loadI2, loadI3, loadI4, loadI5, loadI6, inc3, inc4 );
subtype bit16 is std_logic_vector(15 downto 0);
广告如何推广end cpu_lib;
二、CPU 部件设计
2.1.算术逻辑单元 ALU
ALU 实体结构如下:
VHDL代码:
library IEEE;
u IEEE.std_logic_1164.all;
u IEEE.std_logic_unsigned.all;
u work.cpu_lib.all;
entity alu is
port(a , b: in bit16;
l : in t_alu;
c: out bit16
);
end alu;
关于勤奋的名人的事例architecture rtl of alu is
begin糙米饭的做法
aluproc: process(a, b, l)
begin
ca l is
when alupass => c<=a after 1 ns ; --"0000"
when andOp => c<=a and b after 1 ns;--"0001"
when orOp => c<=a or b after 1 ns ;--"0010"
when xorOp => c<=a xor b after 1 ns;
when notOp => c<= not a after 1 ns ;
物理光学when plus => c<=a + b after 1 ns;
when alusub => c<=a - b after 1 ns ;
when inc => c<=a + "0000000000000001" after 1 ns;
when dec => c<=a - "0000000000000001" after 1 ns;
when zero => c<="0000000000000000" after 1 ns;
when others => c<="0000000000000000" after 1 ns ;
end ca;
end process;
end rtl;