FPGA实验8实验八 用有限状态机设计交通灯代码

合集下载

交通灯完整代码

交通灯完整代码
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<60;j++)
{;}
}
void display(uchar a,uchar b,uchar c,uchar d)
{
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=table[a]; //北十位
dula=0;
wela=0;
dula=1;
P0=table[d]; //西个位
dula=0;
Delay(2);
}
void timer0() interrupt 1 using 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
shu++;
if(shu%20==0)
{
xianshi--;
void init()//初始化函数
{
shu=0;
xianshi=30;
xianshi2=35;
aa=3;
bb=0;
cc=3;
dd=5;
P0=0xff;
P1=0;
TMOD=0x01; //用定时器0方式1
EA=1; //打开中断
ET0=1;//打开定时器0中断
TL0=25536/256;
TH0=25536%256;
EX0=1;//外部中断0
EX1=1;//外部中断1
IT0=0;//外部中断0电平触发
IT1=0;//外部中断1电平触发
PX1=1;//设定外部中断1为高优先级
}
void delayms(uint z)

FPGA实验8实验八 用有限状态机设计交通灯代码

FPGA实验8实验八   用有限状态机设计交通灯代码

状态机:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY xhd ISPort(clk : in std_logic;ra,rb,ya,yb,ga,gb : out std_logic );END xhd;Architecture a of xhd istype state is (S0,S1,S2,S3);signal presentstate,nextstate : state;signal tmp1,tmp2 : integer range 0 to 30;signal timeout1,timeout2: std_logic;signal q: std_logic_vector(21 downto 0);signal sec: std_logic;Begin----get 1 hz clock pulseprocess(clk)beginif clk'event and clk='1' then q<=q+1; end if;sec<=q(21); --get 1 hz clock pulseend process;timing: process(sec)beginif sec'event and sec='1' thenif tmp1=29 then timeout1<='1'; timeout2<='0'; tmp1<=0; else if timeout1='1' thenif tmp2=4 then timeout2<='1'; timeout1<='0'; tmp2<=0;else tmp2<=tmp2+1; end if;else tmp1<=tmp1+1; end if;end if;end if;end process;changestate: process(presentstate)Begincase presentstate iswhen S0 => if timeout1='0' thennextstate<=s0;ra<='0'; ya<='0'; ga<='1';rb<='1'; yb<='0'; gb<='0';else nextstate<=s1; end if;when S1 => if timeout2='0' thennextstate<=s1;ra<='0'; ya<='1'; ga<='0';rb<='1'; yb<='0'; gb<='0';else nextstate<=s2; end if;when S2 => if timeout1='0' thennextstate<=s2;ra<='1'; ya<='0'; ga<='1';rb<='0'; yb<='0'; gb<='1';else nextstate<=s3; end if;when S3 => if timeout2='0' thennextstate<=s3;ra<='1'; ya<='0'; ga<='0';rb<='0'; yb<='1'; gb<='0';else nextstate<=s0; end if;when others => nextstate<=s0;timeout1<='0'; timeout2<='0';end case;end process;end a;ENTITY xhd ISPort(clk : in std_logic;ra,rb,ya,yb,ga,gb : out std_logic );END xhd;Architecture a of xhd is 里面的xhd根据你们文件具体情况设定秒表10进制--*******************************************--程序包library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;--*******************************************--实体ENTITY shijinzhi is--Cn 计数脉冲--Rest 清零信号-- En 允许计数信号--Dout[3..0] 十进制BCD码-- Cy 进位码port(Cn,Rest,En :in std_logic;Dout : out std_logic_VECTOR ( 3 Downto 0 );Cy : out std_logic);end shijinzhi ;--******************************************* --结构体architecture sun1 of shijinzhi isbeginProcess (Cn,Rest,En)Variable Cqi : std_logic_VECTOR ( 3 Downto 0 ); BeginIf Rest ='1' Then Cqi :=(Others =>'0');Cy<='0';Elsif Cn'Event and Cn='1' thenIf En='1' thenIf Cqi <"1001" thenCqi :=Cqi+1;Cy<='0';elsif cqi="1001"then Cy<='1';Cqi :=(others =>'0');end If;end If;end If;Dout<=Cqi;END Process;End sun1;--******************************************* 修改同上编写成功后,封装六进制:--******************************************* --程序包library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;--******************************************* --实体ENTITY liujinzhi is--CLK 计数脉冲--RST 清零信号-- EN 允许计数信号--Dout[3..0] 十进制BCD码-- CY 进位码port(CLK,RST,EN :in std_logic;DOUT : out std_logic_VECTOR ( 3 Downto 0 );CY : out std_logic);end liujinzhi ;--*******************************************--结构体architecture SUN2 of liujinzhi isbeginProcess (CLK,RST,EN)Variable Cq : std_logic_VECTOR ( 3 Downto 0 );BeginIf RST ='1' Then Cq :=(Others =>'0');CY<='0';Elsif CLK'Event and CLK='1' thenIf EN='1' thenIf Cq <"0101" thenCq :=Cq+1;CY<='0';elsif cq="0101"then CY<='1';Cq :=(others =>'0');end If;end If;end If;DOUT<=Cq;END Process;End SUN2;--*******************************************修改同上:编译、封装七段:程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY qiwei ISPORT ( Q : IN STD_LOGIC_VECTOR(3 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END qiwei; ARCHITECTURE behave OF qiwei ISBEGINPROCESS(Q) BEGINCASE Q ISWHEN "0000"=> DOUT<="0111111";WHEN "0001"=> DOUT<="0000110";WHEN "0010"=> DOUT<="1011011";WHEN "0011"=> DOUT<="1001111";WHEN "0100"=> DOUT<="1100110";WHEN "0101"=> DOUT<="1101101";WHEN "0110"=> DOUT<="1111101";WHEN "0111"=> DOUT<="0000111";WHEN "1000"=> DOUT<="1111111";WHEN "1001"=> DOUT<="1101111";WHEN OTHERS=> DOUT<="0000000";END CASE;END PROCESS;END behave;修改同上,编译,封装仿真波形如图所示:分频(1):library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fenpin isport ( CLK:in std_logic;FCLK:out std_logic);end fenpin;architecture bhv of fenpin issignal CK:std_logic;beginprocess(CLK)variable counter:integer range 0 to 100000;beginif(CLK'EVENT AND CLK='1') THENIF(counter=99999)THEN counter:=0;CK<=NOT CK;ELSE counter:=counter+1;end if;end if;end process;FCLK<=CK;end bhv;分频(2):library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fenpin isport ( clk,clr:in std_logic;q:buffer std_logic);end fenpin;architecture b of fenpin issignal counter:integer range 0 to 49999;beginprocess(clr,clk)beginif(CLK='1' AND clk'EVENT) THENIF clr='1' then counter<=0;ELSIF COUNTER=49999 THEN counter<=0;q<=not q;ELSE counter<=counter+1;END IF;END IF;end process;end b;。

FPGA课程设计 交通灯控制电路的设计

FPGA课程设计 交通灯控制电路的设计

交通灯控制电路的设计1. 设计原理交通灯控制电路的原理框图如图3.3所示。

其中,clkgen是分频器,将EDA实训仪主板提供的20MHz的主频经20000000分频后,得到电路所需的1Hz(秒)时钟。

Cnt10de(两个)是十进制减法计数器,产生道路东西和南北通行和禁止的倒计时时间。

Contr是控制电路,控制整个系统的工作。

控制器接收倒计时的结果,当倒计时归0时,改变电路的控制模式,输出倒计时的初始时间和交通灯亮灭控制信号。

图3.3 交通灯控制电路的原理框图2. 设计要求①用EDA实训仪上的4只八段数码管分别显示道路东西和南北通行和禁止的倒计时时间。

②能设置道路东西和南北两侧通行和禁止的倒计时时间,最大设置时间为99秒,最小设置时间为1秒。

③交通灯用红、绿、黄三种发光二极管(LED)显示控制的结果。

④红、绿、黄灯显示的次序应符合实际交通道路控制的要求。

图2 交通灯控制电路的原理图图2是我们小组本次实训设计的交通灯控制电路的逻辑原理图。

交通灯工作的四种工作状态方式如下:工作状态一:东西——红——倒计时:20 → 4 (秒)南北——绿——倒计时:16 → 0 (秒)工作状态二:东西——红——倒计时: 3 → 0 (秒)南北——黄——倒计时: 3 → 0 (秒)工作状态三:东西——绿——倒计时:16 → 0 (秒)南北——红——倒计时:20 → 4 (秒)工作状态四:东西——黄——倒计时: 3 → 0 (秒)南北——红——倒计时: 3 → 0 (秒)(以上四种工作状态循环进行)1系统软件设计分析逻辑原理图里边一共有四个模块,即1)分频器模块2)蜂鸣器模块3)计数器模块4)控制器模块而我负责完成的模块则是控制器模块,控制器主要控制红绿灯的转换,我增加了一个en使能端,高电平时进入夜晚模式和暂停,不进行倒计时。

lod是预置信号输入端,对倒计时数预置,使芯片的输出状态与预置输入端相同,使芯片进入多种工作状态,。

FPGA 交通灯控制器实验

FPGA 交通灯控制器实验

交通灯控制器一、实验目的熟练掌握EDA软件quartus 2的应用环境,加强利用verilog语言解决生活中实际问题的能力。

二、实验原理和内容利用软件quartus 2进行编写程序实现十字路口交通灯控制器,达到A方向和B方向红、黄、绿三盏灯按合理的顺序亮或灭,并能将灯亮的时间用倒计时的形式显示在数码管上,最后通过软件自带的工具将交通灯控制器的门级电路和RTL级电路自动生成。

