VHDL与数字系统课程设计(简单处理器设计)

合集下载

数字逻辑原理与VHDL设计课程设计

数字逻辑原理与VHDL设计课程设计

数字逻辑原理与VHDL设计课程设计一、课程设计背景数字逻辑原理与VHDL设计是数字集成电路设计专业中的一门重要基础课程,内容涵盖数字电路基础知识、组合逻辑电路设计、时序逻辑电路设计以及数字电路综合和优化等方面。

本课程设计旨在以实践为主,巩固和加深学生的理论知识,提高学生综合运用数字逻辑原理和VHDL语言进行数字电路设计的能力。

二、实验目的通过本次课程设计,要求学生对数字逻辑原理及其应用有更加深入的认识,并掌握以下专业能力:1.掌握数字逻辑电路的基本知识与方法,以及基于VHDL设计数字电路的基本步骤与方法;2.能够运用数字逻辑原理及VHDL语言进行简单数字电路的设计、仿真、综合和下载;3.能够独立进行数字电路设计并解决设计过程中遇到的问题。

三、实验设备和工具1.Xilinx Vivado软件,用于数字电路的综合和仿真;2.FPGA开发板,用于数字电路的下载和实现;3.电脑,用于Vivado软件的安装和使用。

四、实验内容和步骤实验一函数计算器的设计与实现实验目的通过设计一个函数计算器,深入理解组合逻辑电路的设计、实现和仿真过程,同时练习使用VHDL语言进行数字电路的编写、仿真和下载。

实验内容设计一个函数计算器,能够计算并显示四个前缀表达式,包括:–23 45–11 + 22 * 33–23 - 45 / 561./ 45 + 67 - 89其中,加减乘除的运算需要满足基本的优先级规则,即在没有括号的情况下,先乘除后加减。

实验步骤1.设计并编写函数计算器的VHDL代码,包括各种运算模块、数字选择器、显示器控制器等;2.在Vivado软件中进行仿真,验证函数计算器设计的正确性;3.将函数计算器设计综合成比特流文件,下载到FPGA开发板上进行实现和测试。

实验二五位计数器的设计与实现实验目的通过设计一个五位同步加法计数器,深入理解时序逻辑电路的原理、设计和实现过程,同时掌握VHDL语言对时序电路进行设计、仿真和下载的方法。

vhdl与数字系统课程设计

vhdl与数字系统课程设计

vhdl与数字系统课程设计一、课程目标知识目标:1. 学生能理解VHDL的基本语法和结构,掌握VHDL编程的基本方法。

2. 学生能运用VHDL语言设计简单的数字系统,如组合逻辑电路和时序逻辑电路。

3. 学生能理解数字系统的基本原理,掌握数字系统的设计方法和步骤。

技能目标:1. 学生能运用VHDL语言编写代码,实现特定功能的数字电路。

2. 学生能使用相关的EDA工具,如ModelSim进行VHDL代码的仿真和调试。

3. 学生能通过课程设计实践,培养解决实际问题的能力和团队协作能力。

情感态度价值观目标:1. 学生能培养对数字系统设计和VHDL编程的兴趣,激发创新思维和探索精神。

2. 学生在学习过程中,能树立正确的工程观念,注重实际应用和问题解决。

3. 学生能在团队合作中,学会互相尊重、沟通协作,培养良好的团队精神和职业素养。

课程性质分析:本课程为数字电路与系统相关专业的选修课程,旨在通过VHDL语言的学习,使学生掌握数字系统设计的基本方法和技能。

学生特点分析:学生已具备一定的电子电路基础知识,具有一定的编程能力和实践操作能力,但对VHDL语言和数字系统设计尚处于入门阶段。

教学要求:1. 结合课本内容,注重理论与实践相结合,提高学生的实际操作能力。

2. 通过课程设计,培养学生分析问题、解决问题的能力,增强学生的工程素养。

3. 注重激发学生的学习兴趣,引导学生主动探索,培养创新意识。

