基于FPGA的八位模型机的设计与实现

摘要 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 指令系统的设计与实现

  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;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shejizuopin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值