三、实验步骤1:首先分析交通灯的原理,整理出所需要的模块,设定每个灯的亮灯时间。

2:运行quartus 2软件、新建工程,然后新建verilog HDL文件,利用verilog语言编写程序实现A和B方向的红黄绿三盏灯合理的交替亮灭,通过对应数码管显示亮灯倒计时。

3:编译程序,若有错误根据错误提示对程序进行修改,直到编译通过,然后设置LED 灯和数码管的引脚,以达到控制A和B那盏灯亮和与之相对应的数码管做倒计时,倒计时结束,亮灯状态转换的效果。

4:将程序烧入FPGA开发板,观察开发板上的LED和数码管显示状况,看是否达到实验目的,若达到则记录实验结果并整理,反之继续修改,直到达到预期效果为止。

5:关闭电源,拆除实验器材。

四、实验数据A方向红灯40s,黄灯10s,绿灯30sB方向红灯40s,黄灯10s,绿灯30s五、实验代码module traffic(clk,en,seg,dig,lampa,lampb);input clk;//时钟信号,50Mhzinput en;// 使能信号,当为高电平时控制器工作,当为低电平时,进行初始化设置。

output[7:0] dig;//数码管位选output[7:0] seg;//数码管段选output[2:0] lampa;//A方向灯亮的情况output[2:0] lampb;//B方向灯亮的情况reg clk_out1;reg clk_out2;reg[15:0] count1;reg[31:0] count2;reg[1:0] a;reg[2:0] lampa;reg[2:0] lampb;reg[3:0] disp_dat;reg[7:0] dig;reg[7:0] seg;reg[7:0] ared,ayellow,agreen,bred,byellow,bgreen;reg[7:0] numa,numb;reg tempa,tempb;reg[1:0] counta, countb;always @(posedge clk)begincount1<=count1+1;if(count1==16'd25000)beginclk_out1<=~clk_out1;count1<=0;endendalways @(posedge clk)begincount2<=count2+1;if(count2==32'd2*******)beginclk_out2<=~clk_out2;count2<=0;endendalways @(en) //给各种灯亮的时间预置数,注意此处为十六进制的数beginif (!en)beginared <= 8'h40;ayellow <= 8'h10;agreen <= 8'h30;bred <=8'h40;byellow <= 8'h10;bgreen <= 8'h30;endendalways @(posedge clk_out2) //控制A方向的四种灯的亮灭及亮的时间beginif(en)beginif(!tempa)begintempa <= 1;case(counta)2'd0:begin numa <= ared; lampa <= 3'b011; counta <= 2'd1;end2'd1:begin numa <= agreen; lampa <= 3'b110; counta <= 2'd2;end2'd2:begin numa <= ayellow; lampa <= 3'b101; counta <= 2'd0;endendcaseendelsebeginif(numa[3:0]==0)beginnuma[3:0] <= 4'd9;numa[7:4] <= numa[7:4]-1;endelse numa[3:0] <= numa[3:0]-1;if (numa == 8'd2)tempa <= 0;endendelsebeginlampa <= 3'b000;counta <= 0; tempa <= 0;endendalways @(posedge clk_out2) //控制B方向的四种灯的亮灭及亮的时间beginif(en)beginif(!tempb)begintempb <= 1;case(countb)2'd0:begin numb <= bgreen; lampb <= 3'b110; countb <= 2'd1;end2'd1:begin numb <= byellow; lampb <= 3'b101; countb <= 2'd2;end2'd2:begin numb <= bred; lampb <= 3'b011; countb <= 2'd0;endendcaseendelsebeginif(numb[3:0]==0)beginnumb[3:0] <= 4'd9;numb[7:4] <= numb[7:4]-1;endelse numb[3:0] <= numb[3:0]-1;if (numb == 8'd2)tempb <= 0;endendelsebeginlampb <= 3'b000;countb <= 0; tempb <= 0;endendalways @(posedge clk_out1)begina<=a+1;endalways @(posedge clk_out1)begincase(a) //数码管显示什么样的数2'd0:disp_dat = numa[3:0];2'd1:disp_dat = numa[7:4];2'd2:disp_dat = numb[3:0];2'd3:disp_dat = numb[7:4];endcasecase(a) //数码管位选2'd0:dig = 8'b10111111;2'd1:dig = 8'b01111111;2'd2:dig = 8'b11111110;2'd3:dig = 8'b11111101;endcaseendalways @(disp_dat)begincase(disp_dat) //数码管译码4'h0:seg = 8'hc0; //显示04'h1:seg = 8'hf9; //显示14'h2:seg = 8'ha4; //显示24'h3:seg = 8'hb0; //显示34'h4:seg = 8'h99; //显示44'h5:seg = 8'h92; //显示54'h6:seg = 8'h82; //显示64'h7:seg = 8'hf8; //显示74'h8:seg = 8'h80; //显示84'h9:seg = 8'h90;endcaseendendmodule交通灯RTL电路交通灯门级网表实际效果。

基于FPGA的智能交通灯控制器

基于FPGA的智能交通灯控制器

数字逻辑课程设计报告题目:基于FPGA的智能交通灯控制器课程名称:数字逻辑课程设计专业班级:学号:姓名:报告日期:2013-9-12计算机科学与技术学院1. 实验目的通过V erilog的编程,深入了解并掌握可编程芯片的使用技术,完成规定的设计任务,加强对《数字逻辑》课程所学知识的理解,培养学生创造性思维能力和独立解决实际问题的能力。

2. 实验内容用V erilog代码实现智能交通灯信号控制器设计,具体内容及要求如下:(1)在主干道与次干道公路十字交叉路口,为确保人员、车辆安全、迅速地通过,在交叉路口的每个入口处设置了红、绿、黄三色信号灯。

红灯禁止通行;绿灯允许通行;黄灯亮则给行驶中的车辆有时间行驶到禁行线之外。

(2)主干道和次干道公路十字交叉路口都安装了车辆检测传感器(C),要求如下:(A)在每日的早、晚高峰时段,双边“C=1”则主干道通行时间是次干道通行时间的2倍;(B)全天主、次干道有车一方有优先通行权;(3)主干道公路路口安装有人员通过请求按钮(PQ),一旦有请求信息,控制器应给与放行。

(4)Online控制信号由交通控制中心发出,(Online=1)一旦它有效,则主干道放行,十字交叉路口控制器“失效”,Online=0十字交叉路口控制器恢复控制权。

(6)在每次由绿灯亮变成红灯亮的转换过程中间,要亮5s时间的黄灯作为过渡。

(7)用“开关”代替传感器作为人员通过请求和车辆是否到来的信号。

用红、绿、黄三种颜色的发光二极管作交通灯。

(8)要求显示时间,倒计时。

3. 实验环境PC 个人计算机、ISE14.2 软件、Adept软件、开发板Basys2、USB下载线4. 实验设计方案4.1 输入输出与引脚分配说明4.1.1输入信号:PQ,人员请求信号——接板子“E2”开关ONLINE, 控制中心接管信号——接“N3”SET, 控制器开关——接“P11”RST, 复位开关——接“L3”RUSH, 高峰判断开关——接“F3”CM, 主道车辆传感器——接“G3”CC, 支道车辆传感器——接“B4”CLK, 系统时钟——接“B8”4.1.2输出信号:[2:0] ML, ML0~2 主道绿、黄、红灯——分别接“G1、P4、N4”[2:0] CL , CL0~1 支道绿、黄、红灯——分别接“P7、M11、M5”[6:0] a_to_g, 七段数码管接口——a_to_g0~6分别接“M12、L13、P12、N11、N14、H12、L14”[3:0] an, 四选一控制接口——an0~4分别接“F12、J12、M13、K14”4.2 模块图4.2.1 模块层级图4.2.2 模块1.时钟生成模块4.2.3 模块2. 控制模块【1】输入信号input wire clk1s, 近似1s的时钟信号input wire PQ, 人员请求信号input wire ONLINE, 控制中心请求信号input wire SET, 控制器开关信号input wire RST, 复位信号input wire RUSH, 高峰信号input wire CM, 主道车辆检测信号input wire CC, 支道车辆检测信号【2】输出信号output reg [2:0] ML, 主道信号灯接口output reg [2:0] CL, 支道信号灯接口output [7:0] ACOUNT,存放主道两个时间数字的8421码output [7:0] BCOUNT,存放支道两个时间数字的8421码(ACOUNT、BCOUNT整合到顶层文件b[15:0]中,方便调用七段显示模块)【3】模块内部流程图4.2.4 模块3. 七段显示模块【1】显示原理使用同步扫描电路,对4位数码管的控制端口进行扫描,每一个时刻只有一个数码管亮,只要设置足够快的频率扫描,由于眼睛的视觉停留效应,就会使得显示结果达到4位同时亮的效果。

verilog交通灯设计(FPGA)

verilog交通灯设计(FPGA)

本控制系统控制交通灯按红灯,黄灯,绿灯,黄灯的顺序循环点亮,点亮时间分别是5s、2s、5s、2s。

时间数值通过数码管进行倒计时显示。

程序清单错误!文档中没有指定样式的文字。

.1 程序基本信息/************************************文件信息************************************** ** 文件名称:traffic_shuma_led.v** 功能描述:程序分为分频模块、状态机模块和段码输出模块,通过三个模块控制交通** 按红灯,黄灯,绿灯,黄灯的顺序循环点亮,点亮时间分别是5s、2s、5s、** 2s。

时间数值通过数码管进行倒计时显示。

********************************************************************************/程序清单错误!文档中没有指定样式的文字。

