文档库 最新最全的文档下载
当前位置:文档库 › 基于Verilog HDL的彩灯控制器

基于Verilog HDL的彩灯控制器

基于Verilog HDL的彩灯控制器
基于Verilog HDL的彩灯控制器

物联网工程132班,许潇洒彩灯控制的设计(CPLD/FPGA课程设计)CPLD/FPGA课程设计

项目名称基于FPGA的彩灯控制

专业班级物联网工程132班

学生学号 2013133043

学生姓名许潇洒

指导教师邓佳宾

2016年6 月15 日

I

物联网工程112班,姓名周浩杰(CPLD/FPGA课程设计)

摘要

本课程设计提出基于FPGA的彩灯控制器的设计与分析,设计由分频器模块,数据选择器模块,彩灯控制模块组成,基本原理是通过分频器产生不同频率时钟信号,表示彩灯显示的快慢,然后通过数据选择器进行选择,进而通过彩灯花型控制器显示不同种类的彩灯花型。本设计运用运用Verilog HDL语言在Modelsim软件上进行了实验程序的编译和波形的仿真,具有代码简单易懂,功能易实现的特点,通过不断地调试和代码的多次完善,最终实现完整的彩灯控制器,达到了自主设计逻辑电路的水平。

关键词:彩灯控制;Verilog HDL语言;Modelsim软件

Abstract

The curriculum design is proposed based on FPGA octal lantern controller design and analysis, design by the frequency divider module, data selector module lantern control module, the basic principle is through a frequency divider generated clock signal with different frequency and express the lantern display of speed, then through the data selector, and then through the lantern flower type controller display lights in different kinds of flowers. This design by using Verilog HDL language in the Modelsim software of experimental program compiling and waveform simulation, with easy to understand code, function is easy to realize the characteristics by continuous debugging and code improved several times, and ultimately complete the lantern controller, up to the level of the independent design of logic circuit.

Keywords:The lantern controller;Verilog HDL language ;The Modelsim software

III

目录

摘要......................................................................................................................................... I Abstract .................................................................................................................................... III 第一章绪论 (1)

1.1 课题背景 (1)

1.2 彩灯控制的实际研究意义 (3)

第二章彩灯控制相关模块的设计以及原理 (4)

2.1 总体设计 (4)

2.1.1 方案比较 (4)

2.1.2 方案论述 (5)

2.1.3 方案选择 (5)

2.2 相关模块 (5)

2.2.1 时钟信号模块 (5)

2.2.2 节拍快慢控制模块 (6)

2.2.3 彩灯控花型控制模块 (6)

第三章彩灯控制的软件程序设计 (8)

3.1 Modelsim软件介绍 (8)

3.2 彩灯控制程序设计 (9)

3.2.1 分频器程序 (9)

3.2.2 数据选择器程序 (10)

3.2.3 彩灯花样程序 (11)

第四章仿真调试 (13)

4.1 仿真过程 (13)

4.2 仿真结果 (15)

结论 (19)

参考文献 (20)

附录 (21)

致谢 (28)

第一章绪论

1.1 课题背景

1. FPGA

FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有:

1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。

2)FPGA可做其它全定制或半定制ASIC电路的中试样片。

2)3)FPGA内部有丰富的触发器和I/O引脚。

4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。

可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。

2. EDA

当今社会是数字化的社会,也是数字集成电路广泛应用的社会,数字本身在不断的进行更新换代。它由早起的电子管、晶体管、小中规模集成电路发展到超大规模集成电路以及许多具有特定功能的专用集成电路。而EDA技术就是以微电子技术为物理层面,现代电子设计为灵魂,计算机软件技术为手段,最终形成集成电子系统或专用集成电路ASIC为目的的一门新兴技术。

EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。它以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。EDA技术(即Electronic Design Automation技术)就是依赖强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成的设计文件,自动的完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。他在硬件实现方面融合了大规模集成电路制造技术、IC版图设计、ASIC测试和封装、FPGA(Field Programme Gate Array)CPLD(Complex Programme Logic Device)编程下载和自动测试等技术:在计算机辅助工程方面融合了计算机辅助设计(CAD),计

