EDA实验_简单微处理器设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XXXX大学计算机科学学院

实验/上机报告

一、实验目的

1、通过简单微处理器的设计,理解可编程逻辑系统设计中的自顶向下设计思想;

2、进一步巩固利用状态机实现同步时序系统的知识;

二、实验环境

硬件:PC机、便携式EDA/SOPCDSP实验系统

软件:Quartus II 7.0 开发系统

三、实验内容

完成简单微处理器设计;

四、实验过程

设计思想:

分析CPU工作原理,可得如下运行流程:

程序计数器PC到数据总线,通过总线到地址寄存器MAR →MAR将PC传过来的数据信息送到只读内存ROM(在具体实验中用RAM、MDR表示)→ROM通过总线将地址送入指令寄存器IR →IR将操作码送入控制器,同时再将指令地址信息送入总线,通过数据总线将指令地址信息再次送入MAR →MAR再将信息送入ROM,ROM通过总线将地址信息送入寄存器A和B →A、B再送入逻辑运算元件,通过ALU运算后将结果通过总线送入寄存器A →A再将结果通过总线送入输出接口

因此,可将CPU模型分为ALU、CONC、MAR、RAM、MDR、IR、PC、ACC等八个模块,其中CONC为CPU模块核心,通过ASM图对CONC进行状态确定,如下所示:

根据ASM状态转换图,可确定状态S0、S1、S2、S3、S4、S5、S6、S7、S8等九个状态,对各部分模块进行具体设计。

实验步骤:

1、ALU设计:

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

ENTITY alu IS

PORT ( clk,add,sub:in std_logic;

a:in std_logic_vector(7 downto 0);

b:in std_logic_vector(7 downto 0);

c:out std_logic_vector(7 downto 0)

);

END alu;

ARCHITECTURE behave OF alu IS

begin

process(clk)

begin

if rising_edge(clk) then

if(add='1')then c<=a+b;

elsif(sub='1')then c<=a-b;

end if;

end if;

end process;

end behave;

2、CONC设计:

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

ENTITY conc IS

PORT ( clk,rst: IN std_logic;

op: IN std_logic_vector(1 downto 0);

pc_bus,load_pc,inc_pc,addr_bus:out std_logic;

load_ir,mdr_bus,load_mdr: out std_logic;

load_mar,cs,r_nw,alu_add,alu_sub,alu_acc,acc_bus,load_acc:out std_logic

);

END conc;

ARCHITECTURE behave OF conc IS

type states is (st0, st1, st2, st3, st4,st5,st6,st7,st8);

signal c_state, n_state: states;

begin

REG: process (clk)

begin

if rising_edge(clk) then c_state<=n_state;

end if;

end process REG;

COM: process(c_state,clk)

begin

if (rst='1')then

pc_bus<='0';load_pc<='0';inc_pc<='0';addr_bus<='0';load_ir<='0';md r_bus<='0';load_mdr<='0';

load_mar<='0';cs<='0';r_nw<='0';alu_add<='0';alu_sub<='0';alu_acc< ='0';acc_bus<='0';load_acc<='0';

else

case c_state is

when st0=>

pc_bus<='1';load_pc<='0';inc_pc<='1';addr_bus<='0';load_ir<='0';md r_bus<='0';load_mdr<='0';

load_mar<='1';cs<='0';r_nw<='0';alu_add<='0';alu_sub<='0';alu_acc< ='0';acc_bus<='0';load_acc<='0';

n_state<=st1;

when st1=>

pc_bus<='0';load_pc<='0';inc_pc<='0';addr_bus<='0';load_ir<='0';md r_bus<='0';load_mdr<='0';

load_mar<='0';cs<='1';r_nw<='1';alu_add<='0';alu_sub<='0';alu_acc< ='0';acc_bus<='0';load_acc<='0';

n_state<=st2;

when st2=>

pc_bus<='0';load_pc<='0';inc_pc<='0';addr_bus<='0';load_ir<='1';md r_bus<='1';load_mdr<='0';

load_mar<='0';cs<='0';r_nw<='0';alu_add<='0';alu_sub<='0';alu_acc< ='0';acc_bus<='0';load_acc<='0';

n_state<=st3;

when st3=>

pc_bus<='0';load_pc<='0';inc_pc<='0';addr_bus<='1';load_ir<='0';md

相关文档
最新文档