二、教学内容1. VHDL基础语法与结构- 数据类型与运算符- 顺序语句与并发语句- 子程序与程序包- 配置与库的运用2. 数字系统原理与设计方法- 组合逻辑电路设计- 时序逻辑电路设计- 数字系统层次化设计方法3. VHDL在数字系统设计中的应用- 代码编写规范与技巧- 仿真与调试方法- 常用数字电路的VHDL实现,如:编码器、译码器、计数器等4. 课程设计实践- 设计题目与要求- 团队协作与分工- 设计报告撰写与答辩教学大纲安排:第一周:VHDL基础语法与结构介绍第二周:数字系统原理与设计方法第三周:VHDL在数字系统设计中的应用第四周:课程设计实践与指导第五周:课程设计总结与评价教学内容关联教材:1. 《数字电路与系统》相关章节:组合逻辑电路、时序逻辑电路设计原理。

应用VHDL设计数字系统

应用VHDL设计数字系统

04
VHDL设计实例
组合逻辑电路设计
总结词
描述了如何使用VHDL设计组合逻辑电路的过程。
详细描述
组合逻辑电路是数字系统中常见的电路类型,其特点是输入信号的变化立即反映在输出信号上,没有 存储功能。在VHDL中,可以使用"and", "or", "not"等逻辑运算符以及"case"语句等来设计组合逻辑 电路。
一款流行的VHDL仿真软件,支持多种仿真算法,提 供丰富的库和测试平台。
Icarus Verilog
开源的VHDL和Verilog仿真器,适用于学术研究和项 目开发。
GHDL
GNU工具链中的VHDL模拟器,支持多种操作系统和 平台。
VHDL测试平台
VUnit
基于ModelSim的测试框架,提供易于使用的 API进行测试编写和执行。
混合描述
总结词
混合描述是VHDL设计中的一种常用方法,它结合了行为描述 和结构描述的优点,能够更全面地描述数字系统。
详细描述
混合描述同时使用行为描述和结构描述来定义数字系统。它 通常在行为描述中包含结构描述的元件实例,以实现更具体 和详细的系统实现。混合描述可以描述各种规模的数字系统 ,并且能够更好地满足实际设计的需求。
详细描述
状态机是一种常见的数字系统设计方法,用 于描述系统的状态转换和行为。在VHDL中, 可以使用"if-then-else"语句和"case"语句 等来设计状态机。在设计过程中,需要定义 状态、状态转换条件和相应的动作,以确保 系统的正确运行。
05
VHDL仿真与测试
VHDL仿真工具
ModelSim

VHDL语言及其应用课程设计

VHDL语言及其应用课程设计

VHDL语言及其应用课程设计一、前言VHDL(VHSIC Hardware Description Language)是一种用于描述数字系统、芯片、电路板和系统级应用的硬件描述语言。

作为一种硬件描述语言,VHDL使用定义来描述设计,供计算机程序执行和仿真。

VHDL被认为是数字电子工程领域中最强大、最灵活的硬件描述语言之一。

在本次课程设计中,我们将通过VHDL语言来设计一个数字系统,从而理解和熟悉VHDL语言的应用以及数字系统的设计方法。

二、开发环境在我们进行VHDL语言开发之前,需要准备以下开发环境:•Vivado:Vivado是一款由Xilinx公司开发的集成开发环境(IDE),可用于设计数字系统的FPGA、ASIC和Soc(System on Chip)。

•VHDL仿真器:VHDL仿真器用于测试和仿真我们设计的数字系统,常用的VHDL仿真器有ModelSim等。

三、课程设计在本次课程设计中,我们将设计一个简单的数字系统,该系统可以对两个8位数字进行求和运算,并输出计算结果。

具体的设计过程如下:1.设计输入首先,我们需要定义输入信号的格式。

在本次设计中,我们需要两个8位的输入信号,因此输入信号的格式如下:entity Input_Output isport(A_In, B_In :in std_logic_vector(7downto0);Sum :out std_logic_vector(7downto0));end Input_Output;在上述代码中,我们使用标准逻辑向量来定义输入信号的格式,其中A_In和B_In是两个8位输入信号,Sum是输出结果。

2.计算过程接下来,我们需要进行计算过程的设计。

在本次设计中,我们将对输入信号进行加法运算,因此我们需要定义一个计算模块来实现这一功能。

由于VHDL是一种面向过程的语言,因此我们需要使用过程来实现计算过程:architecture Behavioral of Input_Output issignal sum_temp :unsigned(7downto0);beginadd_proc:process(A_In,B_In)beginsum_temp <=unsigned(A_In) +unsigned(B_In);end process add_proc;Sum <=std_logic_vector(sum_temp);end Behavioral;在上述代码中,我们首先定义一个sum_temp信号来存储计算结果,接下来使用一个过程来实现加法运算。