算机辅助制造(CAM),计算机辅助测试(CAT),计算机辅助工程(CAE)技术以及多种计算机语言的设计概念;而在现代电子学方面则容纳了更多的内容,如电子线路设计理论、数字信号处理技术、数字系统建模和优化技术及长线技术理论等。

硬件描述语言HDL是EDA技术的重要组成部分,常见的HDL主要有VHDL、Verilog HDL、ABEL、AHDL、System Verilog和System C。其中VHDL、Verilog HDL和现在的EDA设计中使用最多,并且我们学习的是Verilog的编程方法及实用技术。

3.Verilog HDL

Verilog HDL是一种硬件描述语言(HDL:Hardware Discription Language),是一种以文本形式来描述数字系统硬件的结构和行为的语言。Verilog HDL就是在用途最广泛的C语言的基础上发展起来的一种件描述语言,它是由GDA(Gateway Design Automation)公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。1985年Moorby推出它的第三个商用仿真器Verilog-XL,获得了巨大的成功,从而使得Verilog HDL迅速得到推广应用。1989年CADENCE公司收购了GDA公司,使得VerilogHDL成为了该公司的独家专利。1990年CADENCE公司公开发表了Verilog HDL,并成立LVI组织以促进Verilog HDL 成为IEEE标准,即IEEE Standard 1364-1995。用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。

Verilog HDL的最大特点就是易学易用,如果有C语言的编程经验,可以在一个较短的时间内很快的学习和掌握,因而可以把Verilog HDL内容安排在与ASIC设计等相关课程内部进行讲授,由于HDL语言本身是专门面向硬件与系统设计的,这样的安排可以使学习者同时获得设计实际电路的经验。与之相比,VHDL的学习要困难一些。但Verilog HDL较自由的语法,也容易造成初学者犯一些错误,这一点要注意。

下面列出的是Verilog 硬件描述语言的主要能力:

(1)基本逻辑门,例如and 、or 和nand 等都内置在语言中。

(2)用户定义原语(UDP )创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。

(3)开关级基本结构模型,例如pmos 和nmos 等也被内置在语言中。

(4)提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。

(5)可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模。

Verilog HDL 中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。能够描述层次设计,可使

用模块实例结构描述任何层次。

设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。

Verilog HDL 不再是某些公司的专有语言而是IEEE 标准。

人和机器都可阅读Verilog 语言,因此它可作为EDA 的工具和设计者之间的交互语言。

Verilog HDL 语言的描述能力能够通过使用编程语言接口(PLI )机制进一步扩展。PLI 是允许外部函数访问Verilog 模块内信息、允许设计者与模拟器交互的例程集合。

设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL )到算法级,包括进程和队列级。

能够使用内置开关级原语在开关级对设计完整建模。

同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。

Verilog HDL 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。

在行为级描述中,Verilog HDL 不仅能够在RTL 级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。能够使用门和模块实例化语句在结构级进行结构描述。Verilog HDL 的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。

Verilog HDL 还具有内置逻辑函数,例如& (按位与)和| (按位或)。

对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。

可以显式地对并发和定时进行建模。提供强有力的文件读写能力。语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义。

1.2 项目的实际研究意义

在经济和商业高度发达的今天,彩灯已经成为人民日常生活不可或缺的一部分,已经逐渐为越来越多的人们所关注,在家庭中的普及率不断提高,大大的丰富和点缀了人民的生活。彩灯由不同的颜色的LED灯组成,通过控制不同颜色的灯的亮与灭,呈现给人们不同的花塑和图案,极大的点缀了单调的都市夜景,让城市成为了多姿多彩的不夜城。因此八路彩灯控制器的设计具有现实意义。

Verilog HDL是一种应用较为广泛的HDL语言,能对范围广泛的各种复杂的网络在不同的抽象级加以描述,而且在整个设计过程中可使用同一种语言。采用Verilog HDL 作为HDL综合设计的优点有:标准语言,即设计者可在不同环境下进行设计;仿真和综合均可采用同一种语言进行;Verilog HDL中提供的大量的资源模块,简化了设计者的开发工作;由Verilog HDL描述的源文件既是程序文件又可作为设计的文档。

