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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数字逻辑课程设计实验报告.docx

1、数字逻辑课程设计实验报告 数字逻辑课程设计实验报告课程名称:数字逻辑课程设计姓 名:学 院:计算机科学与技术院 系:计算机科学与技术专 业:计算机科学与技术年 级:学 号:指导教师:2009年 9月10日一 实验目的通过硬件描述语言VHDL的编程,深入了解并掌握可编程芯片PLD的设计技术,加强学生对数字逻辑课程所学只是综合运用的能力。培养学生创造性思维能力和独立解决实际问题的能力。二 实验内容1. 利用VHDL语言完成实现红外线数据传输系统的设计任务,然后进行编译和仿真,保证设计的正确性.2. 生成熔丝图文件,下载到ispLSI1032芯片,通过实际线路进行验证.红外线数据传输系统的具体设计要

2、求如下:a. 通过开关K1-K8设定要传送的8bits信息,再通过置数按钮存放在系统内部,生成校验码同时送校验码指示灯显示。置数按钮在系统发送信息期间无效。b. 按发送按钮进入发送态,发送灯亮,系统先发送最高位,通过寄存器循环一位再连续发送其他位,此时3个数码管上的信息也随着改变,最后还要传送一个校验码。每按一次发送按钮,系统就发送一次信息。c. 接收端也是采用移位方式存入信息,在接受第一位时寄存器先清零。接收时数码管上的信息随着寄存器内容的变化而变化,接受到校验码后立即设置校验码指示灯,同时按偶校验判定接受是否正确,将结果在接受错指示灯上显示。d. 传输的过程中,接收端的校验指示灯熄灭。当接

3、收端接收0个数据后(1位校验码和8位数据位),接收端根据相应的校验方式来判断所接收的数据是否正确。接收端的校验指示灯亮,表示传输的数据正确;校验指示灯熄灭,表示传输的数据不正确。三 实验环境介绍1.软件平台介绍本次实验采用ISP(在系统编程)技术。在系统编程技术(In-System Programmabile)技术是Lattice公司率先提出的一种先进的编程技术,是指对器件、电路板或整个逻辑系统的电子功能课随时进行修改或重构,这种修改或重构可以在产品设计、制造过程中的每个环节,甚至在交付用户之后进行。采用了isp技术之后,硬件设计就可以变得像软件那样灵活而且易于修改。这不仅扩展了器件的用途,缩

4、短了系统的调试周期,也给目标设备的现场升级和维护工作带来了极大的方便。DICE-SEM型实验箱可支持Lattice公司的CPLD芯片ispLSI1032,目前实验室提供的开发系统为ispLever5.0。ispLEVER是Lattice公司推出的EDA软件,适用于所有Lattice公司的CPLD、SPLD、FPGA和FPSC可编程器件的设计,其设计可采用原理图、硬件描述语言以及混合输入三种方式,并能够对所设计的系统进行功能仿真和时序仿真。2.硬件平台介绍本次实验采用DICE-SEM型实验箱。DICE-SEM型实验箱是用于数字逻辑课程教学实验的专用设备。它提供了16位二档开关、16位发光二极管双

5、色显示灯、IC插座、六个七段BCD码译码显示数码管、数字频率计、电子笔、可调电阻、模拟扩展区、PLD/CPLD扩展区等,另外还有一个Lattice 1016E芯片提供了2个单脉冲开关、节拍信号、多种频率的时钟信号源等方面的功能。CPLD扩展区包含了一个CPLD下载板、2个针式扩展插座,下载板上有一片CPLD芯片Lattice ispLSI1032E和JTAG下载接口插座。实验箱电源方面采用220V交流供电,在面板上提供了多个+5V和地的电源接线插孔。本次实验主要用到可编程的ispLSI1032E芯片。四实验设计方案 1设计方案说明红外线传输系统包括发送方和接受方两端,都可以单独进行初始化清零处

6、理。在发送端可以设置准备发送的8bits的数据信息,连同一个奇偶校验位一起发送。接收端接受到8bits的数据信息和一位奇偶校验信息后,显示收到的数据信息和校验信息,并根据偶校验判定接收到的信息是否出错。实验时若无红外发送接收元件则可以用一根导线连接两端暂时代替。 2.程序模块图整体模块设计图如下:由于发送端和接收端可能属于两个独立的设备,即各自产生自己的工作CP,因此如何提高可靠性就成为设计时的一个关键问题,而两个CP也只能是相对接近,系统允许的误差越大,系统越可靠.在这里采用的策略是在工作CP的基础上分频以提高可靠性,如图中CP1和CP2都是采取在CP基础上16分频后的波形.可以设计为当计数

