数电实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字电路与逻辑设计实验报告
学院:电子工程学院
班级:2013211207 学号:2013210999
姓名:
一.实验名称和实验任务要求
实验1
(1)实验名称:半加器
任务要求:用逻辑门设计实现一个半加器,仿真验证其功能,
并生成新的半加器图形模块单元。
(2)实验名称:全加器
任务要求:用实验(1)生成的半加器模块和逻辑门设计实现一
个全加器,仿真验证其功能。
(3)实验名称:3线-8线译码器
任务要求:用3线-8线译码器(74LS138)和逻辑门设计实现函数F=CBA+ CBA+ CBA+ CBA,仿真验证其功能。
实验2
(1)实验名称:数码管译码器
任务要求:用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,
发光二极管显示输出信号。
(2)实验名称:8421码转化成余3码
任务要求:用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,下载到实验板测试。要求用按键设定输入信号,
7段数码管显示输出信号。
(3)实验名称:奇校验器
任务要求:用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个‘1’时,输出为‘1’,否则输出为‘0’,仿真验证其功能,并下载到实验
板测试。要求用拨码开关设定输入信号,发光二极管显示输出信
号。
实验3
(1)实验名称:8421十进制计数器
任务要求:用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能。并下载到实验板测试。要求用按键设定输入信
号,发光二极管显示输出信号。
(2) 实验名称:分频器
任务要求:用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器,要求在Quartus Ⅱ平台上设计程序并仿真
验证设计。
(3) 实验名称:组合数码管译码器
任务要求:将(1)、(2)和数码管译码器3个电路进行链接,并下载到实验板来显示计数结果。
实验4
实验名称:数码管动态扫描控制器
任务要求:(1)用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上,仿
真验证其功能,并下载到实验板测试。
(2)用VHDL语言设计实现六个数码管滚动显示电路。
循环左滚动,始终点亮六个数码管,左进右出。状态为:012345
→123450→234501→345012→450123→501234→012345。
向左滚动,用全灭的数码管填充右边,直至全部变灭,然后再依次
从右边一个一个地点亮,状态为:012345→12345X→2345XX→
345XXX→45XXXX→5XXXXX→XXXXXX→XXXXX0→XXXX01→
XXX012→XX0123→X01234→012345,其中‘X’表示数码管不显
示。
二.实验三(3)和实验四模块端口及连接图
1.实验三(3)模块端口及连接图
端口列表
其中,clear为复位清零端(低电平有效),clk为时钟输入端,c为控制6个数码管亮灭信号(低电平有效),B为控制数码管7个管脚亮灭信号
连接图
2.实验四模块端口及连接图
端口列表
其中,clear为复位清零端(低电平有效),clk为时钟输入端,c为控制6个数码管亮灭信号(低电平有效),d为控制数码管7个管脚亮灭信号
连接图
三.实验一(1),实验三(3)和实验四的原理图或VHDL代码
1.实验一(1)全加器的的原理图
2.实验三(3)组合数码管译码器的VHDL代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY lj IS
PORT(
clk,clk1: IN STD_LOGIC;
clear2,clear1: IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
b:OUT STD_LOGIC_VECTOR(6 downto 0));
END lj;
ARCHITECTURE a OF lj IS
SIGNAL tmp: INTEGER RANGE 0 TO 5;
SIGNAL clktmp:STD_LOGIC;
BEGIN
PROCESS(clear1,clk)
BEGIN
IF clear1='0'THEN
tmp<=0;
ELSIF(clk'event AND clk='1')THEN
IF tmp=5 THEN
tmp<=0; clktmp<=NOT clktmp;
ELSE
tmp<=tmp+1;
END IF;
END IF;
END PROCESS;
SIGNAL Q_TEMP:STD_LOGIC_VECTOR(3 DOWNTO 0); PROCESS(CLKtmp)
BEGIN
IF CLEAR2='0' THEN
Q_TEMP<="0000";
ELSIF(CLKtmp'EVENT AND CLKtmp='1')THEN
IF Q_TEMP="1001" THEN
Q_TEMP<="0000";
ELSE
Q_TEMP<=Q_TEMP+1;
END IF;
END IF;
END PROCESS;
Q<=Q_TEMP;
PROCESS (a)
BEGIN
CASE q IS
WHEN"0000" => b<="1111110";
WHEN"0001" => b<="0110000";
WHEN"0010" => b<="1101101";