第2章彩灯控制的相关模块以及原理

2.1 总体方案设计

彩灯控制器的核心设计部分是彩灯花型的控制模块,显示部分相对比较容易。分频器的设计方法多种多样,本设计的是比较常见的一种。外接clk为始终输入基准信号,彩灯节奏的快慢用选择开关select[1:0]。如图2.1所示总体框图。

图2.1彩灯总体框图

2.1.1 方案比较

该设计主要是以FPGA为基础,通过硬件描述语言Verilog HDL灵活多变的改变彩灯显示的花型以及宽快慢,对此这几了以下两个方案。

方案一:总体电路共分三大块。第一块实现时钟信号的产生;第二块实现花型的控制及节拍控制;第三块实现花型的演示。主题框图如图2.2所示。

图2.2彩灯设计框图

方案二:在方案一的基础上将整体电路分为四个模块。第一块实现花型的演示;第二块实现花型的控制;第三块实现节拍快慢控制;第四块实现时钟信号的产生。并在部分电路的设计上与方案一采用了完全不同的方法,如花型的控制。如图2.3所示。

图2.3彩灯模块化框图

2.1.2 方案论述

方案一与方案二最大的不同就在,前者将花型控制与节拍控制两种功能融合在一起,是考虑到只要计数器就可以实现其全部功能的原因,且原理相对简单。这样设计,其优点在于:设计思想比较简单。元件种类使用少,且都较熟悉易于组装电路。缺点则是:中间单元电路连线过于繁多,容易出错。且可能出现线与关系。要避免这些,则势必造成门电路使用过多。导致电路不稳定,抗干扰能力下降。而后者则将以上两种功能分开设计,各单元电路只实现一种功能。其优点在于:电路设计模块化,易于检查电路,对后面的电路组装及电路调试带来方便。缺点则是:节拍控制电路采用可编辑逻辑电路,原理相对复杂,不易理解。花型控制电路简单,花型也比较简单。

2.1.2 方案选择

方案一主要设计过程简单明了,而且花型控制和快慢结合在一起,用一个计数器就能而过轻松地实现功能,但是细节太多容易出错。方案二虽然多了一个步骤,但是每个模块只完成一个功能,相对更容易上手。所以基于以上原因,加上为了确保短时间内完成课程设计,我选择了连线少,易于调试的方案二。

2.2 相关模块

本实验模块主要有时钟信号模块,节拍快慢控制模块,彩灯花型控制模块。

2.2.1 时钟信号模块

时钟信号控制模块的主要功能是将输出的标准时钟进行分频,以此控制八路彩灯的快慢节奏变化。时钟信号控制在本设计中起着至关重要的作用,它以彩灯闪动快慢节奏的变化实现了八路彩灯绚丽多彩的花型节奏变化。

时钟控制是整个设计中的一个分模块,它的设计对八路彩灯控制器的顺利完成起着决定性作用。对时钟控制程序封装如图3.1所示。

图2.4分频器模块

2.2.2 节拍快慢控制模块

节拍快慢控制模块即一个4选1数据选择器,它的功能是将分频器分出来的四个时钟信号通过我们外部输入而选择其中一个输出到下一个模块中,这样就可以控制彩灯显示的快慢。它的真值表如表3.1所示。

表2.5 4选1数据选择器真值表

select[1:0] 输出

0 0 Out1

0 1 Out2

1 0 Out3

1 1 Out4

4选1数据选择器和封装模型分别如下:

图2.6数据选择模块

2.2.3 彩灯花样控制模块

彩灯控制模块是整个设计的核心,彩灯控制模块能够进行彩灯图案的控制,它负责整个设计的输出效果即各种彩灯图案的样式变化。在仿真时序中高电平代表灯亮,低电

平代表灯灭,由高低电平按不同规律组合就代表不同的花型,同时选择不同的频率,从而实现多种图案多种频率的花样功能显示。此时Verilg HDL硬件描述语言的优势就展现出来,使用者可以按自己的需求改变源程序从而改变显示的花型,而不用更换显示设备,这样不但经济而且环保。程序封装图如图所示。

图2.7彩灯控制系统程序封装图

