环形计数器和扭环形计数器设计

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科结业论文(设计、创作)

令狐采学

题目:环形计数器和扭环形计数器设计

学生姓名:学号:

院(系):电子信息工程学院专业:通信工程

入学时间:年月

导师姓名:职称/学位:

导师所在单位:

完成时间:年 5 月

环形计数器和扭环形计数器设计

摘要

现代世界的快速成长,夜生活已成为年夜大都城市不成缺少的生活,在夜生活中,五彩斑斓,形状不竭变更的LED灯走入了年夜家的生活。而各种形状的LED灯,随着技术的不竭成长,EDA设计获得不竭地成长和应用,LED灯所暗示的图案多种多样,LED灯中最简单的就数流水灯,而流水灯可以由环形计数器或扭环形计数器控制。本文以环形计数器和扭环形计数器为设计对象,根据其相关规律,设计其运行电路,以及用verilog硬件描述语言实现。内容主要涉及计数器的循环与自启动以及最后整个计数器的检测计划和仿真。本设计可以实现计数器的一些简单的控制,并用modelsim 进行仿真。

关键词:环形计数器和扭环形计数器设计;Verilog;modelsim。

Twisted ring counter ring counter and design

Abstract

The rapid development of the modern world, night life has

become indispensable in the life most of the city, in the nightlife, colorful, shape changing LED lights went into people's lives. And various shapes of LED lights, with the continuous development of technology, EDA design get continuously development and application of LED lamp represents pattern is varied, the most simple several water light LED lights, lights and running water can be controlled by the ring counter or twisting the ring counter. This article is based on the circular counter and twisting the ring counter as the design object. According to the counter relevant laws , the counter is to design the operation circuit .this design adopts hierarchical method and verilog hardware description language to realize. This article is mainly related to counter circulation and since the start and final of the test scheme and simulationThis design can realize some simple control counter, and modelsim simulation

Keywords: ring counter and twisting the ring counter design ;Verilog; modelsim.

目录

1.引言1

2.设计任务和要求1 2.1设计任务2 2.2设计要求3 3.设计原理3

3.1环形计数器界说3 3.2环形计数器工作原理3 3.3扭环形计数器界说3

3.4扭环形计数器工作原理3

4.环形计数器的设计3

5.扭环形计数器设计6

6.环形计数器的自启动设计9

7.扭环形计数器的自启动设计:11

8.结束语11主要参考文献错误!未定义书签。致谢16

1 引言

随着社会的不断成长,越来越多的LED灯用于城市的装饰,让城市在夜晚也可以变得炫彩精明,熠熠生辉。而LED灯的简单控制,使其产生各种绚丽的拼图,分而视之可以用一些简单的设计控制细小的模块而成。其中最简单的可以用环形计数器和扭环形计数器的原理和电路来控制,产生一种流水灯的效果。在此基础上,本文对环形计数器和扭环形计数器的的实现做了简单的设计,对两种计数器的原理,自启动,电路图进行简单的阐发和设计,并用Verilog硬件描述语言进行编写以及Altera公司的modelsim仿真工具进行仿真。

硬件描述语言的成长

硬件描述语言HDL是一种用形式化办法描述数字电路和系统的语言。利用这种语言,数字电路系统的设计可以从上层到下层(从笼统到具体)逐层描述自己的设计思想,用一系列分条理的模块来暗示极其庞杂的数字系统。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变成实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路ASIC或现场可编程门阵列FPGA自动规划布线工具,把网表转换为要实现的具体电路布线结构。

目前,这种高条理(highleveldesign)的办法已被广泛采取。据统计,目前在美国硅谷约有90%以上的ASIC和FPGA采取硬件描述语言进行设计。

硬件描述语言HDL的成长至今已有20多年的历史,并胜利地应用于设计的各个阶段:建模、仿真、验证和综合等。到20世纪80年代,已呈现了上百种硬件描述语言,对设计自动化曾起到了极年夜的增进和推举措用。可是,这些语言一般各自面向特定的设计领域和条理,并且众多的语言使用户无所适从。因此,急需一种面向设计的多领域、多条理并获得普遍认同的标准硬件描述语言。20世纪80年代后期,VHDL和VerilogHDL语言适应了这种趋势的要求,先后成为IEEE标准。

