数字电路与逻辑设计实验总结报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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。
四、实验总结