技术标签: vhdl
顶层文件telphone.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY telphone IS
PORT(DIN1: IN STD_LOGIC_VECTOR(6 DOWNTO 0);
clk3:in std_logic;
CLK1,CLEAR,DIAL,RE_DIAL,delete:IN STD_LOGIC;
KEYOUT:OUT STD_LOGIC;
SEG71:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
SEG8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
timebegin:in std_logic;
botong:out std_logic;
reset1:in std_logic
);
END ENTITY;
ARCHITECTURE ART OF telphone IS
COMPONENT SET_NUM IS
PORT(DIN:IN STD_LOGIC_VECTOR(6 DOWNTO 0);
clk3:in std_logic;
CLK,CLEAR,DIAL,RE_DIAL,delete:IN STD_LOGIC;
KEYOUT:OUT STD_LOGIC;
SET:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
SEG8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
timebegin:in std_logic;
botong:out std_logic;
reset1:in std_logic
);
END COMPONENT;
COMPONENT DISPLAY IS
PORT(BCD1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
SEG7:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
SIGNAL SET_1:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
U1:SET_NUM PORT MAP(DIN1,clk3,CLK1,CLEAR,DIAL,RE_DIAL,delete,KEYOUT,SET_1,SEG8,timebegin,botong,reset1);
U2:DISPLAY PORT MAP(SET_1,SEG71);
END ART;
DISPLAY.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DISPLAY IS
PORT(
BCD1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
SEG7:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END ENTITY;
ARCHITECTURE ONE OF DISPLAY IS
BEGIN
PROCESS(BCD1) IS
BEGIN
CASE BCD1 IS
WHEN"0000"=>SEG7<="00111111";
WHEN"0001"=>SEG7<="00000110";
WHEN"0010"=>SEG7<="01011011";
WHEN"0011"=>SEG7<="01001111";
WHEN"0100"=>SEG7<="01100110";
WHEN"0101"=>SEG7<="01101101";
WHEN"0110"=>SEG7<="01111101";
WHEN"0111"=>SEG7<="00000111";
WHEN"1000"=>SEG7<="01111111";
WHEN"1001"=>SEG7<="01101111";
when"1010"=>seg7<="10000000";--小数点
when"1011"=>seg7<="00000000";--全灭
WHEN OTHERS=>SEG7<="00000000";
END CASE;
END PROCESS;
END ONE;
SET_NUM.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SET_NUM IS
PORT(DIN:IN STD_LOGIC_VECTOR(6 DOWNTO 0);
clk3:in std_logic;
CLK,CLEAR,DIAL,RE_DIAL,delete:IN STD_LOGIC;
KEYOUT:OUT STD_LOGIC;
SET:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
SEG8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
testpins:out std_logic;
timebegin:in std_logic;
botong:out std_logic;
reset1:in std_logic
);
END SET_NUM;
ARCHITECTURE ONE OF SET_NUM IS
SUBTYPE TEN IS STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL BCD:TEN;
TYPE NUMBER1 IS ARRAY(7 DOWNTO 0)OF STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL NUMBER:STD_LOGIC_VECTOR(31 DOWNTO 0):="00000000000000000000000000000000";
SIGNAL KEY,KEY1,KEY2,CLK1,DIAL1,RE_DIAL1:STD_LOGIC:='0';
SIGNAL COUNT:STD_LOGIC_VECTOR(3 DOWNTO 0):="0000";
SIGNAL COUNT1:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL COUNT2:STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL DIN1:STD_LOGIC_VECTOR(6 DOWNTO 0);
SIGNAL LOCK:STD_LOGIC_VECTOR(31 DOWNTO 0);
signal count3,count4,count5,count6,count7,count8,count9,count10,count11:integer;
signal clktimes:STD_LOGIC_VECTOR(22 DOWNTO 0):="00000000000000000000000";
signal second,min:integer range 0 to 59:=0;
signal hour:integer range 0 to 24:=0;
signal storage:std_logic:='0';
signal botong1:std_logic:='0';
signal wanbi:std_logic:='0';
signal shanshuo:std_logic;
signal jieshu:std_logic:='0';
signal count12:std_logic_vector(3 downto 0):="1010";
signal weijieting:std_logic:='0';
BEGIN
process(clk3)--clk3连接pin125 频率为100000HZ
begin
if (clk3'event and clk3='1') then--拨通信号灯的判断
if wanbi='1' and jieshu='0' then
botong1<='1';
elsif dial='1' and wanbi='1' and shanshuo='0' and jieshu='0' then
botong1<='0';
elsif jieshu='1' and shanshuo='0' and wanbi='1' then--10s内未接通自动挂断
botong1<='0';
elsif wanbi='0' then
botong1<='0';
elsif timebegin='0' and dial='1' and jieshu='1' then--对方挂断
botong1<='0';
elsif timebegin='1' and dial='0' and jieshu='1' then--我方挂断
botong1<='0';
elsif timebegin='0' and dial='0' and jieshu='1' then
botong1<='0';
elsif jieshu='1' and shanshuo='1' and wanbi='1' then--10s内接通指示灯闪烁
if count3<100000 then
count3<=count3+1;
else
count3<=0;
botong1<=not botong1;
end if;
end if;
end if;
if (clk3'event and clk3='1') then--双方都挂断重置
if reset1='1' then
shanshuo<='0';
end if;
end if;
if (clk3'event and clk3='1') then--判断对方是否应答
if jieshu='1' then
if weijieting='1' then
shanshuo<='0';--
else
shanshuo<='1';
end if;
end if;
end if;
--以下为7个按键消抖
if(clk3'event and clk3='1') then
if(DIN(0)='0') then
count4<=count4+1;
if(count4=2000) then
DIN1(0)<='1';
else
DIN1(0)<='0';
end if;
else
count4<=0;
end if;
end if;
if(clk3'event and clk3='1') then
if(DIN(1)='0') then
count5<=count5+1;
if(count5=2000) then
DIN1(1)<='1';
else
DIN1(1)<='0';
end if;
else
count5<=0;
end if;
end if;
if(clk3'event and clk3='1') then
if(DIN(2)='0') then
count6<=count6+1;
if(count6=2000) then
DIN1(2)<='1';
else
DIN1(2)<='0';
end if;
else
count6<=0;
end if;
end if;
if(clk3'event and clk3='1') then
if(DIN(3)='0') then
count7<=count7+1;
if(count7=2000) then
DIN1(3)<='1';
else
DIN1(3)<='0';
end if;
else
count7<=0;
end if;
end if;
if(clk3'event and clk3='1') then
if(DIN(4)='0') then
count8<=count8+1;
if(count8=2000) then
DIN1(4)<='1';
else
DIN1(4)<='0';
end if;
else
count8<=0;
end if;
end if;
if(clk3'event and clk3='1') then
if(DIN(5)='0') then
count9<=count9+1;
if(count9=2000) then
DIN1(5)<='1';
else
DIN1(5)<='0';
end if;
else
count9<=0;
end if;
end if;
if(clk3'event and clk3='1') then
if(DIN(6)='0') then
count10<=count10+1;
if(count10=2000) then
DIN1(6)<='1';
else
DIN1(6)<='0';
end if;
else
count10<=0;
end if;
end if;
if(clk3'event and clk3='1') then
if(RE_DIAL='0') then
count11<=count11+1;
if(count11=2000) then
RE_DIAL1<='1';
else
RE_DIAL1<='0';
end if;
else
count11<=0;
end if;
end if;
end process;
PROCESS(CLK) IS
BEGIN
IF RISING_EDGE(CLK) THEN--上升沿触发
DIAL1<=DIAL;--拨号键赋值给DIAL1
botong<=botong1;--botong1赋值给拨通指示灯
END IF;
END PROCESS;
KEY<=(DIN1(0) OR DIN1(1) OR DIN1(2) OR DIN1(3) OR DIN1(4) OR DIN1(5) OR DIN1(6));--一旦有键按下则KEY为1
PROCESS(CLK,wanbi) IS --clk连接pin55 频率为6000000HZ
variable count1:integer range 0 to 20000;
variable count2:integer range 0 to 2000;
variable suo:boolean:=false;
BEGIN
IF FALLING_EDGE(CLK) THEN --下降沿有效\十秒倒计时
if reset1='1' then--双方都挂断重置
jieshu<='0';
count12<="1010";
weijieting<='0';
end if;
if timebegin='0' then
if wanbi='1' then
if (not suo) then
if count12="0000" then
suo:=true;
jieshu<='1';
weijieting<='1';
else
count1:=count1+1;
if count1=20000 then
count1:=0;
count2:=count2+1;
if count2=300 then --300为1秒
count2:=0;
count12<=count12-1;
end if;
end if;
end if;
end if;
end if;
else
jieshu<='1';
end if;
if CLEAR='0' AND RE_DIAL1='0' and timebegin='0' and delete='0'and dial='0' then--初始状态
KEY1<='1';
min<=0;
second<=0;
elsif CLEAR='0' AND RE_DIAL1='0' and timebegin='0' and delete='0'and dial='1' THEN--拨号键按下,数字输入,从低位向高位显示
KEY1<=KEY;
KEY2<='0';
min<=0;
second<=0;
ELSIF CLEAR='1' AND RE_DIAL1='0' and timebegin='0'and delete='0' and dial='1'THEN--删除键按下,数字从低位删除
KEY1<=CLEAR;
KEY2<=clear;
ELSIF CLEAR='0' AND RE_DIAL1='0' and timebegin='0'and delete='1' and dial='1'THEN--清除键按下,清楚数码管显示
KEY1<=delete;
KEY2<=delete;
elsif CLEAR='0' AND RE_DIAL1='0' and timebegin='1' and delete='0' and dial='1' then--对方应答,开始计时
if clktimes="10110111000110110000000" then
key1<='1';
clktimes<="00000000000000000000000";
if second=59 then
if min<60 then
min<=min+1;
end if;
second<=0;
else
second<=second+1;
end if;
else
key1<='0';
clktimes<=clktimes+1;
end if;
ELSif clear='0' and RE_DIAL1='1' and timebegin='0' and delete='0' and dial='1' then --拿起话筒,重拨键按下
KEY1<=RE_DIAL1;
END IF;
end if;
END PROCESS;
PROCESS(DIN1) IS--如果按键有变化
BEGIN
IF DIN1(6)='1' THEN BCD<="0110";
ELSIF DIN1(5)='1' THEN BCD<="0101";
ELSIF DIN1(4)='1' THEN BCD<="0100";
ELSIF DIN1(3)='1' THEN BCD<="0011";
ELSIF DIN1(2)='1' THEN BCD<="0010";
ELSIF DIN1(1)='1' THEN BCD<="0001";
ELSIF DIN1(0)='1' THEN BCD<="0000";
ELSE BCD<="0000";--0123456对应的BCD码
END IF;
END PROCESS;
KEYOUT<=KEY2;--删除键或清除键按下指示灯亮灭
PROCESS(KEY1)IS
variable m,m2:integer;
BEGIN
if RISING_EDGE(KEY1) THEN--key1上升沿检测
if reset1='1' then--双方都挂断重置
wanbi<='0';
elsif CLEAR='0' AND RE_DIAL1='0' and timebegin='0' and delete='0'and dial='0' THEN--初始状态
NUMBER(31 DOWNTO 0)<="10111011101110111011101110111011";
elsif CLEAR='0' AND RE_DIAL1='0' and timebegin='0' and delete='0'and dial='1' THEN--输入数字,实现数字从低位向高位移动
NUMBER(31 DOWNTO 28)<=NUMBER(27 DOWNTO 24);
NUMBER(27 DOWNTO 24)<=NUMBER(23 DOWNTO 20);
NUMBER(23 DOWNTO 20)<=NUMBER(19 DOWNTO 16);
NUMBER(19 DOWNTO 16)<=NUMBER(15 DOWNTO 12);
NUMBER(15 DOWNTO 12)<=NUMBER(11 DOWNTO 8);
NUMBER(11 DOWNTO 8)<=NUMBER(7 DOWNTO 4);
NUMBER(7 DOWNTO 4)<=NUMBER(3 DOWNTO 0);
NUMBER(3 DOWNTO 0)<=BCD;
if number(27 downto 24)/="1011" then--判断八位数字是否输入完毕
LOCK(31 DOWNTO 28)<=NUMBER(31 DOWNTO 28);
LOCK(27 DOWNTO 24)<=NUMBER(27 DOWNTO 24);
LOCK(23 DOWNTO 20)<=NUMBER(23 DOWNTO 20);
LOCK(19 DOWNTO 16)<=NUMBER(19 DOWNTO 16);
LOCK(15 DOWNTO 12)<=NUMBER(15 DOWNTO 12);
LOCK(11 DOWNTO 8)<=NUMBER(11 DOWNTO 8);
LOCK(7 DOWNTO 4)<=NUMBER(7 DOWNTO 4);
LOCK(3 DOWNTO 0)<=NUMBER(3 DOWNTO 0);
wanbi<='1';
end if;
ELSIF CLEAR='1' AND RE_DIAL1='0' and timebegin='0' and delete='0' and dial='1'THEN --按下删除键,数字从高位向低位移动
NUMBER(31 DOWNTO 28)<="1011";
NUMBER(27 DOWNTO 24)<=NUMBER(31 DOWNTO 28);
NUMBER(23 DOWNTO 20)<=NUMBER(27 DOWNTO 24);
NUMBER(19 DOWNTO 16)<=NUMBER(23 DOWNTO 20);
NUMBER(15 DOWNTO 12)<=NUMBER(19 DOWNTO 16);
NUMBER(11 DOWNTO 8)<=NUMBER(15 DOWNTO 12);
NUMBER(7 DOWNTO 4)<=NUMBER(11 DOWNTO 8);
NUMBER(3 DOWNTO 0)<=NUMBER(7 DOWNTO 4);
ELSIF CLEAR='0' AND RE_DIAL1='0' and timebegin='0' and delete='1' and dial='1' THEN--清除键按下,清楚数码管显示
number(31 downto 0)<="10111011101110111011101110111011";
elsif CLEAR='0' AND RE_DIAL1='0' and timebegin='1' and delete='0' and dial='1' then----对方应答,开始计时
number(31 downto 24)<="00000000";
number(23 downto 20)<="1010";
m:=min rem 10;
number(19 downto 16)<=conv_std_logic_vector((min-m)/10,4);
number(15 downto 12)<=conv_std_logic_vector(m,4);
number(11 downto 8)<="1010";
m2:=second rem 10;
NUMBER(7 DOWNTO 4)<=conv_std_logic_vector((second-m2)/10,4);
NUMBER(3 DOWNTO 0)<=conv_std_logic_vector(m2,4);
ELSif clear='0' and RE_DIAL1='1' and timebegin='0' and delete='0'and dial='1' then ----重拨键按下
NUMBER(31 DOWNTO 28)<=LOCK(31 DOWNTO 28);
NUMBER(27 DOWNTO 24)<=LOCK(27 DOWNTO 24);
NUMBER(23 DOWNTO 20)<=LOCK(23 DOWNTO 20);
NUMBER(19 DOWNTO 16)<=LOCK(19 DOWNTO 16);
NUMBER(15 DOWNTO 12)<=LOCK(15 DOWNTO 12);
NUMBER(11 DOWNTO 8)<=LOCK(11 DOWNTO 8);
NUMBER(7 DOWNTO 4)<=LOCK(7 DOWNTO 4);
NUMBER(3 DOWNTO 0)<=LOCK(3 DOWNTO 0);
wanbi<='1';
end if;
end if;
END PROCESS;
PROCESS(CLK) IS--为动态扫描数码管提供频率
BEGIN
IF RISING_EDGE(CLK) THEN
COUNT<=COUNT+1;
END IF;
END PROCESS;
PROCESS(COUNT)IS--动态扫描数码管
BEGIN
CASE COUNT IS--片选,选择数码管
WHEN"0001"=>SET<=NUMBER(31 DOWNTO 28);SEG8<="01111111";
WHEN"0011"=>SET<=NUMBER(27 DOWNTO 24);SEG8<="10111111";
WHEN"0101"=>SET<=NUMBER(23 DOWNTO 20);SEG8<="11011111" ;
WHEN"0111"=>SET<=NUMBER(19 DOWNTO 16);SEG8<="11101111" ;
WHEN"1001"=>SET<=NUMBER(15 DOWNTO 12);SEG8<="11110111" ;
WHEN"1011"=>SET<=NUMBER(11 DOWNTO 8);SEG8<="11111011" ;
WHEN"1101"=>SET<=NUMBER(7 DOWNTO 4);SEG8<="11111101" ;
WHEN"1111"=>SET<=NUMBER(3 DOWNTO 0);SEG8<="11111110" ;
WHEN OTHERS=>NULL;
END CASE;
END PROCESS;
END ONE;
板载为EPF10K20TC144-3
pins:
bug:
1.重置需要拨动reset1开关,置于1,再拨动dial置为1,在置为0,关闭reset即可拨动dial按键拨打电话
2.重置后10s倒计时失效
3.重拨键少一位
一道常被人轻视的前端 JS 面试题 - 前端 - 掘金目录前言第一问第二问变量声明提升函数表达式第三问第四问第五问第六问构造函数的返回值第七问最后前言 年前刚刚离职了,分享下我曾经出过的一道面试题,此题是我出的一套前端面试题中的最后一题,用来考核面试者的JavaScript的综合能力,很可惜到目前为止的将近两年中...前端开发面试题 ...
为落实中国科协、中宣部、教育部、科技部联合印发的《关于深化改革培育世界一流科技期刊的意见》精神,推动建设与世界科技强国相适应的科技期刊评价体系,按照中国科协通知要求,遵照价值导向、同行评议、等效使用的原则,中国地理学会和中国自然资源学会联合完成了地理资源领域高质量科技期刊分级目录的遴选工作。经过期刊筛选、定量评价、定性评价、同行专家评议、专家审定、常务理事会审议等程序,形成了地理资源领域...
用手机java的QQ可以和电脑上的QQ进行语音通话吗?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!用手机java的QQ可以和电脑上的QQ进行语音通话吗?楼上二位别误导提问者楼主: 不可以的,目前所有手机QQ版本,包括JAVA symbian wm 都是不支持语音通话的只是支持录音 --发送, 相当于发送语音文件.qq...
别把「不要过度使用 Generic」误解成「不用 Generic」,也别把「不要写一些不必要的 Wrapper」误解成「不写任何 Wrapper」。我只是在讲 over-engineering 这个事,只是在提倡不搞野路子编程。套路1:攻城狮自认为比业务人员聪明攻城狮觉得自己最聪明,因为东西是他们写出来的嘛!然而这经常就是 over-engineering 的根源。
本想开一个月的某网盘VIP,却自动续费了一年试用了一款订餐App,忘记取消订阅,自动支付了好几个月在某应用商城订购了一款APP的vip,忘记取消,自动续费了小主们是否也经常遇到以上情况“不记得自己曾经订了哪些自动续费的APP”那怎么取消“自动扣费”呢?稍等,这就给小主支招啦!微信扣费步骤一:打开微信—【我】—【支付】—右上角【…】—扣费服务—即可查看已开通的自动扣费服务步骤二:在【扣费服...
图胜求贤令(年薪10万聘PHP工程师、产品经理) 图胜求贤令(年薪10万聘PHP工程师、产品经理) 10年来,互联网行业是世界上发展最快的行业,人们通过互联网创业刷新了无数的记录,颠覆了无数旧的规则,互联网时代已经到来,世界每天都在建立着新的秩序,同时互联网也创造了无数的神话,互联网使人们的想法、努力、行动迅速得到...
1、Oozie简介1.1、Oozie简介现实业务中处理数据时不可能只包含一个MR操作,一般都是多个MR,并且中间还可能包含多个Java或HDFS,甚至是shell的操作,利用Oozie可以完成这些任务。实际上Oozie不是仅用来配置多个MR工作流的,它可以是各种程序夹杂在一起的工作流,比如执行一个MR1后,接着执行一个java脚本,再执行一个shell脚本,接着是Hive脚本,然后又是...
虽然经典的IA32架构为PC提供了高达4GB的存储空间,可是随着计算规模以及相应存储规模的扩大,4GB的空间有时也会显得不足。在这种情况下,Intel在IA32的基础上推出了页地址扩展(PAE,PageAddress Extension),页面大小扩展(PSE,大概是Page SizeExtension的简称)。其后,为了满足更高的要求,Intel开始了IA64(号称安腾)架
奥维互动地图对测量、勘察等工作者来说是一款十分方便的软件,利用奥维互动地图可以记录和分享位置、轨迹等,特别是结合了卫星地图以及路网信息后可以很方便的通过导航来寻找一个位置。今天分享一下如何将平面坐标点批量的导入到奥维互动地图中。在奥维中,可导入北京54、西安80、CGCS2000等平面坐标。具体操作步骤如下:一、PC端导入坐标文件1.在导入之前,首先应将奥维的坐标系统设置为相对应的平面坐标系,否则...
B页面向云数据库添加完数据后自动返回A页面并且刷新显示刚添加的数据 今天忙了一天总算是没有白忙活,所做的一个微信小程序是交易平台,在发布完产品后想要跳转到商品首页,但是由于首页是一个tabBar,所以wx.navigateTo()API并不可行 要想实现自动刷新,不如先实现手动下拉刷新,很简单 A页面操作①先开启手动下拉刷新功能,在json文件中添加声明:②然后在js文件...
http://www.jb51.net/article/44875.htm一,js中对象继承js中有三种继承方式1.js原型(prototype)实现继承复制代码 代码如下: function Person(name,age){ this.name=name; this.age=age;
X86_32通常写成X86,是指X86CPU系列,32位系统。X86_64指X86CPU系列,64位系统。