7、器1记到8时CP1变为高电平,当计数器3记到8时CP2变为高电平。 3.程序流程图a.发送模块流程图:发送模块使用两个计数器,计数器1用来对外接CP进行16分频产生时钟CP1,在clear后进入“准备好态”可以置高set来置数,然后置高start使信号sending置1,进入固定高电平状态准备传输。在此固定高电平时间段内,一旦出现低电平则接收端认为是噪音,不予接收。当计数器2在固定高电平状态从0011计数到0110后状态变为发送有效数据状态,开始发送置数寄存器获得的数据。发送过程中寄存器循环左移,发送8位后计数器2到1111状态,发送校验码信息,发送完后回到出示的“准备好态”,等待再次操作。发

8、送方置数只能在“准备好态”进行。各标识符含义:clr:清零标志set:置数标志start:按发送按钮后进入“固定高电平态”reg:buffer std_logic_vector (7 downto 0):八位寄存器位count1:std_logic_vector(3 downto 0):计数器1,对CP分频产生cp1cp1:计数器2的时钟count2:std_logic_vector(3 downto 0):计数器2,控制固定高电平态及发送计数sending:发送状态标志,初始为0,开始发送后为1,发送完毕后置0sendbit:发送位,在固定高电平段为1,在发送有效数据态时为发送位电平feng

9、ming:标志是否成功发送的蜂鸣clk1000:频率为1000HZ的时钟b.接收模块流程图:接受模块的设计基本和发送端基本相同。用计数器1对外接CP进行16分频产生时钟cp2,clear可以实现寄存器清零操作。接收到高电平后计数器2开始计数,大于0110后接收到的字节依次移位存入寄存器中。收到最后一位校验码后对接收到的数据作偶校验后根据校验结果显示“接受错”和蜂鸣。各标识符含义:clr:清零标志reg:buffer std_logic_vector (7 downto 0):八位寄存器位count1:std_logic_vector(3 downto 0):计数器1,对CP分频产生CP1cp2

10、:计数器2的时钟count2:std_logic_vector(3 downto 0):计数器2,控制固定高电平态及接受位计数sending:发送状态标志,初始为0,开始发送后为1recbit:接收位,初始为0,在固定高电平段接收到1,在发送有效数据态时为发送位电平recwrong:接受错误标志。初始为0,为1时表示接受错。checkcode:校验位。初始为0,传输后为接收到的校验位。fengming:标志是否成功发送的蜂鸣,接受正确时接clk1000,错误接clk500clk500:频率为500HZ的时钟clk1000:频率为1000HZ的时钟五实验步骤和观察记录基本实验步骤:1.根据实验要

11、求编写VHDL程序,完成进程的设计和题目的要求。2.编译成功后作出波形图进行仿真,通过仿真结果对源程序进行修改直至仿真结果正确。3.对文本文件进行编译产生熔丝图文件。4.设置引脚绑定。5.将PC机和JTAG接口通过电缆相连,把熔丝图文件下载到芯片中。6.按绑定的引脚连线,接好后开始实验验证。实验观察记录:1.发送位置成254,即“10 101 100”,先清零clr,再置数set,然后开始start,观察到发送校验码为0,当发送指示灯经过一段固定高电平态后开始发送有效数据,发送数码管和接收数码管依次经过254 132 252 145 312 225 053 126 254,传输完成后接收校验位

12、为0,接受错标志为0,发送端蜂鸣为clk1000,接收端蜂鸣为clk1000。2. 发送位置成133,即“01 011 011”,先清零clr,再置数set,然后开始start,观察到发送校验码为1,当发送指示灯经过一段固定高电平态后开始发送有效数据,发送数码管和接收数码管依次经过133 266 155 332 265 153 326 255 133,传输完成后接收校验位为1,接受错标志为0,发送端蜂鸣为clk1000,接收端蜂鸣为clk1000。3. 发送位置成133,即“01 011 011”,先清零clr,再置数set,然后开始start,观察到发送校验码为1,当发送指示灯处在固定高电平

