ImageVerifierCode 换一换
格式:DOCX , 页数:56 ,大小:30.86KB ,
资源ID:12412211      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12412211.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(vhdl实验.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

vhdl实验.docx

1、vhdl实验 第一部分 实验思路1.1实验二(8位可逆计数器)分两个进程,一个记录手动脉冲个数,另一个记录脉冲源脉冲个数,最后以方式选择开关决定显示哪个个数。1.2 实验三(任意整数分频电路设计)分两个进程,一个记录上升沿个数,另一个纪录下降沿个数,当计数总和等于预分频数时,两个进程的标识位取反,最后将两个标识位的异或送给输出。1.3 实验四(多功能循环彩灯控制电路设计)确定四种循环方式,分别为1、3、5、7,2、4、6、8,7、5、3、1,8、6、4、2。用case,when语句,同时计数自动加一。1.4 实验五(8段数码管动态扫描显示控制)设置一个顶层文件,三个模块文件(分频模块,计数模块

2、,显示模块)。分频是将20Mhz分成周期为1/100s和100us的方波。计数是记录有多少个1/100s。显示是以100us为步调扫描数码管以显示计数。1.5 实验六(频率计设计)设置一个顶层文件,三个模块文件(分频模块,计数模块,显示模块)。分频是将20Mhz分成周期为1s和1ms的方波。计数是记录在1s内待测脉冲的周期数。显示是以1ms为步调扫描数码管以显示计数。1.6 实验七(矩阵式键盘扫描与键码检测)设立四个进程,一个完成由20Mhz到周期为10ms,100us的转换(10ms用于扫描键盘,100us用于扫描数码管以显示键码)。一个完成键盘的横向扫描与列向接收。其余两个完成显示键码。1

3、.7 实验八(LPM的使用)设立两个LPM,一个为三位计数器,另一个为三位比较器。计数器的输出送入比较器,完成比较并输出比较结果。1.8 实验九(多功能电子钟设计)设置一个顶层文件,五个模块文件(分频模块,计数模块,矫正模块,定点模块,显示模块)。分频是将20Mhz分成周期为1s和100us的方波,1s用于记录时间,100us用于扫描数码管。计数是记录时间。矫正完成时间的重设。定点完成定点设置。显示模块是根据设置显示矫正状态,正常状态,定点状态,并控制上下午指示灯,定点报警指示灯。1.9 实验十(SPI总线时序模拟)发射机:设置一个顶层文件,三个模块文件(分频模块,信号输出模块,信号接收模块)

4、。分频是将20Mhz分成周期为1ms的方波,用于双机同步时钟设置。信号输出模块依据spi协议,依次输出写使能,写命令,写地址,写数据,读命令,读地址,最后使信号接收使能开启。信号接收模块完成数据的接收,并用led灯显示。接收机:设置一个顶层文件,一个模块文件(信号输出模块)。顶层文件完成信号的接受,并存储数据,当依次读到“读命令”,“读地址”时,信号输出使能开启。信号输出模块完成“读地址”数据的输出。 第二部分 问题和解决方案2.1 数据不能锁存。先写判断语句(如rising_edge()),再对数据操作。2.2 不同进程不能同时给一个信号赋值。可以在一个进程中设置标记信号,在另一个进程中判断

5、标记信号,完成目标信号赋值。2.3 现象与自己期望的相差若干节拍。可能是信号赋值需要一段延时所致,可用变量赋值代替信号赋值。2.4 程序太长理不清思路。可以设置多个模块,一个顶层文件。在顶层文件中调用模块。2.5 位矢量赋值较不便。可以设成integer类型,还可以通过range设置范围。2.6 一个进程不能有多个判断上升沿(下降沿)语句。可以设置多个进程,在其他进程中判断。注意进程之间是并行的。2.7 模块程序是对的,但当例化时结果出错。可能是例化列表次序不对所致。2.8 进程中的程序过多,条理不清。可以设立多个进程,进程之间通过信号传输信息。2.9 进程无语句错误,但仿真与自己想的不一致。

6、可能是信号列表中所列信号不全,还可能是忽略了进程的性质:当信号列表中信号变化时进入进程,进程中语句是顺序执行的,当语句执行完毕后,重新处于等待信号列表中信号变化。2.10在不同进程中遇到相同的数值处理问题,为此要在不同进程中输入大量相同的处理代码,这样是程序很冗余。可以建立一个函数,并生成包。当用时只需调用包和相应函数就行了。 第三部分 技术的认识与其他硬件描述语言相比,VHDL具有以下特点: 3.1 功能强大、设计灵活VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路。VHDL支持同步电路、异步电路和随机电路的

7、设计,这是其他硬件描述语言所不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。 3.2 支持广泛、易于修改由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计。 3.3 强大的系统硬件描述能力VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合

8、的混合级描述。另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。 3.4 独立于器件的设计、与工艺无关设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。当设计描述完成后,可以用多种不同的器件结构来实现其功能。 3.5 很强的移植能力VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。 3.6 易于共享和复用VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用

9、的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。 第四部分 课程的建议4.1 EDA实验室开放时间长,方便学生做实验,提高理论与实际结合能力。 第五部分 程序源代码-*-实验二(8位可逆计数器)-*library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity two isport(clr,i1,i0,sel0,sel1: in std_logic; o : out std_lo

10、gic_vector(7 downto 0); shared variable m1,m2,m3 : std_logic_vector(7 downto 0); end entity two;architecture tr of two isbegin a1:process(sel0,i1,clr) begin if i1=1 and i1event and i1last_value=0 then if clr=1 then m1:= (others = 0); elsif clr=0 then if sel0=1 then if m1 0); end if; elsif sel0=0 the

11、n if m10 then m1 :=m1 - 1; else m1 := (others = 1); end if; end if; end if; end if; end process a1; a2:process(sel0,i0) begin if clr=1 then m2:= (others = 0); elsif i0=1 and i0event and i0last_value=0 then if sel0=1 then if m2 0); end if; elsif sel0=0 then if m20 then m2 := m2 - 1; else m2 := (other

12、s = 1); end if; end if; end if; end process a2; o 0);end tr;-*-实验三(任意整数分频电路设计)-*library ieee;use ieee.std_logic_1164.all;entity one isport(clki: in std_logic; sel: in integer range 0 to 255; clko: out std_logic);end one;architecture frequent of one issignal temp1,temp2:integer range 0 to 255;signal