.2 引脚及变量定义/************************************引脚及变量定义****************************** module traffic_shuma_led(clk,rst_n,red,green,yellow,data_out);input clk; // 系统时钟信号input rst_n; // 复位信号output red; // 红灯控制信号output green; // 绿灯控制信号output yellow; // 黄灯控制信号output [7:0] data_out; // 数码管显示控制信号wire clk; // 系统时钟信号变量wire rst_n; // 复位信号变量reg red; // 红灯信号寄存器reg green; // 绿灯信号寄存器reg yellow; // 黄灯信号寄存器reg [27:0] count; // 分频计数寄存器reg [3:0] count1; // 状态机计数寄存器reg [3:0] count2; // 数码管计数寄存器reg [7:0] data_out; // 数码管显示寄存器reg [1:0] state; // 状态机寄存器reg clk_1hz; // 分频后频率寄存器parameter s1 = 0, // 状态机1s2 = 1, // 状态机2s3 = 2, // 状态机3s4 = 3; // 状态机4parameter on = 0, // 交通灯亮off = 1; // 交通灯灭/*********************************************************/// 模块名称:分频模块// 模块功能:将系统时钟信号clk分频得到1HZ的频率信号clk_1hz//****************************************************************************** always@(posedge clk or negedge rst_n)beginif(!rst_n) // 判断复位信号是否有效begincount <= 0; // 计数器清0endelsebeginif(count==28'd2*******) // 判断计数器是否计满beginclk_1hz <= 1; // 输出1Hz信号count <= 0; // 计数器清0endelsebeginclk_1hz <= 0; // 输出1Hz信号的低电平count <= count + 28'd1; // 计数器加1endendend//******************************************************************************* // 模块名称:状态机模块// 模块功能:通过时钟信号和复位信号对交通灯的状态进行控制//****************************************************************************** always@(posedge clk_1hz or negedge rst_n)beginif(!rst_n) // 判断复位信号是否有效beginstate <= s1; // 初始状态为S1count1 <= 0; // 计数器清0count2 <= 4'b0101; // 计数器置数endelsebegincase(state)s1: // 状态1begingreen <= off; // 绿灯不亮yellow <= off; // 黄灯不亮red <= on; // 红灯亮count1 <= count1 + 4'b1; // 计数器加1if (count1 == 4'b0101) // 计数器是否等于5begincount1 <= 0; // 计数器清0state <= s2; // 状态转移count2 <= 4'b0010; // 计数器置2endelsecount2 <= count2-1; // 计数器减1ends2: // 状态2beginred <= off; // 红灯不亮green <= off; // 绿灯不亮yellow <= on; // 黄灯不亮count1 <= count1 + 4'd1; // 计数器加1if(count1 == 4'b0010) // 判断计算器是否等于2begincount1 <= 0; // 计数器清0state <= s3; // 状态转移count2 <= 4'b0101; // 计数器置数endelsecount2 <= count2-1; // 计数器减1 ends3: // 状态3beginred <= off; // 红灯不亮green <= on; // 绿灯亮yellow <= off; // 黄灯不亮count1 <= count1 + 28'd1; // 计数器加1if(count1 == 4'b0101) // 计数器是否等于5begincount1 <= 0; // 计数器清0state <= s4; // 状态转移count2 <= 4'b0010; // 计数器置数endelsecount2 <= count2-1; // 计数器减1ends4: // 状态4beginred <= off; // 红灯不亮green <= off; // 绿灯不亮yellow <= on; // 黄灯亮count1 <= count1 + 4'd1; // 计数器加1if(count1 == 4'b0010) // 判断计数器是否等于2begincount1 <= 0; // 计数器清0state <= s1; // 状态转移count2 <= 4'b0101; // 计数器置数endelsecount2 <= count2-1; // 计数器减1endendcaseendend// 模块名称:数码显示模块// 模块功能:根据数码管计数器信号发送相应的断码信号是数码管显示倒计时//******************************************************************************* always@(*)case(count2)4'b0000:data_out = 8'b00111111; // 显示04'b0001:data_out = 8'b00000110; // 显示14'b0010:data_out = 8'b01011011; // 显示24'b0011: data_out = 8'b01001111; // 显示34'b0100: data_out = 8'b01100110; // 显示4 4'b0101:data_out = 8'b01101101; // 显示5 4'b0110: data_out = 8'b01111101; // 显示6 4'b0111: data_out = 8'b00000111; // 显示7 default: data_out = 8'b01111111; // 显示0 endcaseendmodule。

基于FPGA的交通灯设计(状态机)

基于FPGA的交通灯设计(状态机)

基于FPGA的交通灯设计规范一、功能描述:本设计实现一个交通信号灯,具体功能如下:1.异步信号复位,复位后1组为红灯亮2组为绿灯亮,数码管显示从24开始依次递减计数2.实现红黄绿灯的延时交替亮灭,分两组灯,1组红灯亮时,2组为黄灯,5秒后,1组红灯亮,2组绿灯亮;25秒后,1组黄灯亮,2组红灯亮;5秒后,1组绿灯亮,2组红灯亮。

如此交替重复3.计时时间25秒、5秒显示在数码管上。

分别为:从24依次递减到0,从4依次递减到0二、输入输出信号描述:系统结构框图顶层模块说明:1、fenpin:将50MHz晶振转为1Hz作为时钟频率;2、delay:计数延时;3、state:指出状态转移顺序;4、shuma:将计数延时用数码管输出显示。

设计说明:设计分为分频、延时、状态机、数码管显示四个模块。

分频,将50MHz的系统时钟转为1Hz。

计数延时,让状态机能在合适的时间点进行状态切换。

状态机,完成状态间的切换,输出。

数码管显示,将延时模块的计时输出值转换为数码管输出显示。

状态机的输出状态信号标志flag=out[1]|out[4],即为:判断此时的两组输出是否有黄灯亮。

flag_data=flag,作为计数延时模块的输入,用状态信号标志flag_data和计数值cnt来共同控制计数模块是5秒还是25秒。

四、子模块描述:4.1、fenpin:分频模块1、功能描述将实验板上的50MHz的石英晶振频率转为1Hz。

2、管脚描述每当clock时钟上升沿来临时,内部寄存器sum从0递加,加至25000000时,对clk进行取反操作,则可得到频率为1Hz的clk时钟4.2、delay:延时模块1、功能描述计数延时,让状态机能在合适的时间点进行状态切换。

用计数值和状态信号标志的与结果(cnt==0 && flag_data)来判断计数延时的初始值应为24还是44.3、state:状态机模块1、功能描述完成状态间的切换,输出。

FPGA(EDA)课程设计——交通灯(附源代码)

FPGA(EDA)课程设计——交通灯(附源代码)

技术规范功能描述:实现一个由一条主干道和一条支干道的汇合点形成的十字路口的交通灯控制器,具体功能:(1) 主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。

(2) 主干道处于长允许通行状态,而支干道有车来时才允许通行。

当主干道允许通行亮绿灯时,支干道亮红灯。

而支干道允许通行亮绿灯时,主干道亮红灯。

(3) 当主干道、支干道均有车时,两者交替允许通行,主干道每次通行45 秒,支干道每次通行25 秒,在每次由绿灯向红灯转换的过程中,要亮5 秒的黄灯作为过渡,并进行减计时显示。

AB45秒倒计时绿灯亮50秒倒计时红灯亮30秒? 红灯亮25秒绿灯亮5秒黄5秒黄图一:交通灯闪烁时序图<!--[if !vml]--><!--[endif]--> <!--[if !vml]--><!--[endif]-->每个周期结束时都要进行支干道是否有车的检测,若有车则进行下一个周期,若没有,则主干道亮绿灯,支干道亮红灯,直到检测到支干道有车。

系统总体框图:根据设计要求和系统所具有的功能,并参考相关的文献资料,经行方案设计,可以画出如下图所示的交通信号灯控制器的系统框图。

数码管位码数码管段码LED灯clkcarrst时钟分频模块交通灯控制及计时模块扫描显示译码模<!--[endif]-->图二:系统总体框图总体设计方案交通灯<!--[if !supportLists]-->一、<!--[endif]-->系统详细框图在系统总体框图的基础上进一步详细设计,得到如下系统详细框图数码管位码数码管段码LED灯clkcarrst时钟分频模块交通灯控制及计时模块扫描显示译码模块clk_odd<!--[if !vml]--><!--[endif]-->。

图三:系统详细框图注:系统总体I/O管脚描述请查看技术规范。

<!--[if !supportLists]-->二、<!--[endif]-->具体模块设计1.时钟分频模块系统的动态扫描需要10KHZ的脉冲,而系统时钟计时模块需要1 HZ的脉冲。

FPGA交通灯控制器设计程序代码

FPGA交通灯控制器设计程序代码

