VHDL实验报告
VHDL实验报告JK触发器、同步计数器
Verilog HDL实验报告Verilog 实验报告题目:JK触发器、同步计数器系部名称:通信工程专业名称:通信工程班级:班内序号:学生姓名:时间:2010.11.28一、实验内容:用JK触发器构成同步计数器:设计一个同步计数器,其逻辑图和JK触发器的逻辑图所示。
清零信号clear低电平有效,输入数据在时钟信号clock的上升沿被锁存,触发器在clock的下降沿输出,当count_enable信号为低电平时停止计数。
写出同步计数器的verilog描述和激励模块,在激励模块中使用clear和count_enable对计数器进行测试,并显示输出计数Q[3:0]。
二、实验原理图:JK触发器构成同步计数器源代码://主模块module synchronous_counter(clear,clock,count_enable,Q);input clear,clock,count_enable;output [3:0] Q;wire qbar1,qbar2,qbar3,qbar0;wire a,b,c;assign a = Q[0] & count_enable;assign b = a & Q[1];assign c = b & Q[2];JK_flip_flop myJK(count_enable,count_enable,clock,clear,Q[0],qbar0);JK_flip_flop myJK1(a,a,clock,clear,Q[1],qbar1);JK_flip_flop myJK2(b,b,clock,clear,Q[2],qbar2);JK_flip_flop myJK3(c,c,clock,clear,Q[3],qbar3);endmodule//调用的JK触发器模块module JK_flip_flop(j,k,clock,clear,q,qbar);input j,k,clock,clear;output q,qbar;wire a,b,y,ybar,c,cbar,d,q,qbar;assign a = ~ (((qbar & j)& clock) & clear);assign b = ~ ((clock & k) & q);assign y = ~ (a & ybar);assign ybar = ~ ((y & clear) & b);assign c = ~(y & cbar);assign cbar = ~ clock;assign d = ~ (cbar & ybar);assign q = ~ (c & qbar);assign qbar = ~ ((q & clear) & d);endmodule测试文件源代码:module count_test;reg count_enable=1,clock=0,clear=0;wire [3:0]Q;synchronous_counter myCount(clear,clock,count_enable,Q);initial #10 clear=1;always@(negedge clock)begin$monitor($time," clear=%b,count_enable=%b,Q=%b%b%b%b\n",clear,count_enable,Q[3],Q[2],Q[1],Q[0]);endalways clock = #5 ~clock;always count_enable= #170 ~count_enable; endmodule实验结果:波形图:三、实验心得:这次实验比上一次顺利多了,可能是因为有了前一次的铺垫,我对软件的熟悉度有了一定的提高。
VHDL实验报告
6
#50 S1=1;S2=0; #50 A=0;B=0;C=1;D=0; #50 S1=0;S2=1; #50 A=1;B=0;C=0;D=1; #200 $stop; end MUX41b MUX41b1 (.A(A),.B(B),.C(C),.D(D),.S1(S1),.S2(S1),.Y(Y));//元件例化 endmodule If else 方法仿真图:
实验一 半加器电路的设计
一.实验目的 (1)掌握 Modelsim 软件的编译、仿真方法 (2)熟练运用 Modelsim 软件进行 VHDL 程序设计开发 (3)掌握基于 Modelsim 的组合逻辑电路设计方法 (4)利用 VHDL 的逻辑表达式描述门电路 (5)利用 VHDL 的代码完成半加器设计 二.实验内容 1.实验要求:设计一个两位二进制半加器,半加器只考虑了两个加数本身,没有考虑由低位 来的进位。 2.半加器的输入为 A 和 B。输出为 SO 和 CO。 使用 Verilog HDL 程序实现上述实验内容,并使用 modelsim 仿真 半加器主程序为: module adder(A,B,SO,CO); input A,B; output SO,CO; assign SO=A^B; //和值数据输出 assign CO=A&B; //进位数据输出 endmodule 测试程序为: `timescale 1ns/1ns //时间精度 `include "adder.v"; module addertest; reg A,B; //输入变量类型定义 wire SO,CO; //输出变量类型定义 initial begin A=0;B=0; #100 A=0;B=1 ; #100 A=1;B=1 ; #100 A=1;B=0 ; #100 $stop; end adder adder1(.SO(SO),.CO(CO),.A(A),.B(B)); endmodule
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与数字电路设计实验报告
VHDL与数字电路设计实验报告引言本实验旨在通过使用VHDL编程语言和数字电路设计技术,实现特定功能的电路设计。
本文档将对实验的步骤、设计原理和结果进行详细描述。
实验步骤1. 步骤一:熟悉VHDL编程语言在实验开始之前,团队成员对VHDL编程语言进行了研究和熟悉。
我们了解了VHDL的基本语法、数据类型和结构,并获得了对VHDL设计原理的初步理解。
2. 步骤二:设计功能电路在本实验中,我们选择了一个特定的功能电路进行设计。
我们首先进行了功能需求分析,并根据需求确定了电路的输入输出信号以及主要的逻辑运算。
然后,我们使用VHDL编程语言将电路的逻辑运算实现为代码,并进行了仿真和测试。
3. 步骤三:电路仿真和验证为了验证我们设计的电路功能的正确性,我们使用了VHDL仿真工具进行了电路的仿真和验证。
我们根据输入信号的不同组合,观察输出信号的变化,并与我们预期的结果进行比较。
通过这一步骤,我们确认了我们设计的电路能够按照预期工作。
4. 步骤四:电路实现和测试在确认电路的设计和仿真结果无误之后,我们进一步将电路实现到实际的数字电路平台上,并进行了硬件测试。
我们使用实际的输入信号来测试电路的性能和稳定性,并对输出信号进行观察和分析。
通过这一步骤,我们验证了电路在实际环境中的可行性。
设计原理我们设计的电路基于特定的功能需求,采用了经典的数字电路设计原理。
通过使用VHDL编程语言,我们将电路的逻辑运算实现为逻辑门和触发器的组合。
通过将输入信号连接到适当的逻辑门和触发器,我们实现了所需的功能。
结果与分析经过实验步骤的完成,我们成功地设计和实现了一个具有特定功能的数字电路。
在仿真测试和实际测试中,电路都表现出了良好的性能和稳定性。
根据结果的分析,我们验证了电路的设计原理和逻辑的正确性。
结论本实验通过使用VHDL编程语言和数字电路设计技术,成功地实现了一个具有特定功能的电路设计。
我们的实验结果表明,VHDL和数字电路设计技术在电路设计领域具有重要的应用价值。
vhdl实验报告--蜂鸣器
vhdl实验报告--蜂鸣器VHDL 实验报告蜂鸣器一、实验目的本次实验的主要目的是通过使用 VHDL 语言来设计并实现一个蜂鸣器的控制电路,深入理解数字电路的设计原理和 VHDL 编程的基本方法,掌握硬件描述语言在实际电路设计中的应用,提高自己的逻辑思维和问题解决能力。
二、实验原理蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电。
常见的蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种。
有源蜂鸣器内部自带了振荡源,只要给其供电就能发出固定频率的声音;无源蜂鸣器则需要外部提供一定频率的脉冲信号才能发声。
在本实验中,我们使用 VHDL 语言来控制一个无源蜂鸣器。
通过编写代码,生成特定频率的脉冲信号,从而驱动蜂鸣器发声。
三、实验设备及工具1、计算机2、 Quartus II 软件3、开发板四、实验内容及步骤1、设计思路首先,需要确定蜂鸣器发声的频率。
通过计算得出所需的时钟周期数。
然后,使用计数器来产生特定频率的脉冲信号。
最后,将脉冲信号输出到蜂鸣器的控制引脚。
2、 VHDL 代码编写```vhdllibrary ieee;use ieeestd_logic_1164all;use ieeenumeric_stdall;entity buzzer_control isport(clk : in std_logic;rst : in std_logic;buzzer : out std_logic);end entity;architecture Behavioral of buzzer_control isconstant CLK_FREQ : integer := 50_000_000; 系统时钟频率constant BUZZER_FREQ : integer := 1000; 蜂鸣器发声频率signal counter : integer range 0 to CLK_FREQ/BUZZER_FREQ 1; signal clk_div : std_logic;beginprocess(clk, rst)beginif rst ='1' thencounter <= 0;clk_div <='0';elsif rising_edge(clk) thenif counter = CLK_FREQ/BUZZER_FREQ 1 thencounter <= 0;clk_div <= not clk_div;elsecounter <= counter + 1;end if;end if;end process;buzzer <= clk_div;end architecture;```3、编译与仿真将编写好的 VHDL 代码在 Quartus II 软件中进行编译。
VHDL实验报告与代码毕业设计(论文)
实验一. 分频器设计一.实验目的1.熟悉QUARTUSII 软件的使用2.熟悉PLD设计流程3. 学习分频器的设计二.实验内容设计一个最大分频为225的分频器,将50MHz时钟作为输入三.实验框图四.管脚设定CLOCK_50 PIN_N2LEDR[0] PIN_AE23五.实验代码LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_UNSIGNED.all;ENTITY clk1 ISPORT(clk:IN STD_LOGIC;DIGIT:OUT STD_LOGIC);END clk1;ARCHITECTURE clk1 OF clk1 ISBEGINCOUNT: PROCESS(clk)V ARIABLE temp:STD_LOGIC_VECTOR(25 DOWNTO 0);BEGINIF(clk'EVENT AND clk = '1')THENtemp := temp+1;IF(temp(25)='1') THENtemp:=(OTHERS=>'0');END IF;END IF;DIGIT <= temp(24);END PROCESS count;END clk1;六.心得体会通过这次实验,我初步掌握了QUARTUSII 软件的使用,为今后的实验打下基础。
实验二. VHDL描述风格比较一.实验目的1.深入体会VHDL三种描述风格的区别2. 学习3输入表决器,异或门的实现3.设计一个5输入表决器。
二.实验内容以3输入表决器,异或门,通用寄存器等代码为例,深入体会VHDL描述风格。
1.学习已给的3输入表决器代码,完成3输入表决器的三种描述方式的验证比较。
在QUARTUS II中对程序进行编译,下载,验证。
使用拔码开关SW0,SW1,SW2作为三个输入,输出在LEDR0表示,亮表示‘1’,不亮表示‘0’2.学习已给的异或门代码,完成异或门的三种描述方式的验证比较。
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实验报告
专用集成电路实验报告13050Z011305024237X德文实验一开发平台软件安装与认知实验实验内容1、本实验以三线八线译码器(LS74138)为例,在Xilinx ISE 9.2软件平台上完成设计电路的VHDL文本输入、语法检查、编译、仿真、管脚分配和编程下载等操作。
下载芯片选择Xilinx公司的CoolRunner II系列XC2C256-7PQ208作为目标仿真芯片。
2、用1中所设计的的三线八线译码器(LS74138)生成一个LS74138元件,在Xilinx ISE 9.2软件原理图设计平台上完成LS74138元件的调用,用原理图的方法设计三线八线译码器(LS74138),实现编译,仿真,管脚分配和编程下载等操作。
源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;-- Unment the following lines to use the declarations that are-- provided for instantiating Xilinx primitive ponents.--library UNISIM;--use UNISIM.Vponents.all;entity ls74138 isPort ( g1 : in std_logic;g2 : in std_logic;inp : in std_logic_vector(2 downto 0);y : out std_logic_vector(7 downto 0));end ls74138;architecture Behavioral of ls74138 isbeginprocess(g1,g2,inp)beginif((g1 and g2)='1') thencase inp iswhen "000"=>y<="00000001";when "001"=>y<="00000010";when "010"=>y<="00000100";when "011"=>y<="00001000";when "100"=>y<="00010000";when "101"=>y<="00100000";when "110"=>y<="01000000";when "111"=>y<="10000000";when others=>y<="00000000";end case;elsey<="00000000";end if;end process;end Behavioral;波形文件:生成元器件及连接电路思考:有程序可以看出,定义了三个输入端,一个输出端。
VHDL实验报告
三.分析和心得 通过这次实验我熟悉了 Verilog HDL 元件例化语句的作用, 并且熟悉全加器的工作原理。 在四位全加器的择器的设计
一.实验目的 熟悉 Modelsim 的 Verilog HD 文本设计流程全过程,学习简单的组合逻辑电路设计,多 层次的电路设计,仿真和硬件测试 二.实验内容 (1)从多路输入信号中选择其中一路进行输出的电路称为数据选择器。或:在地址信号控制 下, 从多路输入信息中选择其中的某一路信息作为输出的电路称为数据选择器。 数据选择器 又叫多路选择器,简称 MUX。 (2)分别采用原理图和 Verilog HDL 语言的形式设计 4 选 1 数据选择器 (3)对所涉及的电路进行编译及正确的仿真 Case 语句设计: module MUX41a(a,b,c,d,s1,s0,y); input a,b,c,d; input s1,s0; output y; reg y; always@(a or b or c or s1 or s0) //敏感信号表 begin : case ({s1,s0}) //数据组合 2'b00:y<=a; 2'b01:y<=b; 2'b10:y<=c; 2'b11:y<=d; default:y<=a; endcase end endmodule 测试程序为: `timescale 1ns/1ns `include "MUX41a.v"; //包含 4 选 1 case 语句程序 module MUX41atest; reg a,b,c,d,s1,s0; wire y; initial begin a=0;b=0;c=0;d=0; s1=0; s0=0; #100 a=1;b=0;c=0;d=0;
vhdl课程设计设计模为 4、8、12、16的可变计数器实验报告总结
VHDL课程设计 - 可变计数器实验报告总结
一、设计概述
本课程设计的主要目标是设计并实现一个可变计数器,其模(Modulo)值可以在4、8、12、16之间进行选择。
计数器采用VHDL编程语言进行描述,并在FPGA开发板上进行测试验证。
二、设计实现
1. 硬件平台:我们选择了Xilinx的FPGA开发板作为硬件平台,它具有丰富的I/O资源和足够的逻辑单元,可以满足我们的设计需求。
2. VHDL编程:我们采用VHDL语言进行编程,实现了模4、模8、模12和模16的可变计数器。
通过选择不同的计数模式,计数器的模值可以在4、8、12、16之间进行切换。
3. 测试与验证:为了验证计数器的功能,我们编写了测试平台,并通过仿真和实际硬件测试对计数器进行了全面的测试。
三、实验结果与分析
1. 实验结果:通过仿真和实际硬件测试,我们验证了计数器的
功能正确性。
在不同的模值下,计数器都能正确地进行计数操作,并且在达到模值后能正确地回绕到0。
2. 结果分析:实验结果表明,我们的VHDL编程和FPGA开发技能得到了很好的应用和提升。
同时,通过这次课程设计,我们更深入地理解了可变计数器的设计和实现原理,提高了我们的硬件设计能力。
四、总结与展望
本次课程设计让我们深入了解了VHDL编程语言和FPGA开发技术,提高了我们的硬件设计能力。
通过实际的设计和测试,我们成功地实现了一个可变模值的计数器,达到了课程设计的要求。
在未来的学习和工作中,我们将继续深入学习FPGA设计和VHDL编程,不断提高自己的硬件设计能力。
同时,我们也期待将这种技术应用于更多的实际项目中,为工程实践做出贡献。
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报告
实验五:数制转换一、实验任务和要求1.实现十六进制到十进制的转换2.分析实现的方法3.十六位数据的范围为X”00”~X”FF”二、设计分析,电路原理组成和方法第一步:设计一个计数器,记录256个数,依次是0--255,是通过VHDL语言编写的(文本输入)第二步:将十六进制数转换为十进制数,以BCD码的形式输出。
是以原理性设计输入实现的。
首先计数是以一个时钟信号,当出现上升沿是计数加一,直到255,以八位的二进制形式输出。
接下来是LPM-ROM。
将十六进制数转换为十进制,以BCD码输出。
首先建立一个MIF文件,将对应的十六进制转换为十进制,MIF文件如下:depth = 256; width = 12; address_radix = hex;data_radix = hex;contentbegin00:0;01:1;02:2;03:3;04:4;05:5;06:6;07:7;08:8;09:9;0A:10;0B:11;0C:12; 0D:13;0E:14;0F:15;10:16;11:17;12:18;13:19;14:20;15:21;16:22;17:23;18:24;19:25;1A:26;1B:27;1C:28;1D:29;1E:30;1F:31;20:32;21:33;22:34;23:35;24:36;25:37;26:38;27:39;28:40;29:41;2A:42;2B:43;2C:44;2D:45;2E:46;2F:47;30:48;31:49;32:50;33:51;34:52;35:53;36:54;37:55;38:56;39:57;3A:58;3B:59;3C:60;3D:61;3E:62;3F:63;40:64;41:65;42:66;43:67;44:68;45:69;46:70;47:71;48:72;49:73;4A:74;4B:75;4C:76;4D:77;4E:78;4F:79;50:80;51:81;52:82;53:83;54:84;55:85;56:86;57:87;58:88;59:89;5A:90;5B:91;5C:92;5D:93;5E:94;5F:95;60:96;61:97; 62:98; 63:99; 64:100; 65:101; 66:102; 67:103; 68:104; 69:105; 6A:106; 6B:107; 6C:108; 6D:109; 6E:110; 6F:111; 70:112; 71:113; 72:114; 73:115; 74:116; 75:117; 76:118; 77:119; 78:120; 79:121; 7A:122; 7B:123; 7C:124; 7D:125; 7E:126; 7F:127; 80:128; 81:129;82:130;83:131;84:132;85:133;86:134;87:135;88:136;89:137;8A:138;8B:139;8C:140;8D:141;8E:142;8F:143;90:144;91:145;92:146;93:147;94:148;95:149;96:150;97:151;98:152;99:153;9A:154;9B:155;9C:156;9D:157;9E:158;9F:159;A0:160;A1:161;A2:162;A3:163;A4:164;A5:165;A6:166;A7:167;A8:168;A9:169;AA:170;AB:171;AC:172;AD:173;AE:174;AF:175;B0:176;B1:177;B2:178;B3:179;B4:180;B5:181;B6:182;B7:183;B8:184;B9:185;BA:186;BB:187;BC:188;BD:189;BE:190;BF:191;C0:192;C1:193;C2:194;C3:195;C4:196;C5:197;C6:198;C7:199;C8:200;C9:201;CA:202;CB:203;CC:204;CD:205;CE:206;CF:207;D0:208;D1:209;D2:210;D3:211;D4:212;D5:213;D6:214;D7:215;D8:216;D9:217;DA:218;DB:219;DC:220;DD:221;DE:222;DF:223;E0:224;E1:225;E2:226;E3:227;E4:228;E5:229;E6:230;E7:231;E8:232;E9:233;EA:234;EB:235;EC:236;ED:237;EE:238;EF:239;F0:240;F1:241;F2:242;F3:243;F4:244;F5:245;F6:246;F7:247;F8:248;F9:249;FA:250;FB:251;FC:252;FD:253;FE:254;FF:255;end;然后设计LPM-ROM原件,在Graphic editor中找到原件,设置相应参数,并把MIF文件放入其中,进行编辑。
(VHDL实验报告)一位半加器,全加器的设计
3)对文本文件进行编译。选择processing-compiler tool--start或直接点快捷栏上的三角形则会出 现编译器窗口。需要说明的是在进行设计文件的综合和分 析,也可以单独打开某个分析综 合过程不必进行全编译 界面。当完成上述窗口的设定后,点击 START 按钮进行 设计文件的全编译。如果文件有错,在软件的下方则会提 示错误的原因和位置,以便于使用者进行修改直到设计文 件无错。整个编译完成,软件会提示编译成功。
二)全加器
本次实验我分别用实验箱上的开关K1、K2、K3作为全加器的三输入A、B、Ci-1
;分别用LED彩灯LED1、LED2作为半加器的两个输出端Si、Ci。实验时将实验箱的拨动
开关拨向下时为低电平“0”。拨向上时为高电平“1”,LED高电平时灯亮,低电平时
灯灭。以下第一幅图即为输入为“111”时输出为“11”;第二幅图则是当输入为
A
9
五、实验步骤
(一)半加器的设计
4、对设计文件进行仿真
1)选择File--New,在弹出的对话框中选择Vector Waveform File,点击OK按钮,打开进入一个空的波形编辑器窗口。
2)设置仿真结束时间,波形编辑器默认的仿真结束时间为 1µS ,根据仿真需要,可以自由设置仿真的结束时间(本次设置的为1ms )。选择 QUARTUSII 软件的 Edit--End Time命令,弹出线路束时间 对话框,在 Time框办输入仿真结束时间,点击OK按钮完成设置。如 下图所示:
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实验报告
西安电子科技大学实验报告班级:学号:姓名:地点: EⅡ-505 批次:第二批时间:星期五下午、晚上实验一3-8译码器电路设计实验(一)实验名称:3-8译码器电路设计(二)实验目的:1)掌握ISE开发工具的使用,掌握FPGA开发的基本步骤;2)掌握组合逻辑电路设计的一般方法;3)掌握程序下载方法,了解UCF文件的格式;4)初步了解开发板资源,掌握开发板使用方法。
重点了解滑动开关和LED显示灯的使用方法。
5)理解并掌握VHDL程序的结构,掌握输入输出端口的含义;(三)实验内容:(1)用VHDL实现3-8译码器模块译码器电路如图3-1所示。
其功能如表3-1所示。
试用VHDL完成该译码器的设计,并在开发图3-1 74x138 3-8译码器板上进行检验。
(2)将程序下载到FPGA并进行检验●资源使用要求:⏹用滑动开关SW0~SW4作为输入A,B,C,G1;⏹滑动开关BTN_EAST,BTN_WEST作为控制端G2A,G2B;⏹8个LED灯表示8个输出。
●检验方法:当SW0处于OFF(G1=1)或者SW1处于ON(G2A=1)或者SW2处于ON(G2B=1)位置时,所有LED灯灭;当SW0处于ON(G1=1),且BTN_EAST,BTN_WEST均处于OFF状态时,反映当前输入的译码输出在LED灯上显示,即当输入为000(滑动开关SW0-SW2处于OFF状态),LED0亮,其它灯灭,等等。
(四)实验步骤:1)启动ISE,新建工程文件,编写3-8译码器的VHDL模块;2)新建UCF文件,输入位置约束;3)完成综合、实现,生成下载文件;4)连接开发板USB下载线,开启开发板电源;5)下载到FPGA;6)拨动开关,验证结果是否正确。
(五)实验代码:entity decode38 isPort ( A : in STD_LOGIC;B : in STD_LOGIC;C : in STD_LOGIC;G1 : in STD_LOGIC;G2A : in STD_LOGIC;G2B : in STD_LOGIC;Y : out STD_LOGIC_VECTOR (7 downto 0));end decode38;architecture Behavioral of decode38 issignal din: std_logic_vector(2 downto 0);begindin <= C&B&A;PROCESS(din,G1,G2A,G2B)beginif (G1='1' AND G2A='0' AND G2B='0') THENcase din iswhen "000" => Y<="00000001";when "001" => Y<="00000010";when "010" => Y<="00000100";when "011" => Y<="00001000";when "100" => Y<="00010000";when "101" => Y<="00100000";when "110" => Y<="01000000";when "111" => Y<="10000000";when others => Y<="00000000";end case;elsif(G1='0' OR G2A='1' OR G2B='1')THENY <= "00000000";elsenull;end if;end process;end Behavioral;约束性文件NET "A" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP;NET "B" LOC = "L14" | IOSTANDARD = LVTTL | PULLUP;NET "C" LOC = "H18" | IOSTANDARD = LVTTL | PULLUP;NET "G1" LOC = "N17" | IOSTANDARD = LVTTL | PULLUP;NET "Y<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8; NET "Y<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8; NET "Y<5>" LOC = "D11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8; NET "Y<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8; NET "Y<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8; NET "Y<2>" LOC = "E11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8; NET "Y<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8; NET "Y<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "G2A" LOC = "H13" | IOSTANDARD = LVTTL | PULLdown;NET "G2B" LOC = "D18" | IOSTANDARD = LVTTL | PULLdown;实验二可逆计数器设计实验(一)实验名称:八位可逆计数器电路设计(二)实验目的:1)进一步熟练ISE 开发工具,巩固FPGA 开发的基本步骤; 2)掌握设计仿真方法;3)掌握时序逻辑电路设计的一般方法,掌握时钟分频程序设计方法; 4)理解VHDL 的层次结构设计,掌握原理图输入方法; 5)巩固程序下载方法;6)了解开发板时钟资源,以及时钟分频方法。
3-8译码器VHDL设计实验 实验报告
3-8译码器VHDL设计实验实验报告本实验以3-8译码器的设计为主要内容,通过编码器和译码器的学习,深入了解数字电路中常用的译码器,并掌握VHDL语言的应用技巧。
主要技术路线为:定义输入和输出端口->生成选择结构->设计三个MUX组合成8:1 MUX->仿真波形验证。
本实验虽然简单,但对数码管、数码显示器等电路的实现有很大的帮助作用。
一、实验目的1.了解译码器的作用及其应用2.掌握VHDL语言的的原理二、实验器材1.电脑2.EDA软件三、实验原理及过程1.定义输入和输出端口在VHDL设计中,首先要定义输入和输出端口。
根据输入和输出端口的设计,并将其定义到ENTITY中。
2.生成选择结构基于译码器的设计特点,输入是一个二进制数,输出是一个信号。
故可以采用CASE结构生成选择结构。
同时,由于译码器需要将一个二进制数译到一个信号,还需要一个PROCESS处理,将选择的结果赋值到输出信号上。
3.设计三个MUX组合成8:1 MUX通常情况下,8:1 MUX可以用一个MUX8191,但本实验旨在学习三个MUX组合成一个8:1 MUX的方法。
设计时要考虑如下事项:1)MUX中DP、EN、INV等控制信号的设置,由于多个控制信号互相独立,因此采用分别激活的方式;2)由于MUX的输出是显式定义的信号,不能使用临时变量。
因此,采用以下方法生成MUX输出处理:SIGNAL MUX_out : STD_LOGIC := '0';4.仿真波形验证经过以上步骤的设计,就可以进行仿真波形的验证。
经实验验证,设计正确。
其输出信号可以由输入端口激励生成。
四、实验内容1.阅读数据手册及规范表,画出流程图。
2.代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY decoder_3X8 ISPORT (--Define Input & Output SIGNALB : IN STD_LOGIC_VECTOR(2 DOWNTO 0);Y : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END decoder_3X8;ARCHITECTURE structural OF decoder_3X8 ISCOMPONENT mux4x1 ISPORT (D0 : IN STD_LOGIC;D1 : IN STD_LOGIC;D2 : IN STD_LOGIC;D3 : IN STD_LOGIC;S : IN STD_LOGIC_VECTOR(1 DOWNTO 0);Y : OUT STD_LOGIC);END COMPONENT;COMPONENT mux2x1 ISPORT (D0 : IN STD_LOGIC;D1 : IN STD_LOGIC;S : IN STD_LOGIC;Y : OUT STD_LOGIC);END COMPONENT;SIGNAL out1, out2, out3, out4, out5, out6, out7, out8 : STD_LOGIC;BEGINM1: mux2x1 PORT MAP (X => B(0), Y => out1, S => B(1));M2: mux4x1 PORT MAP (X0 => B(2), X1 => out1, X2 => ‘0’, X3 => ‘0’, S => B(1 DOWNTO 0), Y => out2);M3: mux4x1 PORT MAP (X0 => B(2), X1 => ‘0’, X2 => out1, X3 => ‘0’, S => B(1 DOWNTO 0), Y => out3);M4: mux4x1 PORT MAP (X0 => B(2), X1 => ‘0’, X2 => ‘0’, X3 => out1, S => B(1 DOWNTO 0), Y => out4);M5: mux2x1 PORT MAP (X => out2, Y => out5, S => B(2));M6: mux2x1 PORT MAP (X => out3, Y => out6, S => B(2));M7: mux2x1 PORT MAP (X => out4, Y => out7, S => B(2));M8: mux4x1 PORT MAP (X0 => out5, X1 => out6, X2 => out7, X3 => ‘0′, S => B(1 DOWNTO 0), Y => out8);Y <= out8;END structural;ARCHITECTURE rtl OF mux4x1 ISBEGINY <= D0 WHEN S = ‘00’ ELSED1 WHEN S = ‘01’ ELSED2 WHEN S = ‘10’ ELSED3 WHEN S = ‘11’ ELSE’0’;END ARCHITECTURE rtl;3.仿真波形验证:进入仿真 --> Add ----> Signals ----> 选择需要记录的信号 ----> Run ----> 波形记录。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VHDL实验报告5080309563 李斌实验三.4位可逆计数器,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为低位。
使用LEDR3,LEDR2,LEDR1,LEDR0作为转换后的输出结果显示,LEDR3为高位,LEDR0为低位。
二.变量解释:4位可逆计数器:1.clk为时钟输入,clkout为分频后的时钟,cnt为分频计数,ctr为SW17模式控制,rst为KEY3异步复位开关,tem为输出结果的中间变量;2.本实验的时钟输入为50MHz,定义为clk,为此设计时需要将其分频为50Hz,需225分频,因此,代码中,需要有一个cnt作为一个225计数器,同时,定义分频后的时钟为clkout;3.建立process,检测key是否为0,为0则复位。
否则,检测clkout,触发上升沿则检测模式控制,对tem加1或减1,同时应检测是否达到最大或最小值,达到最值则直接返回到最初值,否则继续操作;4.最后,转换tem的值为相应的4位二进制数,并于LED上反映出来。
四位可逆二进制代码-格雷码转换器:1.检测模式,进行相应的操作;2.ctr为0则格雷码转换成二进制码;ctr为1则为二进制码转换为格雷码 [源代码]:1)4位可逆计数器:library ieee;use ieee.std_logic_1164.all;entity cnt isport(clk,ctr,rst: in bit;clkout: buffer bit;led:out std_logic_vector(3 downto 0));end cnt;architecture arch_cnt of cnt isbeginprocess(clk)variable cnt: integer;beginif (clk'event and clk='1')thencnt:=cnt+1;if(cnt=16777216)thenclkout<=not clkout;cnt:=0;end if;end if;end process;process(clkout,ctr)variable tem:integer range 0 to 15;beginif(rst='0') thenif (ctr='1') then tem:=0; end if;if (ctr='0') then tem:=15;end if;elsif(clkout'event and clkout='1') thenif(ctr='1') thenif (tem=15)then tem:=0; end if;tem:=tem+1;end if;if(ctr='0') thenif (tem=0)then tem:=15; end if;tem:=tem-1;end if;end if;--end if;case tem iswhen 0=>led<="0000";when 1=>led<="0001";when 2=>led<="0010";when 3=>led<="0011";when 4=>led<="0100";when 5=>led<="0101";when 6=>led<="0110";when 7=>led<="0111";when 8=>led<="1000";when 9=>led<="1001";when 10=>led<="1010";when 11=>led<="1011";when 12=>led<="1100";when 13=>led<="1101";when 14=>led<="1110";when 15=>led<="1111";when others=>null;end case;end process;end arch_cnt;2)4位可逆二进制代码-格雷码转换器:library ieee;using ieee.std_logic_1164.all;entity graycode isport(ctr:in std_logic;sw:buffer std_logic_vector(3 downto 0);led:buffer std_logic_vector(3 downto 0));end graycode;architecture garycoder of graycode isbeginprocess(ctr,sw)beginif(ctr='0') thenled[3]<=sw[3];for i in 2 downto 0 loopled[i]<=led[i+1] xor sw[i];end loop;elsif(ctr='1') thenled[3]=sw[3];for i in 2 downto 0 loopled[i]=sw[i+1] xor sw[i];end loop;else null;end if;end process;end garycoder;[实验心得]:本次实验让我了解了基本的时序电路设计,仿真和测试,也进一步加深对VHDL语言的理解。
同时我也进行了4位二进制可逆计数的设计和格雷码转换器的设计,对其原理和工作方式有了进一步的熟悉。
本次实验给了我从理论性的VHDL设计向实践和操作的过程的体验。
实验六. 序列检测器的设计[设计思路及步骤]:一.需求:使用状态机设计一个5位序列检测器。
从一串二进制码中检测出一个已预置的5位二进制码”10110”[具体要求]1.画出状态转换图。
(每增加一位二进制码相当于增加一个状态,再加上一个初始态,用6个状态可以实现.)2.写出状态机的源程序,编译。
要求当检测到预置序列时,输出一个脉冲的高电平,其余时候输出为低电平。
3.进行仿真,看结果是否正确。
二.思路:用一个6状态实现,特别考虑了当出现“10110110”这类前一个正确序列为结束,后一个正确序列已开始的情况。
三.定义各量:clk为时钟输入,d为数据输入,res为复位信号,res为检测结果输出,pstate 为现态,nstate为下一状态,同时,自定义数据类型state,取值从one到six,表示6个状态,pstate和nstate为state类型;检测复位信号rst,若为1则复位为寝状态one,否则,检测时钟输入,若时钟触发上升沿,则pstate取得nstate的值,这步为时序逻辑部分;[源程序]:library ieee;use ieee.std_logic_1164.all;entity seriescheck isport(clk,d,rst:in bit;res:out bit);end seriescheck;architecture serieschecker of seriescheck istype state is (one,two,three,four,five,six);signal pstate,nstate:state;beginprocess(rst,clk)beginif(rst='1') thenpstate<=one;elsif(clk'event and clk='1') thenpstate<=nstate;end if;end process;process(d,pstate)begincase pstate iswhen one =>res<='0';if(d='1') then nstate<=two;else nstate<=one;end if;when two =>res<='0';if(d='0') then nstate<=three;else nstate<=two;end if;when three =>res<='0';if(d='1') then nstate<=four;else nstate<=one;end if;when four =>res<='0';if(d='1') then nstate<=five;else nstate<=three;end if;when five =>res<='0';if(d='0') then nstate<=six;else nstate<=two;end if;when six =>res<='1';if(d='0') then nstate<=one;else nstate<=two;end if;end case;end process;end serieschecker;[实验心得]:实验之后,我学会了使用VHDL实现状态机的基本方法,实验中要求利用状态机实现序列检测器,我联系到以前编程的经验使用VHDL来完成了目的。