扫码加入

  • 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

交通定时控制电路设计VHDL代码Quartus仿真

1小时前
105
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-241126191403a8.doc

共1个文件

名称:交通定时控制电路设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

交通定时控制电路设计

1)基本要求:

首先设定100以内的交通信号灯十进制计时秒数,而后每来一次秒脉冲降沿,秒数减1,减到0,电路回复设定值重新计时。

2)端口定义:

输入32KHz时钟端口clk,输入端口个位FQ3 downto0),十位sQ(3 downto0),置数端S;输出端口个位FLED(7 downto0),十位SLED(7 downto0)。

3)实现思路

(1)电路原理:

秒计数可分为个位与十位分别计算,个位减到0回9,十位减一;减至0,计时结束(2)1Hz秒脉冲电路参考基础电路程序设计。

(3)秒计时电路

定义信号FD(3 downto0),SD(3 downto0)暂存秒数的个位值与秒数的十位值:定义变量iFD(3 downto0),iSD(3 downto0)暂存秒数的个位值FD与秒数的十位值SDLGTP: Process(ck1s, SQ, FQ)    -100S timer

VARIABLE IFD, ISD: STD LOGIC_ VECTOR(3 downto 0): =X"O

Begin

IF S='1' then ISD<=SQ; IFD<=FQ

ELSIF ck1s'event AND cks='0' then

IF IFD="0000" then    -When FD is decreased to O(in Decimal

F ISD="0000" then    -when SD is decreased to 0 (in Decimal

ISD<=SQ; IFD<=FQ;

ELSE

iSD<=iSD-1;iFD<="1001”;

END IF

ELSE

FD<=IFD-1

END IF

END IF

SD<=ISD: FD<=IFD

End Process LGTP:

(4)时间值FD、SD采用8段LED显示,显示电路程序参考基础电路的数码管译码电路。

要求2.jpg

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

 

演示视频:

设计文档:

1. 工程文件

Quartus9.0版本

 

2. 程序文件

 

3. 程序编译

 

4. 管脚图

 

5. RTL图

 

6. 仿真图

 

上图中,可以看到数码管十位显示6F,个位显示6F->7F->07->7D->6D->66->4F ......根据数码管译码表可知,数码管倒计时显示的是99->98->97->96->95->94->93.......显示正确。

 

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--交通定时控制
ENTITY traffic_time IS
   PORT (
      clk :IN STD_LOGIC;--时钟端口
      S  :IN STD_LOGIC;--置数端
      FQ  :IN STD_LOGIC_VECTOR(3 DOWNTO 0);--输入端口个位
      SQ  :IN STD_LOGIC_VECTOR(3 DOWNTO 0);--输入端口十位 
      SLED  : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--输出十位显示端口
      FLED  : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--端口个位
   );
END traffic_time;
ARCHITECTURE behave OF traffic_time IS
   --定义信号
   SIGNAL SD:STD_LOGIC_VECTOR(3 downto 0);
   SIGNAL FD:STD_LOGIC_VECTOR(3 downto 0);
   SIGNAL ck1s: STD_LOGIC:='0';--1Hz
   SIGNAL iFD: STD_LOGIC_VECTOR(3 downto 0);
   SIGNAL iSD: STD_LOGIC_VECTOR(3 downto 0);
BEGIN
--分频到1Hz
ck1sP:Process(clk) --Process to generate 1Hz clock
 Variable tmp: INTEGER RANGE 0 to 15999:=0;
Begin
If clk'EVENT AND clk='0' then
If tmp=159 then --为便于仿真将15999改小为159
tmp:=0;
ck1s<=NOT(ck1s);
Else
tmp:= tmp+1;
END IF;
 END IF;
End Process ck1sP;
LGTP: Process(ck1s,S) --100S timer
Begin
IF S='1' then 
iSD<=SQ;--十位
iFD<=FQ;--个位
ELSIF ck1s'EVENT AND ck1s='0' then
 IF iFD="0000" then --when FD is decreased to 0(in Decimal)
 IF iSD="0000" then --when SD is decreased to 0 (in Decimal)
iSD<="1001"; iFD<="1001";
 ELSE
iSD<=iSD-"0001"; iFD<="1001";
 END IF;
  ELSE
 iFD<=iFD-"0001";
  END IF;
 END IF;
  SD<=iSD; FD<=iFD; 
End Process LGTP;
--数码管译码电路显示十位
SLED<=  X"3F" WHEN SD="0000" ELSE--"0"
X"06" WHEN SD="0001" ELSE--"1"
X"5B" WHEN SD="0010" ELSE--"2"
X"4F" WHEN SD="0011" ELSE--"3"
X"66" WHEN SD="0100" ELSE--"4"
X"6D" WHEN SD="0101" ELSE--"5"
X"7D" WHEN SD="0110" ELSE--"6"
X"07" WHEN SD="0111" ELSE--"7"
X"7F" WHEN SD="1000" ELSE--"8"
X"6F" WHEN SD="1001" ELSE--"9"
X"00";--light off

 

 

  • 2-241126191403a8.doc
    下载

相关推荐