1. 文件头的中文注释程序清单 1 中文文件头/*****************************文件信息************************************ **文件名字:traffic.v**创建日期:2009-11-27**版本号:v1.0**功能描述:连接底层七个模块,形成一个交通灯控制系统************************************************************************/ 2. 模块的注释程序清单 2 模块注释//traffic.v//****************************文件信息************************************ //模块名称:参数定义//功能描述:定义各个参数//*********************************************************************** module traffic(CLK_48M, //48MHZ时钟EN, //使能信号,为1,控制器开始工作emergencya, //A方向紧急情况信号emergencyb, //B方向紧急情况信号controla, //控制A方向四盏灯的亮灭,分别为绿、左拐、黄和红灯 controlb, //控制B方向四盏灯的亮灭,分别为绿、左拐、黄和红灯 buzzera, //控制A方向紧急情况下的响铃,为1,响buzzerb, //控制B方向紧急情况下的响铃,为1,响dispdat1, //用于A方向的时间个位共阴数码管显示dispdat2, //用于A方向的时间十位共阴数码管显示dispdat3, //用于B方向的时间个位共阴数码管显示dispdat4 //用于B方向的时间十位共阴数码管显示);output [3:0] controla,controlb;output buzzera,buzzerb;output [6:0] dispdat1,dispdat2,dispdat3,dispdat4;input CLK_48M,EN;input emergencya,emergencyb;reg CLK1;reg [24:0] count; //计数器,用于分频reg [7:0] numa,numb; //numa,numb分别表示A,B方向的时间变量reg [7:0] ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft;reg [6:0] dispdat1,dispdat2,dispdat3,dispdat4;reg [3:0] controla,controlb;reg [2:0] counta; //counta表示A方向灯的状态reg [2:0] countb; //countb表示B方向灯的状态reg tempa; //tempa用于控制A方向的倒计时reg tempb; //tempb用于控制B方向的倒计时reg buzzera,buzzerb;//****************************文件信息************************************ //模块名称:分频模块//功能描述:把48MHZ时钟CLK_48M分频成1HZ时钟CLK1//*********************************************************************** always @(posedge CLK_48M)begincount=count+1;if(count==25'd2*******)begincount=25'b0000000000000000000000000;CLK1=~CLK1;endend//****************************文件信息************************************ //模块名称:置数模块//功能描述:设置各种灯的计数器的预置数//*********************************************************************** always @(EN)beginif(!EN)beginared <=8'd50; //A方向红灯50秒ayellow <=8'd5; //A方向黄灯5秒agreen <=8'd30; //A方向绿灯30秒aleft <=8'd10; //A方向左拐灯10秒bred <=8'd50; //B方向红灯50秒byellow <=8'd5; //B方向黄灯5秒bgreen <=8'd30; //B方向绿灯30秒bleft <=8'd10; //B方向左拐灯10秒endend//*****************************文件信息*********************************** //模块名称:A方向控制模块//功能描述:控制A方向紧急情况处理,四盏灯的亮灭及倒计时//*********************************************************************** always @(posedge CLK1)beginif(EN) //使能信号为1,A方向的控制器开始工作 beginif(emergencya==1&&emergencyb==0) //A方向出现紧急情况时,A方向的处理 begincontrola<=1;buzzera<=1;numa<=0;tempa<=0;counta<=0;endif(emergencya==0&&emergencyb==1) //B方向出现紧急情况时,A方向的处理 begincontrola<=8;buzzera<=0;numa<=0;tempa<=0;counta<=0;endif(emergencya==0&&emergencyb==0) //正常情况时,A方向的处理beginbuzzera<=0;if(!tempa) //tempa=0,A方向灯的状态转换开始begintempa<=1;case(counta)0: begin numa<=agreen; controla<=1; counta<=1; end1: begin numa<=ayellow; controla<=4; counta<=2; end2: begin numa<=aleft; controla<=2; counta<=3; end3: begin numa<=ayellow; controla<=4; counta<=4; end4: begin numa<=ared; controla<=8; counta<=0; enddefault: controla<=8;endcaseendelse //tempa=1,A方向的倒计时开始beginif(numa>1)numa<=numa-1;if(numa==2)tempa<=0;endendendelse //使能信号为0,A方向的控制器停止工作 begincontrola<=4'b1000;counta<=0;tempa<=0;endend//****************************文件信息************************************ //模块名称:B方向控制模块//功能描述:控制B方向紧急情况处理,四盏灯的亮灭及倒计时//*********************************************************************** always @(posedge CLK1)beginif(EN) //使能信号为1,B方向的控制器开始工作 beginif(emergencya==1&&emergencyb==0) //A方向出现紧急情况时,B方向的处理begincontrolb<=8;buzzerb<=0;numb<=0;tempb<=0;countb<=0;endif(emergencya==0&&emergencyb==1) //B方向出现紧急情况时,B方向的处理begincontrolb<=1;buzzerb<=1;numb<=0;tempb<=0;countb<=0;endif(emergencya==0&&emergencyb==0) //正常情况时,B方向的处理beginbuzzerb<=0;if(!tempb) //tempa=0,B方向灯的状态转换开始begintempb<=1;case (countb)0: begin numb<=bred; controlb<=8; countb<=1; end1: begin numb<=bgreen; controlb<=1; countb<=2; end2: begin numb<=byellow; controlb<=4; countb<=3; end3: begin numb<=bleft; controlb<=2; countb<=4; end4: begin numb<=byellow; controlb<=4; countb<=0; enddefault: controlb<=8;endcaseendelse //tempb=1,B方向的倒计时开始beginif(numb>1)numb<=numb-1;if(numb==2)tempb<=0;endendendelse //使能信号为0,B方向的控制器停止工作begincontrolb<=4'b1000;tempb<=0;countb<=0;endend//*********************************************************************** //模块名称:A方向灯的时间显示模块//功能描述:控制A方向时间的译码及数码管显示//*********************************************************************** always@(numa[0]or numa[1]or numa[2]or numa[3]or numa[4]or numa[5]or numa[6]) begincase(numa)8'd0:begin dispdat1<=7'b0111111;dispdat2<=7'b0111111;end8'd1:begin dispdat1<=7'b0000110;dispdat2<=7'b0111111;end8'd2:begin dispdat1<=7'b1011011;dispdat2<=7'b0111111;end8'd3:begin dispdat1<=7'b1001111;dispdat2<=7'b0111111;end8'd4:begin dispdat1<=7'b1100110;dispdat2<=7'b0111111;end8'd5:begin dispdat1<=7'b1101101;dispdat2<=7'b0111111;end8'd6:begin dispdat1<=7'b1111101;dispdat2<=7'b0111111;end8'd7:begin dispdat1<=7'b0000111;dispdat2<=7'b0111111;end8'd8:begin dispdat1<=7'b1111111;dispdat2<=7'b0111111;end8'd9:begin dispdat1<=7'b1101111;dispdat2<=7'b0111111;end8'd10:begin dispdat1<=7'b0111111;dispdat2<=7'b0000110;end8'd11:begin dispdat1<=7'b0000110;dispdat2<=7'b0000110;end8'd12:begin dispdat1<=7'b1011011;dispdat2<=7'b0000110;end8'd13:begin dispdat1<=7'b1001111;dispdat2<=7'b0000110;end8'd14:begin dispdat1<=7'b1100110;dispdat2<=7'b0000110;end8'd15:begin dispdat1<=7'b1101101;dispdat2<=7'b0000110;end8'd16:begin dispdat1<=7'b1111101;dispdat2<=7'b0000110;end8'd17:begin dispdat1<=7'b0000111;dispdat2<=7'b0000110;end8'd18:begin dispdat1<=7'b1111111;dispdat2<=7'b0000110;end8'd19:begin dispdat1<=7'b1101111;dispdat2<=7'b0000110;end8'd20:begin dispdat1<=7'b0111111;dispdat2<=7'b1011011;end8'd21:begin dispdat1<=7'b0000110;dispdat2<=7'b1011011;end8'd22:begin dispdat1<=7'b1011011;dispdat2<=7'b1011011;end8'd23:begin dispdat1<=7'b1001111;dispdat2<=7'b1011011;end8'd24:begin dispdat1<=7'b1100110;dispdat2<=7'b1011011;end8'd26:begin dispdat1<=7'b1111101;dispdat2<=7'b1011011;end8'd27:begin dispdat1<=7'b0000111;dispdat2<=7'b1011011;end8'd28:begin dispdat1<=7'b1111111;dispdat2<=7'b1011011;end8'd29:begin dispdat1<=7'b1101111;dispdat2<=7'b1011011;end8'd30:begin dispdat1<=7'b0111111;dispdat2<=7'b1001111;end8'd31:begin dispdat1<=7'b0000110;dispdat2<=7'b1001111;end8'd32:begin dispdat1<=7'b1011011;dispdat2<=7'b1001111;end8'd33:begin dispdat1<=7'b1001111;dispdat2<=7'b1001111;end8'd34:begin dispdat1<=7'b1100110;dispdat2<=7'b1001111;end8'd35:begin dispdat1<=7'b1101101;dispdat2<=7'b1001111;end8'd36:begin dispdat1<=7'b1111101;dispdat2<=7'b1001111;end8'd37:begin dispdat1<=7'b0000111;dispdat2<=7'b1001111;end8'd38:begin dispdat1<=7'b1111111;dispdat2<=7'b1001111;end8'd39:begin dispdat1<=7'b1101111;dispdat2<=7'b1001111;end8'd40:begin dispdat1<=7'b0111111;dispdat2<=7'b1100110;end8'd41:begin dispdat1<=7'b0000110;dispdat2<=7'b1100110;end8'd42:begin dispdat1<=7'b1011011;dispdat2<=7'b1100110;end8'd43:begin dispdat1<=7'b1001111;dispdat2<=7'b1100110;end8'd44:begin dispdat1<=7'b1100110;dispdat2<=7'b1100110;end8'd45:begin dispdat1<=7'b1101101;dispdat2<=7'b1100110;end8'd46:begin dispdat1<=7'b1111101;dispdat2<=7'b1100110;end8'd47:begin dispdat1<=7'b0000111;dispdat2<=7'b1100110;end8'd48:begin dispdat1<=7'b1111111;dispdat2<=7'b1100110;end8'd49:begin dispdat1<=7'b1101111;dispdat2<=7'b1100110;end8'd50:begin dispdat1<=7'b0111111;dispdat2<=7'b1101101;enddefault:begin dispdat1<=7'b0111111;dispdat2<=7'b0111111;endendcaseend//*********************************************************************** //模块名称:B方向灯的时间显示模块//功能描述:控制B方向时间的译码及数码管显示//*********************************************************************** always@(numb[0]or numb[1]or numb[2]or numb[3]or numb[4]or numb[5]or numb[6]) begincase(numb)8'd0:begin dispdat3<=7'b0111111;dispdat4<=7'b0111111;end8'd1:begin dispdat3<=7'b0000110;dispdat4<=7'b0111111;end8'd2:begin dispdat3<=7'b1011011;dispdat4<=7'b0111111;end8'd3:begin dispdat3<=7'b1001111;dispdat4<=7'b0111111;end8'd4:begin dispdat3<=7'b1100110;dispdat4<=7'b0111111;end8'd5:begin dispdat3<=7'b1101101;dispdat4<=7'b0111111;end8'd6:begin dispdat3<=7'b1111101;dispdat4<=7'b0111111;end8'd7:begin dispdat3<=7'b0000111;dispdat4<=7'b0111111;end8'd9:begin dispdat3<=7'b1101111;dispdat4<=7'b0111111;end8'd10:begin dispdat3<=7'b0111111;dispdat4<=7'b0000110;end8'd11:begin dispdat3<=7'b0000110;dispdat4<=7'b0000110;end8'd12:begin dispdat3<=7'b1011011;dispdat4<=7'b0000110;end8'd13:begin dispdat3<=7'b1001111;dispdat4<=7'b0000110;end8'd14:begin dispdat3<=7'b1100110;dispdat4<=7'b0000110;end8'd15:begin dispdat3<=7'b1101101;dispdat4<=7'b0000110;end8'd16:begin dispdat3<=7'b1111101;dispdat4<=7'b0000110;end8'd17:begin dispdat3<=7'b0000111;dispdat4<=7'b0000110;end8'd18:begin dispdat3<=7'b1111111;dispdat4<=7'b0000110;end8'd19:begin dispdat3<=7'b1101111;dispdat4<=7'b0000110;end8'd20:begin dispdat3<=7'b0111111;dispdat4<=7'b1011011;end8'd21:begin dispdat3<=7'b0000110;dispdat4<=7'b1011011;end8'd22:begin dispdat3<=7'b1011011;dispdat4<=7'b1011011;end8'd23:begin dispdat3<=7'b1001111;dispdat4<=7'b1011011;end8'd24:begin dispdat3<=7'b1100110;dispdat4<=7'b1011011;end8'd25:begin dispdat3<=7'b1101101;dispdat4<=7'b1011011;end8'd26:begin dispdat3<=7'b1111101;dispdat4<=7'b1011011;end8'd27:begin dispdat3<=7'b0000111;dispdat4<=7'b1011011;end8'd28:begin dispdat3<=7'b1111111;dispdat4<=7'b1011011;end8'd29:begin dispdat3<=7'b1101111;dispdat4<=7'b1011011;end8'd30:begin dispdat3<=7'b0111111;dispdat4<=7'b1001111;end8'd31:begin dispdat3<=7'b0000110;dispdat4<=7'b1001111;end8'd32:begin dispdat3<=7'b1011011;dispdat4<=7'b1001111;end8'd33:begin dispdat3<=7'b1001111;dispdat4<=7'b1001111;end8'd34:begin dispdat3<=7'b1100110;dispdat4<=7'b1001111;end8'd35:begin dispdat3<=7'b1101101;dispdat4<=7'b1001111;end8'd36:begin dispdat3<=7'b1111101;dispdat4<=7'b1001111;end8'd37:begin dispdat3<=7'b0000111;dispdat4<=7'b1001111;end8'd38:begin dispdat3<=7'b1111111;dispdat4<=7'b1001111;end8'd39:begin dispdat3<=7'b1101111;dispdat4<=7'b1001111;end8'd40:begin dispdat3<=7'b0111111;dispdat4<=7'b1100110;end8'd41:begin dispdat3<=7'b0000110;dispdat4<=7'b1100110;end8'd42:begin dispdat3<=7'b1011011;dispdat4<=7'b1100110;end8'd43:begin dispdat3<=7'b1001111;dispdat4<=7'b1100110;end8'd44:begin dispdat3<=7'b1100110;dispdat4<=7'b1100110;end8'd45:begin dispdat3<=7'b1101101;dispdat4<=7'b1100110;end8'd46:begin dispdat3<=7'b1111101;dispdat4<=7'b1100110;end8'd47:begin dispdat3<=7'b0000111;dispdat4<=7'b1100110;end8'd48:begin dispdat3<=7'b1111111;dispdat4<=7'b1100110;end8'd49:begin dispdat3<=7'b1101111;dispdat4<=7'b1100110;end8'd50:begin dispdat3<=7'b0111111;dispdat4<=7'b1101101;end default:begin dispdat3<=7'b0111111;dispdat4<=7'b0111111;endendcaseendendmodule//************************文件结束****************************************。

