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