SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计

实验目的,说明实验仪器、设备等说明参见《计算机组成实验C》实验及课程设计指导书。

简要点评:此实验与前六个实验有略微不同——因为引入了存储器ROM的设计,以下简述创建ROM器件和ROM初始化文件mif的建立步骤。

使用软件:Quartus II 9.0 sp2

先完成分频,数码管扫描以及PC寄存器的设计。

分频模块:

Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity FRQ is
port(clk_in:in std_logic;
     clk_out:out std_logic
     );
end;

architecture one of FRQ is
	signal temp:std_logic_vector(7 downto 0);
begin
	process(clk_in)
	begin
		if clk_in'event and clk_in='1' then
			temp<=temp+1;
			clk_out<=temp(7);
	    end if;
	end process;
end;


PC寄存器模块:

mode为模式控制,0为地址置数,1为地址自增。

add为PC寄存器自增操作数,由另外一组信号控制,可以控制add为0或1,当add为1时PC寄存器读取完当前内容就会自增1读取下一个数据,当add为0PC寄存器会暂停在当前地址不再前进。

reset为PC寄存器清零端。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; 	
entity PC_RIGISTER is
port(clk_pc:in std_logic;
	data:in std_logic_vector(7 downto 0):="00000000";--输入
	add:in std_logic;
	mode: in std_logic;
	reset:in std_logic;----清零
	PC:buffer std_logic_vector(7 downto 0)--寄存器PC
	);
end PC_RIGISTER;
architecture one of PC_RIGISTER is


begin

process(clk_pc,reset,mode)--PC进程
	begin
		if clk_pc'event and clk_pc='1'then
			if reset='0'then
				PC<="00000000";
			end if;
			if mode='0'then
				PC<=data;--置数
			else
				PC<=PC+add;
			end if;
		end if;
end process;	

end architecture one;

七段译码器模块:没啥好说的了,主要加了个add和add控制端,其他功能不变。

LIBRARY IEEE;--七段译码器
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SCAN_LED7 IS
PORT(clk:in std_logic;
	 d:in std_logic_vector(15 downto 0);
	 sel:buffer std_logic_vector(2 downto 0):="000";
	 add:buffer std_logic;
	 control:in std_logic;
	 led7:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END;
ARCHITECTURE ONE OF SCAN_LED7 IS
signal key:std_logic_vector(3 downto 0);
begin
process(clk)
	begin
	if clk'event and clk='1'then
	
		sel<=sel+1;
		if sel>="011"then
			sel<="000";
		end if;
		case sel is
			when "011"=>key<=d(15 downto 12);
			when "000"=>key<=d(11 downto 8);
			when "001"=>key<=d(7 downto 4);
			when "010"=>key<=d(3 downto 0);
			when others=>null;
		end case;
	end if;
end process;

process(control)
begin
	if control='0' then
		add<='0';
	else
		add<='1';
	end if;
end process;

process(key)--4-8
	begin
	case key is
		when "0000"=>led7<="00111111";
		when "0001"=>led7<="00000110";
		when "0010"=>led7<="01011011";
		when "0011"=>led7<="01001111";
		when "0100"=>led7<="01100110";
		when "0101"=>led7<="01101101";
		when "0110"=>led7<="01111101";
		when "0111"=>led7<="00000111";
		when "1000"=>led7<="01111111";
		when "1001"=>led7<="01101111";
		when "1010"=>led7<="01110111";
		when "1011"=>led7<="01111100";
		when "1100"=>led7<="00111001";
		when "1101"=>led7<="01011110";
		when "1110"=>led7<="01111001";
		when "1111"=>led7<="01110001";
		when others=>null;
	end case;
end process;
end architecture one;


新内容:新建MIF文件

首先新建一个文件夹,在该文件夹内新建项目,项目名mem,建立成功后按Ctrl+N快捷键新建mif文件

SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计_第1张图片

选择Memory Initialization File,OK。

SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计_第2张图片

修改字长为报告书要求长度。

修改Memory Radix为十六进制

SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计_第3张图片

修改地址为十六进制,方便后面检查时对地址置数(可选)

SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计_第4张图片

然后修改表格中的内容,无具体要求,检查的时候会让你调出mif文件,然后读出指定地址的值。

我的mif文件。仅供参考

SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计_第5张图片

然后按Ctrl+S快捷键保存在当前文件夹。

在当前项目文件夹新建顶层项目,软件会提示该文件夹已有其他项目,是否选择其他目录,选择NO。

新内容:新建lpm_rom器件。

在原理图内双击,弹出的窗口中输入lpm_rom,回车

SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计_第6张图片

选择语言为VHDL。

SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计_第7张图片

修改容量及字长为256*16(实验指导书要求)

SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计_第8张图片

第五步,选择MIF文件(之前建立的),在项目文件夹里选中确定即可。

SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计_第9张图片

SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计_第10张图片

至此所有准备工作完成,开始连线。

连线参考图:

SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计_第11张图片

引脚锁定参考:

SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计_第12张图片

引脚锁定可能并不符合读者使用习惯,仅供参考。

你可能感兴趣的:(计算机组成实验,VHDL)