目前,硬件描述语言可谓是百花齐放,有VHDL,Verilog等等。VHDL虽然是1995年以前唯一制定为标准的硬件描述语言,但它却比较麻烦,并且其综合库至今也没有标准化,不具有晶体管开关级的描述能力和模拟设计的描述能力。目前的看法是,对年夜型的系统级数字电路设计,VHDL是较为合适的。

实质上,在底层的VHDL设计环境是由VerilogHDL描述的器件库支持的,因此,它们之间的互操纵性十分重要。目前,Verilog和VHDL的两个国际组织OVI、VI正在规画这一工作,准备成立专门的工作组来协调VHDL和VerilogHDL语言的互操纵性。OVI也支持不需要翻译,由VHDL到Verilog的自由表达。

V erilogHDL是在1983年,由GDA(Gate Way Design Automation)公司的Philmoorby首创的。Philmoorby后来成为VerilogXL的主要设计者和Cadence公司的第一合伙人。在1984~1985年,Philmoorby设计出来第一个名为VerilogXL的仿真器;1986年,他对VerilogHDL 的成长又作出了另一个巨年夜的贡献:提出了用于快速门级仿真的XL算法。

随着VerilogXL算法的胜利,V erilogHDL语言获得迅速成长。1989年,Cadence公司

收购了GDA公司,VerilogHDL语言成为Cadence公司的私有财富。1990年,Cadence公司决定公开VerilogHDL语言,于是成立了OVI(Open Verilog Internation)组织,担任增进VerilogHDL语言的成长。基于VerilogHDL的优越性,IEEE与1995年制订了VerilogHDL 的IEEE标准,及VerilogHDL13641995;宣布了VerilogHDL1364标准。这个标准中,加入了VerilogHDLA标准,是Verilog有了模拟设计描述的能力。

随着电子财产不竭成长与推进,硬件描述语言也会不竭的成长以适合现实情况的要求,VerilogHDL可能成长成为更高品级的语言,或者被跟高级的语言所替代和兼容。

Modelsim仿真工具

Modelsim是Model Technology(Mentor Graphics的子公司)的DHL硬件描述语言的仿真软件,该软件可以用来实现对设计的VHDL、Verilog或者是两种语言混合的法度进行仿真,同时也支持IEEE罕见的各种硬件描述语言标准。

无论从有毫的使用界面和调试环境来看,还是从仿真速度和仿真效果来看,Modelsim 都可以算得上是业界最优秀的DHL语言仿真软件。他是唯一的单核内支持VHDL和Verilog 混合仿真的仿真器,是做FPJA/ASIC设计的RTL级和门级电路仿真的首选;他采取直接优化的编译技术,TCL/TK技术和单一内核仿真技术,具有仿真速度快,编译代码与仿真平台无关,便于IP核呵护和加快法度错位定位等优点。

Modelsim最年夜的特点是其强年夜的调试功能。先进的数据流窗口,可以迅速追踪到产生错位或者不确定状态的原因。性能阐发工具帮忙阐发性能瓶颈,加速仿真。代码笼盖率检测确保测试的完备。多种模式的波形比较功能。先进的Signal Spy功能,可以便利地拜访VHDL、Verilog或两者混合设计中的底层信号。支持加密IP。

目前罕见的Modelsim分为几个不合的版本:Modelsim SE、Modelsim PE、Modelsim LE 和Modelsim OEM。其中Modelsim SE是主要版本。

2 设计任务和要求

2.1设计任务

设计一个环形计数器和扭环形计数器

2.2设计要求

熟悉数字电路,语言编辑以及相应的仿真软件仿真

3 设计原理

3.1环形计数器界说