第三章彩灯控制的软件程序设计

学习分频器,数据选择器的工作原理,熟悉ModelSim软件应用环境,了解实验流程,并会用ModelSim功能进行仿真。通过编写简单的Verilog 代码,并在ModelSim 中进行调试和验证,并以此来学习彩灯控制的设计。

3.1 M odelSim软件介绍

Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。ModelSim是工业界最优秀的语言仿真器,它提供最友好的调试环境,是作FPGA、ASIC设计的RTL级和门级电路仿真的首选。它支持PC和UNIX、LINUX平台,是单一内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真,编译仿真速度业界最快,编译的代码与平台无关,便于保护IP核,具有个性化的图形界面和用户接口,为用户加快调试提供强有力的手段。全面支持VHDL和Verilog语言的IEEE 标准,以及IEEE VITAL 1076.4-95 标准,支持C语言功能调用, C的模型,基于SWIFT的SmartModel逻辑模型和硬件模型。

主要特点:

·RTL和门级优化,本地编译结构,编译仿真速度快,跨平台跨版本仿真;

·单内核VHDL和Verilog混合仿真;

·源代码模版和助手,项目管理;

·集成了性能分析、波形比较、代码覆盖、数据流ChaseX、Signal Spy、虚拟对象Virtual Object、Memory窗口、Assertion窗口、源码窗口显示信号值、信号条件断点等众多调试功能;

·C和Tcl/Tk接口,C调试;

·对SystemC的直接支持,和HDL任意混合;

·支持SystemVerilog的设计功能;

·对系统级描述语言的最全面支持,SystemVerilog,SystemC,PSL;

·ASIC Sign off。

·可以单独或同时进行行为(behavioral)、RTL级、和门级(gate-level)的代码。

仿真简介:

仿真分为三种类型,即功能仿真、综合后功能仿真和时序仿真,分别对应于设计输入后、综合完成后、布局布线完成后等步骤,这些步骤也是仿真的切入点。

(1). 功能仿真:也称前仿真,主旨在于验证电路功能是否符合设计要求,其特点是

不考虑电路门延时与路径延时,考察重点为电路在理想环境下的行为和设计构想是否一致。可综合FPGA仿真代码是用RTL门级代码语言藐视的,功能仿真的输入是设计的RTL

代码,也就是HDL源文件与Testbench。

(2). 结果。综合后仿真的输入是从综合得到的一般性逻辑网表抽象出的仿真模型和

综合产生的延时文件,综合时的延时文件仅仅能估算门延时,而不包含布线延时信息,所以延时信息不十分准确。

(3). 时序仿真:也称为布局布线后仿真或者后仿真,是指电路已经映射到特定的工

艺环境后,综合考虑电路的路径延时与门延时的影响,验证电路的行为是否能够在一定

时序条件下满足设计构想的功能。时序仿真的主要目的在于验证电路是否存在时序违规,其输入为从布局布线抽象出的门级网表、Testbench以及扩展名为SDO的标准延时

文件。

3.2 彩灯控制程序设计

彩灯控制程序包括分频器程序,数据选择器程序,彩灯花样程序。

3.2.1 分频器程序

(1)分频器部分源程序注解

module f(reset,clkin,clkout,clkout1,clkout2,clkout3);

此分频器模块名为“f”,端口分别为reset,clkin,clkout,clkout1,clkout2, clkout3,其中,reset为复位端,clkin为输入的时钟信号clkout,clkout1, clkout2,clkout3,为输出端。

此模块的功能是将时钟信号的频率进行分频,分别为4分频,8分频,16分频,32

分频。

always@(posedge reset or posedge clkin)

if(reset)

begin

cnt<=0;

clkout<=0;

end //当reset,clkin上升沿来临时进行复位

always@(posedge reset or posedge clkin)

clkout<=~clkout;//将clkin二分,即clkout为四分频

always@(posedge reset or posedge clkout)

clkout1<=~clkout1;//将clkout二分,即clkout为8分频

always@(posedge reset or posedge clkout1)

clkout2<=~clkout2;//将clkout1二分,即clkout2为16分频

always@(posedge reset or posedge clkout2)

