数字电路与逻辑设计实验总结报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二次实验是Quartus11原理图输入法设计,由于是第一次使用Quartus11软

件,实验中遇到了不少问题,总结起来主要有以下几个:

(1)在创建工程并且编译通过之后得不到仿真波形

解决方法:经过仔细检查,发现在创建符号文件时,未对其重新命名,使得符号文件名与顶层文件的实体名一样。在改变符号文件名之后成功的得到了仿真波形。

(2)得到的仿真波形过于紧密不便于观察

解决方法:重新对仿真域的时间进行设定,并且对输入信号的周期做相应的调整,最终得到了疏密有致的仿真波形。

实验总结及心得体会

通过本次实验我初步掌握了Quartus11的使用方法,并且熟悉了电路板的使用。在实验具体操作的过程中,对理论知识(半加器和全加器)也有了更近一步的理解,真正达到了理论指导实践,实践检验理论的目的。

实验操作中应特别注意的几点:

(1)刚开始创建工程时选择的目标芯片一定要与实验板上的芯片相对应。

(2)连接电路时要注意保证线与端口连接好,并且注意不要画到器件图形符号的虚线框里面。

(3)顶层文件的实体名只能有一个,而且注意符号文件不能与顶层文件的实体名相同。

(4)保存波形文件时,注意文件名必须与工程名一致,因为在多次为一个工程建立波形文件时,一定要注意保存时文件名要与工程名一致,否则不能得到正确的仿真结果。

(5)仿真时间区域的设定与输入波形周期的设定一定要协调,否则得到波形可能不便于观察或发生错误。

心得体会:刚接触使用一个新的软件,实验前一定要做好预习工作,在具体的实验操作过程中一定要细心,比如在引脚设定时一定要做到“对号入座”,曾经自己由于这一点没做好耗费了很多时间。实验中遇到的各种大小问题基本都是自己独立排查解决的,这对于自己独立解决问题的能力也是一个极大地提高和锻炼,总之这次实验我获益匪浅。

第三次实验是用VHDL语言设计组合逻辑电路和时序逻辑电路,由于Quartus11软件在之前已经使用过,所以本实验的主要任务就是编写与实验要求相对应的VHDL程序。

总体来说此次实验比较顺利,基本没有遇到什么问题,但有几点需要特别注意。首先是要区分实体名称和结构体名,这一点是程序编写的关键。其次在时序逻辑电路的设计实验中时钟的设置很关键,设置不当的话仿真波形可能不正确。

通过本次实验我初步学会用VHDL语言编写一些简单的程序,同时也进一步熟悉了Quartus11软件的使用。

实验八彩灯控制电路设计与实现

一、实验目的

1、进一步了解时序电路设计方法

2、熟悉状态机的设计方法

二、实验内容

用VHDL语言设计并实现一个彩灯控制(八个发光二极管)电路,仿真并下载验证其功能。彩灯有两种工作模式,可通过拨码开关或按键进行切换。

(1)单点移动模式:一个点在八个发光二极管上来回亮

(2)幕布式:从中间两个点,同时向两边依次点亮直至全亮,然后再向中间点灭,依次往复。

三、实验设计编码

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY shine IS

PORT( clk,a:IN STD_LOGIC;

b:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END shine;

ARCHITECTURE struc OF shine IS

SIGNAL temp:INTEGER RANGE 0 TO 49999999;

SIGNAL switch:STD_LOGIC_VECTOR(2 DOWNTO 0);

SIGNAL clkout:STD_LOGIC;

BEGIN

PROCESS(clk)

BEGIN

IF(clk'event and clk='1') THEN

IF temp=49999999 THEN

temp<=0;

ELSE temp<=temp+1;

END IF;

IF temp=49999999 THEN

clkout<='1';

ELSE clkout<='0';

END IF;

END IF;

END PROCESS;

PROCESS(clkout)

BEGIN

IF(clkout'event and clkout='1') THEN

switch<=switch+1;

END IF;

END PROCESS;

PROCESS(a,switch)

BEGIN

IF(a='0') THEN

CASE switch IS

WHEN"0001" =>b<="00000001";

WHEN"0010" =>b<="00000010";

WHEN"0011" =>b<="00000100";

WHEN"0100" =>b<="00001000";

WHEN"0101" =>b<="00010000";

WHEN"0110" =>b<="00100000";

WHEN"0111" =>b<="01000000";

WHEN"1000" =>b<="10000000";

WHEN"1001" =>b<="10000000";

WHEN"1010" =>b<="01000000";

WHEN"1011" =>b<="00100000";

WHEN"1100" =>b<="00010000";

WHEN"1101" =>b<="00001000";

WHEN"1110" =>b<="00000100";

WHEN"1111" =>b<="00000010";

WHEN OTHERS =>b<="00000000";

END CASE;

ELSIF a='1' THEN

CASE switch IS

WHEN"0001" =>b<="00011000";

WHEN"0010" =>b<="00111100";

WHEN"0011" =>b<="01111110";

WHEN"0100" =>b<="11111111";

WHEN"0101" =>b<="01111110";

WHEN"0110" =>b<="00111100";

WHEN"0111" =>b<="00011000";

WHEN"1000" =>b<="00000000";

WHEN"1001" =>b<="00011000";

WHEN"1010" =>b<="00111100";

WHEN"1011" =>b<="01111110";

WHEN"1100" =>b<="11111111";

WHEN"1101" =>b<="01111110";

WHEN"1110" =>b<="00111100";

WHEN"1111" =>b<="00011000";

WHEN OTHERS =>b<="00000000";

END CASE;

END IF;

END PROCESS;

END struc;

此次实验的主要问题是分频器的设置,开始并未设置分频器,clk的频率为50MHz,这个频率过高,若直接用于提供时钟,不但不能看清现象,还会因为周期过短导致输出错误,在加了一个50M的分频器后,使作用的有效时钟信号为1Hz。

四、实验总结

相关文档
最新文档