华东交通大学
(四)管脚绑定
三:下载到单片机实验箱上的实验现象
第 9 页 共 22 页
华东交通大学
将单片机实验箱上的控制waiter的那个开关至于高位,即waiter=1。同时,控制rst的那个开关至为高位,使数码管的变化只随着时钟上升沿的到来而变化,并进行着计数。前四个数码管显示队伍长度;后四个数码管显示柜台的当前顾客服务的号码。随着时钟上升沿的到来,后四个数码管从个位开始增加,如果,waiter一直保持是1,那么队长length的值将不会发生变化。
此程序形成的图形
四:课设收获与体会
我选的《排队电路》这个题目。我和我的同学去了图书馆找了一下午的资料,发现除了自己选得题目外,其他的有很多种。但是,各种书上给的也不是很详细。所以,就找了两本介绍有关课程设计和计数器比较详细的书就回去了。
首先,我是先设计好了程序的流程图。选择一个程序还是选择分成多少个模块来写,觉得分成很多个模块来写的话,程序会很复杂,但是,检查的时候会更加的方便,最后再来一个总的程序,将所有的联系起来,然后再仿真,程序多了就会容易出错。所以,我选择的是用一个程序来写,分成多个进程,只要思路清晰,就不会容易出错的。所以,选择这个方法的前提就是思路一定要清楚。我花了一天多的时间将题目所涵盖的内容分析清楚,并将大概的进程所代表的内容和一部分程序写了出来,画出流程图,比如说图三。
其次,就是将大概的程序从第一步开始一步一步的按照流程图写出来。并在QuartusⅡ软件中建造新的project,编译。。。。。。一开始有很多的错误,甚至由于好久不做实验的原因,在上实验课的时候用的代码也不是自己写的,这也是使自己犯错误的原因之一。都不知道单片机实验箱中的八个七段数码管是有一条线控制的。需要设置一个sel三位选通信号,例如:sel=000时,选得是cnt4=0,既是最后一位数码管。
在输进程序的时候,我的程序共有八个进程,我并不是把所有的程序一下子全部都输进去,我是先输入了一个进程后,在结尾end process 后面再加一个end。再进行编译,这样解决完一个,再加下一个进程进去,这样进行下去的话,就会知道自己的程序到底是在哪出现了问题。慢慢改,慢慢调试,千万不能着急,就会有新的不同的发现。
在编译的时候,出现了将近有九十个warnings,输入设置的是rst、clk、tmpclk还有waiter,结果编译的时候就出现了新的问题,clk和tmpclk之间的关系没办法联系起来。。。。。。后来
第 10 页 共 22 页
华东交通大学
检查发现少了一个分频电路。添加分频电路,还要记得把输入当中的tmpclk去掉,在后面新定义一个tmpclk。用tmpclk=cnt10(0)将tmpclk和clk联系起来。
除了这些问题还有很多老师上课的时候多次强调过的问题:在任一进程的进程说明部分不允许定义信号;“<=”两边的信号的数据类型必须一致;“=”没有赋值的意义;顺序语句只能用在进程中。。。。。。还有还多老师提到的细节,只有亲自动手操作了之后,才了解到自己的基础知识是多么的不牢固,只有在实践中才能提高自己的能力。只是看懂书上的知识,而不进行事实操作,只是会纸上谈兵,而不会进行实战并取得胜利的。我们都深感动手起来遇到的各种问题都要亲自去解决是一件很不容易的事情,同时我们也在实践过程中修复了以往学习的很多漏洞。我们自己经过这次课程设计也得到了不同程度的完善和提升。
通过这次课程设计,使我更加深刻形象的了解了VHDL语言的特别,VHDL语言是一种全方位硬件描述语言,包括系统行为级,寄存器传输级和逻辑门级多个设计层次。应充分利用 VHDL“自顶向下”的设计优点以及层次化的设计概念,层次概念对于设计复杂的数字系统 是非常有用的,它使得我们可以从简单的单元入手,逐渐构成庞大而复杂的系统。通过使用 EDA 编程既方便有快捷的实现了程序本次设计的程序已经在硬件系统上得到了验证。
最后,在经过这次课程设计,自己收获了这么多与老师和同学的帮助是分不开的,不管天气有多冷,老师也会到实验室去辅导我们,晚上本来是老师的休息时间,老师也是会上网登QQ来帮我们解决无数的问题。。。。。。。群里面同学们也好热情的帮助我。在设计时和同学相互交流各自的想法也是很重要的,不同的人对问题的看法总有差异,我们可以从交流中获得不同的思路,其他人的设计一定有比你出色的地方,很好的借鉴,并在大家的商讨中选择最优方案最终一定会得到最好的设计方法。 这些知识在书上是根本就学习不到的。所以,这次课设不仅提高了自己的知识,还使我们同学之间的关系更加的紧密。
参考文献:
[1]《数字电路EDA入门------VHDL程序实例集》 张亦华主编 北京邮电大学出版社
[2]《DA技术与VHDL(第3版)》 潘松 黄继业主编 清华大学出版社
[3]《CPLD/FPGA 应用开发技术与工程实践》 张立科主编 人民邮电出版社
第 11 页 共 22 页
华东交通大学
附 录
VNDL语言程序如下: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity ordernumsys is port(rst,clk:in std_logic;
selout:out std_logic_vector(2 downto 0); waiter:in bit;
selbit:out std_logic_vector(7 downto 0); lednum:out std_logic_vector(6 downto 0)); end ordernumsys;
architecture behav of ordernumsys is signal newcustom_ll,newcustom_lh,
newcustom_hl,newcustom_hh:std_logic_vector(3 downto 0); signal waitcustom_ll,waitcustom_lh,
waitcustom_hl,waitcustom_hh:std_logic_vector(3 downto 0); signal curcustom_ll,curcustom_lh,
curcustom_hl,curcustom_hh:std_logic_vector(3 downto 0); signal length_ll,length_lh,
length_hl,length_hh:std_logic_vector(3 downto 0); signal tmpbcdnum:std_logic_vector(3 downto 0);
第 12 页 共 22 页
华东交通大学
signal cnt4:integer range 0 to 10 ; signal sel:std_logic_vector(2 downto 0); signal cnt10:std_logic_vector(1 downto 0); signal tmpclk:std_logic; begin
p1:process(clk,rst) begin
if rst='0' then
newcustom_ll<=\ newcustom_hl<=\ waitcustom_ll<=\ waitcustom_hl<=\ elsif clk'event and clk='1' then newcustom_ll<=newcustom_ll+1; if newcustom_ll<\ then newcustom_ll<=newcustom_ll+1; elsif newcustom_lh<\ then newcustom_lh<=newcustom_lh+1; newcustom_ll<=\ elsif newcustom_hl<\ then newcustom_hl<=newcustom_hl+1; newcustom_lh<=\
第 13 页 共 22 页

