摘要 ii
第1章 绪论 1
1.1 8位模型机简介 1
1.2设计主要内容 1
1.2.1 指令系统的设计与实现 1
1.2.2 8位模型机的总体结构 1
1.2.3 程序计数器、节拍 1
1.2.4 指令寄存器、译码器及控制器 1
1.2.5 可编程寄存器(8位) 1
1.2.6 非可编程寄存器(8位) 1
1.2.7 运算部件 2
1.2.8 存储器地址寄存器、存储器数据寄存器、ROM、RAM 2
1.2.9 数码管显示模块 2
1.2.10 总线和数据通路结构 2
1.2.11 仿真与实现 2
第2章 系统设计 3
2.1系统组成 3
2.3 指令集 4
2.4 MDR模块 4
2.4 CLOCK模块 4
2.5 移位运算模块 5
2.6 指令寄存器 5
2.7 清零信号发生器 6
2.8 程序计数器 6
2.9 寄存器模块 6
2.10 显示模块 7
2.11 运算模块 7
2.12 MAR_ROM_RAM模块 8
2.13 译码器,控制器 8
第3章 系统仿真 9
3.1 清零信号发生器仿真 9
3.2 寄存器模块仿真 9
3.3 移位运算模块仿真 9
3.4运算模块仿真 10
3.5程序计数器仿真 10
3.6 MAR_ROM_RAM仿真 10
3.7 MDR仿真 11
3.8 节拍发生器仿真 11
3.9 指令寄存器仿真 11
3.10 显示模块仿真 11
3.11 控制器仿真 12
3.12系统仿真 12
第4章 系统实现 13
4.1 系统下载验证 13
第5章 结论 14
参考文献 15
附录A RTL图 16
A1. CRE_RET的RTL图 16
A2. REGS的RTL图 16
A3. ExtU的RTL图 17
A4. ALU的RTL图 17
A5. PC的RTL图 18
A6. MAR_ROM_RAM的RTL图 18
A7.MDR的RTL图 19
A8.CLOCK的RTL图 19
A9.DECODING的RTL图 20
A10.IR的RTL图 20
A11.SHOW的RTL图 21
A12.CONTROL的RTL图 22
A13.PRODUCT的RTL图 23
附录B VHDL程序清单 24
附录C 实物测试照片 27
1.2设计主要内容
1.2.1 指令系统的设计与实现
- 设计系统的指令格式,包括那些控制信号,寻址方式。
2)考虑指令的完备性、有效性、规整性。
1.2.2 8位模型机的总体结构
1)寄存器的位数。
2)总线宽度。
3)实现所有指令所需的模块和部件。
1.2.3 程序计数器、节拍
1)设计节拍和其发生器。
2)设计程序计数器。
1.2.4 指令寄存器、译码器及控制器
1)以74377为核心设计指令寄存器。
2)结合节拍设计指令执行的细节。
3)根据指令设计译码器。
4)安排指令在具体节拍的动作,设计控制信号,设计控制器。
1.2.5 可编程寄存器(8位)
1)通用寄存器A、B、C、D。
2)程序计数器PC。
3)程序状态寄存器PAW。
1.2.6 非可编程寄存器(8位)
1)ALU中的暂存器Y、Z:Y负责从暂存从数据总线传来的第一个数据。Z负责暂存ALU计算的结果。
2)SHOW中的暂存器Y、Z:负责当执行SHOW命令时,从数据总线逐个下载需要显示的数据,并锁存。
1.2.7 运算部件
1)算术运算、逻辑运算的设计与实现。
2)移位运算的设计与实现。
1.2.8 存储器地址寄存器、存储器数据寄存器、ROM、RAM
1)设计MAR、MDR、ROM、RAM以及它们之间的数据传送线路,节拍先后。分配ROM和RAM的地址。
1.2.9 数码管显示模块
1)设计显示的内容和方式。
2)设计数码管译码电路。
1.2.10 总线和数据通路结构
1)数据总线,连接各个功能部件。
2)时钟、节拍、微命令等控制各个功能部件的通路。
1.2.11 仿真与实现
1)根据理论设计用QuartusII在计算机上进行仿真,并下载实现,验证所设计方案的正确性。
2)分析电路的工作原理,写出实验报告。
(1)CLR_CRE.vhd 文件
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CLR_CRE IS
PORT(CP:IN STD_LOGIC;
CLR:OUT STD_LOGIC);
END;
ARCHITECTURE one OF CLR_CRE IS
SIGNAL TEM:STD_LOGIC:='0'; --记录是否为第一次产生的CP
BEGIN
PROCESS(CP)
BEGIN
IF CP'EVENT AND CP = '1' THEN--CP上升沿
IF TEM = '0' THEN --第一次产生CP
CLR <= '0'; --清零信号有效
TEM <= '1';
ELSE --不是第一次产生CP
CLR <= '1'; --清零信号无效
END IF;
END IF;
END PROCESS;
END;
(2)DECODING.vhd文件
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DECODING IS
PORT(D0,D1,D2,D3,D4,D5,D6,D7:IN STD_LOGIC;
ADD0,ADD1,MOV0,MOV1,MOV2,MOV3,SUB0,SUB1,SHL,SHR,ROL0,ROR0,JZ,JA,SHOW,HALT:OUT STD_LOGIC;
S:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
M,ENR0,ENR1:OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END ENTITY DECODING;
ARCHITECTURE one OF DECODING IS
BEGIN
PROCESS(D0,D1,D2,D3,D4,D5,D6,D7)
VARIABLE TEM0:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
TEM0 := D7&D6&D5&D4; --具体的指令
ENR0 <= D3&D2; --第一个寄存器
ENR1 <= D1&D0; --第二个寄存器
IF TEM0 = "0000" THEN ADD0 <= '1'; S <= "1001"; --S送到ALU的方式选择端
ELSE ADD0 <= '0';
END IF;
IF TEM0 = "0001" THEN ADD1 <= '1'; S <= "1001";
ELSE ADD1 <= '0';
END IF;
IF TEM0 = "0010" THEN MOV0 <= '1';
ELSE MOV0 <= '0';
END IF;
IF TEM0 = "0011" THEN MOV1 <= '1';
ELSE MOV1 <= '0';
END IF;
IF TEM0 = "0100" THEN MOV2 <= '1';
ELSE MOV2 <= '0';
END IF;
IF TEM0 = "0101" THEN MOV3 <= '1';
ELSE MOV3 <= '0';
END IF;
IF TEM0 = "0110" THEN SUB0 <= '1'; S <= "0110";
ELSE SUB0 <= '0';
END IF;
IF TEM0 = "0111" THEN SUB1 <= '1'; S <= "0110";
ELSE SUB1 <= '0';
END IF;
IF TEM0 = "1000" THEN SHL <= '1'; M <= "10"; --M送到74194的方式选择端
ELSE SHL <= '0';
END IF;
IF TEM0 = "1001" THEN SHR <= '1'; M <= "01";
ELSE SHR <= '0';
END IF;
IF TEM0 = "1010" THEN ROL0 <= '1'; M <= "10";
ELSE ROL0 <= '0';
END IF;
IF TEM0 = "1011" THEN ROR0 <= '1'; M <= "01";
ELSE ROR0 <= '0';
END IF;
IF TEM0 = "1100" THEN JZ <= '1';
ELSE JZ <= '0';
END IF;
IF TEM0 = "1101" THEN JA <= '1';
ELSE JA <= '0';
END IF;
IF TEM0 = "1110" THEN SHOW <= '1';
ELSE SHOW <= '0';
END IF;
IF TEM0 = "1111" THEN HALT <= '1';
ELSE HALT <= '0';
END IF;
END PROCESS;
END ARCHITECTURE one;
(3)CONTROL.vhd文件
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CONTROL IS
PORT(ADD0,ADD1,MOV0,MOV1,MOV2,MOV3,SUB0,SUB1,SHL,SHR,ROL0,ROR0,JZ,JA,SHOW,HALT,
Q0,Q1,Q2,Q3,Q4,Q5,ZF,SF:IN STD_LOGIC; --Q[5..0]为节拍
Ipb,Imar,Imdrm,Imdrb,Imb,Iir,Ir0b,Ir1b,Iy,Iz,Ipc,Izb,Iwr,Ij,Iew,Ier,Icp,Is0,Is1,Iram:OUT STD_LOGIC);
END ENTITY CONTROL;