五位纽环计数器.docx

上传人:b****5 文档编号:8128378 上传时间:2023-01-29 格式:DOCX 页数:6 大小:152.93KB
下载 相关 举报
五位纽环计数器.docx_第1页
第1页 / 共6页
五位纽环计数器.docx_第2页
第2页 / 共6页
五位纽环计数器.docx_第3页
第3页 / 共6页
五位纽环计数器.docx_第4页
第4页 / 共6页
五位纽环计数器.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

五位纽环计数器.docx

《五位纽环计数器.docx》由会员分享,可在线阅读,更多相关《五位纽环计数器.docx(6页珍藏版)》请在冰豆网上搜索。

五位纽环计数器.docx

五位纽环计数器

五比特纽环计数器设计

一、设计要求:

用D触发器来设计一个五比特纽环计数器要求用观察其计数器序列;2)列出至少三个制约系统正常工作的最高频率的因素;3估计系统的最高工作频率。

二、设计原理:

纽环计数器又叫作约翰逊计数器,五位纽环计数器由五个D触发器构成,后四位D触发器的输入由分别由前一个的触发器的输出作为输入,而最高位的输入由最低位的输出经过反向后输入,因此五位纽环计数器的有效状态位有2n个(这里n=5)所以有十个有效状态,所以有32-10=22个状态是非法的。

我们使用五位计数器就是要使它在正常状态中工作,才能达到理想的工作状态,如果进入了非法状态,那么计数器就不能正常工作了。

所以要使(B’00000’)成为初始状态这样才能使得计数器进入非法状态后经过初始才能使计数器回到正常状态中去。

因此根据这个原理我们可以建立初步的设计思想。

三、实验过程

首先根据设计要求对五位纽环计数器的工作状态进行分析,通过计算可以得出该计数器有以下几个有效状态:

纽环计数器的真值表

当前状态

下一个状态

B"00000"

B"10000"

B"10000"

B"11000"

B"11000"

B"11100"

B"11100"

B"11110"

B"11110"

B"11111"

B"11111"

B"01111"

B"01111"

B"00111"

B"00111"

B"00011"

B"00011"

B"00001"

B"00001"

B"00000"

其余未列出的状态均为非法状态。

根据上面的真值表利用AHDL硬件设计语言就可以在QuartusⅡ软件中进行设计。

在设计中除了需要满足正常状态的循环计数以外,我们还应该注意计数器进入非法状态后的工作情况,如果进入非法状态系统就不会回到正常工作状态了,这就需要在设计过程中对非法状态进行编程,以便使得系统进入非法状态后能自动回到正常状态。

这可以运用AHDL中的CASE语句,把非法状态区分。

(程序见附表)

编程工作完成后就需要进行编译,运用QuartusⅡ软件中的编译工具可以对设计进行编译来检查所编程序的正确与否以便及时修改。

编译成功后下一步就是仿真,来验证设计是否满足题目所提出的要求。

在设计中Mem[]表示触发器的输出,T0—T9表示计数器在各有效状态时产生的脉冲,这可以作为计数器的解码器表示计数器计数到了那个状态。

的通过仿真图可以看见Mem[]的确是按照真值表的内容输出的,T0—T9在每个状态时有且只有一个脉冲输出。

可见设计是满足题目需要的。

 

在仿真波形图中我们可以看到若计数器工作在正常循环状态,那么解码器就可以输出瀑布型脉冲来显示当前计数状态。

我们可以借此来进行逻辑控制。

作为设计最终我们要投入实际工作,所以要对设计工作状态进行必要的时序分析。

作为计数器我们要关心它的最大计数频率。

因此利用时序分析工具可以看到最大工作频率。

由下图可以看见该计数器工作的最大频率为422.12MHZ

 

 

四、试验结论:

五位纽环计数器是一种较为简单的逻辑控制的实现,可以根据当前的状态准确地控制下一状态。

系统的状态被一系列的组合逻辑所驱动,所以它的工作只有在:

输入的驱动功能(存储元件的输出)达到稳定;传播时延(这种时延决定于组合逻辑与存储元件的同步脉冲输出的的时延)之后才能达到稳定。

根据分析这就是影响计数器最大频率的因素此外还有有:

(时钟建立时间)

(时钟保持时间)

(时钟到输出延时)这几种时延的长短决定了最大工作频率。

通过本次试验,我具体进一步熟悉了QuartusⅡ软件的使用,初步掌握了编程技巧,加深了AHDL语言的使用的熟悉程度。

进一步了解了时序分析在硬件设计中的重要性。

 

附AHDL源程序

SUBDESIGN'twist5'

clock:

INPUT;

Mem[4..0]:

OUTPUT;

T9,T8,T7,T6,T5,T4,T3,T2,T1,T0:

OUTPUT;

VARIABLE

Mem[4..0]:

DFF;

BEGIN

Mem[4..0].clk=clock;

CASEMem[4..0]IS

WHENB"00010",B"00100",B"01000"=>

Mem[4..0].d=B"00000";

WHENB"10100",B"10010",B"10001",B"01100",B"01010",B"01001",B"00110",B"00101"=>

Mem[4..0].d=B"00000";

WHENB"11010",B"11001",B"10110",B"10101",B"10011",B"01110",B"01101",B"01011"=>

Mem[4..0].d=B"00000";

WHENB"10111",B"11011",B"11101"=>

Mem[4..0].d=B"00000";

WHENOTHERS=>

Mem[3..0].d=Mem[4..1].q;

Mem[4].d=!

Mem[0];

ENDCASE;

%GENERATET0toT9%

IF(Mem[4..0]==B"00000")THEN

T0=VCC;

ELSET0=GND;

ENDIF;

IF(Mem[4..0]==B"10000")THEN

T1=VCC;

ELSET1=GND;

ENDIF;

IF(Mem[4..0]==B"11000")THEN

T2=VCC;

ELSET2=GND;

ENDIF;

IF(Mem[4..0]==B"11100")THEN

T3=VCC;

ELSET3=GND;

ENDIF;

IF(Mem[4..0]==B"11110")THEN

T4=VCC;

ELSET4=GND;

ENDIF;

IF(Mem[4..0]==B"11111")THEN

T5=VCC;

ELSET5=GND;

ENDIF;

IF(Mem[4..0]==B"01111")THEN

T6=VCC;

ELSET6=GND;

ENDIF;

IF(Mem[4..0]==B"00111")THEN

T7=VCC;

ELSET7=GND;

ENDIF;

IF(Mem[4..0]==B"00011")THEN

T8=VCC;

ELSET8=GND;

ENDIF;

IF(Mem[4..0]==B"00001")THEN

T9=VCC;

ELSET9=GND;

ENDIF;

END;

 

,Up3ICj4stBs1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1