微程序控制器

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

实验六、微程序控制器

一.实验目的

1.掌握微程序控制器的组成、工作原理;

2.明确微程序、微指令、微命令的概念;

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

4.通过单步方式执行若干条微指令深入理解微程序控制器的工作原理;

5.用逻辑分析仪测试微程序控制器指令的转移。

二.实验原理及电路图

实验原理:

微程序控制器是根据数据通路和指令系统来设计的。此处的数据通路是在前面的数据通路实验基础上,增加了指令寄存器IR、微地址寄存器、控制存储器、微命令寄存器、时序电路等形成的。

微程序控制的基本思想,就是仿照通常的解题程序的方法,把操作控制信号编成所谓的“微指令”,存放到一个只读存储器中。当机器运行时,一条又一条地读出这些微指令,从而产生所需要的各种操作控制信号,使相应部件执行所规定的操作。

微程序控制器的设计思想是将每一条机器指令用一段微程序来描述。微程序由若干条微指令组成,而每一条微指令又由若干微命令及一条微指令地址组成,而每一个微命令对应于逻辑电路的一个控制操作。

实验电路图:

其中rom由如下vhdl代码编写:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity rom is

port( a4,a3,a2,a1,a0:in std_logic;

d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25, d26,d27,d28:out std_logic);

end rom;

architecture behavioral of rom is

signal sk: std_logic_vector(4 downto 0);

signal sel:std_logic_vector(27 downto 0);

begin

sk<=a4&a3&a2&a1&a0;

sel<="1011000000100000010100000001"when sk="00000"else

"1110100100100000010100000010"when sk="00001"else

"1001001100100000010101101000"when sk="00010"else

"1001101100100000010100000100"when sk="00011"else

"1001001100100000010110000101"when sk="00100"else

"1001000101100000010000000110"when sk="00101"else

"1001000100101001101100000001"when sk="00110"else

"1001000100111011000100000001"when sk="00111"else

"1011000000100000010100010011"when sk="01000"else

"1110100100100000010100010101"when sk="01001"else

"1110100100100000010100010111"when sk="01010"else

"1110100100100000010100011001"when sk="01011"else

"1001000101100000010000011011"when sk="01100"else

"1110100100100000010100011100"when sk="01101"else

"1110100100100000010100000011"when sk="01110"else

"1110100100100000010100011101"when sk="01111"else

"1011000000100000010100010001"when sk="10000"else

"1110100100100000010100010010"when sk="10001"else

"1001010000100000010100010001"when sk="10010"else

"1110100100100000010100010100"when sk="10011"else

"1001001100100000010100010011"when sk="10100"else

"1001101100100000010100010110"when sk="10101"else

"1001001100100000011100000001"when sk="10110"else

"1001101100100000010100011000"when sk="10111"else

"1001010100100000010000000001"when sk="11000"else

"1001101100100000010100011010"when sk="11001"else

"1001001100100000010100000001"when sk="11010"else

"1001000100110000001100000001"when sk="11011"else

"1011001100100000010100000001"when sk="11100"else

"1001101100100000010100011110"when sk="11101"else

"1001001100100000010110011111"when sk="11110"else

"1001000101100000010000000111"when sk="11111";

相关文档
最新文档