基于cpldfpga的交通灯控制器设计内容摘要:

13 西华大学课程设计说明书 4 特殊器件介绍 CPLD 器件介绍 CPLD 是 Complex Programmable Logic Device 的缩写, CPLD 是在 PLA、 GAL 的基础上发展起来的阵列型的 PLD 器件 ,CPLD 芯片中包含多个电路块,称为宏功能块,或称为宏单元,每个宏单元由类似 PAL 的电路块构成,如图 41,图 41 所示的 CPLD 器件包括含了 6 个类似 PAL 的宏单元模块,每个宏模块通过芯片内部的连线资源互连,并连接到 I/O 块。 ,它是有最早的 PLD 器件发展形成的高密度可编程逻辑器件, 它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、 保密性强、价格大众化等特点。 CPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。 其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆( “在系统 ”编程)将代码传送到目标芯片中,实现设计的数字系统。 图 41 CPLD 器件内部结构 宏功能模块 宏功能模块 宏功能模块 宏功能模块 宏功能模块 宏功能模块 I/O 控制块 I/O 控 制 块 I/O 控 制 块 连线阵列 I/O 控制块 14 西华大学课程设计说明书 EPM570T144C5 芯片介绍 PM570T144C5 芯片是 CPLD 器件中 EPM570 芯片组中的一个型号, EPM 表示芯片类型 570 表示其中有 570 个逻辑单元, T 表示封装类型, C 表示为商用, 144 代表它有144 个管脚,其中有 116 个管脚为纯 I/O 口使用,其引脚图如图 43 所示。 图 42 EPM570T144C5 芯片引脚 15 西华大学课程设计说明书 5. 软件实现 通过至顶向下( TOPDOWN)的设计方法,我们对电路的设计要求作了分析,从电路要实现的功能着手,逐层分析电路设计的步骤,再具体到各个模块的设计实现以及各模块实现方案的选择。 从本设计的电路要求,我们分析了需要实现一个输入状态的编码,以及对循环点亮灯的方式的选择,综合这两种状态控制输出信号的状态变化。 其 电路功能表如图 51. 表 51 交通灯控制器状态转换 A方向 B方向 绿灯 黄灯 左拐灯 红灯 绿灯 黄灯 左拐灯 红灯 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0 0 表 51 是交通灯的控制器状态转换,从状态转换换表中可以看出,每个方向四盏灯,并不断循环:绿灯 — 黄灯 — 左拐灯 — 黄灯 —— 红灯。 并且每个方向红灯亮的时间应该与另一方向绿、黄、左拐、黄灯亮的时间相等。 黄灯所起的作用是用来在绿灯和左拐灯后进行缓冲,以提醒行人该方向马上要禁行了。 16 西华大学课程设计说明书 A 40s 5s 15s 5s 55s 绿灯 黄灯 左拐灯 黄灯 红灯 B 65s 30s 5s 15s 5s 红灯 绿灯 黄灯 左拐灯 黄灯 图 51 交通灯亮灭顺序图 图 52 EDA 设计模块图 软件设计 //*************************************/* /*模块名称: 计数分频 模块功能:将实验室实验设备所用 4MHz 的时钟计数分频为 1Hz 和 200Hz 分别供 LED控制模块和数码管显示 控制模块所用 端口说明: clk — 4M 基准时钟输入 ,reset— 复位信号, clk_1Hz — 1Hz 时钟输出,clk_200Hz— 200Hz 时钟输出 作 者:彭 时 间: 10 年 6 月 21 日 */ module clk_4M_1hz_200hz(clk_4M,reset,clk_1Hz,clk_200Hz)。 // input clk_4M,reset。 output clk_1Hz,clk_200Hz。 reg [25:0] count_1Hz。 //1Hz 脉冲分频计数器 reg [25:0] count_200Hz。 //200Hz 脉冲分频计数器 17 西华大学课程设计说明书 reg clk_1Hz,clk_200Hz。 /*分频系数宏定义 */ parameter clk_out_1Hz=4_000_000/21, //1Hz 溢出常数 clk_out_200Hz=4_000_000/4001。 //200Hz 溢出常数 /*产生 1Hz 脉冲 用于 LED 控制 */ always @(posedge clk_4M) begin if(reset) count_1Hz = 139。 b0。 else begin if(count_1Hz == clk_out_1Hz) begin clk_1Hz = !clk_1Hz。 count_1Hz = 139。 b0。 end else count_1Hz =count_1Hz + 139。 b1。 end end /*产生 200Hz 脉冲 用于数码管显示 */ always @(posedge clk_4M) begin if(reset) count_200Hz = 139。 b0。 else begin if(count_200Hz == clk_out_200Hz) begin clk_200Hz = !clk_200Hz。 count_200Hz = 139。 b0。 end else count_200Hz =count_200Hz + 139。 b1。 end end 18 西华大学课程设计说明书 endmodule /* 信号定义与说明: CLK: 同步时钟; EN: 使能信号,为 1 的话,则控制器开始工作; LAMPA: 控制 A 方向四盏灯的亮 灭;其中, LAMPA0~LAMPA3,分别控制 A 方向的 左拐灯、绿灯、黄灯和红灯; LAMPB: 控制 B 方向四盏灯的亮灭;其中, LAMPB0 ~ LAMPB3,分别控制 B 方向的 左拐灯、绿灯、黄灯和红灯; ACOUNT:用于 A 方向灯的时间显示, 8 位,可驱动两个数码管; BCOUNT:用于 B 方向灯的时间显示, 8 位,可驱动两个数码管。 code:数码管码变换表 */ //顶层模块 module traffic(EN,LAMPA,LAMPB,wei,dout)。 input EN。 output [3:0] LAMPA,LAMPB,wei。 output[7:0] dout。 reg tempa,tempb。 reg[2:0] counta,countb。 reg[3:0] LAMPA,LAMPB,wei。 reg[7:0] ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft。 reg[7:0] numa,numb,dout。 clk_4M_1hz_200hz(.clk_4M(clk_4M),.reset(reset),.clk_1Hz(clk_1Hz),.clk_200Hz(clk_200Hz))。 //计数模块调用 function [7:0]code。 //共阴极码的变换 input [3:0]din。 case(din) 439。 b0000:code = 839。 h3f。 //0 439。 b0001:code = 839。 h06。 //1 439。 b0010:code = 839。 h5B。 //2 439。 b0011:code = 839。 h4f。 //3 439。 b0100:code = 839。 h66。 //4 439。 b0101:code = 839。 h6d。 //5 439。 b0110:code = 839。 h7d。 //6 439。 b0111:code = 839。 h07。 //7 439。 b1000:code = 839。 h7f。 //8 19 西华大学课程设计说明书 439。 b1001:code = 839。 h6f。 //9 /*共阳极码的变换 439。 b0000:code = 839。 hc0。 //0 439。 b0001:code = 839。 hf9。 //1 439。 b0010:code = 839。 ha4。 //2 439。 b0011:code = 839。 hb0。 //3 439。 b0100:code = 839。 h99。 //4 439。 b0101:code = 839。 h92。 //5 439。 b0110:code = 839。 h82。 //6 439。 b0111:code = 839。 hf8。 //7 439。 b1000:code = 839。 h80。 //8 439。 b1001:code = 839。 h90。 //9 */ endcase endfunction initial begin numa=839。 b01000000。 numb=839。 b01100101。 end always @(EN) if(!EN) begin //设置各种灯的计数器的预置数 ared =839。 d。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。