基于FPGA的交通信号灯课程设计(以VHDL语言实现)

基于FPGA的交通信号灯课程设计(以VHDL语言实现)

基于FPGA的数字电子技术课程设计(以VHDL语言实现)课题:交通信号灯设计题目:1.由主干道A和支干道B的汇合点形成十字交叉路口,在交叉路口处设有红绿黄三色信号灯。

红灯亮禁止通行;绿灯亮允许通行;黄灯亮则让行驶到路口的车辆有时间停靠到禁止线外。

用两位数码管显示当前主支干道所处的状态。

红黄绿分别用R,Y,G表示。

2.主干道车辆较多,所以绿灯亮灯时间为50S;支干道亮绿灯时间设为30S。

当主干道允许通行亮绿灯时则支干道亮红灯;支干道亮绿灯时也相反。

每次由绿灯转变为红灯时,期间要亮5S的黄灯。

3.交通灯正常运行时,用四位数码管显示主干道和支干道的倒计时时间。

4.能实现系统总清0,清0后计数器由初始状态开始计数。

5.具有一定的扩展功能。

一.设计思路1.根据设计题目要求可以得出交通信号灯控制器的设计用“状态法”来实现较好,因此先划分出交通灯显示时的几个较大的状态。

设状态用S表示。

S0:主干道亮黄灯支干道亮红灯亮灯5SS1:主干道亮红灯支干道亮绿灯亮灯30SS2:主干道亮红灯支干道亮黄灯亮灯5SS3:主干道亮绿灯支干道亮红灯亮灯50S状态之间应该要能实现循环:S0=>S1=>S2=>S3=>S02.然后再考虑在每个状态下要能够实现的功能。

根据题目可知在每个状态下要能实现将交通灯的颜色变换以字母的形式显示在两位数码管上,每位各表示一条道路。

在交通灯颜色输出的同时还要能够实现计数的输出,也就是各路灯转换前剩余的时间量。

3.在实现了各个状态下的功能后就要考虑加上清0功能与紧急功能,清0也就是复位功能。

在复位时实现系统清0,并且清0后计数器从初始状态开始计时,在此将S0状态视为初始状态。

也就是清0完毕后系统进入S0状态。

课题中将紧急功能设为两条路都显示红灯,并且计数器全置0。

4.这些实现的功能都加入后就可以对所写的VHDL语言进行测试与仿真了。

在其中实现对所写语言的改进和完善,并得到仿真图结合仿真图再进行修改。

Verilog自制交通灯控制器加倒计时功能(内带源码文件)

Verilog自制交通灯控制器加倒计时功能(内带源码文件)
Verilog自制交通灯控制器加倒计时功能(内带源码文件)
无论是课程设计,还是实验课,最好的方法就是在FPGA实验板上进行测试实验,这样可以看到实际交通灯的效果。对每一部分修改可以看到修改 的效果,知道程序的修改带来的效果,那样比只看代码要理解的更深刻。 在设计中最好是分模块设计,状态控制,脉冲发生等部分,对每个模块的调试书写时要特别注意每位的意义,尤其在软件绑定引脚时,每个输入输 出信号的绑定,引脚的输入输出特性等,要与实际代码中的相符,在调试中不断发现问题,解决问题。 下面附上代码部分: 自制交通灯控制器加倒计时功能: module traffic(CLK,EN,LIGHT_A,LIGHT_B,TIME_A,TIME_B,a,b,c,d,e,f,g); output[7:0] TIME_A,TIME_B; output[2:0] LIGHT_A,LIGHT_B; output[3:0] a,b,c,d,e,f,g; input CLK,EN; reg[7:0] numa,numb; reg tempa,tempb; reg[1:0] counta,countb; reg[5:0] ared,ayellow,agreen,bred,byellow,bgreen; reg[2:0] LIGHT_A,LIGHT_B; reg[3:0] a,b,c,d,e,f,g; always @(EN) if(!EN)
default:{a[0],b[0],c[0],d[0],e[0],f[0],g[0]}=7'bx; endcase end endmodule
end
always @(posedge CLK)
begin
if (EN) begin if(!tempb) begin tempb<=1; case (countb) 0: begin numb<=bgreen; LIGHT_B<=1; countb<=1; end 1:begin numb<=byellow; LIGHT_B<=2; countb<=2; end 2: begin numb<=bred; LIGHT_B<=4; countb<=0; end default: LIGHT_B<=1; endcase end else begin if(numb>=1) if(!numb[3:0]) begin numb[3:0]<=9; numb[7:4]<=numb[7:4]-1; end else numb[3:0]<=numb[3:0]-1; if(numb==0) tempb<=0; end end

FPGA实验报告-交通灯控制器设计

