您现在的位置:首页 >> 三峡大学cpld实验报告 >> CPLD课程实验报告,cpld实验报告,cpld课程论文,cpld实验结论

CPLD课程实验报告,cpld实验报告,cpld课程论文,cpld实验结论

时间:2012-10-24 来源: 泥巴往事网

CPLD/FPGA 设计 实验报告 姓名:李浩 专业:电子信息工程 班级:10 电信一班 学号:20101305018 指导老师:周欣 实验一 1.实验要求 原理图方式输入电路的功能分析 设计一四...

CPLD 课程学习报告 八周的 CPLD 及电子 CAD 实验结束了, 回忆着过去八周的学习, 收获很多。

这八周的学习,是我从一个对 CPLD 完全没有概念的人变 得能完成数字时钟及其扩展,其中虽然遇到了很多困难,但当困难被 克服,实验结果出来是的喜悦是难以言状的。下面,分别讲述这八次 课的收获和心得。

学习上,学到了知识,肯定是不小的收获,但在学习之外,我也 收获了很多,首先,做实验的时候是既有分组又有合作的的,说道合 作,我们了解了一个团队协作的重要性,开始的时候,由于和搭档不 认识,出现过一些矛盾,但后来,我们明白了,只有协作,才能更好 的完成一项工作。所以,这是我的一个很重要的收获。

回归正题,讲讲学习的收获。

首先,实验所使用的软件是:MAX+PLUSII,共完成了数字时钟 及其调时,整点报时,秒表和闹钟的应用等,分别应用了文字及图形 的编程方法,将所设计的电路功能下载到 EPIK30TC144-1 器件,以 实现我们所需要的功能。

数字时钟可实现的功能 1、时、分、秒六位数码管显示(标准时间 23 点 59 分 59 秒) ; 2、具有小时、分钟校准功能; 整点报时:55,56,57,58,59 低音响,整点高音,间断振铃(嘟-嘟--嘟--嘟--嘟--嘀)。 3、跑表:最大计时 99 秒 99 毫秒。独立的跑表功能,不影响数字钟正 常工作。

4、定时闹钟:可在 00:01 到 23:59 之间由用户设定任一时间,到时 报警。 第一课:10 进制、6 进制计数器 对于以上计数器,采用 VHDL 代码书写, (截屏如下) 图一:10 进制 VHDL 文本 在书写 VHDL 文本时,应当注意文字的准确性和无错误,最值 得注意的是:保存文本时应注意其文件扩展名一定要为 VHD,且要 注意前后文件明要保持一致。文本通过调试无错误后,接着要分配管 脚, 启动 MAX+PLUS~Floorplan Editor 菜单命令, 分别通过老师所给的管 脚分配表分配管脚(如图二) 。

值得注意的是:在我们实验时,开始界面右边没有出现管脚代号, 万 分 着 急, 结果, 通 过 老师 的指导 , 我 们知 道了, 我 们 需要 在 Layout~last compilation floorplan,底层图编辑器将显示由最后一次编 辑产生的不可编辑的视图,是该视图被存储在适配文件中。 图二:10 进制管脚分配图 完成后,首先启用 MAX+PLUS~programmer 菜单, 选择 JTAG~Multi-Device JTAG chain 菜单项; 再点击 Sellect program file 按钮,选择要下载的配置文件 sof. 然后点击 add 按钮添加到列表 中,点击 OK 即可。再出现的对话框中点 configure,即可完成器件编 程。

(见图三) 对于 6 进制计数器, 只数显示 0~5 五个数字, 因此, 对于十进制, 当 m 达到 1001 时再返回到 0000,而六进制,当 m 到 0101 时再返回 到 0000。因此,在 10 进制的基础上,再作适当的修改即可得到六进 制计数器。因此,六进制的为:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity hl61_cnt6 is port(clk,clr,en:in std_logic;

q:out std_logic_vector(3 downto 0);

carry:out std_logic);

