精简8位cpu设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档