FPGA实验报告-交通灯控制器设计

FPGA实验报告--交通灯控制器设计院系:电子与信息工程系专业:通信工程班级:姓名:学号:指导教师:一、实验任务 1、任务名称:交通灯控制器的设计2、设计容与要求:① 设计一个十字路口交通信号灯的定时控制电路。

要求红、绿灯按一定的规律亮和灭,并在亮灯期间进行倒计时,并将运行时间用数码管/液晶显示出来。

② 绿灯亮时,为该车道允许通行信号,红灯亮时,为该车道禁止通行信号。

要求主干道每次通行时间为99秒,支干道每次通行时间为30秒。

每次变换运行车道前绿灯闪烁,持续时间为5秒。

即车道要由主干道转换为支干道时,主干道在通行时间只剩下5秒钟时,绿灯闪烁显示,支干道仍为红灯,以便主干道上已过停车线的车继续通行,未过停车线的车停止通行。

同理,当车道由支干道转换为主干道时,支干道绿灯闪烁显示5秒钟,主干道仍为红灯。

③ 对红、绿灯的运行时间要能比较方便的进行重新设置。

④ 对器件进行在系统编程和实验验证。

⑤ 用VHDL 语言对设计进行描述,设计一个测试方案,通过ISE 对设计进行仿真验证。

并能够下载到实验板上调试成功。

6 写出设计性实验报告,并打印各层次的源文件和仿真波形,然后作简要说明。

2、补充功能与要求:1.在主干道和支干道添加左转向灯;2.各灯亮的时间及最后闪烁时间可调节;3.紧急路况时,主干道和支干道都为红灯。

二、实验环境1、ISE 软件一套;2、PC 机一台。

三、设计思路1、根据题目要求,知道整个交通灯的运行过程是周期的,所以可以设计一个总的计数器,满周期则清零;2、将灯闪烁时间、主干道绿灯亮的时间、主干道转向灯亮的时间、支干道绿灯亮的时间、支干道转向灯亮的时间分别记为变量t0、t1、t2、t3、t4,通过调整它们,实现调节各灯亮的时间;3、将所有需要显示的量由同一个信号表示并最终输出、显示在LCD上。

四、系统设计a)系统框图b)状态转换说明:主干道和支干道永远有且只有一个灯亮,紧急路况时两边红灯亮,其余时候有且只有一个红灯亮;主干道绿灯、主干道转向灯亮、支干道绿灯、支干道转向灯依次亮,在最后t0S(默认为5S)闪烁。

交通信号灯控制器代码及说明

交通信号灯控制器代码及说明

课程设计报告课程名称: FPGA现代数字系统设计设计名称:交通信号灯控制器姓名: * * *学号: ********** 专业:通信指导教师:* * *起止日期: 2010.12.25 - 2011.1.9课程设计任务书设计名称:一、设计目的和意义通过应用Verilog语言在QuartusⅡ软件平台上设计交通信号灯控制器,并借助硬件来测试仿真效果。

通过课程设计,熟悉硬件编程语言的应用,特别是有限状态机的灵活使用,为以后进一步的学习实践打下良好的基础。

二、设计原理(1) 主、支干道用传感器检测车辆到来情况,实验电路用逻辑开关代替。

(2) 选择1HZ时钟脉冲作为系统时钟。

(3) 45s、25s、5s定时信号可用顺计时,也可用倒计时,计时起始信号由主控电路给出,每当计满所需时间,启、闭三色信号灯,并启动另一计时电路。

(4) 交通灯状态变化如表1及图1所示:表1:交通灯状态图图1:交通灯状态图(5) 交通灯设计输入信号4个:CLK(时钟),EN(使能),EMERGENCY(紧急),BCHECK(检测) ;输出信号4个:LAMPA(主干道信号灯),LAMPB(支干道信号灯),ACOUNT(主干道计数器),BCOUNT(支干道计数器)。

交通灯控制原理如图2所示。

图2:交通灯原理图三、详细设计步骤(1) 确定4个输入信号与4个输出信号,具体见图2;(2) 将50MHZ时钟分频为1MHZ;(3) 设计红黄绿3中信号灯切换的时间及顺序;(4) 设计支路检测状态下的信号灯切换;(5) 设计紧急(EMERGENCY)状态下信号灯的切换;(6) 程序使用3always块[1],详细代码如下:module traffic_control(CLK,EN,EMERGENCY,BCHECK,LAMPA,LAMPB,ACOUNT,BCOUNT);output[2:0] ACOUNT,BCOUNT;output[2:0] LAMPA,LAMPB;reg clk1;input CLK,EN,EMERGENCY,BCHECK;reg[2:0] numa,numb;reg tempa,tempb;reg[25:0]count;reg[2:0] counta,countb;reg[2:0] ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft;reg[2:0] LAMPA,LAMPB;/* 信号定义与说明:CLK:为同步时钟;EN:使能信号,为1 的话,则控制器开始工作;LAMPA:控制A 方向四盏灯的亮灭;其中,LAMPA0~LAMPA2,分别控制A 方向的绿灯、黄灯和红灯;LAMPB:控制B 方向四盏灯的亮灭;其中,LAMPB0 ~ LAMPB2,分别控制B 方向的绿灯、黄灯和红灯;ACOUNT:用于A 方向灯的时间显示,8 位BCOUNT:用于B 方向灯的时间显示,8 位*/always @(posedge CLK ) //将50MHZ时钟分频为1MHZbeginif(count==49999999)begincount<=0;clk1<=~clk1;endelsecount<=count+1;endassign ACOUNT=numa;assign BCOUNT=numb;always @(EN )if(!EN)beginared <=6;ayellow <=2;agreen <=4;bred <=6;byellow <=2;bgreen <=4;endalways @(posedge clk1)//该进程控制A 方向beginif(EMERGENCY) //EMERGENCY高电平有效,手动控制beginnuma<=0;LAMPA<=4;counta<=0;tempa<=0;endelse if(EN)beginif(!tempa)//亮灯begintempa<=1;case(counta)//控制亮灯的顺序0: begin numa<=agreen; LAMPA<=1; counta<=1; end1: begin numa<=ayellow; LAMPA<=2; counta<=2; end2: begin numa<=ared; LAMPA<=4; counta<=0; enddefault: LAMPA<=4;endcaseendelse //倒计时beginif(numa>2) numa<=numa-1;if(numa==2) begin numa<=1;tempa<=0;if ((BCHECK) &&(counta==2)) counta<=0;end/*if(numa>1)if(numa[3:0]==0)beginnuma[3:0]<=4'b1001;numa[7:4]<=numa[7:4]-1;endelse numa[3:0]<=numa[3:0]-1;if (numa==2)begin tempa=0;if ((!BCHECK )&& (counta==1)) counta<=0;end*/endendelsebeginLAMPA<=3'b100;counta<=0; tempa<=0;endendalways @(posedge clk1)//该进程控制B 方向的四种灯beginif(EMERGENCY) //EMERGENCY高电平有效,手动控制beginnumb<=0;LAMPB<=4;countb<=0;tempb<=0;endelse if (EN)beginif(!tempb)begintempb<=1;case (countb)0: begin numb<=bred; LAMPB<=4; countb<=1; end1: begin numb<=bgreen; LAMPB<=1; countb<=2; end2: begin numb<=byellow; LAMPB<=2; countb<=0; enddefault: LAMPB<=4;endcaseendelsebeginif(numb>2) numb<=numb-1;if(numb==2) begin numb<=1;tempb<=0;if ((BCHECK )&& (countb==1)) countb<=0;end/*if(numb>1)if(!numb[3:0])beginnumb[3:0]<=9;numb[7:4]<=numb[7:4]-1;endelse numb[3:0]<=numb[3:0]-1;if(numb==2)begin tempb=0;if ((!BCHECK) && (countb==1)) countb<=0;end*/endendelsebeginLAMPB<=3'b100;tempb<=0; countb<=0;endendendmodulemodule四、结果分析程序仿真效果如图3和图4所示:为观察方便,将红黄绿灯显示时间分别缩短,图中[4]表示红灯亮,[2]表示黄灯亮,[1]表示绿灯亮,BCHECK信号代表支干道检测状况,低电平表示检测到有车辆正常通过,EMERGENCY代表紧急状态信号,低电平表示紧急信号无效。

