目录引言‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥3第1章VerilogHDL硬件描述语言的介绍‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥4第2章设计任务与要求‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥52.1实验目的与任务‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥52.2参考设计方案‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥6第3章设计说明‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥73.1设计思路‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥73.2模块介绍‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥9第4章VerilogHDL源程序‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥11第5章功能仿真‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥185.1功能仿真介绍‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥185.2功能仿真结果‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥19《数字逻辑电路》课程设计报告交通灯控制器第1页共29页第6章时序仿真‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥206.1时序仿真介绍‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥206.2时序仿真结果‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥21第7章管脚分配‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥22第8章设计结果‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥24第9章总结‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥28第10章参考文献‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥29《数字逻辑电路》课程设计报告交通灯控制器第2页共29页引言EDA技术是依靠功能强大的电子计算机,在EDA工具软件平台上,对以硬件描述语HDL(HardwareDescriptionLanguage)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编辑、化简、分割、综合、优化和仿真,直至下载到可编程逻辑器件CPLD/FPGA或专用集成电路ASIC(ApplicationSpecificIntegratedCircuit)芯片中,实现既定的电子电路设计功能。EDA技术使得电子电路设计者的工作仅限于利用硬件描述语言和EDA软件平台来完成对系统硬件功能的实现,极大地提高了设计效率,缩短了设计周期,节省了设计成本。实现路口交通灯系统的控制方法很多,可以用标准逻辑器件,可编程控制器PLC,单片机等方案来实现。但是这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了功能修改及系统调试的困难。因此,在设计中采用EDA技术,应用目前广泛应用的VerilogHDL硬件电路描述语言,实现交通灯系统控制器的设计,利用MAX+PLUSⅡ集成开发环境进行综合、仿真,并下载到CPLD可编程逻辑器件中,完成系统的作用。《数字逻辑电路》课程设计报告交通灯控制器第3页共29页第1章VerilogHDL硬件描述语言的介绍VerilogHDL是目前应用最广泛的一种硬件描述语言。VerilogHDL是在1983年由GDA(GateWayDesignAutomation)公司的PhilMoorby首创的。1986年,他对VerilogHDL的发展又作出了另一个巨大贡献:提出了用于快速门级仿真的XL算法。Verilog-XL算法的成功,使VerilogHDL语言得到迅速发展。基于VerilogHDL的优越性,IEEE于1995年制定了VerilogHDL的IEEE标准,即VerilogHDL1364-1995。VerilogHDL语言具有以下特点:·基本逻辑门,例如and,or和nand等都内置在语言中。·用户定义原语(UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。·开关级基本结构模型,例如pmos和nmos等也被内置在语言中。·提供显示语言结构制定设计中的端口到端口的时延及路径和设计的时序检查。·可以用三种不同方式或混和方式对设计建模这些方式包括:行为描述方式———使用过程化结构建模;数据流方式———使用连续赋值语句方式建模;结构化方式———使用门和模块实例语句描述建模。·能够描述层次设计,可使用模块实例结构描述任何层次。《数字逻辑电路》课程设计报告交通灯控制器第4页共29页·VerilogHDL的描述能力能够通过使用编程语言接口(PLI)机制进一步扩展。PLI是允许外部函数访问Verilog模块内信息,允许设计者与模拟器交互的例程集合。·设计能够在多个层次相加以描述,从开关级,门级,寄级器传送级(RTL)到算法级,包括进程和队列级。·能够监控拟验证的执行,即模拟验证执行过程这设计的值能够被监控和显示。·在行为级描述中,VerilogHDL不仅能够在RTL级上进行设计描述,而且能够在体系结构描述及其算法级行为上进行第2章设计任务与要求2.1实验目的与任务学习利用计数器和状态机设计十字路口交通灯控制器。设计一个简单十字路口交通灯控制器。该控制器控制甲乙两道的红、黄、绿三色灯,指挥交通和行人安全通行。复杂十字路口交通灯控制器要比简单交通灯控制器增加一些功能,如倒计时时间显示,左转弯(左拐)、指示灯闪烁及特殊紧急情况的处理等。《数字逻辑电路》课程设计报告交通灯控制器第5页共29页2.2参考设计方案下面以下面的十字路口交通灯系统为例,来说明上述功能的实现:东西方向(甲道)循环为绿灯45s,黄灯5s,左拐灯15s,黄灯5s,红灯40s,黄灯5s南北方向(乙道)循环为红灯65s,黄灯5s,绿灯20s,黄灯5s,左拐灯15s,黄灯5s其一个工作周期的时间关系示意图如下:可以将一个周期划分成以下8种状态:S0:cnt=0-44:甲道通行,乙道禁止;S1:cnt=45-49:甲道停车,乙道禁止;S2:cnt=50-64;甲道左拐,乙道禁止;S3:cnt=65-69;甲道停车,乙道禁止;S4:cnt=70-89;甲道禁止,乙道通行;S5:cnt=90-94;甲道禁止,乙道停车;S6:cnt=95-109;甲道禁止,乙道左拐;S7:cnt=110-114;甲道禁止,乙道停车;红65s黄5s绿20s黄5s左拐15s黄5s绿45s黄5s左拐15秒黄5s红40s黄5sS0S1S2S3S4S5S6S7甲道乙道状态表示《数字逻辑电路》课程设计报告交通灯控制器第6页共29页具体实现可采用VHDL/Verilog硬件描述语言设计。第3章设计说明3.1设计思路根据交通灯控制器要实现的功能,考虑用两个并行执行的always模块(两个进程)来分别控制甲道和乙道两个方向的4盏灯。这两个always模块使用同一个时钟信号,以进行同步,也就是说,两个进程的敏感信号是同一个。每个always模块控制一个方向的4种灯按如下顺序点亮,并往复循环:甲道:绿灯→黄灯→左拐灯→黄灯→红灯→黄灯。乙道:红灯→黄灯→绿灯→黄灯→左拐灯→黄灯。每种灯亮的时间采用一个减法计数器进行计数,计数器用同步预置法设计,这样只需改变预置数据,就能改变计数器的模,因此每个方向只要一个计数器进行计时即可。为便于显示灯亮的时间,计数器的输出均采用BCD码,显示由4个数码管来《数字逻辑电路》课程设计报告交通灯控制器第7页共29页完成,甲道方向和乙道方向各用两个数码管。总体思想可分为以下三个模块:1)频率转换模块这个模块的基本功能就是将DE2-70实验板上的50MHz的晶振转换为1Hz的时钟信号,主要方法是通过递归来降低频率,为了使时钟信号更加准确,本次实验使用实验板内部自带的晶振信号。2)LED显示模块这个模块的基本功能就是将每条通道四位BCD码倒计时转换为七段码显示在实验板的数码管上,主要方法是通过七段码的基本分配方式。3)顶层模块这个模块包含状态分配模块,初始化倒计时以及状态转换模块三个功能。其中,状态分配使用八位BCD码初始化每个状态的时间,初始化倒计时分别对两个通道BCD码的时间进行倒计时,状态转换是用于对时间倒计时结束后分配交通灯的下一个状态。总流程图:《数字逻辑电路》课程设计报告交通灯控制器第8页共29页3.2模块介绍(1)状态分配模块:(甲乙两道除预置数及顺序不同,其余均相同)流程描述:首先将EN开关置1,处于清除功能,显示及亮灯情况不改变,再将EN置为0,《数字逻辑电路》课程设计报告交通灯控制器第9页共29页处于开始状态,开始分配状态,包括每个状态的时间长度分配和每个道路的亮灯顺序分配。(2)倒计时及状态转换模块:流程描述:首先将EN开关置1,处于清除功能,再将EN置为0,处于开始状态,各个道路根据已分配的状态进行,通过灯的变化表示红灯,绿灯,黄灯,左拐灯的变化,同时两块LED显示板会显示各个状态的倒计时情况,当倒计时为0,进入下一状态,将所亮的灯以及时长改为预设值,重新开始倒计时,否则时间减1,循环判断。下表为该控制芯片实现基本功能状态转换表:《数字逻辑电路》课程设计报告交通灯控制器第10页共29页左拐(al)红灯(ar)黄灯(ay)绿灯(ag)左拐(al)红灯(ar)黄灯(ay)绿灯(ag)0100000101000010010010000100001000010100001001001000010000100100A方向B方向第4章VerilogHDL源程序moduleTraffic(CLK,EN,LAMPA,LAMPB,ACOUNT,BCOUNT,dis);//顶层模块inputCLK;//同步时钟信号,inputEN;//使能信号,为1的话,则控制器开始工作output[13:0]ACOUNT,BCOUNT;output[3:0]LAMPA,LAMPB;output[3:0]dis;//清除小数点assignRST=1;//频率使能端设为1,,分频模块一直执行clk_1hzclk(CLK,RST,clk_1Hz);//分频模块,将50MHz分频为1Hzhex_7segh7(numa[7:4],ACOUNT[13:7]);hex_7segh6(numa[3:0],ACOUNT[6:0]);//显示甲道时间倒数hex_7segh5(numb[7:4],BCOUNT[13:7]);hex_7segh4(numb[3:0],BCOUNT[6:0]);//显示乙道时间倒数《数字逻辑电路》课程设计报告交通灯控制器第11页共29页reg[7:0]numa,numb;//八位BCD码倒计时regtempa,tempb;//控制是否亮灯reg[2:0]counta,countb;//控制亮灯的顺序reg[7:0]ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft;//各状态的时间reg[3:0]LAMPA,LAMPB;//控制甲乙两道方向的亮灭,0~3分别控制左拐通行,绿灯,黄灯,红灯四盏灯reg[3:0]dis;//用于去除LED小数点always@(EN)if(!EN)//当使能信号为0,重新设置计数器begin//设置各种灯的计数器的预置数ared=8'b01000000;//甲道红灯40秒ayellow=8'b00000101;//甲道黄灯5秒agreen=8'b01000101;//甲道绿灯45秒aleft=8'b00010101;//甲道左转灯15秒bred=8'b01100101;//乙道红灯65秒byellow=8'b00000101;//乙道黄灯5秒bleft=8'b00010101;//乙道绿灯15秒bgreen=8'b00100000;//乙道左转灯20秒dis=4'b1111;//去除小数点endalways@(posedgeclk_1Hz)//该进程控制甲道的四种灯beginif(EN)beginif(!tempa)begintempa