VHDL与数字系统课程设计(简单处理器设计)
- 格式:doc
- 大小:3.36 MB
- 文档页数:25
数字逻辑原理与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与数字系统课程设计一、课程目标知识目标: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(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信号来存储计算结果,接下来使用一个过程来实现加法运算。
目录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)步,以完成取下一条机器指令的公共操作。
简单计算器一、设计分析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、文件下载将文件下载完后在硬件实验箱中进行仿真检查。
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标准。
VHDL 与数字系统设计总学时:48 理论学时:16 实验学时:32 课程总学分:3适用专业:电子信息科学与技术一、实验的地位、目的1、实验的地位本课程是电子信息科学与技术本科专业的专业方向课《VHDL与数字系统设计》的配套实验课程。
2、实验的目的使学生通过对VHDL语言及EDA技术的学习和训练,获得现代硬件数字电路的软件化设计方法,了解并初步掌握当代国际数字技术设计领域的最新技术;激发并调动学生创造性思维能力,为学生在数字技术领域的进一步深入探索和进行创新奠定基础。
二、实验教材与指导书《VHDL与数字系统设显示桌面.scf计》实验讲义,杨守良,重庆文理学院物理学与信息工程系,2005.7三、考核方式及成绩评定1、考核方式:平时考查2、成绩评定:根据实验报告、实验态度、考勤、实际操作技能检查等,对学生进行评定考核成绩,实验成绩的比例按规定执行。
2 -五、综合性、设计性实验简介实验四译码器的设计(设计性)(一)实验目的1、掌握组合逻辑电路的设计方法。
2、掌握组合逻辑电路的静态测试方法。
3、初步掌握Max+PlusII 软件的基本操作与应用。
4、初步了解可编程器件的设计全过程。
(二)实验内容采用原理图输入法和VHDL编程来设计一个3-8译码器。
并在MAXPLUSII环境下实现仿真。
(三)主要仪器设备及器材PC 机、RC-EDA 实验开发系统、连接导线若干(四)基本实验技能及考核要点基本实验技能:熟悉3-8 译码器的逻辑真值表;基本门电路的使用考核要点:完成3-8 译码器的设计;并在MAX+PlusII 下进行仿真;在实验箱上验证设计。
实验五数字时钟设计(综合性)(一)实验目的1、多位计数器相连的设计方法。
2、掌握十进制,六进制,二十四进制计数器的设计方法。
3、继续巩固多位共阴极扫描显示数码管的驱动及编码。
4、掌握扬声器的驱动。
5、掌握CPLD 技术的层次化设计方法。
(二)实验内容设计的电子钟具有时、分、秒计数显示功能,以24 小时循环计时。
数字逻辑与数字系统设计-基于VHDL语言描述课程设计简介数字逻辑与数字系统设计是计算机科学和工程中的一门重要课程,它涉及到硬件电路的设计和实现。
本文将介绍数字逻辑与数字系统设计中的VHDL语言描述,以及如何基于VHDL语言描述来进行数字系统的设计。
VHDL语言描述VHDL是一种硬件描述语言,它是IEEE标准1076的一部分,是一种文本描述数字电路、系统和信号的详细语言。
VHDL还可以描述模拟电路和数字信号处理系统。
VHDL的设计流程包括建立系统规范、编写代码、生成模拟和仿真。
编写代码可以通过三种不同的方法进行:•行为级描述:描述系统的功能,以及模块之间的交互;•数据流描述:根据输入变量的状态计算输出变量的状态;•结构描述:定义模块和信号的结构、层次结构和网表。
在VHDL中,模块和信号需要有一个基本的结构。
模块可以细分为实体(entity)和体枚(architecture),以及连接点(port)。
在体枚中,设计者可以通过描述行为来定义模块的内部结构,例如使用过程(process)、函数(function)、计数器(counter)等,从而描述模块的行为。
连接点则是模块的输入、输出接口,用于与其它模块连接,并且必须在实体中定义。
信号则是用于电路中传输数据、状态、时序等信息的实体。
它可以被定义为标量或向量,可以是定长或不定长。
在VHDL语言中使用变量(var)、常量(constant)和信号(signal)的方法可以对数字电路进行建模和仿真,并基于VHDL语言描述来进行数字系统的设计。
VHDL语言描述的应用——课程设计利用VHDL语言描述实现的数字电路在实际应用中非常广泛,可以用于网络交换芯片、信号处理器和数字嵌入式系统等领域。
在数字逻辑与数字系统设计中,也具有很高的实用性。
以一个简单的数字系统设计为例,该设计实现了数字加法器的功能,在VHDL 语言表述下的代码如下:-- 定义模块entity adder isport(A_i,B_i:in std_logic_vector(3downto0);S_o :out std_logic_vecotr(3downto0));end adder;-- 定义体枚architecture rtl of adder isbeginS_o <= A_i + B_i; -- 行为描述end rtl;在这个例子中,我们定义了一个模块adder,该模块由A_i和B_i两个输入端口、S_o一个输出端口组成。
VHDL数字电路设计教程课程设计1. 课程设计背景随着数字电路在现代电子产品中的广泛应用,对数字电路设计的需求也越来越大。
而作为数字电路设计的重要工具和方法之一的硬件描述语言VHDL也被广泛应用。
为了让学生在学习数字电路和VHDL语言时能够掌握实际的设计技能,本课程针对数字电路和VHDL语言的基本原理和应用进行授课和课程设计,旨在培养学生的实际操作和解决实际问题的能力。
2. 教学目标本课程旨在使学生掌握数字电路和VHDL语言的基本原理和应用,具备以下能力:•掌握数字电路和VHDL语言的基本语法和编程思路;•能够独立完成数字电路和VHDL语言的设计、仿真和综合;•能够解决数字电路和VHDL语言设计中出现的实际问题;•具备一定的实际数字电路设计经验和VHDL编程能力。
3. 教学大纲3.1 数字电路基础•数字电路基本概念•数字逻辑门电路和代数表达式•组合逻辑电路设计•时序逻辑电路设计•计数器设计•存储器设计3.2 VHDL语言基础•VHDL语言概述•实体声明和体系结构•VHDL数据类型和常量•基本的VHDL语言结构•组合逻辑设计•时序逻辑设计•设计复用和程序结构•模拟和综合3.3 VHDL数字电路设计实践(1)多位计算机算术逻辑单元设计(2)VHDL编程设计电话拨号系统(3)VHDL和FPGA技术共同设计数字时钟4. 教学方法本课程将采用以下教学方法:•知识讲授:通过讲授数字电路和VHDL语言的基本原理,让学生掌握基本概念和设计思路;•实验操作:通过实验操作的方式带领学生熟练掌握数字电路和VHDL 语言的设计、仿真和综合技术;•课程设计:通过将学生划分为若干小组,让小组成员共同合作完成数字电路和VHDL语言的具体设计和实现,培养学生的团队合作和沟通能力;•课堂讨论:通过课堂讨论的方式激发学生的思维和提升学生的思考能力;•教师点评:通过对学生作业和课程设计的点评,提供指导和建议,帮助学生不断提升自身的设计能力。
数字系统仿真与VHDL课程设计报告——循环彩灯控制器——2人抢答器学院:班级:学号:姓名:实习时间:2011年1月4日—1月14日指导老师:一、实验设计的目的本设计的任务是熟悉支持VHDL语言的软件,如Max Plus 2,ISP,FOUNDATION 等,利用这一类软件使用VHDL语言进行设计编译仿真。
本次设计的主要目的:1、使学生熟练掌握相关软件Max Plus 2的使用操作。
能对VHDL语言程序进行编译及调试,以及通过计算机仿真,得到正确的仿真波形图,并根据所得仿真波形图分析判断并改进所设计的电路。
2、在成功掌握软件操作基础上,让学生将所学数字电路的基础课知识与VHDL语言的应用型知识结合起来并与实际设计,操作联系起来,即“理论联系实际”。
要求学生自主设计电路,编写程序,鼓励新思路,新方法,新观点。
3、完成可编程器件与VHDL语言课程设计,掌握设计语言技术的综合应用性。
通过对以下几个设计:1、设计60进计数器(同步,异步);2、循环彩灯控制器;3、数字显示的秒表;4、2人抢答器;5、交通灯的设计等五个课题的设计、仿真、调试来具体完成。
4、熟悉系统的分析和设计方法,合理掌握选用集成电路的方法,初步接触EDA技术,为以后本专业的学习奠定良好的基础。
二、设计的工具及基本要求Ⅰ、设计的工具Ⅱ、设计基本要求1、熟悉数字电路及相关专业课程的基本知识并能联系具体程序,编写出所设计电路的程序。
2、正确操作使用VHDL语言相关软件,能编译,调试,仿真VHDL语言程序得出正确的结果。
3、设计数字电路,编写程序,实现电路功能。
通过本次设计应初步认识Max Plus 2 这一类软件的运用。
三、设计内容及操作Ⅰ、设计的内容1、设计一个2人抢答器----两人抢答,先抢为有效,用发光二极管显示是否抢到优先答题权。
答题结束后,按复位键可重新抢答下一题。
2、循环彩灯控制器-----设计一个循环彩灯控制器,该控制器控制红,绿,黄三个发光管循环点亮。
本文由风中思念7贡献pdf文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
一、概述VHDL与数字电路设计一、概述二、VHDL语言三、用VHDL设计逻辑电路传统数字电路设计方法 EDA设计方法 PLD器件设计流程文本设计输入—VHDL程序设计数字电子技术的基本知识回顾组合逻辑电路编码器、译码器、数据选择器、加法器、数值比较器等传统设计方法传统的设计方法是基于中小规模集成电路器件进行设计(如74系列及其改进系列、CC4000系列、 74HC系列等都属于通用型数字集成电路),而且是采用自底向上进行设计:(1)首先确定可用的元器件;(2)根据这些器件进行逻辑设计,完成各模块;(3)将各模块进行连接,最后形成系统;(4)而后经调试、测量观察整个系统是否达到规定的性能指标。
时序逻辑电路同步时序逻辑电路异步时序逻辑电路寄存器、移位寄存器、计数器、序列信号发生器 EDA设计方法EDA(Electronics Design Automation)即电子设计自动化技术,是利用计算机工作平台,从事电子系统和电路设计的一项技术。
EDA技术为电子系统设计带来了这样的变化:(1)设计效率提高,设计周期缩短;(2)设计质量提高;(3)设计成本降低;(4)能更充分地发挥设计人员的创造性;(5)设计成果的重用性大大提高,省去了不必要的重复劳动。
自顶向下的设计方法数字电路的EDA设计是基于PLD进行设计的,支持自顶向下的设计方法:(1)首先从系统设计入手,在顶层进行功能划分和结构设计;(2)然后再逐级设计底层的结构;(3)并在系统级采用仿真手段验证设计的正确性;(4)最后完成整个系统的设计,实现从设计、仿真、测试一体化。
传统设计方法 vs EDA设计方法传统设计方法自底向上手动设计软硬件分离原理图设计方式系统功能固定不易仿真难测试修改模块难移植共享设计周期长PLD器件设计流程(1)PLD开发系统包括硬件和软件两部分。
VHDL实用教程课程设计1. 介绍VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,适用于系统级设计和验证。
它是一个既能描述数字电路也能描述模拟电路的设计语言,在集成电路和嵌入式系统的设计中得到广泛应用。
本课程设计将通过实际练习,让学生掌握VHDL语言,并且了解其在数字电路设计中的应用。
2. 课程设计目标本课程设计旨在让学生:1.掌握VHDL语言的基本语法和结构;2.熟悉数字电路设计的方法论;3.理解数字电路中状态机的设计原理;4.实现一个功能齐全的电路设计,利用VHDL描述电路,并在FPGA上进行实际实现。
3. 预备知识在学习本课程设计之前,学生应该了解:1.数字电路基础知识,比如逻辑门、分频器等;2.编程基础知识,比如C语言等。
4. 课程设计内容4.1 熟悉VHDL学习VHDL的基本语法和结构,包括数据类型、变量声明、信号声明、过程语句等。
通过简单的代码编写和仿真,加深对VHDL语言的理解。
4.2 数字电路设计了解数字电路的基础知识,理解数字电路设计的方法论,学习数字电路中的门电路设计、分频器设计等。
4.3 状态机设计理解数字电路中状态机的设计原理,包括状态转移图、状态表等概念,学习状态机的实现方法。
4.4 电路设计实现利用之前所学的VHDL语言,实现一个功能齐全的电路设计,包括设计和仿真过程。
通过FPGA实际实现,检验电路设计的正确性和可行性。
5. 实测结果通过本次课程设计,我们实现了一个基于FPGA的电路设计,成功实现了目标功能。
通过课程设计的过程,学生们不仅学会了VHDL语言,更加深入了解了数字电路设计和状态机设计的原理。
同时,在实操中,学生们也掌握了电路设计的方法和实现过程。
本次课程设计对学生们的实践能力和电路设计能力提高非常有益。
6. 总结本课程设计通过实践的方式,让学生们更加深入地了解VHDL语言和数字电路设计。
通过实际操作,学生们熟练掌握了VHDL语言和数字电路设计的基础知识,同时也掌握了具体的实现方法。
科目:VHDL语言与数字系统EDA设计专业:微电子与固体电子学学生姓名:陈庆宇提交日期: 2011年5月26号目录实验一 (1)实验二 (5)实验三 (9)实验四 (11)实验五 (17)作业 (27)实验一1. 实验内容1. 用IF 语句设计一个四-十六译码器;2. 用CASE 语句设计一个四-十六译码器;3. 用GENERATE 语句构造一个串行的十六进制计数器。
2. 实验目的会用VHDL 语言实现一些简单的组合逻辑和时序逻辑,学会使用相关EDA 软件进行VHDL 代码的输入、仿真。
3. 实验方案本实验有三个小实验组成,先分别将方案分别列出:a :用IF 语句设计一个四-十六译码器接口信号的定义如图--1:g1,g2a ,g2b 为片选信号,sel 为输入 编码,y 为译码输出b :用CASE 语句设计一个四-十六译码器 接口定义同样的如图-1:g1,g2a ,g2b 为片选信号,sel 为输入编码,y 为译码输出c :用GENERATE 语句构造一个串行的十六进制计数器先用行为描述设计一个D 触发器,然后用结构描述的方法将四个D 触发器用特定的接法连接起来。
其中clk 、clr 为时钟和清零输入,q 为计数输出。
4.仿真结果(仿真软件:Quartus II 7.2 )a:用IF语句实现的四-十六译码器的仿真结果上图为:片选信号无效的时候的仿真波形,输出为高电平。
上图为:片选信号有效的时候的仿真波形。
b:用CASE语句实现的一个四-十六译码器的仿真结果(直接让片选有效)c:用GENERATE语句构造的串行的十六进制计数器的仿真波形注:当clr为0时对计数结果清零,时钟上升沿计数器加1.5.关键部分代码a:用IF语句设计一个四-十六译码器PROCESS(G1,g2a,g2b,sel)beginif(g1='1'and g2a='0'and g2b='0')thenif(sel="0000")then y<="1111111111111110";elsif(sel="0001")then y<="1111111111111101";elsif(sel="0010")then y<="1111111111111011";elsif(sel="0011")then y<="1111111111110111";elsif(sel="0100")then y<="1111111111101111";elsif(sel="0101")then y<="1111111111011111";elsif(sel="0110")then y<="1111111110111111";elsif(sel="0111")then y<="1111111101111111";elsif(sel="1000")then y<="1111111011111111";elsif(sel="1001")then y<="1111110111111111";elsif(sel="1010")then y<="1111101111111111";elsif(sel="1011")then y<="1111011111111111";elsif(sel="1100")then y<="1110111111111111";elsif(sel="1101")then y<="1101111111111111";elsif(sel="1110")then y<="1011111111111111";elsif(sel="1111")then y<="0111111111111111";else y<="XXXXXXXXXXXXXXXX";end if;else Y<="1111111111111111";end if;end process;b:用CASE语句设计一个四-十六译码器case sel iswhen "0000"=>y<="1111111111111110";when "0001"=>y<="1111111111111101";when "0010"=>y<="1111111111111011";when "0011"=>y<="1111111111110111";when "0100"=>y<="1111111111101111";when "0101"=>y<="1111111111011111";when "0110"=>y<="1111111110111111";when "0111"=>y<="1111111101111111";when "1000"=>y<="1111111011111111";when "1001"=>y<="1111110111111111";when "1010"=>y<="1111101111111111";when "1011"=>y<="1111011111111111";when "1100"=>y<="1110111111111111";when "1101"=>y<="1101111111111111";when "1110"=>y<="1011111111111111";when "1111"=>y<="0111111111111111";when others =>y<="XXXXXXXXXXXXXXXX";end case;c:用GENERATE语句构造一个串行的十六进制计数器architecture count16er of count16 iscomponent dfip isport(d:in std_logic;clr:in std_logic;ck:in std_logic;q:out std_logic;qb:out std_logic);end component;signal clk_in:std_logic_vector(4 downto 0);beginclk_in(0)<=clk;G1:for i in 0 to 3 generateU0:dfip port map(d=>clk_in(i+1),ck=>clk_in(i),clr=>clr,q=>q(i),qb=>clk_in(i+1));end generate;end count16er;实验二1. 实验内容1. 设计一个两位二进制的加法器2. 设计一个两位的BCD 计数器2. 实验目的会用VHDL 语言的多种描述方式实现典型的组合逻辑和时序逻辑,学会使用相关EDA 软件进行VHDL 代码的输入、仿真。
课程设计报告实践课题: 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 输二、实现功能说明 2.1 mv Rx,Ry实现的功能:将寄存器Rx 的值赋给寄存器Ry (以mv R0, R5为例)(1 )计数器为“00”时,指令寄存器的置位控制信号输入端IRin=1有效,将DIN 输入的数据的高9位锁存。
置位的控制信号如图3加粗黑线所示。
图3(2)计数器为“01”时,首先控制单元根据设计器为“00”时输入的指令,向复用器发出选通控制信号,复用器根据该控制信号让R5的值输出到总线上,然后控制单元控制寄存器R0将总线上的值锁存,完成整个寄存器对寄存器的赋值过程。
课程设计报告实践课题: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复用器根据控制单元的控制信号将指定的输入数据输出到总线上。