EDA技术试验报告
- 格式:doc
- 大小:216.93 KB
- 文档页数:9
实验三 含异步清0和同步时钟使能的4位加法计数器的设计
一、实验目的
学习时序电路的设计、仿真和硬件测试,学习用VHDL 编程设计电路。
二、实验原理
图3-1是一含计数使能、异步复位和计数值并行预置功能4位加法计数器,图中间是4位锁存器;rst 是异步清信号,高电平有效;clk 是锁存信号;D[3..0]是4位数据输入端。
当ENA 为'1'时,多路选择器将加1器的输出值加载于锁存器的数据端;当ENA 为'0'时将"0000"加载于锁存器。
三、实验仪器设备和材料清单
微型计算机 ZYE1502D 型EDA 实验箱 EPF10K10LC84-4下载板
四、实验内容 新建项目
新建VHDL 文件 输入VHDL 代码
编译 新建矢量波形图 元件封装 设置相关值 仿真 编译 下载测试
开关、按键的位置
AS1:(2)、(3)、(4)档拨向上(ON );(1)档拨向下
图3-1 含计数使能、异步复位的4位加法计数器
LJ1:跳线按2、3脚
TJ1:设为1HZ
VHDL代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT4B IS
PORT (CLK : IN STD_LOGIC;
RST : IN STD_LOGIC;
ENA : IN STD_LOGIC;
OUTY : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT : OUT STD_LOGIC );
END CNT4B;
ARCHITECTURE behav OF CNT4B IS
SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
P_REG:PROCESS(CLK, RST, ENA)
BEGIN
IF RST = '1' THEN CQI <= "0000";
ELSIF CLK'EVENT AND CLK = '1' THEN
IF ENA = '1' THEN CQI <= CQI + 1;
END IF;
END IF;
OUTY <= CQI ;
END PROCESS P_REG; --进位输出
COUT<=CQI(0) AND CQI(1) AND CQI(2) AND CQI(3);
END behav;
五、仿真波形图
六、数据分析
在第十六个时钟上升沿还没到的时候,进位输出出现瞬时高电平,储存器造成的。
七、思考题
1、程序中是否可以不定义信号CQI,而直接用输出端口信号完成加法运算,即: OUTY <= OUTY + 1 ?
答:是不可行的,程序中的输出cq是不可读的,VHDL里面规定输出端口不能做为赋值来用,另外,如果没有一个变量来保存程序的计数值,那么程序就相当于一个组合逻辑电路,不具备计数的功能。
八、实验心得
刚开始仿真的时候,由于设置仿真的时间太小了,所以造成达不到预想的效果,在仿真设置(time analysis settings)里面加了时序设置,造成严重延时,后来把这个去掉,但是在还没达到16个时钟上升沿的到来,进位输出出现了瞬时高电平。
经过搜索相关资料了解其原因,加深此实验的了解和明白其意义。
实验六混合输入方法设计一位全加器
一、实验目的
1、用VHDL创建半加器元件符号;
2、用创建的半加器元件图连接完成全加器;
3、进行功能、时序仿真,并下载到实验箱观察结果。
二、实验原理
本实验是利用混合输入方法来完成全加器电路的设计。
首先利用VHDL设计出半加器,作为底层元件,再利用图形输入法调用该底层元件来完成全加器的设计。
如图5-1所示。
图5-1
三、实验仪器设备和材料清单
微型计算机ZYE1502D型EDA实验箱EPF10K10LC84-4下载板
四、实验内容
新建项目新建VHDL文件输入VHDL代码编译得到半加器的符号新建block 完成全加器的原理图编译新建矢量波形图文件设置相关值仿真封装元件下载测试
开关、按键的位置
AS1:(1)、(2)、(3)、(4)档拨向上(ON);
LJ1:跳线按2、3脚
VHDL代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY h_adder IS
PORT(a, b: IN STD_LOGIC;
co, so : OUT STD_LOGIC);
END ENTITY h_adder;
ARCHITECTURE one OF h_adder is
BEGIN
so <= NOT(a XOR (NOT b)) ;
co<=not(a NAND b);
END ARCHITECTURE one;
五、仿真波形图
六、实验心得
刚开始仿真的时候,由于没有理解全加器的原理,误将半加器的VHDL的代码来仿真,幸好,及时发现并进行改正。
所以得到预想的效果。
在此,让我更进一步了解到实验不是得出结果就可以了,要思考其原理和作用。
数控分频器的设计
一、实验目的
进一步熟悉用VHDL编程设计电路的知识,学习数控分频器的设计、分析和测试方法。
二、实验原理
数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比。
数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。
三、实验仪器设备和材料清单
微型计算机ZYE1502D型EDA实验箱EPF10K10LC84-4下载板
四、实验内容
新建项目新建VHDL文件输入VHDL代码编译新建矢量波形图元件封装设置相关值仿真编译下载测试
VHDL代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY PULSE IS
PORT ( CLK : IN STD_LOGIC;
D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
FOUT : OUT STD_LOGIC );
END;
ARCHITECTURE one OF PULSE IS
SIGNAL FULL : STD_LOGIC;
BEGIN
P_REG: PROCESS(CLK)
VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
IF CNT8 = "11111111" THEN
CNT8 := D; --当CNT8计数计满时,输入数据D被同步预置给计数器CNT8
FULL <= '1'; --同时使溢出标志信号FULL输出为高电平
ELSE CNT8 := CNT8 + 1; --否则继续作加1计数
FULL <= '0'; --且输出溢出标志信号FULL为低电平
END IF;
END IF;
END PROCESS P_REG ;
P_DIV: PROCESS(FULL)
VARIABLE CNT2 : STD_LOGIC;
BEGIN
IF FULL'EVENT AND FULL = '1'
THEN CNT2 := NOT CNT2;--如果溢出标志信号FULL为高电平,D触发器输出取反IF CNT2 = '1' THEN FOUT <= '1';
ELSE FOUT <= '0';
END IF;
END IF;
END PROCESS P_DIV ;
END;
五、仿真波形图
六、思考题
你在实验过程中是否都能听到喇叭发出的声音?为什么?
答:能;分频产生不同的频率致使喇叭振荡,从而能听到其发出的声音。
七、实验心得
由于此实验的VHDL代码比较长,所以刚开始时不是很明白其怎样达到分频的效果。
实验后查找相关的资料及在老师的指导下,对其有一定的理解,但是还存在许多不足,需要加强读程序的能力。