计算机组成原理课程设计vhdl设计cpu

计算机组成原理课程设计vhdl设计cpu

目录1. 课程设计目的 (3)2. 开发工具选择 (3)3. 方案选择 (3)4.指令系统设计 (4)5. 模型机框图设计 (4)6. 指令流程图 (5)7.微指令格式(微程序控制器)设计 (6)8.微程序(微程序控制器)设计 (7)9. VHDL程序代码 (9)10. 调试仿真 (16)11. 课程设计回顾总结 (18)参考文献 (18)1. 课程设计目的(1)、计算机组成原理课程设计的主要任务是让学生通过动脑和动手解决计算机设计中的实际问题。

综合运用所学计算机组成原理知识,在掌握部件单元电路实验的基础上,进一步将其组成系统构造一台基本的模型计算机,掌握整机概念,并设计机器指令系统,编写程序,在所设计的模型计算机上调试运行。

(2)、通过一台模型机的设计过程,明确计算机的控制原理与控制过程,巩固和灵活应用所学的理论知识,掌握计算机组成的一般设计方法,提高学生设计能力和实践操作技能,为从事计算机研制与设计打下基础。

2. 开发工具选择使用QUARTUS 5.0软件编写并调试VHDL程序,然后做功能仿真。

3. 方案选择本次实习的内容为16位模型计算机的设计,单总线,采用微程序控制方式,有四种寻址方式:直接寻址、寄存器寻址、寄存器间接寻址和变址寻址。

微程序控制方式由微指令译码产生。

微程序中一条机器指令往往分成几步执行,将每一步操作所需的若干为命令以代码编写在一条微指令中,若干条微指令组成一段微程序,对应一条机器指令。

然后根据系统的需要,事先编制各段微程序,将它存入一个专用寄存器(即控制存储器)中。

微程序执行过程:如图1所示,为微程序控制基本框:(1)从控存中逐条取出“取指令操作”,执行取指令公共操作。

(2)根据指令的操作码,经过微地址形成部件,得到这条指令的入口地址,并送入微地址寄存器中。

(3)从控存中逐条的取出对应的微指令并执行。

(4)执行完一条机器指令对应的微程序后又回到取指微程序的入口地址,继续第(1)步,以完成取下一条机器指令的公共操作。

数字系统设计VHDL课设报告

数字系统设计VHDL课设报告
1)IEEE 754转定点数
模块名:ieee7542point(clk,rst_n,inp,pointdata);
出入参数说明:clk:时钟。
rst_n:异步复位信号输入。
Inp:三十二位浮点数输入,规定为ieee754格式,切指数范围为0——127,因为为了配合之前cordic算法的±90的输入。
-30度(14’h3fbd)
-0.5000(0x1fc0)
0.8750(0x0070)
90度(14’h00C9)
0.9843(0x7e)
0.0078(0x0001)
-90度(14’h3f37)
-1.000(0x1f80)
0.0000(0x0000)
结果分析:设计中采用流水线结构,第九个时钟以后,每个时钟都会产生一个结果,是一种高速度的运算器,从综合的结果看,运算器的运算速度可以达到200M以上,满足一般工程应用的需求。从采样出来的几组经典数据来看,也能够充分验证该运算器的精度,同时证明该设计的合理性和正确性。
clk:时钟信号输入端,一位。
rst_n:异步复位输入端,一位。
inp:十四位定点数输入端,采用补码形式输入,输入范围±90度,采用弧度形式输入。
res_sin,res_cos:十三位输出端,也是带符号补码形式。
所有过程变量:均未补码形式。
六,实验结果
本设计采用SynplifyPro 9.6.2进行综合,采用modelsim6.5进行仿真,仿真结果如下所示:
(1)、cordic算法原理
CORDIC算法包含圆周系统,线性系统,双曲系统三种旋转系统。本文仅以圆周系统推导如下。该系统完成的是一个平面坐标旋转如图1所示,可以看出,将向量( Xi, Yi)旋转θ角,得到一个新的向量( Xi, Yi) ,那么有:

