简单计算机系统综合设计(CPU)
前言:作为一位来自于大学的本科生,让我最难忘记的就是这一次CPU的综合设计了。
基本部件
数字逻辑实验中我们要求完成的有以下基本部件,使用VHDL源完成编程。
0000:指令寄存器IR,
a) 模块的接口设计
控制信号:LDIR,CLK,I[7…0]
输入信号:需执行指令I[7…0] 输出信号:需执行指令out1[7…0]
b) 功能实现
根据指令寄存器IR的功能可知:
当HALT = 1 时,输出信号 x[7…0] 为高阻态;
否则,当处于时钟下降沿时,LDIR = 1时,输出信号out[7…0]为输入信号I[7…0]。
VHDL的实现如下所示:
library ieee;
use ieee.std_logic_1164.all;
entity IR is
port (LDIR, CLK : in std_logic;
I : in std_logic_vector(7 downto 0);
OUT1 : out std_logic_vector(7 downto 0)
);
end IR;
architecture behavior of IR is
signal command: std_logic_vector(7 downto 0);
begin
OUT1 <= command;
process(CLK)
begin
if (CLK'event and CLK = '0' and LDIR = '1') then
command <= I;
end if;
end process;
end behavior;
0001:指令译码器DECODING,
a) 模块的接口设计
控制信号:EN 输入信号:需执行指令IR[7…0]
输出信号:需执行指令IR[7…0],
各项指令的控制信号:MOVA,MOVB,MOVC,ADD,SUB,OR1,NOT1,RSR,RSL,JMP,JZ,JC,IN1,OUT1,NOP,HALT
b) 功能实现
根据指令译码器的功能可知:
当EN = 1时,输入信息:需执行指令IR[7…0]对应一个指令控制信号。
指令译码器需要完成指令机器码和指令控制信号的一一对应。
VHDL的实现如下所示:
library ieee;
use ieee.std_logic_1164.all;
entity DECODING is
port(EN:in std_logic;
IR:in std_logic_vector(7 downto 0);
MOVA, MOVB, MOVC, ADD, SUB, OR1, NOT1, RSR, RSL, JMP, JZ, JC, IN1, OUT1, NOP, HALT: out std_logic);
end DECODING;
architecture behavior of DECODING is
signal R: std_logic_vector(7 downto 0):="00000000";
signal signalB,signalC: std_logic;
begin
MOVA <= '1' when
IR(7 downto 4) = "1111" and (not (IR(3 downto 2) = "11")) and (not (IR(1 downto 0) = "11")) and EN = '1' else '0';
MOVB <= '1' when
IR(7 downto 4) = "1111" and (IR(3 downto 2) = "11") and (not (IR(1 downto 0) = "11")) and EN = '1' else '0';
MOVC <= '1' when
IR(7 downto 4) = "1111" and (not (IR(3 downto 2) = "11")) and (IR(1 downto 0) = "11") and EN = '1' else '0';
ADD <= '1' when
IR(7 downto 4) = "1001" and EN = '1' else '0';
SUB <= '1' when
IR(7 downto 4) = "0110" and EN = '1' else '0';
OR1 <= '1' when
IR(7 downto 4) = "1011" and EN = '1' else '0';
NOT1 <= '1' when
IR(7 downto 4) = "0101" and EN = '1' else '0';
RSR <= '1' when
IR(7 downto 4)