异步十二进制加减计数器 课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
集成电路课设报告
VHDL语言描述能力强,覆盖面广,抽象能力强,所以用VHDL语言作为硬件模型建模很合适。设计者的原始描述是非常简练的硬件描述,经过EDA工具综合处理,最终生成付诸生产的电路描述或版图参数描述的工艺文件。整个过程通过EDA工具自动完成,大大减轻了设计人员的工作强度,提高了设计质量,减少了出错的机会。
VHDL语言可读性好。VHDL既能被人容易读懂又能被计算机识别,作为技术人员编写的原文件,既是计算机程序、技术文档和技术人员硬件信息交流文件,又是签约双方的合同文件。VHDL语言中设计实体、程序包、设计库,为设计人员重复利用别人的设计提供了设计手段。重复利用他人的IP模块和软核是VHDL 的特色,许多设计不必个个都从头再来,只要在更高层次上IP模块利用起来,就能达到事半功倍的效果。
本实验就是用VHDL语言设计一个异步十二进制加减计数器。
一、题目:异步十二进制加减计数器
二、电路工作原理
所谓计数器就是指能够记忆时钟信号脉冲个数的时序逻辑电路,它是数字电路中应用及其广泛的一种基本逻辑单元,不仅能用于脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。其原理就是将几个触发器按照一定的顺序连接起来,然后根据触发器的状态按照一定的规律随时钟信号的变化来记忆时钟的个数。
1、同步计数器和异步计数器
根据计数器脉冲引入方式的不同,计数器分为同步计数器和异步计数器两大类。(功能比较如下表所示)
其中同步计数器是将计数脉冲同时引入到各级触发器,当输入计数时钟脉冲触发时,各级触发器的状态同时发生转移,而异步计数器是将计数器的低位计数触发器的输出作为相邻计数触发器的时钟脉冲,这样逐级串行连接起来的一类计数器。也就是说,每一个触发器的翻转时刻并不是由时钟信号来同步的,而是由它下一位触发器的输出决定的。
2、置“0”方式——异步置“0”和同步置“0”
异步置“0”方式:其置零信号Rd是经缓冲门直接加在触发器的R端的。
同步置“0”方式:当置“0”信号到达时,计数器并不立即置“0”,而是在有
CP脉冲上升沿到来时,电路才被置零。
可逆计数器就是指在输入时钟信号脉冲的控制下,既可以进行递增计数也可以进行递减计数的一类特殊计数器。对于具体的可你计数器来说,需要定义一个用来控制计数器方向的控制端口updown:当控制端口updown的值为逻辑‘1’时,可逆计数器进行加1操作,即递增计数,当控制端口updown的值为逻辑‘0’时,可逆计数器进行减1操作,即递减计数。
通过上述分析就可以明确地了解:
程序1是异步置0的同步可逆计数器
程序2是由低位触发器的输出提供高位触发器的时钟信号的,从而实现了异步加减计数。
三、VHDL设计思路与程序
(一)程序1
1、VHDL设计思路
设计中,CP是时钟输入端,下降沿有效;Rd为清零控制端,低电平有效;updown为计数方式控制端,updown=“1”时作加法计数,updown=“0”
时作减法计数。在计数工作之前,先由Rd给一个清零信号,使四个数据输
入值都为“0”。y3,y2,y1,y0为四个数据输出端,这就实现了异步清零。当updown=“1”,Rd=“1”时,计数器进行加法计数,即从“0000”依次计数
到“1011”,当updown=“0”,Rd=“1”时,计数器进行减法计数。
2、源程序及注释
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity yu is 实体说明
port (cp,rd,updown:in std_logic; 定义端口
q:out std_logic_vector(3 downto 0));
end yu;
architecture yu of yu is 结构体
signal y:std_logic_vector(3 downto 0); 定义信号
begin
process (cp,rd) 进程开始
begin
if rd='0'then 清零
y<="0000";
else
if (cp'event and cp='0')then 时钟信号为下降沿时
if (updown='1')then 进行加法计数
if y="1011"then 到11有进位,清零
y<="0000";
else
y<=y+1; 结果加1
end if;
else 否则进行减法计数
if y="0000"then 到0有借位
y<="1011";
else
y<=y-1; 结果减1
end if;
end if;
end if;
end if;
end process; 进程结束
q<=y; 输出结果
end yu; 程序结束
(二)程序2
1、VHDL设计思路
设计中,clk是时钟输入端,上升沿有效; updn为计数方式控制端,updn=“1”时作加法计数,updn=“0”时作减法计数;c是进位/借位输出端;c0为个位最高位输出。在计数工作之前,个位q和十位k全部置0。个位由时钟上升沿触发加/减1,十位由个位的进位/借位触发,从而实现十位的变化,即异步可逆计数。当updown=“1”时,计数器进行加法计数,个位从“0”依次计数到“9”,进位,十位由“0”到“1”,当计数到11时清零;同理,当updown=“0”时,计数器进行减法计数。
2、源程序及注释
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity yu1 is