基于FPGA的交通灯控制器设计(VHDl代码全,各个模块均调.

基于FPGA的交通灯控制器设计(VHDl代码全,各个模块均调.

2.3 FPGA 主控实现方案设计结合已有的 PLC 实现和单片机应用实现的经验,并吸收两种设计的优势之处,再根据交通灯控制系统的设计要求和 FPGA 模块化功能实现,确定了以下方案,因每个方向相对的信号灯状态及倒计时显示器的显示完全一致,根据设计要求和系统所具有的功能,交通灯控制器系统框图如图 2-6 所示。

图 2-6 交通灯控制器系统框图确定的方案中, 系统具有复位功能, 能使系统重新开始计时; 在红绿灯交通信号系统中, 大多数的情况是通过自动控制的方式指挥交通的, 但为了配合高峰时段,防止交通拥挤,有时还必须使用手动控制。

为此主体包括系统复位,手动 /自动,红绿灯切换,主控模块,显示器,报警器。

具体主控部分用 FPGA 来实现。

图 2-7 交通灯通行示意图结合实现方案,主要有东西、南北、南北左拐,东西左拐,跟手动控制 5种工作方式,具体由 M2~M0设定,具体如表 2-1。

表2-1 交通灯工作方式表方式 M2(0:自动, 1:手动 M1(0:A向,1:B向M0(O:直行, 1:左拐1 0 0 02 0 0 13 0 1 04 0 1 15 1 * *当出现特殊情况时,可选择方式 1 到方式 4 中的任何一种方式,停止正常运行,进入特殊运行状态。

此时交通灯按工作方式显示,计时电路停止计时,计时时间闪烁显示。

当系统总复位时,控制电路和计时电路复位,信号灯全部熄灭。

3 各功能模块的设计与实现3.1总体设计思路3.1.1系统组成框图结合设计任务要求和确定的实现方案, 假设某个十字路口是由一条主干道和一条次干道回合而成, 在每个方向设置红绿黄 3种信号灯, 红灯亮禁止通行, 绿灯亮允许通行。

黄灯亮允许行驶中车辆有时间停考到禁止线以外。

按照自顶向下的层次化设计方法, 整个系统可分为 4个模块, 系统时序发生电路、红绿灯计数时间选择模块、定时控制电路、红绿灯信号译码电路。

其系统组成方框图如图 3-1所示。

《FPGA系统设计》实验报告》交通灯控制系统的设计实验

《FPGA系统设计》实验报告》交通灯控制系统的设计实验

《FPGA系统设计》实验报告》交通灯控制系统的设计实验一 .实验目的了解交通灯及控制系统的控制及其显示模块。

二.实验要求1.交通灯从绿色变成红色时,要经过黄色的过渡,黄色灯亮的时间为5秒:2.交通灯从红色变成绿色时,不要需要经过黄色灯的过渡,直接由红色变成绿色,绿色灯点亮的时间为25秒,红色灯点亮的时间为20秒;3.各种灯点亮时,要实现时间的倒计时显示。

三.实验操作步骤假设十字路口的方向为xy两方向,对两个方向需要两个控制模块来控制交通灯的点亮,还需要时间倒计时显示,即需要显示模块,因此系统的总设计模块图由三大模块组成,分别是xy两方向的控制模块,显示模块。

其中显示模块又由三个子模块构成,分别是数码管选择模块,数据分配模块,数码管驱动模块。

控制模块的设计控制模块是控制系统的核心部分,它实现了交通灯的三种颜色的交替点亮和时间倒计时的控制。

x方向控制代码如下:LIBRARY IEEE;USE IEEE .STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CORNA ISPORT (CLK:IN STD_LOGIC;R,G,Y:OUT STD_LOGIC;TIMH,TIML:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END CORNA;ARCHITECTURE CORNER OF CORNA ISTYPE RGY IS (GREEN,YELLOW,RED);BEGINPROCESS(CLK)VARIABLE A:STD_LOGIC;VARIABLE TH,TL:STD_LOGIC_VECTOR(3 DOWNTO 0);VARIABLE STATE:RGY;BEGINIF(CLK'EVENT AND CLK='1')THENCASE STATE ISWHEN GREEN=>IF A='0'THENTH:="0001";TL:="1001";A:='1';G<='1';R<='0';Y<='0';ELSEIF NOT(TH="0000" AND TL="0001")THENIF TL="0000" THENTL:="1001";TH:=TH-1;ELSETL:=TL-1;END IF;ELSETH:="0000";TL:="0000";A:='0';STATE:=YELLOW;END IF;END IF;WHEN YELLOW=>IF A='0' THENTH:="0000";TL:="0100";A:'1';Y<='1';G<='0';R<='0';ELSEIF NOT(TH="0000" AND TL="0001")THEN TL:=TL-1;ELSETH:="0000" ;TL:="0000";A:='0';STATE:=RED;END IF;END IF;WHEN RED=>IF A='0' THENTH:="0010";TL:="0100";A:='1';R<='1';Y<='0';G<='0';ELSEIF NOT(TH="0000" AND TL="0001")THEN IF TL="0000"THENTL:="1001";TH:=TH-1;ELSETL:=TL-1;END IF;ELSETH:="0000";TL:="0000";A:='0';STATE:=GREENEND IF;END IF;END CASE;END IF;TIMH<=TH;TIML<=TL;END PROCESS;END CORNER;在以上程序中,实体部分定义的输入时钟信号clk为1Hz的脉冲信号,r、g、y为接水通灯的信号,timh 和timl为时间显示信号的十位和个位值。

基于FPGA的交通信号灯设计说明

基于FPGA的交通信号灯设计说明

《 CPLD/FPGA设计及应用课程设计》课程设计报告题目:基于FPGA的交通信号灯设计院(系):信息科学与工程学院专业班级:通信工程学生:20 16 年 03 月 14 日至20 16 年 04 月 8 日目录一设计目的 (1)1.交通灯介绍 (2)2. EDA技术的发展 (2)3. 基于FPGA的交通灯的优点 (3)二设计过程 (4)1.总体设计思路 (4)2.总体设计模块 (5)3. 控制电路的模块VHDL设计实现 (6)3.1分频模块 (6)3.2定时模块 (7)3.3状态转换模块 (8)3.4 禁止通行模块 (12)3.5显示模块 (14)4.硬件电路设计与调试 (16)三实验总结 (17)参考文献 (17)附录一(程序代码) (18)一设计目的引言:随着社会和汽车工业的快速发展,近几年机动车辆急剧增加,道路超负荷承载现象日趋严重,致使交通事故逐年增加。

交通信号灯是城市交通有序、安全、快速运行的重要保障,而交通信号灯的正常工作就成了保障交通有序、安全、快速运行的关键。

如何实现人、车、路三者关系的协调,已成为交通管理部门需要切实解决的问题。

该设计分析了现代城市交通控制与管理问题的现状,结合城乡交通的实际情况阐述了交通灯控制系统的工作原理,采用了层次化的设计方法,基于VHDL语言实现红绿灯的自动指挥的硬件实现方法。

通过电路优化设计,可以使用规模更小的可编程逻辑芯片,从而降低系统成本。

该设计是针对交通信号灯控制器的设计问题,采用EDA技术实现的交通灯控制电路的设计方案。

本设计有效的克服了传统的交通灯控制的缺点而采取自上而下的设计思路。

该设计在软件QuartusⅡ11.0下应用硬件描述语言VHDL语言完成设计文件,并对其进行了功能仿真和时序仿真,且给出了相应的仿真结果,绘制出了具体的逻辑电路,最后将其下载到Alter公司生产的CycloneⅡ系列的EP2C8Q208开发板上进行逻辑验证,实现软件和硬件的安全连接,达到了对交通灯的自动安全控制的目的。

FPGA交通灯仿真及代码

FPGA交通灯仿真及代码

控制模块设计`timescale 1ns/1nsmodule M_control(clk,rst,Leds,S_M,G_M,S_B,G_B);input rst,clk; //Time clock and resetoutput [7:0]Leds; //mainroad lights L R Y G, Branch lights L R Y G.output[3:0] S_M,G_M,S_B,G_B;//S_M main road shiwei G_M is mainrod gewei//S_B main road shiwei G_B is mainrod geweireg [7:0]Leds;reg[3:0] S_M,G_M,S_B,G_B;reg [7:0]state; //S1?S2...S8reg [6:0] count1,count2; //count1 main, road count2 branchparameter S1=8'b0_0_0_0_0_0_0_1,S2=8'b0_0_0_0_0_0_1_0,S3=8'b0_0_0_0_0_1_0_0,S4=8'b0_0_0_0_1_0_0_0,S5=8'b0_0_0_1_0_0_0_0,S6=8'b0_0_1_0_0_0_0_0,S7=8'b0_1_0_0_0_0_0_0,S8=8'b1_0_0_0_0_0_0_1;//-------------------------------------------------------------------always (posedge clk or posedge rst)beginif(rst)beginS_M<=0;G_M<=0;S_B<=0;G_B<=0;state<=S1;Leds<=8'b00010100;count1<=44;count2<=64;endelse begincase (state)S1: if(count1==0)beginstate<=S2;Leds<=8'b00100100; //main road yellow branch redcount1<=4;count2<=count2-1;endelse begincount1<=count1-1;count2<=count2-1;endS2: if(count1==0)beginstate<=S3;Leds<=8'b10000100; //main road Turn Left branch redcount1<=9;count2<=count2-1;endelse begincount1<=count1-1;count2<=count2-1;endS3: if(count1==0)beginstate<=S4;Leds<=8'b00100100; //main road yellow branch redcount1<=4;count2<=count2-1;endelse begincount1<=count1-1;count2<=count2-1;endS4: if (count1==0 && count2==0)beginstate<=S5;Leds<=8'b01000001; //main road red branch greencount1<=59;count2<=19;endelse begincount1<=count1-1;count2<=count2-1;endS5: if (count2==0)beginstate<=S6;Leds<=8'b01000010; //main road red branch yellowcount1<=count1-1;count2<=4;endelse begincount1<=count1-1;count2<=count2-1;endS6: if (count2==0) beginstate<=S7;Leds<=8'b01001000; // main road red branch turn leftcount1<=count1-1;count2<=9;endelse begincount1<=count1-1;count2<=count2-1;endS7: if (count2==0) beginstate<=S8;Leds<=8'b01000010; //main road red branch yellow count1<=count1-1;count2<=4;endelse begincount1<=count1-1;count2<=count2-1;endS8: if (count1==0 && count2==0) beginstate<=S1;Leds<=8'b00010100; //main road green branch redcount1<=44;count2<=64;endelse begincount1<=count1-1;count2<=count2-1;enddefault: beginstate<=S1;Leds<=8'b00010100; //main road green branch redcount1<=44;count2<=64;endendcaseendendalways (posedge clk)beginS_M<=count1/10;G_M<=count1%10;S_B<=count2/10;G_B<=count2%10;endendmodule显示模块源代码`timescale 1ns/1nsmodule xianshi( clk,rst,S_M,G_M,S_B,G_B,sel1,sel2,sel3,sel4); input clk,rst;input[3:0] S_M,G_M,S_B,G_B;output[6:0]sel1,sel2,sel3,sel4;reg[6:0]sel1,sel2,sel3,sel4;always(posedge rst or posedge clk)beginif(rst)beginsel1=7'b0000000;sel2=7'b0000000;sel3=7'b0000000;sel4=7'b0000000;endelsebegincase(S_M)4'b0000:sel1=7'b1111110;4'b0001:sel1=7'b0110000;4'b0010:sel1=7'b1101101;4'b0011:sel1=7'b1111001;4'b0100:sel1=7'b0110011;4'b0101:sel1=7'b1011011;4'b0110:sel1=7'b1011111;4'b0111:sel1=7'b1110000;4'b1000:sel1=7'b1111111;4'b1001:sel1=7'b1111011;default:sel1=7'b1111110; endcasecase(G_M)4'b0000:sel2=7'b1111110;4'b0001:sel2=7'b0110000;4'b0010:sel2=7'b1101101;4'b0011:sel2=7'b1111001;4'b0100:sel2=7'b0110011;4'b0101:sel2=7'b1011011;4'b0110:sel2=7'b1011111;4'b0111:sel2=7'b1110000;4'b1000:sel2=7'b1111111;4'b1001:sel2=7'b1111011;default:sel2=7'b1111110; endcasecase(S_B)4'b0000:sel3=7'b1111110;4'b0001:sel3=7'b0110000;4'b0010:sel3=7'b1101101;4'b0011:sel3=7'b1111001;4'b0100:sel3=7'b0110011;4'b0101:sel3=7'b1011011;4'b0110:sel3=7'b1011111;4'b0111:sel3=7'b1110000;4'b1000:sel3=7'b1111111;4'b1001:sel3=7'b1111011;default:sel3=7'b1111110; endcasecase(G_B)4'b0000:sel4=7'b1111110;4'b0001:sel4=7'b0110000;4'b0010:sel4=7'b1101101;4'b0011:sel4=7'b1111001;4'b0100:sel4=7'b0110011;4'b0101:sel4=7'b1011011;4'b0110:sel4=7'b1011111;4'b0111:sel4=7'b1110000;4'b1000:sel4=7'b1111111;4'b1001:sel4=7'b1111011;default:sel4=7'b1111110;endcaseendendendmodule顶层模块`timescale 1ns/1nsmodule jiaotong(clk,rst,Leds,S_M,G_M,S_B,G_B,sel1,sel2,sel3,sel4,enable);input clk,rst,enable;output[7:0]Leds;output[3:0] S_M,G_M,S_B,G_B;output[6:0]sel1,sel2,sel3,sel4;wire[3:0] S_M,G_M,S_B,G_B,M_B;M_control control1(.clk(clk),.rst(rst),.Leds(Leds),.S_M(S_M),.G_M(G_M),.S_B(S_B),.G_B(G_B));xianshixianshi1(.clk(clk),.rst(rst),.S_M(S_M),.G_M(G_M),.S_B(S_B),.G_B(G_B),.sel1(sel1),.sel2(sel2),.sel 3(sel3),.sel4(sel4));Endmodule测试代码`timescale 1ns/1nsmodule testJT;reg clk,rst;wire[7:0]Leds;wire[3:0]S_M,G_M,S_B,G_B;wire[6:0]sel1,sel2,sel3,sel4;parameter clock=5;initialbeginclk=0;rst=0;#(2*clock);rst=1;#(4*clock);rst=0;#(800*clock);$stop;endalways #(clock) clk=~clk; jiaotong m1(clk,rst,Leds,S_M,G_M,S_B,G_B,sel1,sel2,sel3,sel4); endmodule仿真图:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

状态机:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY xhd ISPort(clk : in std_logic;ra,rb,ya,yb,ga,gb : out std_logic );END xhd;Architecture a of xhd istype state is (S0,S1,S2,S3);signal presentstate,nextstate : state;signal tmp1,tmp2 : integer range 0 to 30;signal timeout1,timeout2: std_logic;signal q: std_logic_vector(21 downto 0);signal sec: std_logic;Begin----get 1 hz clock pulseprocess(clk)beginif clk'event and clk='1' then q<=q+1; end if;sec<=q(21); --get 1 hz clock pulseend process;timing: process(sec)beginif sec'event and sec='1' thenif tmp1=29 then timeout1<='1'; timeout2<='0'; tmp1<=0; else if timeout1='1' thenif tmp2=4 then timeout2<='1'; timeout1<='0'; tmp2<=0;else tmp2<=tmp2+1; end if;else tmp1<=tmp1+1; end if;end if;end if;end process;changestate: process(presentstate)Begincase presentstate iswhen S0 => if timeout1='0' thennextstate<=s0;ra<='0'; ya<='0'; ga<='1';rb<='1'; yb<='0'; gb<='0';else nextstate<=s1; end if;when S1 => if timeout2='0' thennextstate<=s1;ra<='0'; ya<='1'; ga<='0';rb<='1'; yb<='0'; gb<='0';else nextstate<=s2; end if;when S2 => if timeout1='0' thennextstate<=s2;ra<='1'; ya<='0'; ga<='1';rb<='0'; yb<='0'; gb<='1';else nextstate<=s3; end if;when S3 => if timeout2='0' thennextstate<=s3;ra<='1'; ya<='0'; ga<='0';rb<='0'; yb<='1'; gb<='0';else nextstate<=s0; end if;when others => nextstate<=s0;timeout1<='0'; timeout2<='0';end case;end process;end a;ENTITY xhd ISPort(clk : in std_logic;ra,rb,ya,yb,ga,gb : out std_logic );END xhd;Architecture a of xhd is 里面的xhd根据你们文件具体情况设定秒表10进制--*******************************************--程序包library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;--*******************************************--实体ENTITY shijinzhi is--Cn 计数脉冲--Rest 清零信号-- En 允许计数信号--Dout[3..0] 十进制BCD码-- Cy 进位码port(Cn,Rest,En :in std_logic;Dout : out std_logic_VECTOR ( 3 Downto 0 );Cy : out std_logic);end shijinzhi ;--******************************************* --结构体architecture sun1 of shijinzhi isbeginProcess (Cn,Rest,En)Variable Cqi : std_logic_VECTOR ( 3 Downto 0 ); BeginIf Rest ='1' Then Cqi :=(Others =>'0');Cy<='0';Elsif Cn'Event and Cn='1' thenIf En='1' thenIf Cqi <"1001" thenCqi :=Cqi+1;Cy<='0';elsif cqi="1001"then Cy<='1';Cqi :=(others =>'0');end If;end If;end If;Dout<=Cqi;END Process;End sun1;--******************************************* 修改同上编写成功后,封装六进制:--******************************************* --程序包library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;--******************************************* --实体ENTITY liujinzhi is--CLK 计数脉冲--RST 清零信号-- EN 允许计数信号--Dout[3..0] 十进制BCD码-- CY 进位码port(CLK,RST,EN :in std_logic;DOUT : out std_logic_VECTOR ( 3 Downto 0 );CY : out std_logic);end liujinzhi ;--*******************************************--结构体architecture SUN2 of liujinzhi isbeginProcess (CLK,RST,EN)Variable Cq : std_logic_VECTOR ( 3 Downto 0 );BeginIf RST ='1' Then Cq :=(Others =>'0');CY<='0';Elsif CLK'Event and CLK='1' thenIf EN='1' thenIf Cq <"0101" thenCq :=Cq+1;CY<='0';elsif cq="0101"then CY<='1';Cq :=(others =>'0');end If;end If;end If;DOUT<=Cq;END Process;End SUN2;--*******************************************修改同上:编译、封装七段:程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY qiwei ISPORT ( Q : IN STD_LOGIC_VECTOR(3 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END qiwei; ARCHITECTURE behave OF qiwei ISBEGINPROCESS(Q) BEGINCASE Q ISWHEN "0000"=> DOUT<="0111111";WHEN "0001"=> DOUT<="0000110";WHEN "0010"=> DOUT<="1011011";WHEN "0011"=> DOUT<="1001111";WHEN "0100"=> DOUT<="1100110";WHEN "0101"=> DOUT<="1101101";WHEN "0110"=> DOUT<="1111101";WHEN "0111"=> DOUT<="0000111";WHEN "1000"=> DOUT<="1111111";WHEN "1001"=> DOUT<="1101111";WHEN OTHERS=> DOUT<="0000000";END CASE;END PROCESS;END behave;修改同上,编译,封装仿真波形如图所示:分频(1):library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fenpin isport ( CLK:in std_logic;FCLK:out std_logic);end fenpin;architecture bhv of fenpin issignal CK:std_logic;beginprocess(CLK)variable counter:integer range 0 to 100000;beginif(CLK'EVENT AND CLK='1') THENIF(counter=99999)THEN counter:=0;CK<=NOT CK;ELSE counter:=counter+1;end if;end if;end process;FCLK<=CK;end bhv;分频(2):library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fenpin isport ( clk,clr:in std_logic;q:buffer std_logic);end fenpin;architecture b of fenpin issignal counter:integer range 0 to 49999;beginprocess(clr,clk)beginif(CLK='1' AND clk'EVENT) THENIF clr='1' then counter<=0;ELSIF COUNTER=49999 THEN counter<=0;q<=not q;ELSE counter<=counter+1;END IF;END IF;end process;end b;。

相关文档
最新文档