实验十基于VHDL的表决器的设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

基于VHDL的表决器的设计

实验目的

熟悉VHDL的编程。

熟悉七人表决器的工作原理。

进一步了解实验系统的硬件结构。

实验原理

所谓表决器就是对于一个行为,由多个人投票,如果同意的票数过半,就认为此行为可行;否那么如果否决的票数过半,那么认为此行为无效。

七人表决器顾名思义就是由七个人来投票,当同意的票数大于或者等于4时,那么认为同意;反之,当否决的票数大于或者等于4时,那么认为不同意。实验中用7个拨动开关来表示七个人,当对应的拨动开关输入为‘1’时,表示此人同意;否那么假设拨动开关输入为‘0’,那么表示此人反对。表决的结果用一个LED表示,假设表决的结果为同意,那么LED被点亮;否那么,如果表决的结果为反对,那么LED不会被点亮。同时,数码管上显示通过的票数。

实验内容

本实验就是利用实验系统中的拨动开关模块和LED模块以及数码管模块来实现一个简单的七人表决器的功能。拨动开关模块中的S1~S7表示七个人,当拨动开关输入为‘1’时,表示对应的人投同意票,否那么当拨动开关输入为‘0’时,表示对应的人投反对票;LED模块中D1表示七人表决的结果,当D1点亮时,表示此行为通过表决;否那么当D1熄灭时,表示此行为未通过表决。数码管显示通过的票数。

实验步骤

翻开QUARTUSII软件,新建一个工程。

建完工程之后,再新建一个VHDLFile,翻开VHDL编辑器对话框。

按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,用户可参照光盘中提供的例如程序。

编写完VHDL程序后,保存起来。方法同实验一。

对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改。

编译仿真无误后,根据用户自己的要求进行管脚分配。分配完成后,再进行全编译一次,以使管脚分配生效。

根据实验内容用实验导线将上面管脚分配的FPGA管脚与对应的模块连接起来。

如果是调用的本书提供的VHDL代码,那么实验连线如下:

K1-K7:投票者的投票信号,接一个拨动开关S1-S7。

LEDAG[6..0]:数码管显示信号,接数码管的G、F、E、D、C、B、A。

m_Result:抢答成功者显示信号,接一个LED灯D1。

用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。观察实验结果是否与自己的编程思想一致

实验结果与现象

以设计的参考例如为例,当设计文件加载到目标器件后,拨动实验系统中拨动开关模块的S1-S7七位拨动开关,如果拨动开关的值为“1〞〔即拨动开关的开关置于上端,表示此人通过表决〕的个数大于或等于四时LED模块的D1被点亮,否那么LED1不被点亮。数码管显示通过的票数。

源代码

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitybjqis

port(

clk:instd_logic;

input:instd_logic_vector(6downto0);

led:outbit;

ledag:outstd_logic_vector(6downto0);

del:bufferstd_logic_vector(2downto0)

);

end;

architectureoneofbjqis

Signalkey:std_logic_vector(6downto0);

begin

process(clk)

variabledount:std_logic_vector(2downto0);

begin

ifclkeventandclk=1then

dount:=dount+1;

endif;

del=dount;

endprocess;

process(del,input)

begin

case(del)is

when000=key=input;

whenothers=null;

endcase;

endprocess;

process(input)

variablecnt:integerrange0to7;

begin

cnt:=0;

foriin6downto0loop

ifinput(i)=1then

文档评论(0)

199****8042 + 关注
实名认证
文档贡献者

相信自己,相信明天

1亿VIP精品文档

相关文档