数字逻辑与数字系统课程设计简单计算器

数字逻辑与数字系统课程设计简单计算器

简单计算器一、设计分析1、功能描述设计一个简单0-9数之间的加、减、乘法运算的计算器,,输入和输出均可以显示在数码管上。

2、实现工具1、用VHDL 语言文本形式输入;2、maxplusII行语言编写时序仿真和综合。

二、设计思想采用自顶向下的设计方式,分层进行设计。

设计分为五个模块进行;计算器模块、八位二进制数转化成8421BCD码模块,四选一数据选择器模块,七段显示译码器模块、模4计数器模块、模8计数器块、3—8译码器块。

顶层设计可以完全独立于目标器件芯片物理结构的硬件描述语言。

使用VHDL模型在所综合级别上对硬件设计进行说明、建模和仿真。

1、顶层原原理框图2、具体实现1、计算器模块、2、八位二进制数转化成8421BCD码模块3、四选一数据选择器模块4、七段显示译码器模块5、模4计数器模块6、模8计数器块7、3—8译码器块三、设计过程1、建立工程建立一个Project,命名为jiandanjisuanqi。

将各个模块生成的文件放在同一个文件夹下。

2、文本输入将各个模块的VHDL代码输入,保存并综合。

3、仿真建立各个模块的gdf图,设置输入波形并仿真。

4、顶层原理图输入利用各个模块生成的sym文件建立顶层原理图,编译并仿真。

5、硬件实现实验室提供的器件为FLEX10K,型号为EPF10K10LC84-4,将文件下载到器件当中,在实验箱中进行模拟。

四、整体框图五、VHDL部分代码及说明1、计算器模块、library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity jisuanqi isPort (a,b: in STD_LOGIC_VECTOR (3 downto 0);sel:in STD_LOGIC_VECTOR (1 downto 0); -----加减乘控制端s: out STD_LOGIC_VECTOR (7 downto 0));end jisuanqi;architecture Behavioral of jisuanqi issignal q1 ,q2: STD_LOGIC_VECTOR (3 downto 0);signal q3: STD_LOGIC_VECTOR (7 downto 0);signal q4: STD_LOGIC_VECTOR (1 downto 0);beginq1<=a;q2<=b;q4<=sel;process(q4,q3)begincase q4 iswhen "00" => ----加减乘算法q3<=q1+q2;s<=q3;when "01" =>if(q1>q2)thenq3<= q1-q2;s<=q3;elseq3<=q2-q1;s<=q3;end if;when "10"=>q3<=q1*q2;s<=q3;when "11"=>q3<=q1*q2;s<=q3;when others=>q3<="00000000";s<=q3;end case;end process;end Behavioral;2、八位二进制数转化成8421BCD码模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity bcd isPort (s : in STD_LOGIC_VECTOR (7 downto 0);a : out STD_LOGIC_VECTOR (3 downto 0);b : out STD_LOGIC_VECTOR (3 downto 0));end bcd;architecture Behavioral of bcd issignal q0: STD_LOGIC_VECTOR (7 downto 0);signal q1: STD_LOGIC_VECTOR (3 downto 0);signal q2: STD_LOGIC_VECTOR (3 downto 0);beginprocess(s)beginq0<=s;case q0 is ----把八位二进制数转化为8421BCD码when"00000000"=>q1<="0000";q2<="0000";when"00000001"=>q1<="0000";q2<="0001";when"00000010"=>q1<="0000";q2<="0010";when"00000011"=>…………………………….3、四选一数据选择器模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;entity mux4_1 isport(d0,d1,d2,d3 :in std_logic_vector(3 downto 0);q :out std_logic_vector(3 downto 0);sel :in std_logic_vector(1 downto 0) );end mux4_1;architecture rtl of mux4_1 isbeginprocess(sel)begin ------实现从四个数据中选择一个出来if(sel = "00") thenq<=d0;elsif(sel = "01")thenq<=d1;elsif(sel = "10")thenq<=d2;elsif(sel = "11")thenq<=d3;end if;end process;end rtl;4、七段显示译码器模块library ieee;use ieee.std_logic_1164.all;entity bcd_7dis isport (bcdm: in std_logic_vector(3 downto 0);a,b,c,d,e,f,g : out std_logic);end bcd_7dis;architecture art of bcd_7dis issignal w : std_logic_vector(6 downto 0);beginprocess(bcdm)begina<=w(6);b<=w(5);c<=w(4);d<=w(3);e<=w(2);f<=w(1);g<=w(0);case bcdm is -----实现8421码转化为2进制码的转换when "0000" =>w<="1111110";when "0001" =>w<="0110000";when "0010" =>w<="1101101";when "0011" =>w<="1111001";when "0100" =>w<="0110011";when "0101" =>w<="1011011";when "0110" =>w<="1011111";when "0111" =>w<="1110000";when "1000" =>w<="1111111";when "1001" =>w<="1111011";when "1100" =>w<="0000001";when others =>w<="0000000";end case;end process;end art;5、模4计数器模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;entity mo4 isport(q :out std_logic_vector(1 downto 0);clk :in std_logic);end mo4;architecture rtl of mo4 issignal qcl : std_logic_vector(1 downto 0);beginprocess(clk)begin ----实现模为4的计数if(clk'event and clk = '1')thenif(qcl = "11")thenqcl <= "00";elseqcl <= qcl + '1';end if;end if;q <= qcl;end process;end rtl;6、模8计数器块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count_8 isport( clk:in std_logic;ql :out std_logic_vector(2 downto 0));end count_8;architecture rt1 of count_8 issignal qcl:std_logic_vector(2 downto 0);beginprocess(clk)begin ---- 实现模8的计数if(clk'event and clk='1') thenif (qcl="111") thenqcl<="000";elseqcl<=qcl+'1';end if;end if;ql<=qcl;end process;end rt1;7、3—8译码器块library ieee;use ieee.std_logic_1164.all;entity decode3_8 isport(d :in std_logic_vector(2 downto 0);y :out std_logic_vector(7 downto 0));end decode3_8 ;architecture rt1 of decode3_8 isbeginprocess(d)begincase d is ------实现3对8的译码when "000"=>y<="10000000";when "001"=>y<="01000000";when "010"=>y<="00100000";when "011"=>y<="00010000";when others=>y<="00000000";end case;end process;end rt1;六、各模块仿真结果1、计算器模块2、八位二进制数转化成8421BCD码模块3.、四选一数据选择器模块4、七段显示译码器模块5、模4计数器模块6、模8计数器块7、3—8译码器块8、整体仿真七、管脚锁定及硬件实现1、管脚锁定2、文件下载将文件下载完后在硬件实验箱中进行仿真检查。

