CPU Design: Thanh ghi bộ đếm chương trình PC (Program Counter)

Thực hiện một bộ đếm chương trình cho vi xử lý.

Bảng chân lý của thanh ghi bộ đếm chương trình PC

PCclr
PCld
PCincr
CLK
PC_in
PC_out
‘1’
X
X
X
X
0
‘0’
1
X
PC_in
‘0’
‘0’
‘1’
X
PC_out + 1
‘0’
‘0’
‘0’
X
PC_out

Mã nguồn VHDL thực hiện một thanh ghi bộ đếm chương trình PC (Program Counter) dùng trong các bộ vi lý.
— program_counter.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use WORK.MICROPROCESSOR_LIB.ALL;

— Uncomment the following library declaration if using
— arithmetic functions with Signed or Unsigned values
–use IEEE.NUMERIC_STD.ALL;

— Uncomment the following library declaration if instantiating
— any Xilinx leaf cells in this code.
–library UNISIM;
–use UNISIM.VComponents.all;

entity program_counter is
    Port ( clk : in STD_LOGIC;
           PCclr : in STD_LOGIC;
           PCincr : in STD_LOGIC;
           PCld : in STD_LOGIC;
           PC_in : in STD_LOGIC_VECTOR (DATA_WIDTH – 1 downto 0);
           PC_out : out STD_LOGIC_VECTOR (DATA_WIDTH – 1 downto 0));
end program_counter;

architecture program_counter of program_counter is
signal PC_reg: STD_LOGIC_VECTOR (DATA_WIDTH – 1 downto 0);
begin
    process(clk)
    begin
       if PCclr = ‘1’ then
                PC_reg <= (others => ‘0’);
       elsif clk’event and clk = ‘1’ then
            if PCld = ‘1’ then
                PC_reg <= PC_in;
            elsif PCincr = ‘1’ then
                PC_reg <= PC_reg + 1;
            end if;
        end if;
    end process;
    PC_out <= PC_reg;       
end program_counter;

Trả lời