13、temp3,temp4:std_logic;begin a2:process(clki,sel) variable a:integer range 0 to 255; begin if rising_edge(clki) then a:=temp2; if a1 then a:=a-1; else a:=sel;temp3=not temp3; end if; temp11 then b:=b-1; else b:=sel; temp4=not temp4; end if; temp2=b; end if; end process a3;clko=temp3 xor temp4; end fr

14、equent; -*-实验四(多功能循环彩灯控制电路设计)-*library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity cycle is port(clk,reset :in std_logic; p:out std_logic_vector(7 downto 0); end cycle; architecture behave of cycle is type fsm_st is(s0,s1,s2,s3,s4,s5,s6,s7,s8,

15、s9,s10,s11,s12,s13,s14,s15 ); signal pr_state,nx_state:fsm_st; signal m:std_logic_vector(3 downto 0);signal n,b:std_logic_vector(3 downto 0);signal a:std_logic_vector(3 downto 0); signal tmp:std_logic_vector(7 downto 0); beginP1:process(reset,clk)begin if(reset=0)then a=0001; m=0000; n=0000; pr_stat

16、e=s0;elsif(clkevent and clk=1)then if(m0100)then m=m+1; else m=0000; end if;if(m=0000)then if(n0100)then n=n+1; else n=0000; end if; end if;if( n=0000)then if(b0100)then b=b+1;else b=0000;end if; if(b=0000)then if(a0100)then a=a+1; else a=0001; end if;end if;end if; pr_state if(m=0000)then nx_state=

17、s0; tmp=00000001; elsif (m=0001)then nx_state=s1; tmp=00000011; elsif (m=0010)then nx_state=s2; tmp=00000101; elsif (m=0011)then nx_state=s3; tmp if(m=0000)then nx_state=s4; tmp=00000010; elsif (m=0001)then nx_state=s5; tmp=00000100; elsif (m=0010)then nx_state=s6; tmp=00000110; elsif (m=0011)then n

18、x_state=s7; tmp if(m=0000)then nx_state=s8; tmp=00000111; elsif (m=0001)then nx_state=s9; tmp=00000101; elsif (m=0010)then nx_state=s10; tmp=00000011; elsif (m=0011)then nx_state=s11; tmp if(m=0000)then nx_state=s12; tmp=00001000; elsif (m=0001)then nx_state=s13; tmp=00000110; elsif (m=0010)then nx_

19、state=s14; tmp=00000100; elsif (m=0011)then nx_state=s15; tmp null; end case; p=tmp;end process P3;end behave;-*-实验五 (8段数码管动态扫描显示控制)-*library ieee; -顶层文件use ieee.std_logic_1164.all;entity one isport(sel1,sel2,clki:in std_logic; sel:out std_logic_vector(1 to 6); data:out std_logic_vector(1 to 7); dp:

20、out std_logic );end one;architecture rh of one iscomponent fenpin isport(clki:in std_logic; o1,o2:out std_logic );end component;component jishu isport(sel1,sel2,o1:in std_logic; a1,a2,a3,a4,a5,a6:out integer range 0 to 9 );end component;component xianshi isport(a6,a5,a4,a3,a2,a1:in integer range 0 t

21、o 9; o2:in std_logic; sel:out std_logic_vector(1 to 6); data: out std_logic_vector(1 to 7); dp:out std_logic);end component;signal o1,o2:std_logic;signal a1,a2,a3,a4,a5,a6:integer range 0 to 9;begin u1:fenpin port map(clki,o1,o2); u2:jishu port map(sel1,sel2,o1,a1,a2,a3,a4,a5,a6); u3:xianshi port ma

22、p(a6,a5,a4,a3,a2,a1,o2,sel,data,dp);end rh;library ieee; -分频use ieee.std_logic_1164.all;entity fenpin isport(clki:in std_logic; o1,o2:out std_logic );end fenpin;architecture rh of fenpin issignal o10,o20:std_logic;beginprocess(clki)variable a,b:integer range 0 to 100000;begin if rising_edge(clki) th

23、en if a999 then a:=a+1; else a:=0;o20=not o20; end if; if b99999 then b:=b+1; else b:=0;o10=not o10; end if; end if; o1=o10; o2=o20;end process;end rh;library ieee; -计数use ieee.std_logic_1164.all;entity jishu isport(sel1,sel2,o1:in std_logic; a1,a2,a3,a4,a5,a6:out integer range 0 to 9 );end entity;a

24、rchitecture rh of jishu isbeginprocess(sel1,sel2,o1)variable b6,b5,b4,b3,b2,b1:integer range 0 to 9;begin if rising_edge(o1) then if sel1=1 then if sel2=1 then b6:=0;b5:=0;b4:=0;b3:=0;b2:=0;b1:=0; else if b1=8 then b1:=b1+1; else b1:=0; if b2=8 then b2:=b2+1; else b2:=0; if b3=8 then b3:=b3+1; else b3:=0; if b4=4 then b4:=b4+1; else b4:=0; if b5=8 then b5:=b5+1; else b5:=0; if b6=4 then b6:=b6+1; else b6:=0; end if; end if; end if; end if; end if; end if; end if; end if;end if;a1=b1;a2=b2;a3=b3;a4=b4;a5=b5;a6sel=000001 ;temp=a1;dpsel=000010 ;temp=a2;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1