end;

architecture one of hl61_cnt6 is signal m:std_logic_vector(3 downto 0);

begin process(clk,clr,en) begin if clr='1'

then m<="0000";

elsif clk'event and clk='1'

then if en='0'

then if m="0101"

then m<="0000"; carry<='1'; 图三:六进制下载结果 小结:这次课的学习,让我们学习到了 VHDL 语言的它使用激 六进制、 十进制计数器的做法。

VHDL 语言简洁、 已修改, 可读性强, 我们应当好好掌握其使用方法 第二课: 60 进制、24 进制计数器及二选一电路 在第一课的基础上,通过一定修改,可以做出 60 进制和 24 进制 计数器,以备以后做使用。在此过程中,应当注意的是:60 进制应 当分几个部分讨论,编写 VHDL 语言时,应注意思路和编写的语言 都清晰、可读性强,以防出现错误代之结果无法正确显示出来。 图四:60 进制计数器 VHDL 对于二选一电路,其基本原理是:对于 mux2 设 A、B 两输入端 口和高低电平输入口 S,对于输出 Y,当 S=0,则 Y 输出 A 的值,否 则输出 B。对于输出 K,当 A=B,K 为高电平,否则,K 为低电平。 第三课:数字钟设计 数字钟的实验原理是:时钟计数:秒——60 进制 BCD 码计数; 分——60 进制 BCD 码计数; 时————24 进制 BCD 码计数。

因此, 对于数字钟的制作,可以采用 gdf 图形编写。首先创建一个新的 Graphic Editor file,然后调出 24 进制图件一个,60 进制两个,连接电 路图,图形如下图五: 图五:数字钟 当编译通过后再分配管脚,接下来过程与十进制做法类似。进行 器件编程后,既可以在器件上显示最大时间为 23:59:59 的数字时钟。

并且,通过 File~create default 保存后可以调出数字钟的图形文件。如 下图六: 图六:数字时钟的图形文件 注意:文件保存时要相当小心,首先,要保证文件存在同一个文 件夹中,我们当时就出现了这样的错误,把不同的文件放在不同的文 件夹中,结果导致调用图形文件时文件无法正确使用,是我们走了一 段曲折路浪费了不少的时间, 再者, 文件名一定不能用中文名。

最后, VHD 和 GDF 文件都一定要与前面的总文件名保持一致, 可以用便捷 方法:File~project~第二项来调节。

第四课:数字钟的调分调时功能 上述数字钟完成以后,他只有清零功能,不具有其他功能,而在 我们生活中的包具有多种功能, 因此, 我们还得设计其他功能。

首先, 设计调分调时功能,因此,在上述数字钟的基础上,应将代表时钟的 24 进制计数器和代表分钟的 60 进制计数器的 clk 端分别连上外部控 制按钮,其 gdf 图如下: 图七:调分调时功能数字钟 调用输入端的指令是:input 输出端:output 与门:and2 或门:

or2 注意:如果设计项目项目你面含有多个子文件,应先对各低层文 件设置成工程,编译并存盘以备后用,并要保证双击顶层文件时底层 文件能够显示出来,如果双击后无法显示,应进行检查,看调用文件 和存盘时是否出现问题,如果出现问题应及时修正,以防影响后续工 作的顺利进行。

完成上面的以后,可以得到有调分调时功能的新数字钟图形文 件,截图如下: 图九:调分调时功能数字钟图形文件 第五课:整点报时功能和选择器 首先,对于新的功能的加入,就会用到选择器,所以,我们设计 了 3 选 1,2 选 1 的选择器;

2 选 1VHDL 代码:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity hl61_mux2 is port (s: in std_logic;

a,b,c,d,e,f,pa,pb,pc,pd,pe,pf:in std_logic_vector(3 downto 0); ca,cb,cc,cd,ce,cf:out std_logic_vector(3 downto 0));

end;

