3360
- 收藏
- 点赞
- 分享
- 举报
交通灯VHDL
1、 设计要求的定义
设计组成:2位BCD码(减法)计数器、BCD码2选一开关(MUX),动态扫描脉冲产生器, LED四——七译码器,置位电路,单脉冲发生电路,LED指示灯显示。
功能要求:红灯(60秒)--黄灯(5秒)--绿灯(35秒)--黄灯循环,暂停(S2)、复位功能(S1)、动态扫描,倒计时显示,最后3秒
报警,发光二极管模拟红绿灯显示等。
2、使用的VHDL库声明
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
2、 设计实体声明
entity Eda_7064 is
port (
GCLK,STOP,RESET,in std_logic;
--公用时钟GCLK,暂停按钮(S2);复位(S1),
LED: OUT std_logic_vector(7 downto 0); --D8、D7…D2、D1;
BCDOUT: buffer std_logic_vector(6 downto 0); --数码管段选a、b、c、d、e、f、g;
DIG_SEL: out std_logic_vector(3 downto 0); --数码管位选A1、A2、A3、A4;
BEEP,DP: out std_logic; --SPK、DP
);
end EDA_7128;
实体声明中包含了原理框图的全部输入、输出端口定义。
5、结构声明
architecture EDA1_arch of EDA_7064 is--构件声明应在此处
SIGNAL STATE:STD_LOGIC_VECTOR(1 DOWNTO 0):="00";--状态值
signal BCD,BCD1,BCD2:STD_logic_vector(3 downto 0);--
signal REFRESH: std_logic;---(1 downto 0);-----位扫秒信号
signal CLK1,STA_F:std_logic; ----进位及灯状态转换标识
signal COUNTER:std_logic_vector(7 downto 0);----內部分频产生秒信号源。
signal R1,R2,CLK_OUT,CLK_BUFF,S1,S2:std_logic;--键盘去抖用信号
6、程序主体
从begin开始。
begin
DIG_SEL3<='1';-----关闭A3
DIG_SEL4<='1';-----关闭A4
S1<=CLK_BUFF ; ---S1为秒钟
CLK_BUFF<='1' when (COUNTER="111111") else
'0';
process(CLK_BUFF)
begin
if CLK_BUFF='1' and CLK_BUFF'event then
CLK_OUT<=not CLK_OUT;
end if;
end process;
process(GCLK) ---内部分频
begin
if GCLK='1' and GCLK'event then
COUNTER<=COUNTER+1;
end if;
end process;
process(GCLK) ----扫描
begin
if GCLK='1' and GCLK'event then
REFRESH<=NOT(REFRESH);
end if;
end process;
process(CLK1) ;个位借位
begin
if CLK1='0' and CLK1'event then
if BCD2>0 then
BCD2<= BCD2-1;
elsIF STATE=1 THEN
BCD2<="0000";
elsIF STATE=2 THEN
BCD2<="0011";
elsIF STATE=3 THEN
BCD2<="0000";
ELSE
BCD2<="0101";
end if;
end if;
end process;
PROCESS (STA_F) ----状态转换
BEGIN
IF STA_F='1' AND STA_F'EVENT THEN
IF STATE<3 THEN
STATE<=STATE+1;
ELSE
STATE<="00" ;
END IF;
END IF ;
END PROCESS;
process(S1) ---装入计时值
begin
if RESET='1' then
BCD1<="0000;
ELSif S1='0' AND S1'EVENT then
IF STOP='0' THEN
if BCD1>0 then
BCD1<= BCD1-1;
ELSIF STA_F='1' THEN
CASE STATE IS
WHEN "01"=> BCD1<="0101"; ---5
WHEN "10"=> BCD1<="0101";---39
WHEN "11"=> BCD1<="0101";--5
WHEN OTHERS=> BCD1<="1001";--59
END CASE;
ELSE
BCD1<="1001";
end if;
end if;
END IF;
end process;
BCDOUT<= ---BCD转换为显示码
"0000110" when(BCD=1) else
"1011011" when(BCD=2) else
"1001111" when(BCD=3 ) else
"1100110" when(BCD=4 ) else
"1101101" when(BCD=5) else
"1111101" when(BCD=6) else
"0000111" when(BCD=7) else
"1111111" when(BCD=8) else
"1101111" when(BCD=9) else
"0111111";
BCD<=BCD2 when(REFRESH='1') else ---段扫描
BCD1;
DIG_SEL<="01" when(REFRESH='1') else ---位扫描
"10";
CLK1<='1' when BCD1=0 else ---产生借位信号
'0';
BEEP<=CLK_OUT when (BCD2=0 and BCD1=3) else
'0'; -----报警
STA_F<='1' WHEN (BCD2=0 AND BCD1=0) ELSE
'0'; ----产生状态转换信号
LED<= ----红、黄、绿灯点亮
"00111111" when(STATE="00") else
"11001111" when(STATE="01") else
"11110011" when(STATE="10") else
"11001111" when(STATE="11") else
"00111100";
DP<=not CLK_OUT when(REFRESH='0') else
'0'; ----小数点点亮
end traffic;
设计组成:2位BCD码(减法)计数器、BCD码2选一开关(MUX),动态扫描脉冲产生器, LED四——七译码器,置位电路,单脉冲发生电路,LED指示灯显示。
功能要求:红灯(60秒)--黄灯(5秒)--绿灯(35秒)--黄灯循环,暂停(S2)、复位功能(S1)、动态扫描,倒计时显示,最后3秒
报警,发光二极管模拟红绿灯显示等。
2、使用的VHDL库声明
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
2、 设计实体声明
entity Eda_7064 is
port (
GCLK,STOP,RESET,in std_logic;
--公用时钟GCLK,暂停按钮(S2);复位(S1),
LED: OUT std_logic_vector(7 downto 0); --D8、D7…D2、D1;
BCDOUT: buffer std_logic_vector(6 downto 0); --数码管段选a、b、c、d、e、f、g;
DIG_SEL: out std_logic_vector(3 downto 0); --数码管位选A1、A2、A3、A4;
BEEP,DP: out std_logic; --SPK、DP
);
end EDA_7128;
实体声明中包含了原理框图的全部输入、输出端口定义。
5、结构声明
architecture EDA1_arch of EDA_7064 is--构件声明应在此处
SIGNAL STATE:STD_LOGIC_VECTOR(1 DOWNTO 0):="00";--状态值
signal BCD,BCD1,BCD2:STD_logic_vector(3 downto 0);--
signal REFRESH: std_logic;---(1 downto 0);-----位扫秒信号
signal CLK1,STA_F:std_logic; ----进位及灯状态转换标识
signal COUNTER:std_logic_vector(7 downto 0);----內部分频产生秒信号源。
signal R1,R2,CLK_OUT,CLK_BUFF,S1,S2:std_logic;--键盘去抖用信号
6、程序主体
从begin开始。
begin
DIG_SEL3<='1';-----关闭A3
DIG_SEL4<='1';-----关闭A4
S1<=CLK_BUFF ; ---S1为秒钟
CLK_BUFF<='1' when (COUNTER="111111") else
'0';
process(CLK_BUFF)
begin
if CLK_BUFF='1' and CLK_BUFF'event then
CLK_OUT<=not CLK_OUT;
end if;
end process;
process(GCLK) ---内部分频
begin
if GCLK='1' and GCLK'event then
COUNTER<=COUNTER+1;
end if;
end process;
process(GCLK) ----扫描
begin
if GCLK='1' and GCLK'event then
REFRESH<=NOT(REFRESH);
end if;
end process;
process(CLK1) ;个位借位
begin
if CLK1='0' and CLK1'event then
if BCD2>0 then
BCD2<= BCD2-1;
elsIF STATE=1 THEN
BCD2<="0000";
elsIF STATE=2 THEN
BCD2<="0011";
elsIF STATE=3 THEN
BCD2<="0000";
ELSE
BCD2<="0101";
end if;
end if;
end process;
PROCESS (STA_F) ----状态转换
BEGIN
IF STA_F='1' AND STA_F'EVENT THEN
IF STATE<3 THEN
STATE<=STATE+1;
ELSE
STATE<="00" ;
END IF;
END IF ;
END PROCESS;
process(S1) ---装入计时值
begin
if RESET='1' then
BCD1<="0000;
ELSif S1='0' AND S1'EVENT then
IF STOP='0' THEN
if BCD1>0 then
BCD1<= BCD1-1;
ELSIF STA_F='1' THEN
CASE STATE IS
WHEN "01"=> BCD1<="0101"; ---5
WHEN "10"=> BCD1<="0101";---39
WHEN "11"=> BCD1<="0101";--5
WHEN OTHERS=> BCD1<="1001";--59
END CASE;
ELSE
BCD1<="1001";
end if;
end if;
END IF;
end process;
BCDOUT<= ---BCD转换为显示码
"0000110" when(BCD=1) else
"1011011" when(BCD=2) else
"1001111" when(BCD=3 ) else
"1100110" when(BCD=4 ) else
"1101101" when(BCD=5) else
"1111101" when(BCD=6) else
"0000111" when(BCD=7) else
"1111111" when(BCD=8) else
"1101111" when(BCD=9) else
"0111111";
BCD<=BCD2 when(REFRESH='1') else ---段扫描
BCD1;
DIG_SEL<="01" when(REFRESH='1') else ---位扫描
"10";
CLK1<='1' when BCD1=0 else ---产生借位信号
'0';
BEEP<=CLK_OUT when (BCD2=0 and BCD1=3) else
'0'; -----报警
STA_F<='1' WHEN (BCD2=0 AND BCD1=0) ELSE
'0'; ----产生状态转换信号
LED<= ----红、黄、绿灯点亮
"00111111" when(STATE="00") else
"11001111" when(STATE="01") else
"11110011" when(STATE="10") else
"11001111" when(STATE="11") else
"00111100";
DP<=not CLK_OUT when(REFRESH='0') else
'0'; ----小数点点亮
end traffic;
我来回答
回答0个
时间排序
认可量排序
暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2018-03-16 10:28:55
-
2012-12-24 15:00:31
-
2012-12-24 15:01:43
-
2008-07-31 01:02:40
-
2017-06-15 13:21:42
-
2008-10-02 20:47:54
-
2012-12-24 14:56:39
-
2021-01-12 10:45:24
-
2008-10-02 20:26:30
-
2008-10-02 20:27:32
-
2012-12-24 15:01:04
-
02020-12-31 21:11:56
-
2008-08-24 15:47:23
-
2008-10-02 20:51:40
-
2019-02-12 12:35:29
-
2008-10-02 20:20:48
-
2008-10-02 20:52:33
-
2008-10-02 20:17:49
-
2008-10-02 20:17:06
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认