硬件基础 微程序控制器实验报告

更新时间:2023-10-15 02:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

硬件基础实验2实验报告

湖南大学

HUNAN UNIVERSITY

硬件基础实验2 实验报告

一、实验预习

1.书中的图形实现微程序控制器,中间的映射逻辑究竟是怎么实现的? 答:但出现分支时,预设端信号由IR决定。IR为1时信号有效,输出为1. 通过IR的值映射为下址的低三位,从而产生下址。

2.书中设计用到了强写强读,为什么要设计这个功能? 答:满足用户因为没有初始化mif文件时输入数据的需要。

硬件基础实验2实验报告

二、实验目的

微程序控制器实验的主要任务:生成CPU里的控制信号,并使程序按正 确的顺序执行。核心部分是ROM,存放机器指令的微程序。 1、掌握微程序控制器的组成、工作原理;

2、掌握微程序控制器的基本概念和术语:微命令、微操作、微指令、微 程序等;

3、掌握微指令、微程序的设计及调试方法;

4、通过单步运行若干条微指令,深入理解微程序控制器的工作原理;

二、实验电路

图1

附:电路图过大,请放大观察详情

三、实验原理

将机器指令的操作(从取指到执行)分解为若干个更基本的微操作序列,并将有 关的控制信息(微命令)以微码的形式编成微指令输入到控制存储器中。这样, 每条机器指令将与一段微程序对应,取出微指令就产生微命令,以实现机器指令 要求的信息传送与加工。

硬件基础实验2实验报告

四、实验步骤及概述

1)设计状态机部分 a、编写VHDL代码如下

LIBRARY ieee;

USE ieee.std_logic_1164.all; ENTITY zhuangtaiji IS PORT (

reset : IN STD_LOGIC := '0'; clock : IN STD_LOGIC; qd : IN STD_LOGIC := '0'; dp : IN STD_LOGIC := '0'; tj : IN STD_LOGIC := '0'; t1 : OUT STD_LOGIC; t2 : OUT STD_LOGIC; t3 : OUT STD_LOGIC; t4 : OUT STD_LOGIC );

END zhuangtaiji;

ARCHITECTURE BEHAVIOR OF zhuangtaiji IS

TYPE type_fstate IS (idle,st1,s_st2,st4,st2,st3,s_st4,s_st3); SIGNAL fstate :type_fstate; SIGNAL reg_fstate :type_fstate; BEGIN

PROCESS (clock,reset,reg_fstate) BEGIN

IF (reset='1') THEN fstate<= idle;

ELSIF (clock='1' AND clock'event) THEN fstate<= reg_fstate; END IF; END PROCESS;

PROCESS (fstate,qd,dp,tj) BEGIN

t1 <= '0'; t2 <= '0'; t3 <= '0'; t4 <= '0'; CASE fstate IS WHEN idle =>

IF (NOT((qd = '1'))) THEN reg_fstate<= st1;

硬件基础实验2实验报告

ELSE reg_fstate<= idle;

END IF; t1 <= '0'; t2 <= '0'; t3 <= '0'; t4 <= '0';

WHEN st1 =>

IF (((tj = '1') AND NOT((dp = '1')))) THEN reg_fstate<= st1;

ELSIF (((dp = '1') AND NOT((tj = '1')))) THEN reg_fstate<= s_st2; ELSE reg_fstate<= st2;

END IF; t1 <= '1'; t2 <= '0'; t3 <= '0'; t4 <= '0'; WHEN s_st2 =>

IF ((tj = '1')) THEN reg_fstate<= s_st2; ELSE reg_fstate<= s_st3; END IF; t1 <= '0'; t2 <= '1'; t3 <= '0'; t4 <= '0'; WHEN st4 =>

IF (((tj = '1') AND NOT((dp = '1')))) THEN reg_fstate<= st4;

ELSIF (((dp = '1') AND NOT((tj = '1')))) THEN reg_fstate<= idle; ELSE reg_fstate<= st1;

END IF; t1 <= '0'; t2 <= '0'; t3 <= '0'; t4 <= '1'; WHEN st2 =>

IF (((tj = '1') AND NOT((dp = '1')))) THEN reg_fstate<= st2;

硬件基础实验2实验报告

ELSIF (((dp = '1') AND NOT((tj = '1')))) THEN reg_fstate<= s_st3; ELSE reg_fstate<= st3;

END IF; t1 <= '0'; t2 <= '1'; t3 <= '0'; t4 <= '0'; WHEN st3 =>

IF (((tj = '1') AND NOT((dp = '1')))) THEN reg_fstate<= st3;

ELSIF (((dp = '1') AND NOT((tj = '1')))) THEN reg_fstate<= s_st4; ELSE reg_fstate<= st4;

END IF; t1 <= '0'; t2 <= '0'; t3 <= '1'; t4 <= '0'; WHEN s_st4 => IF ((tj = '1')) THEN reg_fstate<= s_st4; ELSE reg_fstate<= idle;

END IF; t1 <= '0'; t2 <= '0'; t3 <= '0'; t4 <= '1'; WHEN s_st3 =>

IF ((tj = '1')) THEN reg_fstate<= s_st3; ELSE reg_fstate<= s_st4; END IF; t1 <= '0'; t2 <= '0'; t3 <= '1';

t4 <= '0'; WHEN OTHERS => t1 <= 'X'; t2 <= 'X';

本文来源:https://www.bwwdw.com/article/l9if.html

Top