当前位置: 首页 > 新闻中心 > eda技术在数字电路设计中试用方法

eda技术在数字电路设计中试用方法

发布时间:2024-02-12 22:00:28

  1. 简要叙述EDA系统的开发流程
  2. eda 设计软件主要有哪些
  3. EDA课程设计——数字电子钟

一、简要叙述EDA系统的开发流程

1、在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。然后,用综合优化工具生成具体门电路的网络表,其对应的物理实现级可以是印刷电路板或专用集成电路。

2、现代数字系统的设计流程是指利用eda开发软件和编程工具对可编程逻辑器件进行开发的过程。在eda软件平台上,利用硬件描述语言hdl等逻辑描述手段完成设计。

3、请简述用eda软件(如protel)进行设计(包括原理图和pcb图)到调试出样机的整个过程。

4、eda技术的设计流程:设计输入用一定的逻辑表达手段表达出来。逻辑综合将用一定的逻辑表达手段表达出来的设计经过一系列的操作,分解成一系列的逻辑电路及对应关系(电路分解)。

5、首先由原理图编辑器或硬件描述语言进行设计输入,然后利用eda系统完成综合、仿真、优化等过程,最后生成物理工具可以接受的网表和vhdl、veriloghdl的结构化描述。

二、eda 设计软件主要有哪些

