
module
rglight(clk,clrn,yzflag,flag,LED,t1,t2,q1,q2)
/*--定义了一个rglight模块,估计是控制红灯和绿灯用的,后面是变量--*/
input clk,clrn
/*--定义输入端口,这俩应该是时钟--*/
input [7:0] q1,q2
/*--定义输入端口,8bit数据--*/
output reg yzflag
/*--定义输出端口,目测是黄灯状态控制变量,0/1--*/
output reg[1:0] flag
/*--定义输出端口,也是什么状态,2bit数据--*/
output reg[7:0] LED
/*--定义输出端口,应该用来控制LED灯,8bit--*/
output reg[7:0] t1,t2
/*--定义输出端口,应该是计时相关的变量,8bit,估计用来输出给黄灯控制模块用的--*/
reg[7:0] rtime,gtime,ytime,rtime1='h20,gtime1='h16
/*--红灯、绿灯、黄灯的时间? rtime1赋初值 十六进制20,也就是十进制32,gtime1 十进制22--*/
reg[1:0] z
/*--定义变量z,后面根据z的状态00、01、10、11执行循环--*/
后面是程序的主体 实现的功能大致是倒计时的功能 不断的循环 只是部分程序 我也看不明白
一):设计题目及要求主干道与乡村公路十字交叉路口在现代化的农村星罗棋布。图2为某十字路口交通灯与传感器运行示意图。设计交通灯控制系统,用以管理十字路口的车辆通行。具体要求:
(1)主干道车辆通行有优先权,当乡间公路无车时,主干道绿灯亮,乡间公路红灯亮,并始终保持主干道车辆通行。
(2)当乡村公路有车、主干道没有车辆时,乡间公路绿灯亮,主干道红灯亮。
(3)当主干道和乡村公路均有车时,按主干道通车60 s,乡村公路通车30 s交替进行。
(4)每次由绿灯亮变为红灯亮和红灯亮变为绿灯亮的转换过程中,要亮5 s时间的黄灯,作为过渡。
(5)用开关代替传感器作检测车辆是否到来的信号,用红、绿、黄三种颜色的发光二极管分别作交通灯。
(6)秒脉冲时基可由外电路引入。
程序
MODULE traffic_lights
TITLE 'zht'
M,C,EN,CLK PIN 11,12,13,7
CR,CG,CY,MR,MG,MY PIN 68,69,70,71,72,73 ISTYPE'REG'// CR,CY,CG为乡村道红、黄、绿灯,MR MG,MY为主干道红、绿、黄灯//
K,D7..D0 NODE ISTYPE'REG'//D5..D0为计数器输出,K控制节拍//
CP,X=.C.,.X.
Q=[CR,CG,CY,MR,MG,MY]
D=[D7..D0]
SET=[D,Q]
Q.OE=!EN
EQUATIONS
K.CLK=CLK
K:=!K
SET.CLK=(CLK&!K)#(CLK&K)
WHEN(M==1)&(C==1) THEN //当乡村路有车时//,
{WHEN(D>=0)&(D<=100)THEN D:=D+1ELSE D:=0//100 进制的计数器// <br/>WHEN(D>=0)&(D<=60)THEN Q:=[1,0,0,0,1,0]//当时间大于0小于60时// <br/>ELSE WHEN(D>=61)&(D<=65)THEN Q:=[0,0,1,0,0,1]//当时间大于60小于65时,转黄灯亮// <br/>ELSE WHEN(D>=65)&(D<=95)THEN Q:=[0,1,0,1,0,0]//当时间大于65小于95时// <br/>ELSE WHEN(D>=95)&(D<=99)THEN Q:=[0,0,1,0,0,1]//当时间大于95小于99时,转黄灯亮// <br/>ELSE Q:=[1,0,0,0,1,0]} //改变节拍,开始新的循环//
ELSE WHEN (M==0)&(C==1) THEN Q:=[0,1,0,1,0,0]//乡村公路有车//
ELSE WHEN (M==1)&(C==0) THEN Q:=[1,0,0,0,1,0]//主干道有车//
ELSE Q:=[1,0,0,0,1,0]//都无车//
TEST_VECTORS
([EN,M,C,CLK]->Q)
[1,X,X,CP]->X//使能测试//
@REPEAT 5{[0,0,0,CP]->X} //功能测试//
@REPEAT 5{[0,1,0,CP]->X}
@REPEAT 10{[0,0,1,CP]->X}
@REPEAT 150{[0,1,1,CP]->X}
END
首先最简单的方法是列出真值表。写出逻辑表达式。然后根据逻辑表达式来写出vhdl程序。在编译=》仿真=》功能分析=》输出延时=》下载程序 1.设计原理在这个实例中,我们设计一个简单的十字路口交通灯。交通灯分东西和南北两个方向,均通过数码管和指示灯指示当前的状态。设两个方向的流量相当,红灯时间45s,绿灯时间40s,黄灯时间5s.
从交通灯的工作机理来看,无论是东西方向还是南北方向,都是一个减法计数器。只不过计数时还要判断红绿灯情况,再设置计数器的模值。
下表所示为一个初始状态和4个跳变状态。交通灯工作时状态将在4个状态间循环跳变,整个交通灯则完全按照减计数器原理进行设计。
状态 当前计数值 下一个CLOCK到来时新模值
东西方向指示 南北方向指示 东西-南北方向指示 东西方向指示 南北方向指示 东西-南北方向指示
初始 0 0 45 40 红-绿
1 6 1 红-绿 5 5 红-黄
2 1 1 红-黄 40 45 绿-红
3 1 6 绿-红 5 5 黄-红
4 1 1 45 40 红-绿
2.部分程序
library ieee
use ieee.std_logic_1164.all
use ieee.std_logic_unsigned.all
entity traffic is
port(clk, urgency: in std_logic
east_west:buffer std_logic_vector(7 downto 0)--东西方向时钟计数
south_north: buffer std_logic_vector(7 downto 0)--南北方向的时钟计数
led:buffer std_logic_vector(5 downto 0))--交通指示灯
end traffic
architecture arch of traffic is
。。。。。。。
end arch
3.具体设计步骤
1) 建立一个新的工程完成上面的电路设计
2) 编译电路并使用功能仿真来验证设计
3) 引脚配置,如Part I中讨论的,这些配置是确保VHDL代码中输出端口能使用PFGA芯片上连接到LEDR和LEDG的引脚。重新编译项目,并下载到FPGA芯片上。
4) 测试电路的正确性。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)