13、态的过程中将发送位给一个低电平干扰,观察到接收端没有接收,蜂鸣和接收数码管皆无变化。4. 发送位置成133,即“01 011 011”,先清零clr,再置数set,然后开始start,观察到发送校验码为1,当发送指示灯经过一段固定高电平态后开始发送有效数据,在发送有效数据位的过程中给干扰,若干扰成功,可观察到报错灯亮,蜂鸣显示clk500。六对实验过程的分析、处理及讨论实验过程中,在clear置高后,程序执行寄存器清零操作以及各标志位的初始化操作,发送端的计数器1用来产生CP1,通过发送位先发送一段固定高电平态来实现接收端和发送端的同步。在接收端接收到发送位的高电平后接收端的计数器1开始计数。

14、这样就实现了同步。在同步开始计数后如果接收端在此固定高电平态中接收到了低电平信号,则接收端认为是噪声,返回初态,不予接收。实验程序设定的固定高电平态长度为3个半左右CP1周期,此间计数器2由0011计数到0110,当计数到0111时发送第一位数据,由于接收端的计数器与发送端计数器设计相同,故而在此时可以同步接受数据。在发送8位有效数据后即经过8个CP2周期后,计数器2为1111时发送一位校验码位,然后一次发送结束。回到初态等待下一次发送指令。通过设计发送端和接收端的计数器1,在cp的基础上16分频后用于发送位的计数,这样扩大了时钟周期,也就增大了系统允许的误差,是一种增加系统可靠性的设计。通过

15、设计在发送有效数据前先发送一段固定高电平,不仅可以实现发送端和接收端的同步问题,而且在此期间如果接收端一旦接受到低电平,可以判定为噪音,这种设计可以提高系统的抗干扰性。七实验方案的改进意见根据实验测试的结果,本次实验设计的结果能够正确完成传输任务,能正确显示校验码和报错功能以及蜂鸣,以及具有一定的报错功能,比较好的完成了实验任务,但仍存在一些不足:1.由于是用VHDL语言编写,有些语句的使用会直接增加实现电路的逻辑门的数量,这时我们所不希望的,所以在优化程序方面,应尽量做到心中有原理图有电路,这样对程序进行优化后可以减少需要的逻辑门的数量。2.如果能设置一个按钮,自动完成清零-置数-开始,这样

16、传输的外部控制更简单,更有利于高效地完成传输功能。八心得体会 这次数电程序设计实验可以说获益非浅,首先最深的感受是:哇,我们学的知识终于可以做出点东西来了!我们都已经大三了,说实话一直感觉课本知识按照老师说都是基础,一定要好好掌握,我们也照做了,我们考了个80,90多分。可是我们还是感到一种心虚,其实个人觉得好的学习应该在不断的有成就当中进行,当用自己所学的知道完成了任务的时候,那是一种成就感,是对自己学习的肯定,就会给自己带来无限的信心和继续学习的热情,我觉得不断地去实践并取得一定成果,这样学习是最好的。这次数电实验给了我们一次真正展现自己能力的机会,我通过自己的不断努力,我也终于成功了!第

17、二点感受颇深的是自己发现课本上学的东西真的是纸上谈兵。我们只能从书本上的字里行间看到说电路中会存在竞争存在险象,可是我们根本就没有办法真正体会到其重要性和如何预防等措施。这次数电实验,通过自己动手,自己发现问题,我看到了竞争并解决了竞争。我通过加长导线的办法成功避免了一处竞争,当我成功的时候,我发现实验的重要性。还有个问题是越到后来,接线和芯片使用多起来,电路就难免变的不稳定,查起问题来又不方便,何况不是错误是不稳定问题,这些问题在课堂上只听老师讲讲是完全体会不到的。但我知道我都做到这个地步了,我不能放弃,好多次我自己很是烦躁,直接去吃饭或者不去做实验来逃避问题,但我清醒的知道问题还是要解决的

18、,我鼓起勇气,耐着性子,面对强大的困难,我不再退缩,我从检查线路开始,到检查芯片,到检查导线(有一次导线坏了的问题还真是存在),和我的搭档不懈的努力,终于问题还是迎刃而解。我知道没有解决不了的问题,只有有信心,只有有勇气,只要有耐心,没有战胜不了的拦路虎!我衷心的感谢这次数电实验,给我的启发是巨大的,给我的收获是无限的。附录:VHDL源码-send.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity send is port

