理工大学学士学位论文
3)第三条指令HALT ;运算完毕,停机。 T0:(PC)→MAR→ABUS,IMAR=0 T1:DBUS→DR,IDR=1 T2:(PC)+1→PC,IPC=1 (DR)→IR,IIR=0,HALT=1
3.5 基于VHDL8位模型机各模块的设计与实现
3.5.1 算术逻辑单元ALU模块 说明:此模块用于实现加法运算
1.逻辑框图
Isum=0NY两数相加开始
Esum=0YN输出结果结束图3.2 算术逻辑运算单元程序流程图
12
理工大学学士学位论文
说明:ALU功能部件,有两个控制信号,分别是加法运算控制信号ISUM和输出控制信号ESUM,当ISUM=0时,在CLK作用下将两数相加,当输出控制命令ESUM=0时,将相加结果读入到内部数据总线上。
2.VHDL源程序设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ALU IS
PORT(AC,DR:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
ISUM:IN STD_LOGIC; ESUM:IN STD_LOGIC;
ALU_OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); ); END ALU;
ARCHITECTURE A OF ALU IS
SIGNAL:ALU_TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
ALU_TEMP<=AC+DR WHEN ISUM =’0’; ALU_OUT<=ALU_TEMP; END A;
3.ALU模块仿真波形
13
理工大学学士学位论文
图3.3 ALU功能仿真
波形分析:两个输入信号AC,DR,一个输出信号ALU_OUT和两个控制命令信号ISUM,ESUM 。在仿真设置中将AC值设为从00000000逐一递增到11111111,而DR值为了方便观察设为00000000,两个控制命令信号全部设为0即即时相加即时输出,运行后如图所示,输出结果也是从00000000到11111111由于截图大小有限只截到00001000,功能仿真成功。 3.5.2 累加器模块
说明:实现8位模型机的累加器
1.逻辑框图
14
理工大学学士学位论文
开始Clk(时钟)发生且为上升沿YIa=0YNNEa=0YData_out=regqRegq=data_inN结束
图3.4 累加器ACC程序流程图
说明:设置一个中间信号REGQ,输入信号是DATA_IN,输出信号时DATA_OUT,两个控制信号分别是IA输入控制信号和EA输出控制信号。当输入控制信号IA=0时,将输入数据DATA_IN存入到REGQ中,当输出控制信号EA=0是将以存到REGQ中的输入数据赋与输出数据DATA_OUT输出。
2.VHDL源程序设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
15
理工大学学士学位论文
ENTITY ACC IS
PORT(DATA_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); IA:IN STD_LOGIC; EA:IN STD_LOGIC; CLK:IN STD_LOGIC;
DATA_OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ACC;
ARCHITECTURE A OF ACC IS
SIGNAL REGQ:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
PROCESS(IA,EA,CLK) BEGIN
IF(CLK’EVENT AND CLK=’1’) THEN IF(IA='0') THEN REGQ<=DATA_IN; END IF; END IF; END PROCESS;
DATA_OUT<= REGQ WHEN EA='0' ELSE ''ZZZZZZZZ'' END A;
3.ACC模块仿真波形
16