vhdl语言与数字系统的设计

vhdl语言与数字系统的设计

V H D L语言与数字系统的设计应用科技蒋敏1王寒寒:(1.郑州交通职业学院,河南郑州450062;2.胜利油田兴泰石油化工有限公司,山东东营257000)膀要]基于强大的E D A教术的支持,以vH D L为主要设计手段,充分开发利用C PLD芯片丰富而灵活的逻辑资源,成为当前数字系统设计的主要发展方向。

介绍了VHDL㈣A.MAX+PLUS21I开发软件的使用。

麒键词]V H D L;数字系统;仿真数字系统的逻辑设计,多年前早已开展了研究,但目前尚未达到广泛使用的地步。

许多人为了正确地描述系统的结构和性能,对数字系统的描述作了许多探讨,并获得了各式各样的语言。

V H D L是一种超高速集成电路硬件描述语言,它提供了—个标准的,从逻辑门级到数字系统级的各抽象级描述硬件的标准文本,提供了精确的语法和语义,为集成电路及系统设计提供了形式化、层次化和规范化的描述,不仅能有效地用于C A D进行模拟,而目可作为—种精确的自然语言用于设计者之间的设计交流,它允许设计者在语言的基本作用范畴之外表示信息,尽管最初的工具在某些级《伊J如开关级)不能提供模拟。

由于没有限制设计者必须拥有特殊的硬件技术或设计方法,该语言在工业E有着广泛的用途,它被喻为“硬件描述语言中的‘FO R T RA N”’,其性能是其它硬件描述语言无法媲美的。

1V H D L的由来V H D L是一项诞生于美国国防部所支持的研究计划,目的是为了把电子电路的设计意义以文字或文件的方式保存下来,以便其他人能轻易地了解电路的意义。

