基于vhdl电子秒表的系统设计怎么做?

作者&投稿:段干受 (若有异议请与网页底部的电邮联系)
用VHDL语言实现电子秒表设计~

20分有点少呀,基于这难度,50分可以帮你做!

给你讲下思路吧,,对于数码管显示,用动态扫描法,对应的二极管亮法对应着一个数字,这个网上随便搜就有了!!在程序中你可以用CASE WHEN语句来实现,而对于外部输入的三个控制信号,也就相当于是一个计数器的控制信号,,你可以这样
entity shuma is
port(clk,reset:in std_logic;
start,cs:in std_logic;
disp1,disp2:out std_logic_vector(7 downto 0);
led:out std_logic);
end entity;
architecture art of shuma is
signal count1:integer range 0 to ......;自已算
signal count2,count3:integer range 0 to 99;
signal clk_div,led_flag:std_logic;
begin
process(clk,reset,count1)----首先进行时钟分频,分成1hz的;
begin
if reset='1' then
count1<=0;
elsif clk'event and clk='1' then
if count1=?? then ---这个倍数根据你的FPGA板的时钟频率和1hz进行计算
count1<=0;clk_div<=not clk_div;
else count<=count+1;
end if;
end if;
end process;
process(clk_div,reset,count2) ---数码管计数进程;
begin
if reset='1' then
count2<=0;
elsif clk_div'event and clk_div='1' then
if count2=99 then
led_flag<='1';--LED亮的标志;
count2<=0;
else count2<=count2+1;led_flag<='0';
end if;
end if;
end process;
process(count)--将计数的数值显示在数码管上,,用动态扫描法,对应关系
begin 自已查;
case count is
when 0=>disp1,disp2...
end case;
同样的LED和测试程序 就是一个计数器,和上面类似,,,我要去上课啦,,希望以上那些可以帮助你!!!
求采纳为满意回答。

  一、实验原理 :
  用层次化设计的方法以VHDL语言编程实现以下功能:

  【1】 具有“时”、“分”、“秒”计时功能;时为24进制,分和秒都为60进制。

  【2】 具有消抖功能:手工按下键盘到是否这个过程大概50ms左右,在按下开始到弹簧片稳,定接触这段时间为5-10ms,从释放到弹片完全分开也是5-10ms,在达到稳定接触和完全分开的微观过程中,电平是时高时低的,因此如果在首次检测到键盘按下时延时10ms再检测就不会检测到抖动的毛刺电平了。64Hz的信号周期为15.6ms,正适合做消抖信号。

  【3】 具有校时和清零功能,能够用4Hz脉冲对“小时”和“分”进行调整,并可进行秒零;

  【4】 具有整点报时功能。在59分51秒、53秒、55秒、57秒发出低音512Hz信号,在59分59秒发出一次高音1024Hz信号,音响持续1秒钟,在1024Hz音响结束时刻为整点。

  【5】 具有一键设定闹铃及正常计时与闹铃时间的显示转换。闹时时间为一分钟。
  二、程序流程:
  1、秒计数器模块设计:
  模块图如图1。六十进制带进位计数器,可清零,clk输入信号为1Hz脉冲,当q0计满9后q1增加1,当q0满9且q1记满5,q1、q0同时归零,co输出为高电平。q1为十位q0为个位。

  图1

  程序如下:
  library IEEE;
  use IEEE.STD_LOGIC_1164.ALL;
  use IEEE.STD_LOGIC_ARITH.ALL;
  use IEEE.STD_LOGIC_UNSIGNED.ALL;

  entity c60 is
  Port ( clk,clr : in std_logic;
  co :out std_logic;
  q1,q0 : out std_logic_vector(3 downto 0));
  end c60;

  architecture one of c60 is
  begin
  process (clk,clr)
  variable cq1,cq0:std_logic_vector(3 downto 0);
  begin
  if clr='1' then cq1:=(others=>'0');cq0:=(others=>'0');
  elsif (clk'event and clk='1') then
  if cq0<9 then cq0:=cq0 +1;co<='0';
  elsif cq1<5 then cq1:=cq1+1;cq0:=(others=>'0');
  elsif cq1=5 and cq0=9
  then co<='1';cq1:=(others=>'0'); cq0:=(others=>'0');
  else co<='0';
  end if;
  end if;
  q1<=cq1;
  q0<=cq0;
  end process;
  end one;
  仿真结果如下图2

  2、分计数器同上。注:不同之处为分的clk输入信号为秒的进位信号。

  3、时计数器:
  模块图如图3。24进制无进位计数器,当计数信号计到23后再检测到计数信号时会自动零。带清零,clk输入为分秒进位相与的结果。q1为十位,q0为个位。

  图3
  程序如下:
  library IEEE;
  use IEEE.STD_LOGIC_1164.ALL;
  use IEEE.STD_LOGIC_ARITH.ALL;
  use IEEE.STD_LOGIC_UNSIGNED.ALL;

  entity c24 is
  Port ( clk : in std_logic;
  q1,q0 : out std_logic_vector(3 downto 0));
  end c24;

  architecture one of c24 is
  begin
  process (clk)
  variable cq1,cq0:std_logic_vector(3 downto 0);
  begin
  if (clk'event and clk='1') then
  if cq1="0010" and cq0="1001" then
  cq1:="0000"; cq0:="0000";
  elsif cq0<"1001" then
  cq0:=cq0+1;
  else cq0:="0000"; cq1:=cq1+1;
  end if;
  end if;

  q1<=cq1;q0<=cq0;
  end process;
  end one;
  仿真波形如下图4:

  图4

  4、分频器:
  模块图如图5。由四个分频器构成,输入信号in_clk为1024Hz脉冲信号。把输入的1024Hz信号分频为四个脉冲信号,即1Hz的秒脉冲,4Hz的校时、校分脉冲,64Hz的消抖脉冲以及512Hz的蜂鸣器低音输入。

  图5
  程序如下:
  library IEEE;
  use IEEE.STD_LOGIC_1164.ALL;
  use IEEE.STD_LOGIC_ARITH.ALL;
  use IEEE.STD_LOGIC_UNSIGNED.ALL;

  entity div is
  Port ( in_clk : in std_logic;
  clk_512, clk_1,clk_4 ,clk_64:out std_logic);

  end div;

  architecture one of div is
  signal q512,a,b,c:std_logic;
  signal c1,c4,c64:integer range 512 downto 0;
  begin
  process(in_clk)
  begin
  if in_clk'event and in_clk='1' then
  q512<=not q512;
  if c64>=7 then c64<=0;c<=not c;else c64<=c64+1;end if;
  if c4>=127 then c4<=0;b<=not b;else c4<=c4+1;end if;
  if c1>=511 then c1<=0;a<=not a;else c1<=c1+1;end if;
  end if;
  end process;
  clk_512<=q512;
  clk_1<=a;
  clk_4<=b;
  clk_64<=c;
  end one;
  仿真波形如下图6:

  图6
  5、消抖:
  模块图如图7。分频出的用64Hz信号对sa校时信号、sb校分信号、sc秒清零信号、sd闹时设置信号进行防抖动处理。是由四个两级d触发器构成的,分别对输入的sa、sb、sc、sd
  信号的相邻两个上升沿进行比较以确定按键的按下,从而达到消抖的目的。

  图7

  程序如下:
  library IEEE;
  use IEEE.STD_LOGIC_1164.ALL;
  use IEEE.STD_LOGIC_ARITH.ALL;
  use IEEE.STD_LOGIC_UNSIGNED.ALL;

  entity xd is
  Port ( clk_64 : in std_logic;

  hj,mj,sclr,sdo :out std_logic;
  sa,sb,sc,sd : in std_logic);

  end xd;

  architecture one of xd is
  begin
  process(clk_64)
  variable sa_n,sa_p,sb_n,sd_n,sb_p,sc_n,sc_p,sd_p:std_logic;
  begin
  if clk_64'event and clk_64='1' then
  sa_p:=sa_n;sa_n:=sa;
  sb_p:=sb_n;sb_n:=sb;
  sc_p:=sc_n;sc_n:=sc;
  sd_p:=sd_n;sd_n:=sd;

  if sa_p= sa_n then hj<=sa;end if;
  if sb_p= sb_n then mj<=sb;end if;
  if sc_p= sc_n then sclr<=sc;end if;
  if sd_p= sd_n then sdo<=sd;end if;
  end if;
  end process;
  end one;
  仿真波形如下图8:

  图8
  6、闹钟时间的设定:
  模块图如图9。一键设定闹铃时间,内部由四个d触发器构成。当确定sd键按下时,将当前时间的小时和分的个位十位分别存入四个d触发器内,作为闹时时间。

  图9
  程序如下

  library IEEE;
  use IEEE.STD_LOGIC_1164.ALL;
  use IEEE.STD_LOGIC_ARITH.ALL;
  use IEEE.STD_LOGIC_UNSIGNED.ALL;

  entity df4 is
  Port ( sd :in std_logic;
  hh,hl,mh,ml : in std_logic_vector(3 downto 0);

  hh_o,hl_o,mh_o,ml_o: out std_logic_vector(3 downto 0));

  end df4;

  architecture one of df4 is
  begin
  process (sd,hh,hl,mh,ml)
  begin
  if sd='1' then
  hh_o<=hh;hl_o<=hl;mh_o<=mh;ml_o<=ml;end if;
  end process;
  end one;
  仿真波形如下图10:

  图10
  7、二选一电路
  (1)一位二选一:
  模块图如图11。用以进行正常计时和校时/分的选择。alarm为经过消抖的校时/分信号。当按键未曾按下时,即校时/分信号没有到来时,二选一选择器会选择输出a(正常计时输入)信号,否则当alarm按键按下时输出y为校时/分输入信号——4Hz。

  图11
  程序如下:
  library IEEE;
  use IEEE.STD_LOGIC_1164.ALL;
  use IEEE.STD_LOGIC_ARITH.ALL;
  use IEEE.STD_LOGIC_UNSIGNED.ALL;

  entity xuan21 is
  Port ( alarm,a,b: in std_logic;
  y:out std_logic);
  end xuan21 ;

  architecture one of xuan21 is
  begin
  process(alarm,a,b)
  begin
  if alarm='0' then y<=a;else y<=b;
  end if;
  end process;
  end one;
  仿真波形如下图12:

  图12
  (2)三位二选一:
  模块图如图13。用以进行正常计时时间与闹铃时间显示的选择,alarm输入为按键。当alarm按键未曾按下时二选一选择器会选择输出显示正常的计时结果,否则当alarm按键按下时选择器将选择输出显示闹铃时间显示。

  图13
  程序如下:
  library IEEE;
  use IEEE.STD_LOGIC_1164.ALL;
  use IEEE.STD_LOGIC_ARITH.ALL;
  use IEEE.STD_LOGIC_UNSIGNED.ALL;

  entity x213 is
  Port ( alarm : in std_logic;
  y:out std_logic_vector(3 downto 0);
  a,b: in std_logic_vector(3 downto 0));

  end x213;

  architecture one of x213 is
  begin
  process(alarm,a,b)
  begin
  if alarm='0' then y<=a;else y<=b;
  end if;
  end process;
  end one;
  仿真结果如下图14:

  图14
  8、整点报时及闹时:
  模块图如图15。在59分51秒、53秒、55秒、57秒给扬声器赋以低音512Hz信号,在59分59秒给扬声器赋以高音1024Hz信号,音响持续1秒钟,在1024Hz音响结束时刻为整点。当系统时间与闹铃时间相同时给扬声器赋以高音1024Hz信号。闹时时间为一分钟。

  图15
  程序如下:

  library IEEE;
  use IEEE.STD_LOGIC_1164.ALL;
  use IEEE.STD_LOGIC_ARITH.ALL;
  use IEEE.STD_LOGIC_UNSIGNED.ALL;

  entity voice is
  Port ( hou1,huo0,min1,min0,sec1,sec0,hh,hl,mh,ml: std_logic_vector(3 downto 0);
  in_1000,in_500:in std_logic;
  q : out std_logic);
  end voice;

  architecture one of voice is
  begin
  process(min1,min0,sec1,sec0)
  begin
  if min1="0101" and min0="1001" and sec1="0101" then
  if sec0="0001" or sec0="0011" or sec0="0101" or sec0="0111"
  then q<=in_500;
  elsif sec1="0101" and sec0="1001" then q<=in_1000;
  else q<='0';
  end if;
  else q<='0';
  end if;
  if min1=mh and min0=ml and hou1=hh and huo0=hl then
  q<=in_1000;
  end if;
  end process;
  end one;
  仿真波形如下图16

  图16
  9、顶层原理图:

  三、感想

  通过这次设计,既复习了以前所学的知识,也进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编写调试成功时,心里特别的开心。但是在画顶层原理图时,遇到了不少问题,最大的问题就是根本没有把各个模块的VHD文件以及生成的器件都全部放在顶层文件的文件夹内,还有就是程序设计的时候考虑的不够全面,没有联系着各个模式以及实验板的情况来编写程序,以至于多考虑编写了译码电路而浪费了很多时间。在波形仿真时,也遇到了一点困难,想要的结果不能在波形上得到正确的显示
  :在分频模块中,设定输入的时钟信号后,却只有二分频的结果,其余三个分频始终没反应。后来,在数十次的调试之后,才发现是因为规定的信号量范围太大且信号的初始值随机,从而不能得到所要的结果。还有的仿真图根本就不出波形,怎么调节都不管用,后来才知道原来是路径不正确,路径中不可以有汉字。真是细节决定成败啊!总的来说,这次设计的数字钟还是比较成功的,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。

  四、参考资料:
  1、潘松,王国栋,VHDL实用教程〔M〕.成都:电子科技大学出版社,2000.(1)
  2、崔建明主编,电工电子EDA仿真技术北京:高等教育出版社,2004
  3、李衍编著,EDA技术入门与提高王行西安:西安电子科技大学出版社,2005
  4、侯继红,李向东主编,EDA实用技术教程北京:中国电力出版社,2004
  5、沈明山编著,EDA技术及可编程器件应用实训北京:科学出版社,2004
  6、侯伯亨等,VHDL硬件描述语言与数字逻辑电路设计西安: 西安电子科技大学出版社,1997
  7、辛春艳编著,VHDL硬件描述语言北京:国防工业出版社,2002


基于vhdl电子秒表的系统设计怎么做?
一、实验原理 :用层次化设计的方法以VHDL语言编程实现以下功能:【1】具有“时”、“分”、“秒”计时功能;时为24进制,分和秒都为60进制。【2】具有消抖功能:手工按下键盘到是否这个过程大概50ms左右,在按下开始到弹簧片稳,定接触这段时间为5-10ms,从释放到弹片完全分开也是5-10ms,在达到...

用VHDL实现秒表功能,秒表要求实现秒表功能,要求有分、秒显示
用两个60进制计数器就是了。我以前做了一个24\/12小时的电子钟,其counter60如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity s_counter60 is port(clk:in std_logic;bcd10,bcd1:buffer std_logic_vector(3 downto 0);preset:in std_logic;co:out st...

EDA—VHDL—设计一个倒计时电子秒表
初始计时25s 通过ta tb可以对倒计时进行设置0~99s qa qb输出到显示 后面接个译码器就可以显示 ldn是调节有效位 en为开始倒计时按键 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JSQ IS PORT(CLR,LDN,EN,CLK: IN STD_LOGIC;TA,TB,KK: IN BI...

请教大神VHDL FPGA设计多功能电子表
数字秒表电路的设计 一、设计要求 设计用于体育比赛的数字秒表,要求:⑴计时器能显示 0.01s的时间。m ⑵计时器的最长计时时间为 24h。总体框图如图2所示 二、模块及模块的功能 ⑴ 100进制计数器模块BAI见图2 .1, 输出值为 0.01s和0.1s。library ieee;use ieee.std_logic_1164.all;use ieee.st...

vhdl秒表
use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;--- Uncomment the following library declaration if instantiating --- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity minutes is Port ( rst3,selector2...

求用VHDL设计一个秒表0—99秒显示两个数码管
给你讲下思路吧,,对于数码管显示,用动态扫描法,对应的二极管亮法对应着一个数字,这个网上随便搜就有了!!在程序中你可以用CASE WHEN语句来实现,而对于外部输入的三个控制信号,也就相当于是一个计数器的控制信号,,你可以这样 entity shuma is port(clk,reset:in std_logic;start,cs:in std...

电子秒表仿真时复位信号输入什么信号
asyn_fifo.v 是该核的行为模型,主要调用了 xilinx 行为模型库的模块,仿真时该文件也要加入工程。2.调试方便。在 ISE\/Quartus 中调用 modelsim仿真只能看到输入输出信 号,而对于设计的中间信号\/变量,特别是ip核的内部信号\/变量无法观测。而在modelsim中直接仿真可以观测设计中出现的任何信号\/变量无和 ...

VHDL电子时钟设计
基于CPLD的VHDL语言数字钟(含秒表)设计 利用一块芯片完成除时钟源、按键、扬声器和显示器(数码管)之外的所有数字电路功能。所有数字逻辑功能都在CPLD器件上用VHDL语言实现。这样设计具有体积小、设计周期短(设计过程中即可实现时序仿真)、调试方便、故障率低、修改升级容易等特点。本设计采用自顶向下、混合输入方式(原理...

vhdl 秒表程序如何用例化语句将各模块连起来
给你看个例化的例子:三输入 或门例化2输入或门 library ieee;use ieee.std_logic_1164.all; ---2输入或门 entity huo is port(a,b:in std_logic;c:out std_logic);end entity;architecture art of huo is begin c<=a or b;end art;library ieee;use ieee.std_logic_1164.all;entity...

数字钟设计 用VHDL语言实现 你怎么做的
源代码如下 自己把各个模块打好包 下面有个图 自己看看 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TZKZQ IS PORT(KEY: IN STD_LOGIC_VECTOR(1 DOWNTO 0); --按键信号 CLK_KEY: IN STD_LOGIC; --键盘扫描信号 MAX_DAYS:IN STD_LOGIC_...

上城区18785692923: 秒表的VHDL语言设计程序! -
禤厘降糖: 用vhdl设计秒表全功略!根据要求, 秒表的设计要有三个输入端:runstop,rst和clk. runstop是开关, 按一下开始计时, 再按一下停止计时, 显示时间. 可以使用一个T触发器来实现. 当我们把T触发器的T端接高电平时, 它将实现翻转功能. 然后用...

上城区18785692923: 基于VHDL的数字钟设计 -
禤厘降糖: 原发布者:晴空微澜20 数字时钟设计一、题目分析1、功能介绍1)具有时、分、秒计数显示功能,以24小时循环计时.2)时钟计数显示时有LED灯的花样显示.3)具有调节小时、分钟及清零的功能.4)具有整点报时功能.2、总体方框图3...

上城区18785692923: VHDL电子时钟设计 -
禤厘降糖: 基于CPLD的VHDL语言数字钟(含秒表)设计 利用一块芯片完成除时钟源、按键、扬声器和显示器(数码管)之外的所有数字电路功能.所有数字逻辑功能都在CPLD器件上用VHDL语言实现.这样设计具有...

上城区18785692923: 基于VHDL语言的数字钟的层次化设计 -
禤厘降糖: 此数字钟是以24小时制记时,当到整点时会报时一分钟,按下清零键时也会报时一分钟.主要元件有计数器,分频器,报时器,选择器和译码器等.控制逻辑主要是用来实现计数和清零.基本方框图如下:留下邮箱,给你把正文发过去.

上城区18785692923: 用VHDL语言设计一个电子时钟 -
禤厘降糖: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity shuzizhong is port(clk,,clk1,set,change,s1,s2,s3:in std_logic; second1,second2,minite1,minite2,hour1,hour2:out std_logic_vector(3 downto 0); Light:out std_logic_vector...

上城区18785692923: 秒表电路的设计 VHDL语言 -
禤厘降糖: 直接用单个VHDL工程实现,会比较复杂,可能刚开始学写起来比较头痛.建议:可以按模块实现,可以分为:计数器模块(写个计数器很简单),控制模块,显示模块 最后把他们用框图文件连接起来就可以啦,试试看.不会可以问我,我以前也是这么学过来的,可以帮你理理思路.站内联系我就可以,一般我都在的.

上城区18785692923: 用vhdl设计秒表 ,需要一个保持功能怎么实现?即保持的时候输出不变,内部仍然在计数 -
禤厘降糖: 这种设想是无法实现的.电路模块是无法判断哪一个时钟的上升沿是复位上升沿,哪一个上升沿是计数上升沿.你必须增加一个输入信号reset.但可以设计成同步复位,即:当reset有效时,在时钟信号的上升沿才进行复位操作;当reset信号失效后,时钟信号的上升沿进行计数操作.

上城区18785692923: eda秒表程序 -
禤厘降糖: 1. “分分:秒秒”计数器设计 我们要实现“分分:秒秒”显示的电子秒表,需要设计计数频率为1Hz 的 计数器.因为“分分:秒秒”的结构对应有4个十进制数字(个位的秒,十位的 秒,个位的分,十位的分),如果采用统一计数再分别求出...

上城区18785692923: 基于VHDL的数字钟设计
禤厘降糖: -------------------------------------------时间设置小时部分 sethour1:process(clk,seth2) begin if clk'event and clk='1' then if seth1="0010"and seth2="0011" then seth1<="0000"; elsif seth2="1001" then seth1<=seth1+1; end if; end if; end process ...

上城区18785692923: 利用vhdl语言和quartus ii6.0设计一个秒表,要有仿真结果 -
禤厘降糖: 分三个部分:分频器,计数器,译码器.分频器:library ieee; use ieee.std_logic_1164.all; entity eproc is port(clkin : in std_logic; clkout : out std_logic ); end eproc; architecture behavior of eproc is signal tmp:std_logic:='0'; signal n:integer range 0 ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网