eda工具层出不穷,目前进入我国并具有广泛影响的eda软件有:ewb、pspice、orcad、pcad、protel、viewlogic、mentor graphics、synopsys、lsilogic、cadence、microsim等等。这些工具都有较强的功能,一般可用于几个方面,例如很多软件都可以进行电路设计与仿真,同时以可以进行pcb自动布局布线,可输出多种网表文件与第三方软件接口。另外easyeda(https://easyeda.com/)这个国产软件也很不错,可以在线设计pcb和在线仿真

三、EDA课程设计——数字电子钟

1、基本要求:能利用现有的硬件系统设计一个至少能显示分、秒的控制电路。分和秒均用两位数码管指示,并具有调时、复位功能;

2、扩展要求:能同时显示小时(两位数码管)并能调节小时功能;具有闹钟定时功能。

3、设计方法:采用模块化描述方法,可分为分频模块、调时控制模块、数码显示模块、复位等模块,每个模块既可以编辑成独立的hdl文件或gdf文件,也可以作为hdl程序中的一个进程模块,最后进行系统仿真加以验证,在此基础上下载到硬件上进行现场测试。

4、输入、输出端口描述:输入信号——时钟信号clk、复位信号clr、时间设置键set、时间上调键tup、时间下调键tdown;输出信号——扫描式七段数码管段选输出端led[7..0]、位选输出端ctrlbit[3..0]。

我来帮他解答

2011-6-1 17:06

满意回答

设计原理

计数时钟由模为60的秒计数器模块、模为60的分计数模块、模为24的小时计数器模块、指示灯与报警器的模块、分/小时设定模块及输出显示模块等组成。秒计数器模块的进位输出为分计数器模块的进位输入,分计数器模块的进位输出为小时计数器模块的进位输入。其中秒计数器模块中应有分钟的设定,分计数器模块中应有小时的设定。

内容

设计一个计数时钟,使其具有24小时计数功能。通过“多功能复用按键f1-f12”信号接线组“f1_12(t)”的f9~f12的任意引线插孔可设置小时和分钟的值,并具有整点报时的功能。

电路原理图

模块说明:计数时钟由60秒计数器模块xsecond、60分计数器模块xminute、24小时计数器模块xhour等六个模块构成。秒计数器模块的进位输出为分计数器模块的进位输入,分计数器模块中有小时的设定。通过sw1、sw2、sw3、sw4可设定小时和分钟的值,并具有整点报时的功能。

输入信号:setmin为分钟设置信号;sethour为小时设置信号;reset为全局复位信号;clk为全局时钟信号;ckdsp为数码管动态扫描信号。

输出信号:speak为蜂鸣器报时信号;lamp[2..0]为指示灯信号;a~g为数码管七个段位信号;ss[2..0]为数码管段位译码控制信号。

说明与电路连线

指示灯信号lamp2~lamp0为独立扩展下载板上cpld器件的第11、10、9脚,内部已连接并已锁定,无需外接连线。

蜂鸣器报时信号speak为独立扩展下载板cpld器件的第31脚,内部已连接并已锁定,无需外接连线。

拨码开关sw1~sw7内部已连接并已锁定,无需外接连线。

数码管七个段位信号a~g为独立扩展下载板上cpld器件的第86、87、88、89、90、92、93脚,应接数码管段位引线接线组kpl_ah,从左到右依次对应的a、b、c、d、e、f、g引线插孔。

数码管段位译码控制信号ss0、ss1、ss2为独立扩展下载板上cpld器件的第68、69、70脚,为数码管的位选扫描信号,分别接信号接线组ds1-8a(t)的ss0、ss1、ss2引线插孔(即在电源引线插孔组gnd孔处)。

复位信号reset为独立扩展下载板上cpld器件的第71脚,应接“多功能复用按键f1-f12”信号接线组“f1_12(t)”的f9~f12的任意一个插孔。

小时设置信号sethour为独立扩展下载板cpld器件的第73脚,应接“多功能复用按键f1-f12”信号接线组“f1_12(t)”的f9~f12的任意一个插孔。

分钟设置信号setmin为独立扩展下载板上cpld器件的第74脚,应接“多功能复用按键f1-f12”信号接线组“f1_12(t)”的f9~f12的任意一个插孔。

时钟信号clk为独立扩展下载板上cpld器件的183脚(即gclk2),应接时钟信号接线组“clock(t)”的“frq(21)”引线插孔。

数码管动态扫描信号ckdsp为独立扩展下载板上cpld器件的79脚(即gclk1),应接时钟信号接线组“clock(t)”的“frq(11)”引线插孔。

参考源程序

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity xsecond is

port (

clk: in std_logic;

clkset: in std_logic;

setmin: in std_logic;

reset: in std_logic;

secout: out std_logic_vector (6 downto 0);

enmin: out std_logic

);

end xsecond;

architecture xsecond_arch of xsecond is

signal sec : std_logic_vector(6 downto 0);

signal emin : std_logic;

signal sec1 : std_logic;

begin

-- <<enter your statements here>>

process(reset,sec,emin,setmin,clkset)

begin

if reset='0' then

enmin<='0';

secout<="0000000";

sec1<='1';

else

sec1<='0';

secout<=sec;

if clkset='1' and clkset'event then

if setmin='0' then

enmin<='1';

else

enmin<=emin;

end if;

end if;

end if;

end process;

process(clk,sec1)

alias lcount : std_logic_vector(3 downto 0) is sec(3 downto 0);

alias hcount : std_logic_vector(2 downto 0) is sec(6 downto 4);

begin

if sec1='1' then

sec<="0000000";

else

if (clk='1' and clk'event) then

if lcount=9 then

lcount<="0000";

if hcount/=5 then

hcount<=hcount+1;

emin<='0';

else

hcount<="000";

emin<='1';

end if;

else

lcount<=lcount+1;

emin<='0';

end if;

end if;

end if;

end process;

end xsecond_arch;

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity xminute is

port (

clkmin: in std_logic;

reset: in std_logic;

sethour: in std_logic;

clk: in std_logic;

minout: out std_logic_vector (6 downto 0);

enhour: out std_logic

);

end xminute;

architecture xminute_arch of xminute is

signal min : std_logic_vector(6 downto 0);

signal ehour : std_logic;

signal min1 : std_logic;

begin

-- <<enter your statements here>>

process(reset,clk,sethour,min,ehour)

begin

if reset='0' then

enhour<='0';

minout<="0000000";

min1<='0';

else

min1<='1';

minout<=min;

if clk='1' and clk'event then

if sethour='0' then

enhour<='1';

else

enhour<=ehour;

end if;

end if;

end if;

end process;

process(clkmin,min1)

alias lcountm : std_logic_vector(3 downto 0) is min(3 downto 0);

alias hcountm : std_logic_vector(2 downto 0) is min(6 downto 4);

begin

if min1='0' then

min<="0000000";

else

if (clkmin='1' and clkmin'event) then

if lcountm=9 then

lcountm<="0000";

if hcountm/=5 then

hcountm<=hcountm+1;

ehour<='0';

else

hcountm<="000";

ehour<='1';

end if;

else

lcountm<=lcountm+1;

ehour<='0';

end if;

end if;

end if;

end process;

end xminute_arch;

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity xhour is

port (

clkhour: in std_logic;

reset: in std_logic;

hourout: out std_logic_vector (5 downto 0)

);

end xhour;

architecture xhour_arch of xhour is

signal hour : std_logic_vector(5 downto 0);

begin

-- <<enter your statements here>>

process(reset,clkhour,hour)

alias lcount : std_logic_vector(3 downto 0) is hour(3 downto 0);

alias hcount : std_logic_vector(1 downto 0) is hour(5 downto 4);

begin

if reset='0' then

hourout<="000000";

hour<="000000";

else

if (clkhour='1' and clkhour'event) then

if lcount=9 then

lcount<="0000";

hcount<=hcount+1;

else

if hour="100011" then

hour<="000000";

else

lcount<=lcount+1;

end if;

end if;

end if;

hourout<=hour;

end if;

end process;

end xhour_arch;

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity xalert is

port (

clk: in std_logic;

d_in: in std_logic_vector (6 downto 0);

speak: out std_logic;

d_out: out std_logic_vector (2 downto 0)

);

end xalert;

architecture xalert_arch of xalert is

type state is (s1,s2,s3,s4);

signal next_state,current_state : state;

begin

-- <<enter your statements here>>

process(clk,current_state,d_in)

begin

if d_in/="0000000" then

speak<='0';

next_state<=s1;

current_state<=s1;

d_out<="000";

else

if clk='1' and clk'event then

speak<='1';

current_state<=next_state;

end if;

case current_state is

when s1 =>

d_out<="000";

next_state<=s2;

when s2 =>

d_out<="001";

next_state<=s3;

when s3 =>

d_out<="010";

next_state<=s4;

when s4 =>

d_out<="100";

next_state<=s1;

when others =>

d_out<="000";

null;

end case;

end if;

end process;

end xalert_arch;

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity xsettime is

port (

hour: in std_logic_vector (5 downto 0);

min: in std_logic_vector (6 downto 0);

sec: in std_logic_vector (6 downto 0);

reset: in std_logic;

clk: in std_logic;

sel: out std_logic_vector (2 downto 0);

d_out: out std_logic_vector (3 downto 0)

);

end xsettime;

architecture xsettime_arch of xsettime is

signal sel1 : std_logic_vector(2 downto 0);

begin

-- <<enter your statements here>>

process(clk,reset,sel1,hour,min,sec)

begin

if reset='0' then

sel<="000";

d_out<="0000";

sel1<="000";

else

if (clk='1' and clk'event) then

if sel1<5 then

sel1<=sel1+1;

else

sel1<="000";

end if;

end if;

sel<=sel1;

case sel1 is

when "000" =>

d_out(3)<='0';

d_out(2)<='0';

d_out(1)<=hour(5);

d_out(0)<=hour(4);

when "001" =>

d_out<=hour(3 downto 0);

when "010" =>

d_out(3)<='0';

d_out(2)<=min(6);

d_out(1)<=min(5);

d_out(0)<=min(4);

when "011" =>

d_out<=min(3 downto 0);

when "100" =>

d_out(3)<='0';

d_out(2)<=sec(6);

d_out(1)<=sec(5);

d_out(0)<=sec(4);

when "101" =>

d_out<=sec(3 downto 0);

when others =>

null;

end case;

end if;

end process;

end xsettime_arch;

library ieee;

use ieee.std_logic_1164.all;

entity xdeled is

port (

d_in: in std_logic_vector (3 downto 0);

a: out std_logic;

b: out std_logic;

c: out std_logic;

d: out std_logic;

e: out std_logic;

f: out std_logic;

g: out std_logic

);

end xdeled;

才五分啊,太少了吧

哥刚copy的