1985年完成第一版的硬件描述语言,两年后(1987)成为I EE E 标准,即IEE El076标准。

1988年,美国国防部规定所有官方的A—SIC设计邰必须以V H D L为设计描述语言,所以V H D L就渐渐成为工业界的标准。

之后于1993年增修为众所周知的I EE El l64标准,1996年,I E EE又将电路合成的标准程序与规格加入至V H D L硬件描i蕉i狺中,成为IEEEl0763标准。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告实践课题:VHDL与数字系统课程设计学生:XXX指导老师:XXX、XXX系别:电子信息与电气工程系专业:电子科学与技术班级:XXX学号:XXX一、设计任务用VHDL设计一个简单的处理器,并完成相关的仿真测试。

.设计要求:图1是一个处理器的原理图,它包含了一定数量的寄存器、一个复用器、一个加法/减法器(Addsub),一个计数器和一个控制单元。

图1 简单处理器的电路图数据传输实现过程:16位数据从DIN输入到系统中,可以通过复用器分配给R0~R7和A,复用器也允许数据从一个寄存器传通过Bus送到另外一个寄存器。

加法和减法的实现过程:复用器先将一个数据通过总线放到寄存器A中,然后将另一个数据放到总线上,加法/减法器对这两个数据进行运算,运算结果存入寄存器G中,G中的数据又可根据要求通过复用器转存到其他寄存器中。

1)Rx ← [Ry] :将寄存器Ry中的内容复制到Rx;2)Mvi Rx,#D :将立即数存入寄存器Rx中去。

所有指令都按9位编码(取自DIN的高9位)存储在指令存储器IR中,编编码规则为IIIXXXYYY,III 表示指令,XXX表示Rx寄存器,YYY表示Ry寄存器。

立即数#D是在mvi指令存储到IR中之后,通过16位DIN输入的。

有一些指令,如加法指令和减法指令,需要在总线上多次传输数据,因此需要多个时钟周期才能完成。

控制单元使用了一个两位计数器来区分这些指令执行的每一个阶段。

当Run信号置位时,处理器开始执行DIN输入指令。

当指令执行结束后,Done信号置位,下表列出四个指令在执行过程中每一个时间段置位的控制信号。

时间指令T0 T1 T2 T3(mv):I0 (mvi):I1 (add):I2 (sub):I3 IR inIR inIR inIR inRY out,RX in,DoneDIN out,RX in,DoneRX out,A inRX out,A in--------RY out,G in,AddsubRY out,G in,Addsub--------G out,RX in,DoneG out,RX in,Done二、实现功能说明2.1 mv Rx,Ry实现的功能:将寄存器Rx的值赋给寄存器Ry(以mv R0, R5为例)(1 )计数器为“00”时,指令寄存器的置位控制信号输入端IRin=1有效,将DIN输入的数据的高9位锁存。

置位的控制信号如图3加粗黑线所示。

图3(2)计数器为“01”时,首先控制单元根据设计器为“00”时输入的指令,向复用器发出选通控制信号,复用器根据该控制信号让R5的值输出到总线上,然后控制单元控制寄存器R0将总线上的值锁存,完成整个寄存器对寄存器的赋值过程。

置位的控制信号和数据流如图4加粗黑线所示。

图42.2 mvi Rx,#D实现的功能:将的立即数#D赋给寄存器Rx(以mv R0, #D为例)(1)计数器为“00”时,指令寄存器的置位控制信号输入端IRin=1有效,将DIN输入的数据的高9位锁存。

置位的控制信号如图5加粗黑线所示。

图5(2)计数器为“01”时,首先控制单元根据设计器为“00”时输入的指令,向复用器发出选通控制信号,复用器根据该控制信号让DIN的值输出到总线上,然后控制单元控制寄存器R0将总线上的值锁存,完成整个立即数对寄存器的赋值过程。

置位的控制信号和数据流如图6加粗黑线所示。

图62.3 add Rx,Ry和sub Rx,Ry实现的功能:将寄存器Ry的值加上/减去寄存器Rx的值并赋给寄存器Rx(以add/sub R0,R1为例)。

(1)计数器为“00”时,指令寄存器的置位控制信号输入端IRin=1有效,将DIN输入的数据的高9位锁存。

置位的控制信号如图7加粗黑线所示。