architecture one of hl61_mux2 is begin process(a,b,c,d,e,f,pa,pb,pc,pd,pe,pf,s) begin if s='0'

then ca<=a;cb<=b;cc<=c;cd<=d;ce<=e;cf<=f;

else ca<=pa;cb<=pb;cc<=pc;cd<=pd;ce<=pe;cf<=pf;

end if;

end process;

end;

以上二选一的文件,可以是数字钟中同时实现不同的功能 ,对 于数字钟的整点报时功能, 我们还需要设计一个可以使器发出声音的 则整点报时程序,如下:

ibrary ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity hl61_zdbs1 is port ( a,b,c,d:in std_logic_vector(3 downto 0);

kdo,kd: out std_logic); end;

architecture one of hl61_zdbs1 is begin process(a,b,c,d) begin if a>"0100"and b="0101"

and c="1001"

and d="0101"

then kdo<='1';

else kdo<='0';

if a="0000"

and b="0000"

and c="0000"

and d="0000"

then kd<='1';

else kd<='0';

end if;

end if;

end process;

end;

做出以上准备之后, 我们可以在之前做的调分调时数字钟的基础 上,通过与门的连接,做出具有整点报时功能的新的数字钟,他可以 在到达 59 分 55、56、57、58、59 秒低音响,整点高音响,并且间断 响铃,得到的新数字钟图形文件如下: 图十:整点报时数字钟 注意:在所写的 VHDL 文件中所设定的低音和高音代码一定要 清楚区分,一边在连接电路时连接错误,我们当时就出现了这样的错 误,两种代接反了,结果使得其先出现高音响后出现低音响的错误, 这也让我们吸取了教训,我们字儿程序实施一定要做到清晰可读,并 且连接电路时一定要小心! 第六课:分频器和跑表 在我们设计的数字钟中,秒的输入信号是 1HZ 时钟信号,秒的 前一级是 100 进制的秒表他的输入是 100hz 时钟,而装置上却没有 100hz 频率供选择,只有通过分频器的得到,因此我们设计了 3000 分频的分频器,其代码为:

library ieee; use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity hl61_3000fp is port(clk:in std_logic;

carry:out std_logic);

end;

architecture one of hl61_3000fp is signal m:std_logic_vector(11 downto 0);

begin process(clk) begin if clk'event and clk='1'

then if m="101110110111"

then m<="000000000000";

carry<='1';

else m<=m+1;

carry<='0';

end if;

end if;

end process;

end one;

接着,我们需要做的是跑表,它最大计时 99 秒 99 毫秒,所以, 通过编写,我们得到了跑表的 VHDL 代码: library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity hl61_paobiao is port(clk,clr,en:in std_logic;

mmg,mms,mmb,mg,ms,fg,fs:out std_logic_vector(3 downto 0));

end;

architecture one of hl61_paobiao is signal mmg1,mms1,mmb1,mg1,ms1,fg1,fs1:std_logic_vector(3 downto 0);

begin process(clk,clr,en) begin if clr='1'

then mmg1<="0000";mms1<="0000";mmb1<="0000";

mg1<="0000";ms1<="0000";fg1<="0000";fs1<="0000";

elsif clk'event and clk='1'

then if en='0'

then if mmg1="1001"

then mmg1<="0000";

mms1<=mms1+1;

else mmg1<=mmg1+1;

end if;

if mms1="1001"

then mms1<="0000";

mmb1<=mmb1+1;

end if;

if mmb1="1001"

then mmb1<="0000";

mg1<=mg1+1;

end if;

if mg1="1001"

then mg1<="0000";

ms1<=ms1+1;

end if;

if ms1="1001"

then ms1<="0000";

fg1<=fg1+1;

end if;

if fg1="1001"

then fg1<="0000";

fs1<=fs1+1; end if;

if fs1="1001"

then fs1<="0000";fg1<="0000";

ms1<="0000";mg1<="0000";

mmb1<="0000";mms1<="0000";mmg1<="0000";