19、(input:in std_logic_vector(7 downto 0); cp,clr,set,start,clk1000:in std_logic; reg:buffer std_logic_vector(7 downto 0); sending:buffer std_logic; sendbit,check,fengming:out std_logic);end send;architecture fasong of send issignal count2:std_logic_vector(3 downto 0);signal cp1:std_logic;begincount1:p

20、rocess(cp,clr,start) variable count1:std_logic_vector(3 downto 0); variable m:std_logic;begin if clr=1 then count1:=0000; m:=0; elsif startevent and start=1 and m=0 then m:=1; elsif cpevent and cp=1 and m=1 then if count1=1111 then count1:=0000; else count1:=n+1; end if; end if; if count18 then cp1=

21、0; else cp1=1; end if;end process;count2:process(cp1,clr,start)begin if clr=1 then count2=0011; sending=0; elsif startevent and start=1 and sending=0 then sending=1; elsif cp1event and cp1=1 and sending=1 then if count2=1111 then count2=0011; sending=0; else count2=count2+1; end if; end if;end proce

22、ss;shift8:process(cp1,clr,k,sending,count2) variable checkcode,t:std_logic;begin if clr=1 then reg=00000000; checkcode:=0; sendbit=0; elsif sending=0 then if set=1 then reg(7 downto 0)=input(7 downto 0); checkcode:=k(0) XOR k(1); l1:for i in 2 to 7 loop checkcode:=checkcode XOR k(i); end loop l1; ch

23、eck=checkcode; end if; sendbit=0; elsif sending=1 then if count20110 then sendbit0101 and count21110 then t:=reg(7); l2:for i in 6 downto 0 loop reg(i+1)=reg(i); end loop l2; reg(0)=t; sendbit=t; elsif cp1event and cp1=1 and count2=1110 then sendbit=checkcode; end if; end if;end process;p1:process(c

24、lk1000,count2)begin if count2=1111 then fengming=clk1000; elsif count2=0100 then fengming=0; end if;end process; end fasong;-receive.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity receive is port(cp,clr,recbit,clk1000:in std_logic; reg

25、:buffer std_logic_vector(7 downto 0); check,recwrong:buffer std_logic; fengming:out std_logic);end receive;architecture jieshou of receive issignal count2:std_logic_vector(3 downto 0);signal cp2,clk500:std_logic;begincount3:process(cp,clr,recbit) variable count1:std_logic_vector(3 downto 0); variabl

26、e m:std_logic;begin if clr=1 then count1:=0000; m:=0; elsif recbitevent and recbit=1 and m=0 then m:=1; elsif cpevent and cp=1 and m=1 then if count1=1111 then count1:=0000; else count1:=count1+1; end if; end if; if count18 then cp2=0; else cp2=1; end if;end process;count4:process(cp2,clr,recbit)beg

27、in if clr=1 then count2=0011 and count2=0110 then if cp2event and cp2=1 then if regbit=0 then count2=0011; else count2=0111 and cp2event and cp2=1 then if count2=1111 then count2=0011; else count2=count2+1; end if; end if;end process;shift8:process(cp2,clr,recbit,count2) variable checkcode:std_logic

28、;begin if clr=1 then reg=00000000; checkcode:=0; check=0; recwrong0110 and count21111 then l1:for i in 6 downto 0 loop reg(i+1)=reg(i); end loop l1; reg(0)=recbit; elsif count2=1111 then checkcode:=recbit; check=recbit; l2:for i in 0 to 7 loop checkcode:=checkcode XOR reg(i); end loop l2; if checkco

29、de=1 then recwrong=1; end if; end if; end if;end process;p2:process(clk1000) variable n:std_logic;begin if clk1000event and clk1000=0 then if n=1 then n:=0; else n:=1; end if; end if; if n=0 then clk500=clk1000; else clk500=0; end if;end process; p1:process(clk1000,clk500,count2,check)variable a:std_logic;begin if clr=1 then a:=0; fengming=0100 and count21110 then fengming=0; elsif count2=0011 and a=1 then if check=1 then fengming=clk500; else fengming=clk1000; end if; end if;end process;end

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

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