精简8位cpu设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
精简8位cpu实验设计报告
实验介绍:
实验分为两个部分,第一部分为16*8 ROM 设计与仿真
第二部分为SAP-1 设计与仿真
实验流程:
①16*8 ROM 的设计与仿真
Rom16_8.VHDL
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ROM16_8 is
PORT(
DATAOUT :OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --Data Output
ADDR :IN STD_LOGIC_VECTOR(3 DOWNTO 0); --ADDRESS
CE :IN STD_LOGIC --Chip Enable
);
END ROM16_8;
ARCHITECTURE a OF ROM 16_8 IS
BEGIN
DATA<=“00001001”WHEN ADDR=“0000”AND CE=‘0’--LDA 9H “00011010”WHEN ADDR=“0001”AND CE=‘0’ELSE --ADD AH
“00011011”WHEN ADDR=“0010”AND CE=‘0’ELSE --ADD BH
“00101100”WHEN ADDR=“0011”AND CE=‘0’ELSE --SUB CH
“11100000”WHEN ADDR=“0100”AND CE=‘0’ELSE --OUT
“11110000”WHEN ADDR=“0101”AND CE=‘0’ELSE --HLT
“00010000”WHEN ADDR=“1001”AND CE=‘0’ELSE
“00010100”WHEN ADDR=“1010”AND CE=‘0’ELSE
“00011000”WHEN ADDR=“1011”AND CE=‘0’ELSE
“00100000”WHEN ADDR=“1100”AND CE=‘0’ELSE
“00000000”;
END a;
程序说明:rom的使能CE,只有为0时,才接受读数据的命令。
②SAP-1 CPU设计与仿真
工作任务:
1.取指令周期(Fetch Cycle)
(1)状态S0:(寻址状态, Address State)
这个状态下,“程序计数器”负责将所要执行的指令地址值传递至MAR 存放。
(2)状态S2:(增加状态,Increment State)
这个状态下,“程序计数器”的值加1,代表计数器将指针指向下一个要执行的指令地址值。
(3)状态S2:(记忆状态,Memory State)
这个状态下,将把记录在“MAR”里的指令地址值,送入“RAM”里后,由“RAM”读出该地址的指令码,再将该指令放入“指令寄存器”。
指令执行周期:
(1)LDA指令
状态S3:这个状态下,上述的09H数据传入MAR,以便下个状态能取出该数值所代表的地址里的值,比如20H。
状态S4:这个状态是将存放在“MAR”里的09数据,通过RAM读出09H地址的数据,比如是数值20H数值至“累加器”。
状态S5:这个状态下的LDA指令并没有作用。
(2)ADD指令
状态S3:这个状态下,上述的AH数据将传入MAR,以便下个状态取出该数值所代表地址里的内容值,比如是数值14H。
状态S4:这个状态是将存放“MAR”里的AH数据,通过RAM读出AH地址内的数据,放到B寄存器中。
状态S5:这个状态是将存在“累加器”和“B 寄存器”的数值内容存放入“加减法器”相加后,再将相加结果放回“累加器”。
(3)SUB指令
状态S3:这个状态下,上述的BH数据传入MAR,以便下个状态能取出该数值所代表地址里的值。
状态S4:这个状态是将存放在“MAR”的BH数据,通过RAM读出BH地址内的数据,并放到B寄存器中。
状态S5:这个状态是将存放在“累加器”和“B寄存器”的数值放入“加减法器”相减后,再将相减后结果放回“累加器”。
(4)OUT指令
状态S3:这个状态下,累加器的内容将经Wbus传至“输出寄存器”,然后显
示在二进制显示装置。
状态S4:这个状态OUT指令没有作用。
状态S5:这个状态OUT指令没有作用。
(5)HLT指令
状态S3:这个状态下“控制器/序列发生器”将停止送出脉冲信号CLK,这时SAP-1 CPU会停止执行工作。
状态S4:这个状态HLT指令没有作用。
状态S5:这个状态HLT指令没有作用。
③SAP-1 CPU 设计
1.使用Process与Case When命令架构出6个脉冲的指令周期。ARCHITECTURE a OF SAP1 IS
……
TYPE STATE IS (S0,S1,S2,S3,S4,S5); --state type declare
SIGNAL PState :STATE; --present state
SIGNAL NState :STATE; --next state
……
BEGIN
ChangeStateMode:PROCESS(CR,RST) --state s0~s5
BEGIN
IF RST=‘1’THEN --reset cpu
PC <=“0000”; --pogram counter=0H
ACC<=”0000000”; --accumulator=0H
RUN<=‘1’; --CPU run program enable
PState<=S0; --Initial cpu present state ELSIF CP’EVENT AND CP =‘0’THEN --clock negative edage
IF RUN =‘1’THEN --run program eanble?
CASE PState IS --check cpu present state
WHEN S0=> --(address state & fetch cycle-1)
NState<=S1; --cpu next state
WHEN S1=> --(increment state & fetch cycle-2)
NState<=S2; --cpu next state
WHEN S2=> --(memory state & fetch cycle-3)
NState<=S3; --cpu next state
WHEN S3=> --STATE S3 (Execution cycle -1)
NState<=S4; --cpu next state
WHEN S4=> --STATE S4 (Execution cycle-2)
NState<=S5; --cpu next state
WHEN S5=> --STATE S5 (Execution cycle-3)
NState<=S0; --cpu next state
END CASE;
PState<=NState; --切换状态
END IF;