end if;

end if;

end if;

end process;

mmg<=mmg1;

mms<=mms1;

mmb<=mmb1;

mg<=mg1;

ms<=ms1;

fg<=fg1;

fs<=fs1;

end; 秒表只是数字钟的一个子功能,因此也得和数字钟相联系,对于 这两个元件,我们可以通过上面的二选一相连接,图形如下: 图 11:跑表与数字钟 对于上述的图形, 两者可以通过 S 进行二选一操作, 通过 S 输入 的为高电平或低电平,进行功能的转换。

第七课:闹钟 说起闹钟,还是有点心寒的,因为在老师检查之前,我还没有完 成,在最后的时候再算简单的实现了,虽然老师没有来验收,但是, 我能够做出来, 心里还是无限喜悦的, 就如同别人说的, 结果不重要, 过程更美丽。

所谓闹钟,当然也得和数字中相结合,通过 S 输入的为高电平或 低电平来实现二选一,通过 24 和 60 进制计数器对闹钟定时,当数字 钟达到所设定的时间时,闹钟声会响起。也就是实现了我们所需要的 功能,其截图如下: 图 12:闹钟 做到这里,从整体上来讲,基本的功能算是完成了。但是,由于 时间的原因,我们还未将所有的功能连在一起,但是,做到了这里, 我也算是对 CPLD 有了了解了,不再是对他只有模糊地概念了。 总结 八周的 CPLD 学习就这样画上了完美的句号, 回想起这么久的学 习历程,开始的时候,老师在上面讲课,我们在下面糊里糊涂的不知 道在讲些什么,一步一步只知道跟着做,只知道把老师演示的每一步 都用笔记本记下来。然后轮到我们自己操作的时候 就依葫芦画瓢, 照着做。完全没有自己的理解,但是慢慢的,我也发现了其中的一些 规律和我们所因该注意的地方。逐渐的,我们也有了自己的理解,可 以自己动手了,虽然这个过程比较慢,但是,学习的过程是没有界限 的,只要学到了只是还是很开心的。

到了最后成果验收的时候, 我们的结果虽然不是很好, 当年我想, 只要我们也是努力了的。后来,我也作了自我检查,我们没做好的原 因有这些:首先,我们进入状态太慢了,开始的时候,安全依靠老师 的讲解,照着老师的来,没有自己思考,直到到了几次课后此有了自 己的思考内容。然后,我们对于错误的处理能力太差,出现错误后, 往往会手足无措,同时也浪费了大把的时间。最后,我们完全依赖课 上的时间,没有在课后时间下功夫。还有就是刚开始接触这类实验, 对于软件的和装置的使用有着相当大的欠缺,动手能力也不强。但我 相信,熟能生巧,经过以后的学习,对于这类的实验,我们做起来会 更加得心应手。

课程结束了,同时也留给我们不少的回忆,就如开始的时候老师 所讲的缘分,人与人之间确实有许多无法解释的缘分。我们应珍惜生 活中的际遇。

CPLD 的学习让我们获益匪浅,将是我们的记忆中的一笔财富。

郑州交通职业学院 《CPLD/FPGA应用》课程设计报告 课 程 设 计 题 目 : 基于FPGA用VHDL语言设计汽车尾灯 所属系别 电子信息工程系 专业班级 11大专电子信息工程技术1班 ...

后自己动手设计的综合实验:基于CPLD 的数字电子钟设计.该软 件方便了我们设计电... 并对项目进行逻辑综合,然后将项目最终设计结果加载到Altera 器件 中去,同时产生报告...

CPLD/FPGA 设计实验报告 实验名称: 时序电路设计基础 实验目的: 掌握 Quartus II 软件的基本使用方法,完成基本时序电路设计 学生姓名: 实验内容: 学号: 实验一 一、 创建...

 
  • 泥巴往事网(www.nbwtv.com) © 2014 版权所有 All Rights Reserved.