图7(2)计数器为“01”时,首先控制单元根据设计器为“00”时输入的指令,向复用器发出选通控制信号,复用器根据该控制信号让R0的值输出到总线上,然后控制单元控制寄存器A将总线上的值锁存。

置位的控制信号和数据流如图8加粗黑线所示。

图8(3)计数器为“10”时,首先控制单元根据设计器为“00”时输入的指令,向复用器发出选通控制信号,复用器根据该控制信号让R1的值输出到总线上,然后控制单元控制加法/减法器addsub将寄存器A的值和总线上的值相加/相减并输出,接着寄存器G将加法/减法器addsub的计算结果锁存。

置位的控制信号和数据流如图9加粗黑线所示。

图9(4)计数器为“11”时,首先控制单元向复用器发出选通控制信号,复用器根据该控制信号让寄存器G的值输出到总线上,寄存器R0将总线上的值进行锁存,完成整个寄存器与对寄存器见加减法的运算过程。

置位的控制信号和数据流如图10加粗黑线所示。

图10三、单元模块设计说明4.1寄存器Registe寄存器R0~R7、寄存器A或寄存器G :用于数据的存储。

当时钟输入clk的上升沿到来且rin=1时,将数据输入端rxin[15..0]的数据锁存到寄存器中并从数据输出端rxout[15..0]输出;当rin=0时,输出端保持原来的值不变。

clkrinrxin[15..0]rxout[15..0]registeinst1寄存器Registe的VHDL代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY registe isport(clk:in std_logic;rin:in std_logic;rxin:in std_logic_vector(15 downto 0);rxout:out std_logic_vector(15 downto 0)); end entity registe;architecture one of registe isbeginprocess(clk)beginif clk'event and clk='1' thenif rin='1' then rxout<=rxin;end if;end if;end process;end one;4.2指令寄存器IR指令寄存器IR用于对输入的16为指令进行处理,取其高9位。

当时钟输入clk的上升沿到来且rin=1时,取数据输入端rxin[15..0]的高9位将其锁存到寄存器中并从数据输出端rxout[8..0]输出;当rin=0时,输出端保持原来的值不变。

指令寄存器IR的VHDL代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY IR isport(clk:in std_logic;rin:in std_logic;rxin:in std_logic_vector(15 downto 0);rxout:out std_logic_vector(8 downto 0));end entity IR;architecture one of IR isbeginprocess(clk)beginif clk'event and clk='1' thenif rin='1' then rxout<=rxin(15 downto 7);end if;end if;end process;end one;4.3加/减法器addsub加/减法器addsub用于处理两个输入的数据datain2[15..0] 和datain1[15..0],当控制端Addsub=1时,两个数据输入端datain2[15..0] 和datain1[15..0]相加并从数据输出端dataout[15..0]输出;当控制端Addsub=0时,数据输入端datain2[15..0] 减去datain1[15..0],结果从数据输出端dataout[15..0]输出。

加/减法器addsub的VHDL代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;ENTITY addsub isport( ain:in std_logic_vector(15 downto 0);bin:in std_logic_vector(15 downto 0);adsub:in bit;about:out std_logic_vector(15 downto 0));end entity addsub;architecture one of addsub issignal a,b:std_logic_vector(15 downto 0);beginprocess(adsub,ain,bin)beginif adsub='0' then about<=ain+bin;elsif adsub='1' then about<=ain-bin;end if;end process;end one;4.4 计数器counter计数器counter用于产生控制单元的输入脉冲,对控制单元的工作时序进行控制。

当clear=0时(清零端clear 无效),时钟输入clk每来一个上升沿,输出count[1..0]加1,所以输出为00——>01——>10——>11——>00不断循环;当clear=1时(清零端clear有效),对输出Q[1..0]同步清零,与时钟有关。

计数器counter的VHDL代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter isport(clk:in std_logic;clear:in std_logic;count:out std_logic_vector(1 downto 0));end counter;architecture one of counter issignal c:std_logic_vector(1 downto 0);beginprocess(clk,clear)beginif clk'event and clk='1' thenif(clear='1')then c<="00";else c<=c+1;end if;end if;end process;count<=c;end one;4.5 复用器multiplexers复用器根据控制单元的控制信号将指定的输入数据输出到总线上。

相关文档
最新文档