基于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。基于cpldfpga的交通灯控制器设计
相关推荐
T45M=00110000。 DOUT45B=00110101。 WHEN010000=DOUT45M=00101001。 DOUT45B=00110100。 WHEN010001=DOUT45M=00101000。 DOUT45B=00110011。 WHEN010010=DOUT45M=00100111。 DOUT45B=00110010。
18B20 功能指令。 ROM 命令: ROM 命令通过每个器件 64bit 的 ROM 码,使主机指定某一特定器件(如果有多个器件挂在总线上)与之进行通信。 DS18B20 的 ROM 如表 34 所示,每个 ROM 命令都是 8 bit 长。 功能命令: 主机通过功能命令 对 DS18B20 进行读 /写 Scratchpad 存储器,或者启动温度转换。 DS18B20 的功能命令如表 37
代价也会增加; 另一方面,随着时间的推移,对 IPv4 网络的投资和维护将持续增加,网络过渡代价将随之增 大。 s和 c成反比 : 参数 s 由各种过渡技术及过渡技术组合方案在实际部署中的效率所决定 , 效率越高, c 越小;反之越大; 随机量 r对 c的影响 : 随机量 r指某种可以刺激 IPv6 部署的应用, r的值越大, c 的值约小。 我认为,目前网络过渡的一个关键问题是寻找这个随机量
而保证通信数据的正确性。 当 DS18B20 接收到温度转换命令后,开始启动转换。 转换完成后的温度值就以 16 位带符号扩展的二进制补码形式存储在高速暂存存储器的第 2 字节。 单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以 ℃/ LSB 形式表示。 当符号位 S= 0 时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位 S= 1 时
为了粗略地得到被测量的电压范围我们采用多组比较器的方式,通过阶梯式比较的方法确定输入电压的范围。 其具体电路如下图( )所示。 图 电压范围粗测电路 继电器 8开关状态常态时为正,当输入电压 Ui为负时继电器 8在单片机的控制下工作,进行反向放大成正电压后通过比较器检测,输出数据送给单片机 P1口。 则根据其设计原理:输入电压的范围与 P1口对应的数据如下表所示。 电压范围
P2 端口写“ 1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。 作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。 在访问外部程序存储器或用 16 位地址读取外部数据存储器时, P2 口送出高八位地址。 在这种应用中, P2 口使用很强的内部上拉发送 1。 在使用 8 位地址访问外部数据存储器时, P2 口输出 P2 锁存器的内容。 在 flash 编程和校验时,