




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VHDL实验报告5090309160 庄炜旭实验三. 4位可逆计数器,4位可逆二进制代码格雷码转换器设计一实验目的学习时序电路的设计,仿真和硬件测试,进一步熟悉VHDL设计技术1.学习位可逆计数器的设计2.学习位可逆二进制代码格雷码转换器设计二实验内容设计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为低位。三管脚设定SW0PIN_N25SW1PIN_N26SW2PIN_P25SW3PIN_AE14 SW17PIN_V2LEDR0PIN_AE23LEDR1PIN_AF23LEDR2PIN_AB21LEDR3PIN_AC22LEDR17PIN_AD12KEY3PIN_W26CLOCK_50PIN_N2四相关知识二进制代码与格雷码相互转换 格雷码(Gray Code,简称G码)是典型的循环码,它是由二进制码(Binary,简称 B码)导出的。特点是序号相邻的两组代码只有一位码不同(包括头尾两组代码),且具有循环性。上述特点使全部码组按序循环相邻,若以循环码表示一个循环过程中按顺序发生的状态,则任何状态变化只对应有一个变量发生变化,这个特点有助于提高电路的可靠性。 五思路及原理框图本实验分两个部分,首先是一个四位可逆计数器。这是一个比较基础的部分,每次时钟信号来的时候内置计数器加一或者减一,到十六或者零的时候相应跳变,然后再把这个相应的信号转换到led灯上输出。第二部分是关于格雷码与二进制码的转换,如上表所示,它把转换关系都告诉我们,这样我们只需要读入单片机上面的输入,再通过几个简单的公式转化输出即可。框图如下:六 源代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.All;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity count isport(clk_count:in std_logic; SW17:in std_logic; key3:in std_logic; led_out:out std_logic_vector(3 downto 0); ledr17:out std_logic);end count;architecture b of count issignal cntQ:std_logic_vector(3 downto 0);signal countQ:std_logic_vector(24 downto 0):= 0000000000000000000000000;begin process(clk_count,SW17,key3)begin-u1:DIV port map(clk_count,clk25);if(key3=0)thenif(sw17=1)thencntQ=0000;elsecntQ=1111;end if;elsif(clk_countevent and clk_count=1)thencountQ=countQ+1;if(countQ(24)=1)thencountQ0);if(sw17=1)thencntQ=cntQ+1;elsif(sw17=0)thencntQ=cntQ-1;end if;end if;end if;end process;led_out=cntQ;ledr17=sw17;end b;-entity gray isport(sw:in std_logic_vector(17 downto 0);ledr:out std_logic_vector(3 downto 0);end gray;architecture rtl of gray issignal gray:std_logic_vector(3 downto 0);begin process(sw)beginif(sw(17)=1)thengray(3)=sw(3);gray(2)=sw(3) xor sw(2);gray(1)=sw(2) xor sw(1);gray(0)=sw(1) xor sw(0);elsegray(3)=sw(3);gray(2)=gray(3) xor sw(2);gray(1)=gray(2) xor sw(1);gray(0)=gray(1) xor sw(0);end if;ledr=gray;end process;end rtl;七结论与心得体会这个实验难度不大,逻辑思路十分清晰简单,但我却做得很不顺利,做了两个半小时,主要原因是,我的代码中分了许多if循环,而且这些if语句又没有嵌套,这个造成的结果是程序只要检测到敏感列表中的变量的变化,就会在执行完本次循环后跳出,重新执行,这样有些语句就一直没法被执行。这次实验给我的体会很深,上述失败也让我对VHDL语言编程有了深刻的了解,让我也让我体会到了之前的无知,我决定回去认真研读课本,好好学好这门课。实验四. 7段数码管译码器设计与实现一实验目的1.掌握7段数码管译码器的设计与实现2.掌握模块化的设计方法二实验内容设计一个7段数码管译码器,带数码管的4位可逆计数器具体要求1. 7段数码管译码器a) 使用拨码开关SW3, SW2, SW1, SW0作为输入,SW3为高位,SW0为低位。b) 将输出的结果在HEX1,HEX0显示。当输入为00001111显示为0015,2. 带数码管的4位可逆计数器将实验三的结果在数码管上显示。结合上次实验,将4位可逆计数器,数码管显示,分别作为两个子模块,实现在数码管上显示的4位可逆计数器。模块化的设计,可以参考VHDL硬件描述语言与数字逻辑电路设计一书的第九章三管脚设定SW0PIN_N25SW1PIN_N26SW2PIN_P25SW3PIN_AE14 SW17PIN_V2HEX00PIN_AF10 HEX01 PIN_AB12 HEX02PIN_AC12 HEX03 PIN_AD11 HEX04 PIN_AE11 HEX05 PIN_V14HEX06 PIN_V13HEX10PIN_V20 HEX11PIN_V21 HEX12 PIN_W21 HEX13 PIN_Y22 HEX14 PIN_AA24HEX15PIN_AA23 HEX16PIN_AB24 LEDR17PIN_AD12KEY3PIN_W26CLOCK_50PIN_N2四相关知识数码管如右图所示:每一条线分别对应一个管脚,当管脚为0时,这条线为亮,当管脚设置为1时,这条线不亮。在DE2中,共有8个数码管。例如:设置HEX00的管脚为0,那么这条线就会亮。要让HEX0显示数字0,那么我们可以设置HEX0为“1000000”.五设计思路及实验框图首先是七段管码的编辑,这是一个相对简单的问题,只需要检测四个按键是否被按下,再转换为相应的数字大小,然后根据上图给的管脚定义,通过一个switch函数,转化为输出。而第二个实验要求也同样简单,每个时钟就将内置的计数器加一,然后到16以后自动回零,只需相应地转换为数码管输出即可。六源代码-freqdiv-LIBRARY ieee;USE ieee.std_logic_1164.all;-ENTITY freqdiv ISPORT(clk: IN STD_LOGIC; out1:BUFFER STD_LOGIC);END freqdiv;-ARCHITECTURE behavior OF freqdiv ISSIGNAL count1: INTEGER RANGE 1 TO 2*24;BEGINPROCESS(clk)BEGINIF( clkEVENT AND clk = 1) THENcount1 = count1 + 1;IF( count1 = 2*24 ) THENout1 = NOT out1;count1 = 1;END IF;END IF;END PROCESS;END behavior;-subcounter-LIBRARY ieee;USE ieee.std_logic_1164.all;-ENTITY subcounter ISPORT(clk,SW17,KEY3:IN STD_LOGIC; count2: BUFFER INTEGER RANGE 0 TO 15);END subcounter;-ARCHITECTURE behavior OF subcounter ISBEGINPROCESS(clk,SW17,KEY3 )BEGINIF( KEY3 = 0 )THENIF( SW17 = 1 )THEN count2 = 0;ELSE count2 = 15;END IF;ELSIF( clkEVENT AND clk = 1)THENIF( SW17 = 1 )THEN IF( count2 = 15 )THEN count2 = 0;ELSE count2 = count2 + 1;END IF;ELSE IF( count2 = 0 )THEN count2 = 15;ELSE count2 digit1 digit1 digit1 digit1 digit1 digit1 digit1 digit1 digit1 digit1 digit2 digit2 digit2 digit2 digit2 digit2 digit2 digit2 digit2 digit2 = 0000100;END CASE;END PROCESS;END behavior;-MAIN-LIBRARY ieee;USE ieee.std_logic_1164.all;-ENTITY counter ISPORT(clk50,SW17,KEY3: IN STD_LOGIC; digit1,digit2:OUT STD_LOGIC_VECTOR(0 TO 6);END counter;-ARCHITECTURE behavior OF counter IS-COMPONENT freqdiv ISPORT(clk: IN STD_LOGIC; out1:BUFFER STD_LOGIC);END COMPONENT;-COMPONENT subcounter ISPORT(clk,SW17,KEY3:IN STD_LOGIC; count2: BUFFER INTEGER RANGE 0 TO 15);END COMPONENT;-COMPONENT decoder ISPORT(num: IN INTEGER RANGE 0 TO 15; digit1,digit2: OUT STD_LOGIC_VECTOR( 0 TO 6);END COMPONENT;-SIGNAL n: INTEGER RANGE 0 TO 15;SIGNAL clknew: STD_LOGIC;BEGINU1: freqdiv PORT MAP(clk50, clknew );U2: subcounter PORT MAP( clknew, SW17, KEY3, n );U3: decoder PORT MAP( n, digit1,digit2 );END behavior;七结论与心得体会 本次实验的逻辑部分都相当简单,但是关于模块化程序设计的思想与方法是十分深刻和复杂的。本次实验也是我们第一次把一个较长的程序分成若干模块,写若干个ARCHITECTURE。这是一次全新的尝试和不小的挑战,让我对这门语言有了更加深刻的认识和更全面的了解。我收获很大。实验六. 序列检测器的设计一实验目的1. 掌握用VHDL 实现状态机的方法2. 利用状态机设计一个序列检测器二实验内容使用状态机设计一个5位序列检测器。从一串二进制码中检测出一个已预置的5位二进制码”10110” 具体要求1.画出状态转换图。(每增加一位二进制码相当于增加一个状态,再加上一个初始态,用6个状态可以实现.)2.写出状态机的源程序,编译。要求当检测到预置序列时,输出一个脉冲的高电平,其余时候输出为低电平。3.进行仿真,看结果是否正确。三相关知识1、序列检测器的基本工作过程:序列检测器用于检测一组或多组由二进制码组成的脉冲序列信号,在数字通信中有着广泛的应用。当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。2、状态机的基本设计思想:在状态连续变化的数字系统设计中,采用状态机的设计思想有利于提高设计效率,增加程序的可读性,减少错误的发生几率。同时,状态机的设计方法也是数字系统中一种最常用的设计方法。一般来说,标准状态机可以分为摩尔(Moore)机和米立(Mealy)机两种。在摩尔机中,其输出仅仅是当前状态值的函数,并且仅在时钟上升沿到来时才发生变化。米立机的输出则是当前状态值、当前输出值和当前输入值的函数。四设计思路及框图这个实验难度不大,主要帮我们复习上课所讲得关于状态机的问题。要检验出五位二进制10110。主要任务就是判断当前的输入是1还是0,如果符合条件,就跳到下一个状态,否则就跳回状态0(就是初始状态)。如果顺利地到达状态5(也就是10110),则输出高电平。状态转移图如下: 0 0 15 1 1 0 1 1 0 0 4 2 1 1 3 0其中绿色的线代表正常的状态转移,而紫色的线代表并未输入正确的值得时候的状态转移。五引脚定义与仿真结果仿真结果如下图:引脚及变量定义如下:Match即为标志位,如果状态达到10110则输出高电平x为输入,clk为时钟信号reset即为重置信号,信号来了以后跳回状态0五源代码library ieee;use ieee.std_logic_1164.all;entity stater isport(clk,x,reset:in std_logic;match: out std_logic) ;end stater;architecture stater of stater istype state is(s0,s1,s2,s3,s4,s5);signal prestate,neststate:state;beginprocess (clk,reset)beginif reset=1thenprestate=s0;elsif rising_edge(clk)thenprestate=neststate;end if;end process;process (pstate,x)beginmatch if x=1then neststate=s1; else neststate if x=0then neststate=s2; else neststate if x=1then neststate=s3; else neststate if x=1then neststate=s4; else neststate if x=0then neststate=s5; else neststate if x=0then neststate=s0; else neststate=s3; end if;end case;if prestate=s5 then match=1;end if;end process;end stater;六结论和心得体会这次实验比较简单也比较顺利,只要搞懂了课本上的状态转移的原理,在加上一些基本代码常识,就能很容易地完成这个实验。这个实验包含了很深刻的思想和方法,对我们未来的学习,研究甚至工作都很有帮助。同时,这个实验也有助于我更深刻地理解VHDL语言和数字电路系统等等。实验七. 基于ROM的正弦波发生器的设计一实验目的1. 学习VHDL的综合设计应用2. 学习基于ROM的正弦波发生器的设计二实验内容设计基于ROM的正弦波发生器,对其编译,仿真。具体要求:1.正弦发生器由波形数据存储模块(ROM),波形发生器控制模块及锁存模块组成2.波形数据存储模块(ROM)定制数据宽度为8,地址宽度为6,可存储 64点正弦波形数据,用MATLAB求出波形数据。3.将50MHz作为输入时钟。三设计提示1.原理图输出波形发生器控制模块波形数据存储模块(ROM)锁存模块CLK2.波形数据的计算:由于地址宽度为6,最多存64个数据,那么取最大值64,在一个周期内,等间隔取64个采样点。又由于数据的宽度为8,那么数据值的范围可以为0到256,控制正弦波的值在这个范围内。使用MATLAB得到这64个波形数据。实验八. 数字密码锁的设计与实现一实验目的1. 学习VHDL的综合设计应用2. 学习数字密码锁的设计二实验内容设计一个数字密码锁,对其编译,仿真,下载。数字密码锁具体要求如下:1.系统具有预置的初始密码“00000001”。2.输入密码与预存密码相同时,开锁成功,显示绿灯,否则开锁失败,显示红灯。3.具有修改密码功能。修改密码时,先开锁,开锁成功才可以修改。4.系统同时具有关锁功能。关锁后,显示红灯。5.密码由拔码开关表示,开锁由按键表示。6具有一个复位按键。按键后,回到初始状态。三设计思路和框图这个程序初看很复杂,但仔细一想,其实容易实现。首先,我们需要一个类似数组的东西来存储密码,并给它赋初值00000001,同时还要另一个数组存储我们输入的密码,来与真实的密码比较。然后我们需要一个标志位,这个标志位表示门是否被成功打开(通过比较输入的密码和存储密码)。根据要求,开门的时候还应该有相应的绿灯亮,红灯灭,这个只要一个赋值语句轻松实现。剩下的就是一个改密码的操作了,其实只要加入一个按键,如果按键按下而且处于开门的情况,系统自动把我们输入的新密码变为正确密码。四引脚定义:根据上述思路,我们需要定义的管脚如下:SW0-SW7:用于输入密码SW17:用于reset(复原)LED0,LED4:一个是红灯,一个是绿灯,表示门开门关SW16:用于说明你是否要求改密码SW15:用于表示你密码输入完毕,要开门五源代码library ieee;use ieee.std_logic_1164.al
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国家能源陇南市2025秋招面试专业追问及参考法学岗位
- 六盘水市中石油2025秋招笔试模拟题含答案市场营销与国际贸易岗
- 中国联通自贡市2025秋招计算机类专业追问清单及参考回答
- 海口市中储粮2025秋招安全环保岗高频笔试题库含答案
- 阿克苏市中石油2025秋招笔试模拟题含答案法律与合规岗
- 海西自治州中储粮2025秋招笔试粮食政策与企业文化50题速记
- 中国移动菏泽市2025秋招网申填写模板含开放题范文
- 沈阳市中石油2025秋招笔试模拟题含答案油品分析质检岗
- 2025年益智拓展考试题及答案
- 四川地区中石化2025秋招笔试模拟题含答案数智化与信息工程岗
- GB/T 9766.3-2016轮胎气门嘴试验方法第3部分:卡扣式气门嘴试验方法
- GB/T 22751-2008台球桌
- 媒介经营与管理(课程)课件
- 《智慧养老》方案ppt
- 村民森林防火承诺书
- 高职高专口腔内科龋病的概述课件
- Q∕SY 06504.2-2016 炼油化工工程储运设计规范 第2部分:火炬系统
- 植物组织培养论文 月季
- “运动与健康”主题班会PPT课件(PPT 22页)
- TCECS 822-2021 变截面双向搅拌桩技术规程
- Q∕GDW 12130-2021 敏感用户接入电网电能质量技术规范
评论
0/150
提交评论