环形计数器是由移位寄存器加上一定的反响电路构成的,它是由一个移位寄存器和一个组合反响逻辑电路闭环构成,反响电路的输出接向移位寄存器的串行输入端,反响电路的输入端根据移位寄存器类型的不合,可接向移位寄存器的串行输入端或某些触发器的输出端。

3.2环形计数器工作原理

四位环形计数器,它是把移位寄存器最低一位的串行输出作为高一级移位寄存器的串行

输入。环形计数器经常使用来实现脉冲顺序分派的功能(分派器)假设寄存器的初始状态为1000,那么在移位脉冲的作用下其状态变成0100到0010到0001最后又前往到1000的顺序转换,并且不竭循环往复的执行这一过程。由上述可知,该计数器的计数长度为N=n。

3.3扭环形计数器界说

扭环形计数器的界说同环形计数器的界说基本类似,只是在反响电路上略有不同。扭环形计数器的反响在高位端进过一个反向后再输出移位寄存器的最低位串行输入端。

3.4扭环形计数器工作原理

四位扭环形计数器,它是把移位寄存器最低一位的串行输出作为高一级移位寄存器的串行输入,最后的反响电路却是将最高位串行输出加个反向器后输入到最低位串行输入端。假设寄存器的初始状态为0000,那么在一位脉冲的作用下其状态变成1000到1100 (0011)

到0001最后又前往到0000的转换,并且不竭循环这一过程。由上述可知,该计数器的计数长度为N=2n。

4.环形计数器的设计

设计一个四位环形计数器步调如下:对设计一个四位环形计数器,共有16个状态,状态转移表如下表所示:

其中只有4个是有效状态。设其有效状态图如图4.1所示:

图4.1 设其无效状态如图4.2所示:

图4.2

可得如下表达式:

Q 11+n = Q n 4 Q 12+n =Q n 1 Q 1

3+n = Q n 2 Q 1

4+n = Q n 3

驱动方程:

D 1= Q n

4 D 2= Q n

1 D 3= Q n

2 D 4= Q n 3

用D 触发器构成的电路图如下图4.3所示:(用CP 取代图中VCC)

图4.3

用Verilog 语言描述如下:

module circle_counter (rst,clk, cnt); parameter CNT_SIZE = 4; input rst; input clk;

output [CNT_SIZE 1 : 0] cnt;

0001

0010

1000

0100

Q 4Q 3Q 2Q 1

0011 0111

1001 0110 1011 0101

1111

1010 0000

1110

1100

1101

reg [CNT_SIZE 1 : 0] cnt;

always@(posedge clk)

if(!rst)

cnt <= 4'b0001; //初始值

else

cnt <= {cnt[CNT_SIZE – 2 : 0],cnt[CNT_SIZE 1]}; //注意

是循环左移位,而非简单的移位

endmodule

输入激励如下:

`timescale 1ns/1ns

module circle_counter_tb;

parameter CNT_SIZE = 4;

reg rst,clk;

wire [CNT_SIZE 1 : 0] cnt;

parameter DEL Y = 100;

circle_counter mycounter(.rst(rst),.clk(clk),.cnt(cnt)); //例化,对源文件代码调用always #(DEL Y/2) clk = ~clk;//生成时钟

initial

begin

clk = 0; rst = 0;

#(2*DEL Y) rst = 1;

#(10*DEL Y) rst = 0;

#(3*DEL Y) $finish;

end

initial //检测不合时间cnt和rst的值

$monitor ($time,,,"cnt = %d, rst = %d",cnt,rst);

Endmodule

显示仿真结果如下图4.4所示:

图4.4

由上述仿真可知:该循环只能在0001,0010,0100,1000内循环才是正确有效地,当跳出这个循环时,该法度不克不及坚持在有效地循环内循环。而其他的状态均成无效状态而被浪费,并且一旦出错将很难回到有效状态继续循环。

5.扭环形计数器设计

设计一个四位扭环形计数器步调如下:对设计一个四位扭环形计数器,共有16个状态。状态转移表如下表所示:

得其状态图如下图5.1所示:(有效状态(左图),无效状态(右图)),该计数器的计数状态被等分红两半,每个循环的模都是8,即2N。因此,只需要规定其中一个为有效循环,则另一个就是无效循环。通常选择左边这个循环作为工作循环,因为在每次状态修改时,系统内只有一个触发器状态是修改的,这就避免了时序电路中得冒险现象。

图5.1

表达式为:

Q 1

1+n =

n

Q 4 Q 12+n = Q n 1 Q 1

3+n = Q n 2 Q 1

4+n = Q n 3。 驱动方程:

D 1=n

Q 4 D 2= Q n 1 D 3= Q n

2 D 4= Q n

3

用D 触发器构成的电路图如下图5.2所示:(用CP 取代图中VCC)

图5.2 用Verilog 语言描述如下:

module john_counter(rst ,clk ,cnt); input rst,clk;

parameter CNT_SIZE = 4; output [CNT_SIZE 1 : 0] cnt; reg [CNT_SIZE 1 : 0] cnt; always@(posedge clk) if(!rst)

0000 1000 0011 0001 1011 0101 0100

0111 1100 1111 1110 1101

1001 0010 1010

0110 Q 1Q 2Q 3Q 4

cnt <= 4'b0000; //初始值

else

cnt <= {~cnt[CNT_SIZE 2 : 0],cnt[CNT_SIZE 1]}; //

注意是循环移位,而非简单的移位

endmodule

激励代码:

`timescale 1ns/1ns

module john_counter_tb;

parameter CNT_SIZE = 4;

reg rst,clk;

wire [CNT_SIZE 1 : 0] cnt;

parameter DEL Y = 100;

john_counter mycounter(.rst(rst),.clk(clk),.cnt(cnt));

always #(DEL Y/2) clk = ~clk;

initial

begin

clk=0;rst=0;

#(2*DEL Y) rst = 1;

#(10*DEL Y) rst = 0;

#(3*DEL Y) $finish;

end

initial

$monitor ($time,,,"cnt = %d, rst = %d",cnt,rst);

Endmodule

显示仿真结果如下图5.3所示:

图5.3

6.环形计数器的自启动设计:

以上办法设计出的环形计数器其0001~1000为有效循环,其余均为无效循环。一旦计数

器进入无效循环,将坚持无效循环计数,从而不克不及够转入有效循环。因此,该计数器不具备自启动功能。

为了确保环形计数器工作在有效循环内,可以对上述电路进行改进,使之具有自启动功能。将Q n

1, Q n

2,Q n

3的输出经由或非门反响入D 1端,即可实现自启动功能。 电路图如下图6.1所示:(用CP 取代图中VCC)

图6.1 状态方程

Q 11+n =n

n Q Q Q 3

2n 1++ Q 12+n = Q n

1 Q 13+n = Q n

2 Q 14+n = Q n

3

状态转移图如下图6.2所示:

图6.2 用Verilog 语言描述如下:

module john_counter(rst,clk,cnt,D0,D1,D2,D3,LD); input rst,clk,D0,D1,D2,D3,LD; wire [3 : 0] DIN; output [3 : 0] cnt; reg [3 : 0] cnt;

assign DIN[3 : 0] = {D3,D2,D1,D0}; //add DIN to explain cnt in useless state always@(posedge clk) if(!rst)

cnt <= 4'b0000;

else if(!LD) //LD help to control the useless data into the circle cnt = DIN; else

cnt <= {cnt[2 : 0],~(cnt[2]|cnt[1]|cnt[0])};

endmodule

0000

1000

0011

0001 1011 0101

0100

0111 1100

1111

1110 1101

1001

0010

1010

0110 Q 4Q 3Q 2Q 1

激励法度:

`timescale 1ns/1ns

module john_counter_tb;

reg rst,clk,D3,D2,D1,D0,LD;

wire [3 : 0] cnt;

parameter DEL Y = 100;

john_countermy_counter(.rst(rst),.clk(clk),.cnt(cnt),.D3(D3),.D2(D2),.

D1(D1),.D0(D0),.LD(LD));

always #(DEL Y/2) clk = ~clk;

initial

begin

clk = 0; rst = 0; LD = 1; {D3,D2,D1,D0} = 4'b0000;

#DELY rst = 1;LD = 1;

#(8*DEL Y) LD = 0;{D3,D2,D1,D0} = 4'b0110; //chage DIN to examin useless state can enter into the useful state

#(3*DEL Y) LD = 1;

#(10*DEL Y) $finish;

end

endmodule

显示仿真结果如下图6.3所示:

图6.3

由上述阐发可知,由触发器构成环形计数器时,有年夜量的电路状态被看成无效的状态而被舍弃失落。修改反响输入端,不但能够实现电路的自启动功能,并且也能提高电路状态的使用效率。

7.扭环形计数器的自启动设计:

在上述设计中,扭环形计数器也是不克不及自启动的,对反响电路进行适当的修改,就可以获得可自启动的扭环形计数器,能使计数器在任何状态下都能进入有效循环中进行计数。修改后电路图如下图7.1所示:(用CP取代图中VCC)

图7.1

状态转移图如下图7.2所示:

图7.2 用Verilog 语言描述如下:

module john_counter(rst,clk,cnt,D0,D1,D2,D3,LD); input rst,clk,D0,D1,D2,D3,LD; wire [3 : 0] DIN; output [3 : 0] cnt; reg [3 : 0] cnt;

assign DIN[3 : 0] = {D3,D2,D1,D0}; //add DIN to explain cnt in useless state always@(posedge clk) if(!rst)

cnt <= 4'b0000;

else if(!LD) //LD help to control the useless data into the circle cnt = DIN; else

cnt <= {cnt[2 : 0],~(~((~cnt[2])&cnt[1])&cnt[3])}; endmodule 测试代码:

`timescale 1ns/1ns module john_counter_tb; reg rst,clk,D3,D2,D1,D0,LD; wire [3 : 0] cnt; parameter DEL Y = 100;

john_counter my_counter(.rst(rst),.clk(clk),.cnt(cnt),.D3(D3),.D2(D2), D1(D1),.D0(D0),.LD(LD)); always #(DEL Y/2) clk = ~clk; initial

0000 1000

0011

0001 1011

0101 0100

0111

1100 1111

1110

1101

1001

0010

1010

0110

Q 4Q 3Q 2Q 1

begin

clk = 0; rst = 0; LD = 1; {D3,D2,D1,D0} = 4'b0000;

#DEL Y rst = 1;LD = 1;

#(8*DEL Y) LD = 0;{D3,D2,D1,D0} = 4'b1101; //chage DIN to examin useless state can enter into the useful state

#(1*DEL Y) LD = 1;

#(10*DEL Y) $finish;

end

endmodule

显示仿真结果如下图3.7所示:

8.结束语

在本次毕设中,设计了环形计数器和扭环形计数器的非自启动和自启动的两种方法。对不合的电路和实际要求,采取不合的方法。设计过程中,我熟悉了Verilog得基本语法,测试法度的简单编写和modelsim的使用。对相关书籍的阅读,使我完成这次毕设的设计。

这次设计,让我对数字电路有了更深刻的了解和认识,对以后数字电路这一块的设计,让我有了更多的方法可供选择。长久的对Verilog硬件描述语言和modelsim仿真软件的接触,让我看到了我的缺乏,看到与社会企业的脱轨,鼓励着我不竭地学习已有的知识,紧跟变更潮流,不克不及抓住一种办法,不懂思辨。对这次毕设让我学到很多很多,我会不竭努力充分自己,学习更多知识,固然还会对Verilog硬件描述语言和modelsim仿真软件进行更深入的研究。

主要参考文献

[1]王钿,卓兴旺。《基于V erilog HDL的数字系统应用技术》国防工业出版社,

[2]李晓辉。《数字电路与逻辑设计》国防工业出版社,.

[3]康磊,宋彩利,李润洲.《数字电路设计及Verilog HDL实现》西安电子科技年夜学出版

社,.

致谢

相关文档
最新文档