clkout3<=~clkout3;//将clkout2二分,即clkout3为32分频

由在Verilog语言中,always块为过程快,多个过程快同时进行,则相当于同时产生了4种波形, clkout是对基准时钟的4分频,clkout1是对基准时钟的8分频,clkout2是对基准时钟的16分频,clkout3是对基准时钟的32分频。

(2)分频器部分测试程序注解

`define clk_cycle 50

always #`clk_cycle

clkin=~clkin;//定义的基准时钟为每50ns翻转一次,周期为100ns.

初始化

initial

begin

RESET=1;//复位

clkin=0;

#100 RESET=0;//100ns之后开始执行程序

#10000 $stop;

end

f fd(RESET,clkin,clkout,clkout1,clkout2,clkout3);//分频器模块函数的调用

3.2.1 数据选择器程序

module mux4_1(out,in0,in1,in2,in3,sel);

此程序为四选一数据选择器,选择端为sel,输入端为in0,in1,in2,in3,输出端为out.

input[1:0]sel;//选择端有两位

case(sel)

2'b00:out=in0;

2'b01:out=in1;

2'b10:out=in2;

2'b11:out=in3;//sel的两位有四种组合,对应这四种输出结果

3.2.1 彩灯花样程序

module caideng(clk,reset,z);

output reg[7:0]z;//输出为8位八路对应着8路流水灯

parameter

s0='d0,s1='d1,s2='d2,s3='d3,s4='d4,s5='d5,s6='d6,s7='d7,s8='d8,s9='d9,s10='d10,s11='d11,s12='d12,s13=' d13,s14='d14,s15='d15,s16='d16,s17='d17,s18='d18,s19='d19,s20='d20,s21='d21,s22='d22,s23='d23,s24=' d24,s25='d25,s26='d26,s27='d27,s28='d28,s29='d29,s30='d30,s31='d31,s32='d32,s33='d33,s34='d34,s35=' d35,s36='d36,s37='d37,s38='d38,s39='d39,s40='d40,s41='d41,s42='d42,s43='d43,s44='d44,s45='d45,s46=' d46,s47='d47,s48='d48,s49='d49,s50='d50,s51='d51,s52='d52;//自定义参数,

case(state)

s0:state<=s1;s1:state<=s2;s2:state<=s3;s3:state<=s4;s4:state<=s5;s5:state<=s6;s6:state<=s7;

s7:state<=s8; s8:state<=s9;s9:state<=s10; s10:state<=s11;s11:state<=s12;s12:state<=s13;s13:state<=s14; s14:state<=s15;s15:state<=s16;s16:state<=s17;s17:state<=s18;s18:state<=s19;s19:state<=s20;

s20:state<=s21;s21:state<=s22;s22:state<=s23;s23:state<=s24;s24:state<=s25;s25:state<=s26;s26:state<=s 27; s27:state<=s28; s28:state<=s29;s29:state<=s30; s30:state<=s31; s31:state<=s32;s32:state<=s33;

s33:state<=s34;s34:state<=s35;s35:state<=s36; s36:state<=s37;s37:state<=s38; s38:state<=s39;

s39:state<=s40;s40:state<=s41;s41:state<=s42;s42:state<=s43;s43:state<=s44;s44:state<=s45;

s45:state<=s46;s46:state<=s47; s47:state<=s48; s48:state<=s49;s49:state<=s50;s50:state<=s51;

s51:state<=s52;s52:state<=s0;default:state<=s0;

endcase //定义彩灯不同的状态,使彩灯状态发生改变,

always@(state)//彩灯状态发生改变时,

begin

case(state) //彩灯依次会显示:八路彩灯共亮灭闪烁,右循环亮灭,左循环亮灭,相间闪烁

第四章仿真调试

4.1 仿真过程

(1).在Modelsim种建立工程文件。

(2).分别新建文件:分频器“f.v”,测试“testf.v”;四选一数据选择器“mux4_1”,测试“testmux4_1.v”;花样彩灯“csideng.v”测试“testcaideng.v”

(3).编译

(4).添加波形

(5)输入激励

4.1 仿真结果

(1)分频器仿真波形图

(2)四选一数据选择器仿真波形图

相关文档