北理工VHDL实验报告
VHDL期末实验报告
班级:2009211411 学号:09211999 姓名:陈东东2-4线译码器功能测试(用74LS139芯片)1.实验目的:利用译码器把译码器输入的高低电平的信号翻译成一个对应的状态信号的逻辑功能,把输入的2位二进制信号转换为4个代表代码原意的状态信号。
2.实验内容和实验原理:利用74LS139芯片实现2-4线译码器功能,即2个信号输入,译码出4个输出信号。
3.程序框图:4.测试目的:实现2-4线译码功能。
5.测试结果:结果符合要求,达到实验目的。
6.波形仿真图:7.实验中遇见的问题及解决方法:实验比较简单,无问题出现。
异步二进制加法计数器(74LS73)1.实验目的:利用异步二进制加法计数器芯片实现异步二进制加法运算。
2.实验内容和实验原理:异步计数器就是指构成计数器的低位计数触发器的输出作为相邻计数触发器的时钟,逐级串行连接起来的一类计数器。
异步计数器的触发器的翻转不是在时钟脉冲到来的时候同时发生的,而是具有一定的翻转顺序。
74LS73芯片就是利用异步原理连接而成的异步二进制加法计数器,从而实现二进制加法计算。
3.程序框图:4.测试目的: 通过脉冲信号的输入,实现二进制加法运算。
5.测试结果:如实验预期,二进制加法运算得以实现。
6.波形仿真图:其中clk0为脉冲输入信号,Q3,Q2,Q1,Q0分别为二进制加法的从高到低的输出四位。
7.实验中遇见的问题及解决方法:原理图连线不正确,导致仿真结果有误,后来根据实验原理从新画图得出正确的仿真图。
一位全加器1.实验目的:利用全加器的运算公式,先利用芯片连接成半加器,再通过半加器连接成全加器。
2.实验内容和实验原理: 一位半加器的构成:A+B=SO+CO,SO=AB+ABCO=AB,3.程序框图:半加器的程序框图:a和b分别为两个一位加数,so为ab相加之和,co为向高位的进位全加器的程序框图:ain和bin为两个一位加数,cin为低位的进位,cout为向高位的进位,sum为相加之和。
VHDL实验报告实验一
实验一:3位比较器一、实验目的1、熟悉Xilinx ISE/ModelSim软件,掌握软件的VHDL程序输入、程序编译和程序仿真操作;2、学习利用VHDL语言设计三位比较器控制电路程序;3、根据三位比较器的原理设计VHDL程序,使得a,b为三位信息的输入端口,若a>b 则c=1。
否则c=0;二、VHDL源程序:●Compare3源代码:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity compare3 isport (a:in std_logic_vector(2 downto 0);b:in std_logic_vector(2 downto 0);c:out std_logic);end compare3;architecture Behavioral of compare3 isbeginprocess (a,b)beginif(a>=b)thenc<='1';elsec<='0';end if;end process;end Behavioral;●三位比较器testbench代码:LIBRARY ieee;USE ieee.std_logic_1164.ALL;-- Uncomment the following library declaration if using-- arithmetic functions with Signed or Unsigned values--USE ieee.numeric_std.ALL;ENTITY tbench1 ISEND tbench1;ARCHITECTURE behavior OF tbench1 IS-- Component Declaration for the Unit Under Test (UUT)COMPONENT compare3PORT(a : IN std_logic_vector(2 downto 0);b : IN std_logic_vector(2 downto 0);c : OUT std_logic);END COMPONENT;--Inputssignal a : std_logic_vector(2 downto 0) := "000";signal b : std_logic_vector(2 downto 0) := "000";--Outputssignal c : std_logic;-- No clocks detected in port list. Replace <clock> below with -- appropriate port nameBEGIN-- Instantiate the Unit Under Test (UUT)uut: compare3 PORT MAP (a => a,b => b,c => c);-- Clock process definitions-- Stimulus processstim_proc: processbegin-- hold reset state for 100 ns.wait for 10 ns;a <= "010";b <= "001";wait for 10 ns;a <= "110";b <= "111";wait for 10 ns;a <= "011";b <= "111";wait for 10 ns;a <= "110";b <= "101";wait for 10 ns;a <= "110";b <= "000";wait for 10 ns;a <= "100";b <= "101";wait for 1000 ns;-- insert stimulus herewait;end process;END;三、实验结果与分析●实验仿真波形图●实验结果分析由波形图观察可得该VHDLd代码实现了比较的功能,在输入a,b值大小不同的情况下,成许进行比较均能的出结果并给C赋值,当a>b,c=1, 反之c=0。
VHDL多路波形发生器实验报告
VHDL多路波形发生器实验报告一、基本要求:1、对输入时钟信号进行分频,实现三路互差120°的信号。
2、实现输出信号的占空比控制clk: 输入时钟信号reset: 同步复位信号(低电平有效)div: 输入分频控制信号(注意:6n分频)ctrl: 占空比控制信号ctrl=1时, 占空比为1:1ctrl=2时, 占空比为1:2ctrl=3时, 占空比为2:1A,B,C: 三路输出信号二、设计思路:1.实验为6n分频,用变量s来控制,0~6n-1这六个数,当时钟信号每来一个上升沿时加1,当为6n-1时清零;2.定义N为常量,通过改变N的值改变分频;3.ctrl值不同时,占空比不同,用case语句控制,ctrl分别为01,10,11和其他;4.具体波形的实现用if语句,当占空比为1时,A输出信号在s=0和s=3*n时翻转,B输出信号在s=2*n和s=5*n时翻转,C输出信号在s=4*n和s=n的时候翻转。
当占空比为1:2时,A输出信号在s=0和s=2*n时翻转,B输出信号在s=2*n和s=4*n时翻转,C输出信号在s=4*n和s=0的时候翻转。
当占空比为2:1时,A输出信号在s=0和s=4*n时翻转,B输出信号在s=2*n和s=0时翻转,C输出信号在s=4*n和s=2*n的时候翻转;5.在占空比为1和1:2时,C输出信号应比B慢120度,但是实际输出超前B,所以要对C输出进行反相;同理,在占空比为2:1时,要对B、C分别进行反向。
6.用if语句判断是否复位,若非,则执行case语句。
三、流程图:四、源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity top isport(clk,reset:in std_logic;ctrl:in std_logic_vector(1 downto 0);A,B,C:out std_logic);end top ;architecture rel of top issignal temp1,temp2,temp3,temp4,temp5 : std_logic; constant N: integer:=1;signal s:integer range 0 to 6*N-1 ;beginprocess(clk,reset,ctrl)beginif (reset='0') thentemp1<='0';temp2<='0';temp3<='0';temp4<='0';temp5<='0';s<=0;elsecase ctrl iswhen "01"=>if (clk 'event and clk='1') thenif s=6*N-1 thens<=0;elses <= s+1;end if;if s=0 thentemp1<= not temp1;end if;if s=3*N thentemp1<= not temp1;end if;if s=2*N thentemp2<= not temp2;end if;if s=5*N thentemp2<= not temp2;end if;if s=4*N thentemp4<= not temp4;end if;if s=N thentemp4<= not temp4;end if;end if;temp3<= not temp4;when "10"=>if (clk 'event and clk='1') thenif s=6*N-1 thens<=0;elses <= s+1;end if;if s=0 thentemp1<= not temp1;end if;if s=2*N thentemp1<= not temp1;end if;if s=2*N thentemp2<= not temp2;end if;if s=4*N thentemp2<= not temp2;end if;if s=4*N thentemp4<= not temp4;end if;if s=0 thentemp4<= not temp4;end if;end if;temp3<= not temp4;when "11"=>if (clk 'event and clk='1') thenif s=6*N-1 thens<=0;elses <= s+1;end if;if s=0 thentemp1<= not temp1;end if;if s=4*N thentemp1<= not temp1;end if;if s=2*N thentemp5<= not temp5;end if;if s=0 thentemp5<= not temp5;end if;if s=4*N thentemp4<= not temp4;end if;if s=2*N thentemp4<= not temp4;end if;end if;temp2<= not temp5;temp3<= not temp4;when others=>temp1<='0';temp2<='0';temp3<='0';end case;end if;end process;A<=temp1;B<=temp2;C<=temp3;end rel;五、仿真波形:整体波形:当ctrl=1 当ctrl=2 当ctrl=3复位当ctrl=其他:六、实验过程遇到的问题:在程序设计时,开始不知该怎样使A,B,C互差120度,开始是想通过定义一个变量,每来一个上升沿加1,从0开始,A路信号除3n 取余为0则翻转,B路信号除3n取余为1则翻转,C路信号除3n取余为2则翻转,我觉得这样的想法应该没有错,可是实际却调不出来,可能是某处逻辑有问题,后来就模仿老师给的6分频程序,设计了现在的程序。
vhdl实验报告
vhdl实验报告VHDL实验报告引言:VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,广泛应用于数字电路设计和仿真。
本篇实验报告将介绍我在VHDL实验中的学习和实践经验,包括实验目的、实验过程、实验结果以及对VHDL的理解和展望。
一、实验目的VHDL实验的主要目的是让我们掌握VHDL语言的基本语法和使用方法,能够利用VHDL描述数字电路,并通过仿真和综合工具进行验证和实现。
通过这些实验,我们可以深入了解数字电路的原理和设计方法,提高我们的逻辑设计能力和工程实践能力。
二、实验过程在实验过程中,我们首先学习了VHDL的基本语法,包括实体声明、端口声明、信号声明等。
然后,我们通过实例学习了VHDL的建模方法,包括组合逻辑电路的建模和时序逻辑电路的建模。
在组合逻辑电路的建模中,我们学习了使用逻辑运算符和条件语句描述电路的功能;在时序逻辑电路的建模中,我们学习了使用过程语句和时钟信号描述电路的状态转换。
在学习了VHDL的基础知识后,我们开始进行实验设计。
我们选择了一个简单的数字电路,如4位加法器,来进行实验验证。
首先,我们通过VHDL语言描述了加法器的功能和结构,包括输入端口、输出端口和中间信号。
然后,我们使用仿真工具进行了功能仿真,验证了加法器的正确性。
接着,我们使用综合工具将VHDL代码综合成门级电路,并进行了时序仿真和时序优化,验证了加法器的时序正确性和性能。
三、实验结果通过实验,我们成功地实现了4位加法器的功能,并验证了其正确性和性能。
在功能仿真中,我们输入了不同的测试数据,观察了输出结果,发现加法器能够正确地进行加法运算,并得到了正确的结果。
在时序仿真中,我们观察了电路的时序行为,包括输入信号的变化、输出信号的响应和中间信号的传播延迟等,发现加法器能够在时序上满足要求,并且具有较好的性能。
vhdl设计实验报告
vhdl设计实验报告VHDL设计实验报告引言VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,广泛应用于数字电路设计和验证。
本实验旨在通过设计一个简单的电路来熟悉VHDL语言的基本语法和设计流程。
一、实验背景数字电路是现代电子系统的基础,而VHDL则是描述和设计数字电路的重要工具。
VHDL可以帮助工程师们以一种形式化的语言来描述电路的功能和结构,从而实现电路的模拟和验证。
二、实验目的本实验的目的是通过使用VHDL语言设计一个简单的电路,加深对VHDL语言的理解,并掌握基本的电路设计流程。
三、实验步骤1. 确定电路功能在设计电路之前,首先需要明确电路的功能。
本实验中,我们选择设计一个4位加法器电路。
2. 设计电路结构根据电路功能的要求,设计电路的结构。
在本实验中,我们需要设计一个4位加法器,因此需要使用4个输入端口和一个输出端口。
3. 编写VHDL代码使用VHDL语言编写电路的描述代码。
在代码中,需要定义输入和输出端口的类型和位宽,并实现电路的功能。
4. 进行仿真使用仿真工具对设计的电路进行仿真,以验证电路的功能是否符合预期。
通过输入不同的测试数据,观察输出是否正确。
5. 下载到FPGA开发板将设计好的电路代码下载到FPGA开发板上进行验证。
通过连接输入信号和观察输出信号,验证电路在实际硬件上的运行情况。
四、实验结果与分析经过仿真和实际验证,我们设计的4位加法器电路在功能上符合预期。
输入不同的数据进行加法运算时,输出结果都正确。
五、实验总结通过本次实验,我们深入了解了VHDL语言的基本语法和设计流程。
通过设计一个简单的电路,我们掌握了VHDL的应用方法,并通过仿真和实际验证,加深了对电路设计的理解。
六、实验心得本实验让我对VHDL语言有了更深入的认识。
通过实际操作,我更加熟悉了VHDL的编写和仿真流程。
北理VHDL硬件描述语言实验(四次全)
clk_gen:PROCESS BEGIN clk<='0'; WAIT FOR clk_period/2; clk<='1'; WAIT FOR clk_period/2; END PROCESS; d_gen:PROCESS BEGIN d<='0'; WAIT FOR 100 ns; d<='1'; WAIT FOR 100 ns; END PROCESS; rst_gen:PROCESS BEGIN rst<='1'; WAIT FOR 150 ns; rst<='0'; WAIT FOR 150 ns; rst<='1'; WAIT FOR 150 ns; WAIT; END PROCESS; END behave;
1. linux 基本操作 · 登陆后,桌面右键“open terminal”,输入命令“vsim”打开 Modelsim 软件; · 右键“open terminal”,输入命令“gftp”,出现窗口,进行登录连接主机向 ftp 上传文 件。 2. Modelsim 基本操作流程 建立工程 创建文件 编写程序 保存并编译 仿真 3.设计编写 D 触发器
四、仿真结果及说明
实验仿真的图形如下
从激励文件可以看出,时钟是周期为 50ns 的方波,而复位端 rst 的信号设置为前 150ns 为高电平,接下来 150ns 为低电平,之后均为高电平。 D 触发器的 VHDL 语言中明确指出
也就是说,复位信号 rst 高有效,在激励文件中,rst=’0’时,复位端无效,D 触发器正常 工作。 在仿真图形中可以看到,在复位端无效的 150ns 中,每一次时钟的上升沿到来,输出 q
VHDL与数字电路设计实验报告
VHDL与数字电路设计实验报告引言本实验旨在通过使用VHDL编程语言和数字电路设计技术,实现特定功能的电路设计。
本文档将对实验的步骤、设计原理和结果进行详细描述。
实验步骤1. 步骤一:熟悉VHDL编程语言在实验开始之前,团队成员对VHDL编程语言进行了研究和熟悉。
我们了解了VHDL的基本语法、数据类型和结构,并获得了对VHDL设计原理的初步理解。
2. 步骤二:设计功能电路在本实验中,我们选择了一个特定的功能电路进行设计。
我们首先进行了功能需求分析,并根据需求确定了电路的输入输出信号以及主要的逻辑运算。
然后,我们使用VHDL编程语言将电路的逻辑运算实现为代码,并进行了仿真和测试。
3. 步骤三:电路仿真和验证为了验证我们设计的电路功能的正确性,我们使用了VHDL仿真工具进行了电路的仿真和验证。
我们根据输入信号的不同组合,观察输出信号的变化,并与我们预期的结果进行比较。
通过这一步骤,我们确认了我们设计的电路能够按照预期工作。
4. 步骤四:电路实现和测试在确认电路的设计和仿真结果无误之后,我们进一步将电路实现到实际的数字电路平台上,并进行了硬件测试。
我们使用实际的输入信号来测试电路的性能和稳定性,并对输出信号进行观察和分析。
通过这一步骤,我们验证了电路在实际环境中的可行性。
设计原理我们设计的电路基于特定的功能需求,采用了经典的数字电路设计原理。
通过使用VHDL编程语言,我们将电路的逻辑运算实现为逻辑门和触发器的组合。
通过将输入信号连接到适当的逻辑门和触发器,我们实现了所需的功能。
结果与分析经过实验步骤的完成,我们成功地设计和实现了一个具有特定功能的数字电路。
在仿真测试和实际测试中,电路都表现出了良好的性能和稳定性。
根据结果的分析,我们验证了电路的设计原理和逻辑的正确性。
结论本实验通过使用VHDL编程语言和数字电路设计技术,成功地实现了一个具有特定功能的电路设计。
我们的实验结果表明,VHDL和数字电路设计技术在电路设计领域具有重要的应用价值。
vhdl实验报告_16乘16点阵_列选_显示
综合实践总结报告综合实践名称: EDA技术与实践综合实践地点、时间一.题目功能分析和设计实验的要求有如下三点:1.用16*16点阵的发光二极管显示字符;2.可显示字符为0~9的数字字符与A~F英文字母的大写;3.输入为四位二进制矢量;按照要求可知,LED点阵模块,共由16×16=256个LED发光二极管组成,如何在该点阵模块上显示数字和字母是本实验的关键。
先将要显示的每一幅图像画在一个16×16共256个小方格的矩形框中,再在有笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了与这个汉字所对应的二进制数据在该矩形框上的分布以数字8为例,点阵分布为:0000000000000000000000000000000000011111111110000001111111111000000110000001100000011000000110000001100000011000000111111111100000011111111110000001100000011000000110000001100000011000000110000001111111111000000111111111100000000000000000000000000000000000考虑到实际物理实验平台上点阵发光二极管的原理,以下为16×16点阵LED外观图,只要其对应的X、Y轴顺向偏压,即可使LED 发亮。
例如如果想使左上角LED点亮,则Y0=1,X0=0即可。
所以我采用行列扫描的方法,用四位二进制数做列选信号(总共16列),如选中第一列,则扫描第一列之中哪些行是高电平(1),哪些行是低电平(0);为高电平的则点亮,为低电平的不亮。
(列信号都接地)。
如此,列选信号由“0000”变到“1111”时,16列扫描完毕,一个字也就出来了,列选信号重新由“0000”开始扫描。
注意扫描频率必须要足够快,才能保证显示一个数字或字母时所有灯在肉眼看来是同时在闪烁的。
VHDL实验报告(1)
VHDL 实验报告******班级:电子0701学号:************实验一组合逻辑电路设计一实验目的:1. 熟悉mux+pluxII软件,可以进行新文件的编辑和文件的修改。
2. 掌握门电路VHDL语言程序设计方法。
3. 掌握选择器VHDL语言程序设计方法。
4. 掌握加法器VHDL语言程序设计方法。
5. 熟悉VHDL编程的基本方法。
二实验设备:1.计算机2.Max+PlusII软件三实验原理及内容:1 二输入与门(1)实验原理二输入与门是我们数字电路中的一个基础逻辑门电路,是最基本的逻辑门电路之一,也是最简单的逻辑门之一。
它能实现两个输入端的相与,一般有三个端口。
二输入与门的表达式是:Y=ab二输入与门的逻辑符号如图(1)所示,真值表如表(1)所示。
图(1)与门逻辑符号表(1)与门真值表(2)实验内容a.在mux+pluxII文本编辑环境下,打开新文本,编写两输入与门VHDL语言源程序,程序设计如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY and2 ISPORT(a,b: IN STD_LOGIC;Y: OUT STD_LOGIC);END and2;ARCHITECTURE behave OF and2 ISBEGINY <= a and b;END behave;b.对源程序进行编译,按照提示进行修改,直至编译通过。
c.对编译程序进行仿真,分析并记录仿真波形,其仿真波形图如图(2)所示。
图(2)二输入与门仿真图d.在自己的目录下保存相应的源文件、波形文件。
2 四选一选择器(1)实验原理四选一选择器如图(3)所示,真值表如表(2)所示。
图(3)mux4管脚图表(2)mux4真值表(2)实验内容a.在mux+plusII文本编辑环境下,打开新文件,编辑四选一VHDL源程序文件,其程序设计如下:LIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT(A: IN STD_LOGIC_VECTOR (1 DOWNTO 0);D0,D1,D2,D3:IN STD_LOGIC;G:IN STD_LOGIC;Y: OUT STD_LOGIC);END mux4;ARCHITECTURE dataflow OF mux4 ISBEGINPROCESS (A,D0,D1,D2,D3,G)BEGINIF (G ='0') THENIF (A="00")THEN Y <= D0;ELSIF(A="01")THEN Y <= D1;ELSIF(A="10")THEN Y <= D2;ELSE Y <= D3;END IF;ELSE Y <='0';END IF;END PROCESS;END dataflow;b.对源程序进行编译,按照提示进行修改,直到编译通过。
VHDL实验报告
年月日VHDL实验报告学院专业学号姓名实验1 译码器设计一、实验原理1、译码器是数字系统中常用的组合逻辑电路,常用于地址译码。
74LS138是最常用的一种小规模集成电路,它有3个二进制输入端和8个译码输出端。
表1.1是它的真值表。
表1.1 3-8 译码器真值表2、普通的LED数码管由7段和一个点组成,使用它进行显示,需要译码驱动。
本实验实现一个七段LED显示译码电路。
为了实验方便,在译码之前加入一个4位二进制加法计数器,当低频率的脉冲信号输入计数器后,由7段译码器将计数值译为对应的十进制码,并由数码管显示出来。
图1.1为此电路的原理图。
图1.1 7段LED译码显示电路二、实验内容1、设计一个4-16译码器。
2、设计轮流显示表1.2所示字符的程序。
表1.2 字母显示真值表3、通过仿真,观察设计的正确性。
4、下载、验证设计的正确性。
三、源程序1、4-16译码器。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY decode ISPORT( d0, d1, d2,d3, s1 ,s2 ,s3:IN STD_LOGIC;Y : OUT STD_LOGIC_VECTOR ( 15 DOWNTO 0 ) );END decode;ARCHITECTURE rtl OF decode ISSIGNAL indata : STD_LOGIC_VECTOR ( 3 DOWNTO 0 );BEGINIndata <= d3 & d2 & d1 & d0 ;PROCESS ( indata, s1, s2, s3 )BEGINIF (s1 ='1' AND s2='0' AND s3 = '0' ) THENCASE indata 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=> NULL;END CASE;ELSEY <= "1111111111111111" ;END IF;END PROCESS;END rtl;2、轮流显示表1.2所示字符的程序。
VHDL实验报告
VHDL实验报告5090309160 庄炜旭实验三. 4位可逆计数器,4位可逆二进制代码-格雷码转换器设计一.实验目的学习时序电路的设计,仿真和硬件测试,进一步熟悉VHDL设计技术1. 学习4位可逆计数器的设计2. 学习4位可逆二进制代码-格雷码转换器设计二.实验内容设计4位可逆计数器,及4位可逆二进制代码-格雷码转换器,并仿真,下载。
[具体要求]1.4位可逆计数器a)使用CLOCK_50作为输入时钟,其频率为50MHz(对于频率大于50Hz的闪烁,人眼会看到连续的光),因而,对其进行225的分频后,再用于时钟控制。
(可利用实验一)b)使用拨码开关SW17作为模式控制,置‘1’时为加法计数器,置‘0’时为减法计数器,同时使用LEDR17显示SW17的值。
c)使用KEY3作为异步复位开关(按下时为0,不按为1),当为加法计数器时,置“0000”,当为减法计数器时,置“1111”。
d)使用LEDR3,LEDR2,LEDR1,LEDR0作为转换后的输出结果显示,LEDR3为高位,LEDR0为低位。
2.4位可逆二进制代码――格雷码转换器a)使用拨码开关SW17作为模式控制,置‘1’时为二进制代码―>格雷码转换,置‘0’时为格雷码―>二进制代码,同时使用LEDR17显示SW17的值。
b)使用拨码开关SW3, SW2, SW1, SW0作为输入的被转换数,SW3为高位,SW0为低位。
c)使用LEDR3,LEDR2,LEDR1,LEDR0作为转换后的输出结果显示,LEDR3为高位,LEDR0为低位。
三.管脚设定SW[0]PIN_N25SW[1]PIN_N26SW[2]PIN_P25SW[3] PIN_AE14SW[17] PIN_V2LEDR[0] PIN_AE23LEDR[1] PIN_AF23LEDR[2] PIN_AB21LEDR[3] PIN_AC22LEDR[17] PIN_AD12KEY[3] PIN_W26CLOCK_50 PIN_N2四.相关知识二进制代码与格雷码相互转换格雷码(Gray Code,简称G码)是典型的循环码,它是由二进制码(Binary,简称 B 码)导出的。
数字电路设计实验vhdl语言实验报告
实验一秒表计数器的设计实验目的:本实验通过设计四种频率可选的数字时钟系统, 以达到熟悉VHDL 语言编程语法、设计思路和熟练掌握Quartus II 开发软件的目的。
二、实验内容:该数字时钟的显示格式如下所示: HH: MM: SS, 其中HH表示时计数的两位, MM表示分计数的两位, SS表示秒计数的两位。
本系统输入信号分别为复位信号rst(高有效)、sel(两位信号, 分别可以选择2分频、4分频8分频和16分频)、clk_in(时钟信号)、8位时输出、8位分输出、8位秒输出(其中高4为表示对应的高半字节、低4位表示的低半字节, 譬如当时间为08:59:30时, 时输出为”0000_1000”,分输出为”0101_1001”,秒输出为”0011_0000”)。
该时钟系统可以通过Sel信号时钟运行的快慢。
三、实验流程:通过对实验内容的分析: 可以考虑时钟系统的可由三部分组成: 1.分频器:分频器为时序电路并且通过《数字电路》理论课程的学习可知由计数器来实现, 同学可以回想一下实验1中是如何实现计数器电路的设计), 该模块主要产生2.4.8、16分频的时钟信号;2.多路选择器:在VHDL中多路选择器为组合逻辑, 可以有多种实现方法, 在这里主要选用了case语句来实现。
该模块的作用是从分频器中根据Sel信号选择适当的时钟信号;3.时钟控制器:该模块比较复杂, 主要实现功能是实现一个24小时的计时。
当时间为00:00:59的时候下一个时钟到来时状态的跳变为00:01:00, 计时中多数计数为加1操作, 有几个特殊状态需要重点考虑:当时间产生分进数时, 譬如上例。
当时间产生时进数时, 譬如00:01:59时刻的下一个状态为00:02:00;当时间产生时进数时, 譬如00:59:59是个的下一个状态为01:00:00。
当时间产生天进数时, 譬如23:59:59的下一个状态为00:00:00。
四、仿真要求:1、本次试验的结果全部采用功能仿真分析:在结果图中能够看到让复位信号rst为有效的情况下, 所有的输出为00:00:00;2.当频率选择输出分别为”00”、”01”、”10”、”11”时秒为的进数分别包含2.4.8、16倍clk_in的时钟周期;3.可以看到完整的计时周期00:00:00->23:59:59->00:00:00。
VHDL数字电路课程实验报告
VHDL数字电路课程实验报告实验一8分频器一、实验要求:分别用信号量和变量实现八分频器二、实验过程:1、代码:8分频器vhdlibrary ieee;use ieee.std_logic_1164.all;entity freq_divider isport(clk: in std_logic;out1, out2: buffer bit);end freq_divider;architecture example of freq_divider issignal count1: integer range 0 to 7;beginprocess(clk)variable count2: integer range 0 to 7;beginif(clk'event and clk='1') thencount1<=count1+1;count2:=count2+1;if(count1=3) thenout1<=not out1;count1<=0;end if;if(count2=4) thenout2<=not out2;count2:=0;end if;end if;end process;end example;八分频器tbLIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY fd_tb isEND fd_tb;architecture behavior of fd_tb iscomponent freq_dividerport(clk:IN STD_LOGIC;out1, out2: buffer bit);end component;signal clk:std_logic;signal out1,out2:bit;beginu1: freq_divider port map(clk,out1,out2);processbeginclk<='0';wait for 50 ns;loopclk<=not clk;wait for 25 ns;end loop;end process;end behavior;2、结果图:实验二实现例8.6一、实验要求:电路只有一个输入时钟信号,输出信号在适中的两个边沿都会发生变化二、实验内容:1、代码信号发生器vhdENTITY signal_gen ISPORT (clk: IN BIT;outp: OUT BIT);END signal_gen;ARCHITECTURE fsm OF signal_gen ISTYPE state IS (one, two, three);SIGNAL pr_state1, nx_state1: state;SIGNAL pr_state2, nx_state2: state;SIGNAL out1, out2: BIT;BEGINPROCESS(clk)BEGINIF (clk'EVENT AND clk = '1') THENpr_state1 <= nx_state1;END IF;END PROCESS;PROCESS (clk)BEGINIF (clk'EVENT AND clk = '0') THENpr_state2 <= nx_state2;END IF;END PROCESS;PROCESS (pr_state1)BEGINCASE pr_state1 ISWHEN one =>out1 <= '0';nx_state1 <= two;WHEN two =>out1 <= '1';nx_state1 <= three;WHEN three =>out1 <= '1';nx_state1 <= one;END CASE;END PROCESS;PROCESS (pr_state2)BEGINCASE pr_state2 ISWHEN one =>out2 <= '1';nx_state2 <= two;WHEN two =>out2 <= '0';nx_state2 <= three;WHEN three =>out2 <= '1';nx_state2 <= one;END CASE;END PROCESS;outp <= out1 AND out2;END fsm;信号发生器tbentity tb_fsm isend tb_fsm;architecture behavior of tb_fsm is component signal_gen isport( clk: in bit;outp: out bit);end component;signal clk,outp:bit;beginu1: signal_gen port map(clk,outp); processbeginclk<='0';wait for 20 ns;loopclk<=not clk;wait for 10 ns;end loop;end process;end behavior;2、结果图实验三常数比较器一、实验要求常数比较器,用于比较的变量位宽应大于等于常数二、实验内容1、代码常数比较器vhdLIBRARY ieee;USE ieee.std_logic_1164.all;entity compare isport(b: in integer range 0 to 15;x1,x2,x3: out std_logic);end compare;architecture compare of compare isconstant a: integer:=10;beginx1<='1' when a>b else '0';x2<='1' when a=b else '0';x3<='1' when a<b else '0';end compare;常数比较器tbLIBRARY ieee;USE ieee.std_logic_1164.all;entity tb_compare isend tb_compare;architecture behavior of tb_compare iscomponent compareport(b: in integer range 0 to 15;x1,x2,x3: out std_logic);end component;signal b: integer;signal x1,x2,x3: std_logic;beginu1: compare port map(b, x1,x2,x3);processbeginb<=5; wait for 10 ns;b<=8; wait for 10 ns;b<=10; wait for 10 ns;b<=13; wait for 10 ns; b<=10; wait for 10 ns; b<=3; wait for 10 ns; end process;end behavior;2、结果图实验四序列检测器一、实验要求序列检测’1001’弱检测到,输出‘1‘,否则输出’0‘二、实验内容1、状态图2、代码序列检测器vhdlibrary ieee;use ieee.std_logic_1164.all;entity string_detector isport(datain,clk: in bit;q: out bit);end string_detector;architecture sd of string_detector istype state is (zero, one, two, three, four);signal pr_state, nx_state: state;beginprocess(clk)beginif(clk'event and clk='1') thenpr_state<=nx_state;end if;end process;process(datain, pr_state)begincase pr_state iswhen zero=>q<='0';if(datain='1') then nx_state<=one;else nx_state<=zero;end if;when one=>q<='0';if(datain='0') then nx_state<=two;else nx_state<=zero;end if;when two=>q<='0';if(datain='0') then nx_state<=three;else nx_state<=zero;end if;when three=>q<='0';if(datain='1') then nx_state<=four;else nx_state<=zero;end if;when four=>q<='1';nx_state<=zero;end case;end process;end sd;序列检测器tb------------------------------------------------------------------ library ieee;use ieee.std_logic_1164.all;------------------------------------------------------------------ entity testBench isend testBench;------------------------------------------------------------------architecture test of testBench iscomponent string_detector isport(datain,clk: in bit;q: out bit);end component;signal datain,clk:bit;signal q:bit;beginSD: string_detector port map(datain,clk,q);processbeginfor i in 0 to 100 loopclk<='0';wait for 10 ns;clk<='1';wait for 10 ns;end loop;end process;processbegindin<='1';wait for 20ns;din<='0';wait for 20ns;din<='0';wait for 20ns;din<='0';wait for 20ns;din<='1';wait for 20ns;din<='0';wait for 20ns;din<='0';wait for 20ns;din<='1';wait for 20ns;din<='0';wait for 20ns;din<='1';wait for 20ns;din<='0';wait for 20ns;end process;end test;3、结果图。
vhdl全加器实验报告
vhdl全加器实验报告VHDL全加器实验报告引言:在数字电路设计领域,全加器是一种基本的逻辑电路。
它用于将两个二进制数相加,并产生相应的和与进位输出。
在本次实验中,我们将使用VHDL语言设计和模拟一个全加器电路,并通过实验验证其功能和正确性。
一、实验目的本实验的目的是通过设计和模拟一个VHDL全加器电路,加深对数字电路和VHDL语言的理解。
具体目标如下:1. 学习并掌握全加器的原理和电路结构;2. 掌握VHDL语言的基本语法和使用方法;3. 设计和模拟一个全加器电路,并验证其正确性;4. 分析和评估全加器电路的性能和优化方法。
二、全加器的原理和电路结构全加器是一种用于二进制加法的逻辑电路。
它接受两个输入位和一个进位输入位,并产生一个和输出位和一个进位输出位。
全加器的电路结构通常由两个半加器和一个或门组成。
半加器用于计算两个输入位的和,而或门用于计算进位输出位。
三、VHDL语言的基本语法和使用方法VHDL是一种硬件描述语言,用于描述和模拟数字电路。
它具有丰富的语法和功能,可以方便地进行电路设计和仿真。
VHDL语言的基本语法包括实体声明、端口声明、信号声明、过程声明等。
在本次实验中,我们将使用VHDL语言来描述和模拟全加器电路。
四、全加器电路的设计和模拟在本次实验中,我们将使用VHDL语言设计和模拟一个4位全加器电路。
首先,我们需要定义输入和输出信号,并声明全加器的实体和端口。
接下来,我们可以使用VHDL语言描述全加器的逻辑电路,包括半加器和或门的连接关系。
最后,我们可以使用仿真工具对全加器电路进行模拟,并观察输出结果。
五、全加器电路的验证和性能评估在模拟过程中,我们可以通过输入不同的二进制数来验证全加器电路的正确性。
我们可以逐个比较输入和输出的二进制数,并检查和进位输出是否与预期结果一致。
如果全加器电路能够正确地计算和输出结果,则说明设计和模拟过程是正确的。
此外,我们还可以评估全加器电路的性能和优化方法。
一位全加器_可编程逻辑器件VHDL实验报告
1.一位全加器实验报告一、实验目的要求学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。
设计程序独立完成全加器的仿真。
全加器由两个半加器组合而成,原理类似。
半加器不考虑低位进位,但有高位进位;全加器要考虑低位的进位且该进位和求和的二进制相加,可能获得更高的进位。
二、设计方法与原理图图1是一个一位二进制全加器电路图,由图1所示,由两个半加器和一个或门构成一个一位二进制全加器;ain,bin为全加器的输入端,cin为全加器的低位进位,sum是全加器的全加和,cout是全加器的全加进位端;从而实现一位二进制全加器。
(图1)一位二进制全加器原理图三、实验内容按照教材上的步骤,在max plus II上进行编辑、编译、综合、适配、仿真。
说明例中各语句的作用,详细描述示例的功能特点,给出其所有信号的时序仿真波形。
四、源程序library ieee;use ieee.std_logic_1164.all;entity full_adder isport(a,b,cin:in std_logic;cout,sum:out std_logic);end entity full_adder;architecture fd1 of full_adder iscomponent h_adderport(a,b:in std_logic;co,so:out std_logic);end component;component or2aport(a,b:in std_logic;c:out std_logic);end component;signal d,e,f:std_logic;beginu1:h_adder port map(a=>ain,b=>bin,co=>d,so=>e); u2:h_adder port map(a=>e,b=>cin,co=>f,so=>sum); u3:or2a port map(a=>d,b=>f,c=>cout);end fd1;五过程性截图六、仿真结果(图2)一位二进制全加器仿真结果七、分析结果与总结由图2,本实验的目标已达成,及通过编写VHDL语言实现一个一位二进制全加器。
vhdl计数器实验报告
vhdl计数器实验报告《VHDL计数器实验报告》摘要:本实验利用VHDL语言设计了一个简单的计数器电路,并通过FPGA实现了该计数器。
实验结果表明,VHDL计数器能够准确地实现计数功能,具有较高的稳定性和可靠性。
引言:计数器是数字电路中常见的一种基本电路,用于实现对输入信号的计数和统计。
在本次实验中,我们利用VHDL语言设计了一个简单的计数器电路,并通过FPGA实现了该计数器。
本实验旨在通过实际操作和观察,加深对VHDL语言和计数器电路的理解,提高实验者的实际动手能力和问题解决能力。
实验内容:1. VHDL语言设计计数器电路2. 在FPGA上实现计数器电路3. 调试和测试计数器电路实验步骤:1. 设计计数器电路的VHDL代码,包括计数器的输入输出端口、计数器的计数规则和状态转换规则等。
2. 将VHDL代码综合成逻辑门电路,并下载到FPGA开发板上。
3. 运行FPGA开发板,观察计数器电路的工作情况,调试和测试计数器电路。
实验结果:经过实验,我们成功设计了一个简单的4位二进制计数器,能够准确地实现计数功能。
在FPGA开发板上实现该计数器电路后,我们观察到计数器能够按照预期的规则进行计数,并且在每个计数值上能够稳定地输出正确的结果。
在不同的输入条件下,计数器电路都能够正常工作,具有较高的稳定性和可靠性。
结论:通过本次实验,我们深入了解了VHDL语言的基本语法和计数器电路的设计原理,掌握了VHDL语言设计数字电路的方法和技巧。
同时,我们通过实际操作和观察,加深了对计数器电路的理解,提高了实际动手能力和问题解决能力。
本次实验取得了良好的实验效果,为今后的数字电路实验和项目设计奠定了良好的基础。
VHDL实验报告
VHDL练习一1、七段译码管设计流程:七段译码管的实现不需要什么运算,和逻辑,只需要设定对应关系就可以。
首先调用ieee库,调用std_logic_1164.all,然后定义实体dec7,包含输入端口clk、data_in,输出端口dec,其中clk是std_logic类型,data_in根据要求是一个整型,输出端口对应到译码管的7段器件,所以是std_logic_vector类型。
接着定义结构体实现功能,进程敏感表为clk,使用case语句分情况输出,默认共阴极译码管,0为亮灯,当输出不在0~9范围时输出中间横线。
备注:一开始使用三位二进制数作为输入,后验证可以使用整型作为输入数据。
验证模块:声明空实体dec7_tb进行测试,将参数定义,并赋初值。
对被测试原件映射,定义时钟周期20ns,时钟进程自循环进行。
主进程验证时随意选取3组数据进行测试结果:结果与设计一致,认为设计成功。
2、十进制计数器设计流程:实体counter10,输入信号reset,up_enable,clk,输出信号bcd(4位),count。
结构体设计,定义信号变量temp(4位),作为可读数,记录当前数字。
当reset有效(当1有效),计数清零,否则当up_enable有效并获得clk上升沿时,计数加1,当计数达到9,count输出一个脉冲并将计数器归零。
完成后将计数器数字输出给bcd。
后来发现可以定义bcd为inout类型,就不需要temp作为中间变量。
验证模块:分别验证计数正确性、count输出、reset功能、up_enable功能。
结果:符合设计目标,计数器到9输出脉冲,up_enable为零时不计数,reset重置。
3、序列检测器设计流程:采用5位移位寄存器实现序列检测,当reset有效,重置寄存器;否则时钟上升沿到来时进行寄存器内容左移并在最低位读入数据,检测当前寄存器内容是否满足要求,是的话输出匹配信号脉冲。
验证模块:验证模块中增加constant std_logic_vector类型的data作为输入码流,预设为16位。
VHDL交通灯控制器-实验报告
可编程逻辑器件应用项目报告书项目名称:交通灯控制器指导老师:姓名:学号:班级:(以后写报告要包含以下一些内容:)一、设计要求--------------------------------------------------------------------------------二、设计目的--------------------------------------------------------------------------------三、设计方案--------------------------------------------------------------------------------四、设计程序---------------------------------------------------------------------------------五、管脚分配---------------------------------------------------------------------------------六、硬件下载实现现象描述------------------------------------------七、体会、对设计工作的总结与展-------------------------------------------一、设计要求:①在十字路口的两个方向上各设一组红、绿、黄灯,显示顺序为其中一方向(东西方向)是绿灯、黄灯、红灯;另一方向(南北方向)是红灯、绿灯、黄灯。
②设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,其中绿灯、黄灯、红灯的持续时间分别是20s、5s和25s。
③当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需要优先放行的车辆通过时,各方向上均是红灯亮,倒计时停止,且显示数字在闪烁。
当特殊运行状态结束后,控制器恢复原来状态,继续正常运行。
【实验】VHDL实验报告
【关键字】实验项目一数据选择器一、实验与设计要求1.熟悉MAX+PLUS II的编译环境,掌握该集成环境各个菜单项的使用;2.了解MAX+PLUSII的VHDL程序设计输入方法,初步了解该软件的仿真环境;3.初步运用VHDL编程,体会硬件描述语言的先进性;4.理解VHDL语言的并发执行的特点;5.熟悉VHDL语法6. 按照如下图示,设计一个四路的数据选择器,该电路能将四组不同的数据有选择的输出,每一组数据的宽度为4,输出那一组数据由选择开关决定,如下表:AB QCDS0S1二、实验与设计方法1.加入MAX+PLUSII软件之前,在E盘上新建一个工作目录\lyung。
2.加入MAX+PLUSII文本编辑器,编写VHDL程序,并保存文件至\lyung\mux41.vhd:3. 将工程指向当前文件并编译当前文件。
4. 建立波形仿真文件,设置输入、输出端口及输入端口的信号波形,保存波形仿真文件。
5. 加入仿真器工作环境,查看波形仿真结果。
6. 选择器件, 为电路端口分配FPGA器件引脚。
7. 进行第二次编译(包括逻辑综合和器件工艺映射),生成目标文件(*.sof等)。
8.将目标文件下载至FPGA器件。
9.在实验台上进行实际操作,验证设计的正确性。
三、实验与设计结果通过实验,初步熟悉了MAX+PLUS II的编译环境,并掌握该集成环境各个菜单项的使用。
实验过程中,了解了MAX+PLUSII的VHDL程序设计输入方法,初步运用VHDL编程,成功的按照实验要求设计了程序的VHDL源码(见附件1),熟悉了VHDL语法,理解了VHDL语言的并发执行的特点;并进行了仿真实验(仿真实验截图见图4-1),初步了解该软件的仿真环境,并成功的将文件烧入实验平台,成功通过了测试(实验平台截图见图4-2)。
四、程序源码及实验截图4-0、VHDL源码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux41 ISPORT (a,b,c,d: IN STD_LOGIC_VECTOR (3 DOWNTO 0);s1,s0: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END mux41;ARCHITECTURE behave OF mux41 ISSIGNAL sel: STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINsel <= s1 & s0;q<= a WHEN sel="00" ELSEb WHEN sel="01" ELSEc WHEN sel="10" ELSEd WHEN sel="11" ELSE"XXXX";END behave ;图 4-2 实验平台实验项目二三—八译码器一、实验与设计要求1.掌握组合逻辑电路的设计的一般步骤和方法;2.掌握一般电路设计要求及其设计知识;3. 设计一个3-8译码器,此电路有三个输入端(A,B,C),八个输出端D[7··0];当输入为为不同的值(0~7)时,只有对应的输出端才有输出;如下图所示:Y7二、实验与设计方法1.建立真值表2. 编写VHDL语言程序3. 将工程指向当前文件并编译当前文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北理工VHDL实验报告本科实验报告实验名称:VHDL语言及集成电路设计实验课程名称:VHDL语言及集成电路设计实验时间:2014.5 任课教师:桂小琰实验地点:4-427实验教师:任仕伟实验类型:□原理验证□综合设计□自主创新学生姓名:学号/班级:组号:学院:信息与电子学院同组搭档:专业:电子科学与技术成绩:实验一:带有异步复位端的D触发器一、实验目的(1)熟悉linux操作环境和modelsim软件环境(2)理解时序逻辑和组合逻辑电路的区别(3)理解并行语句和顺序语句(4)用VHDL语言编写一个带有异步复位端的D触发器及其测试文件二、实验原理(1)组合逻辑和时序逻辑○1组合逻辑电路当前输出的值仅取决于当前的输入,不需要触发器等具有存储能力的逻辑单元,仅仅使用组合逻辑门○2时序逻辑电路的当前输出不仅取决于当前的输入,还与以前的输入有关,这类电路中包括寄存器等元件,也包括组合逻辑电路,寄存器通过一个反馈环和组合逻辑模块相连。
触发器便是属于时序逻辑电路(2)并行和顺序代码从本质上讲,VHDL代码是并发执行的。
只有PROCESS,FUNCTION或PROCEDURE内的代码才是顺序执行的。
当它们作为一个整体时,与其他模块之间又是并发执行的。
以下是3个并发描述语句(stat1,stat2和stat3)的代码,会产生同样的电路结构。
stat1 stat3 stat1stat2 = stat2 = stat3 = 其他排列顺序stat3 stat1 stat2(3)并行语句——进程(PROCESS)○1语法结构:[进程名: ]PROCESS (敏感信号列表)[变量说明语句]…BEGIN…(顺序执行的代码)…END PROCESS [进程名];○2PROCESS 的特点1多进程之间是并行执行的;2进程结构内部的所有语句都是顺序执行的;3进程中可访问结构体或实体中所定义的信号;4进程的启动是由敏感信号列表所标明的信号来触发,也可以用WAIT语句等待一个触发条件的成立。
5各进程之间的通信是由信号来传递的。
(4)带有异步复位端的D触发器○1电路符号2R D CP Q0 x x 01 x 0 保持1 x 1 保持1 0 上升沿01 1 上升沿 1三、实验代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff ISPORT(d,clk,rst:IN STD_LOGIC;q:OUT STD_LOGIC);END dff;ARCHITECTURE behavior OF dff ISBEGINPROCESS(rst,clk)BEGINIF(rst='1') THENq<='0';ELSIF(clk'EVENT AND clk='1') THENq<=d;END IF;END PROCESS;end ARCHITECTURE behavior;测试文件:library IEEE;use ieee.std_logic_1164.all;entity dff_tb isend dff_tb;architecture tb_behavior of dff_tb is component dffport(d,rst,clk: in std_logic;q: out std_logic);end component;constant clk_period:time:=50 ns;signal d,clk,q,rst:std_logic;begindut:dff port map(d=>d,clk=>clk,rst=>rst,q=>q); clk_gen:processbeginclk<='0';wait for clk_period/2;clk<='1';wait for clk_period/2;end process;d_gen:processbeginwait for 100 ns;d<='1';wait for 100 ns;d<='0';end process;rst_gen:processbeginrst<='1';wait for 150 ns;rst<='0';wait for 500 ns;rst<='1';wait for 150 ns;wait;end process;end tb_behavior;四、仿真结果实验二步进电机控制器一、实验目的(1)理解两种状态机的区别(2)熟悉两种编程风格(3)编写BCD计数器和步进电机二、实验原理(1)米里型状态机和摩尔型状态机米里(Mealy)型状态机:状态机的输出信号不仅与电路的当前状态有关,还与当前的输入有关摩尔(Moore)型状态机:状态机的当前输出仅仅由当前状态决定(2)有限状态机设计流程:1 理解问题背景。
2 逻辑抽象,得出状态转移图。
3 状态简化。
4 状态分配。
5 用VHDL来描述有限状态机。
(3)BCD计数器原理图(4)步进电机控制器原理图状态输出状态S0 S1 S2 S3 0001 0010 0100 1000三、实验代码(1)BCD计数器library ieee;use ieee.std_logic_1164.all;entity counter isport(clk,rst:in std_logic;count:out std_logic_vector(3 downto 0)); end counter;architecture state_machine of counter istype state is(zero,one,two,three,four,five,six,seven,eight,nine);signal pr_state,nx_state:state;beginprocess (rst,clk)beginif(rst='1')thenpr_state<=nx_state;end if;end process;process(pr_state)begincase pr_state iswhen zero => count <="0000";nx_state <= one;when one => count <="0001";nx_state <= two;when two => count <="0010";nx_state <= three;when three => count <="0011";nx_state <= four;when four => count <="0100";nx_state <= five;when five => count <="0101";nx_state <= six;when six => count <="0110";nx_state <= seven;when seven => count <="0111";nx_state <= eight;when eight => count <="1000";nx_state <= nine;when nine => count <="1001";nx_state <= zero;end case;end process;end state_machine;(2)步进电机控制器library ieee;use ieee.std_logic_1164.all;entity stepmotor isport(clk,rst,x:in std_logic;output:out std_logic_vector(3 downto 0)); end stepmotor;architecture state_machine of stepmotor istype state is(s0,s1,s2,s3);signal pr_state,nx_state:state;beginprocess (clk,rst)beginif(rst='1')thenpr_state<=s0;elsif(clk 'event and clk ='1')thenpr_state<=nx_state;end if;end process;process(pr_state,x)beginif(x='0')thencase pr_state iswhen s0 => output <="0001";nx_state <= s3;when s1 => output <="0010";nx_state <= s0;when s2 => output <="0100";nx_state <= s1;when s3 => output <="1000";nx_state <= s2;end case;elsif (x='1')thencase pr_state iswhen s0 => output <="0001";nx_state <= s1;when s1 => output <="0010";nx_state <= s2;when s2 => output <="0100";nx_state <= s3;when s3 => output <="1000";nx_state <= s0;end case;end if;end process;end state_machine;四、仿真结果BCD计数器步进电机控制器实验三十六位加法器设计一、实验目的(1)掌握元件例化的方法(2)理解for/generate语句的用法(3)编程完成4位加法器和16位加法器的设计二、实验原理(1)元件的例化元件声明是对VHDL模块(即底层设计,也是完整的VHDL设计)的说明,使之可在其他被调用,元件声明可放在程序包中,也可在某个设计的构造体中声明。