[信息与通信]VHDL抢答器.ppt

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CASE Led_Vari IS WHEN 0000000 = Seg := 0000000; -- 熄灭 WHEN 1000000 = Seg := 0100111; -- “7” WHEN 0100000 = Seg := 1111101; -- “6” WHEN 0010000 = Seg := 1101101; -- “5” WHEN 0001000 = Seg := 1100110; -- “4” WHEN 0000100 = Seg := 1001111; -- “3” WHEN 0000010 = Seg := 1011011; -- “2” WHEN 0000001 = Seg := 0000110; -- “1” WHEN OTHERS = NULL; END CASE; a = Seg (1);b = Seg (2);c = Seg (3);d = Seg (4); e = Seg (5);f = Seg (6);g = Seg (7); END PROCESS; END behave ; 例3-4是在例3-3描述简单7位抢答器的进程中,增加了一个7段译码器的行为描述,它根据当前抢答器输出的Led信号,决定在7段LED数码管上显示什么形状的符号(“1”~“7”)。 由于Led是输出端口,所以不能直接用于表达式中作为判断依据。解决方法之一是在实体的端口声明中,将Led的端口模式修改为带有反馈的输出端口:BUFFER模式,但这种方法会降低Led端口的驱动能力。另一种解决方法是引入变量(本例中引入变量Led_Vari:Std_logic_Vector(7 DOWNTO 1)),将原先直接赋值给Led端口的信号值先赋给变量Led_Vari,再通过判断变量Led_Vari的状态,决定7段LED数码管上的显示符号,从而实现译码功能;然后将变量Led_Vari的值赋给输出端口Led。第2种方法保持了Led端口原有的驱动能力。 实际上,在例3-4的CASE语句中,每一个WHEN子句中的信号赋值语句,都可以用7个信号赋值语句分别对a,b,c,d,e,f,g这7段信号进行赋值。 例如,可以将 WHEN 1000000 = Seg := 0100111; 写成 WHEN 1000000 = g = 0;f = 1;e = 0;d = 0;c = 1;b = 1;a = 1; 但为了增强描述的可读性,我们引入了变量Seg:Std_logic_Vector(7 DOWNTO 1),先对变量Seg赋值,然后再将Seg的各个元素(Seg(1)~Seg(7))分别赋值给7段信号a,b,c,d,e,f,g,这样使得描述读起来更为清晰。 在例3-4的基础上,借助蜂鸣器,还可以为其增加一个简易电子琴的功能。 为此,在原模块上增加一个输出端口Speaker,如图3-5所示。 3.2.2 附带电子琴功能的7位抢答器 Responder +Vcc +Vcc Key(7) Key(1) … +Vcc +Vcc … Led(7) Led(1) 图3-5 附带电子琴功能的7位抢答器 Reset Clock a,b,c,d,e,f,g Speaker 要想使蜂鸣器能够发出音频f,则必须产生一个频率为f的正弦信号。如果采用直接频率合成(DDS)和数字/模拟(D/A)转换器来完成这个功能的话,会耗费较多的硬件资源。比较简单的办法是产生频率为f的方波,其能量主要集中于基波,而基波频率仍为f,所以被方波信号驱动的蜂鸣器,其发声频率听起来是基波频率f。 通过分频器,对已有的时钟输入信号Clock进行分频,就可以产生某一种频率的方波。改变分频器的分频系数,就可以得到不同频率的方波信号。 我们先来设计一个分频器,它将输入信号Clock的频率fclk降低到fq= fclk /n。 例3-5 分频器的VHDL描述: LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL; USE IEEE.Std_Logic_Unsigned.ALL; ENTITY freq_div IS GENERIC(n: Integer :=20000); -- 类属声明 PORT(Clock,Reset:IN Std_Logic; -- 端口声明

您可能关注的文档

文档评论(0)

zj182322392 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档