eda实习报告

eda实习报告
eda实习报告

EDA实验报告

学生姓名:吴泽光

班号:075122

学号:20121001873

指导老师:王巍

中国地质大学(武汉)机械与电子信息学院

2014 年6 月

实验一、3/8译码器和半加器的实现

一、实验目的

1学习QuartusⅡ的基本操作;

2熟悉教学实验箱的使用

3设计一个3/8 译码器和一个半加器;

4 初步掌握VHDL语言和原理图的设计输入,编译,仿真和调试过程;

二、实验步骤

1 在WINDOWS界面双击Quartus2图标进入Quartus2环境;

2 单击file菜单下的New Project Wizard:Introduction 按照向导里面的介绍新建一个工程并把它保存到自己的路径下面。

3 单击file菜单下的New,选择VHDL File,后单击OK,就能创建一个后缀为.vhd(*.bdf)的文件。

4输入完成后检查并保存,编译。

5改错并重新编译;

6建立仿真波形文件并进行仿真。

7选择器件及分配引脚,重新编译;根据引脚分配在试验箱上进行连线,使用LED进行显示;

8程序下载,观察实验结果并记录。

实验要求:

1 用VHDL语言编写3/8译码器(if语句,case语句,布尔方程以及并行语句中的when…else..语句,with…select…when);

2 编写3/8译码器模块的源程序,完成半加器的原理图;

3 在Quartus2平台上仿真;

4 在实验板上实现这么3/8译码器。

二、源程序

3/8译码器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY DECODE38 IS --实体名

PORT(A:IN STD_LOGIC_VECTOR(2 DOWNTO 0) --设置输入引脚

DECODE38:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--设置输出引脚

END;

ARCHITECTURE one OF DECODE38 IS

BEGIN

PROCESS(A)

BEGIN

CASE A IS

WHEN "000" => DECODE38 <= "10000000";

WHEN "001" => DECODE38 <= "01000000";

WHEN "010" => DECODE38 <= "00100000";

WHEN "011" => DECODE38 <= "00010000";

WHEN "100" => DECODE38 <= "00001000";

WHEN "101" => DECODE38 <= "00000100";

WHEN "110" => DECODE38 <= "00000010";

WHEN "111" => DECODE38 <= "00000001";

WHEN OTHERS => NULL;

END CASE;

END PROCESS;

END;

半加器是通过画出它的电路图来实现的,电路图为:

三、仿真波形

1、3/8译码器

2、半加器

四、心得体会

通过这个实验我初步了解了Quartus2软件的用法,并能够用它编译程序、仿真及下载到试验箱上。用这个软件编程的时候难免会犯一些低级的错误,比如实体的字母打错,最后哪里都没找到错误,检查单词的时候才发现前后不一致,最后成功编译。

半加器的设计是通过画电路图实现的,这个在实验时没有出现错误,做完这个后,我还将半加器保存到库里面,从而画出了全加器的电路图,并下载到试验箱上面,也没有出现错误。总的来说,我学会了运用这个软件来实现3/8译码器和半加器。

实验二、BCD七段显示译码器实验

1、实验目的

1 了解和熟悉组合逻辑电路的设计方法和特点;

2 掌握LED显示器的工作原理;

3 设计一个BCD七段显示的译码器,并在试验箱上面实现你的译码器。

2、实验说明

LED数码显示器是数字系统实验里面经常使用的一种显示器件,因为它经常显

示的是十进制或十六进制的数,所以我们就要对实验里面所用到的二进制数进行译

码,将它们转换成十进制的或是十六进制的数。LED数码显示器分为共阴和共阳两

种,本实验使用的是共阴的连接,高电平有效。输入信号为D0,D1,D2,D3,相

应的输出8段为a、b、c、d、e、f、g、Dp。它们的关系表格如下:

下图为译码器逻辑图,请按图进行连线。

其中A,B,C,D 接拨号开关,a,b,c,d,e,f,g,dp和使能端AN(高电平工作)接数码显示接口,管脚映射均为I/O口,映射后,通过拨号开关改变输入二进 4 / 9 制码,则输出数码管上显示相应的数值。在实验中要注意显示器上面每一段LED 要和程序里面的对应。

3、源程序

1、BCD七段显示译码器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY DECL7S IS

PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

DECL7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

END;

ARCHITECTURE one OF DECL7S IS

BEGIN

PROCESS(A)

BEGIN

CASE A IS

WHEN "0000"=>DECL7S<="1111110";

WHEN "0001"=>DECL7S<="0110000";

WHEN "0010"=>DECL7S<="1101101";

WHEN "0011"=>DECL7S<="1111001";

WHEN "0100"=>DECL7S<="0110011";

WHEN "0101"=>DECL7S<="1011011";

WHEN "0110"=>DECL7S<="1011111";

WHEN "0111"=>DECL7S<="1110000";

WHEN "1000"=>DECL7S<="1111111";

WHEN "1001"=>DECL7S<="1111011";

WHEN OTHERS=>NULL;

END CASE;

END PROCESS;

END;

仿真波形:

心得体会:

通过对书上例子的认真理解,在编程的时候思路还是很正确的,对编程软件也有了更深的了解,结合以前学过的单片机的知识,静态显示的时候程序的调试花了比较多的时间,首先试验箱的口有几个有问题,无法驱动数码管,最后认真把所有的输出口调好才有所显示。

实验三、分频器的设计实现

一.实验目的

1.了解和熟悉时序逻辑电路的实现方法和特点

2.熟悉分频器的功用。

二.实验说明

本实验主要是设计几个分频数值不同的分频器,并在实验板上面观察分频的结果显示。虽然实验箱频率为多种,而实际使用的时候一个系统最好使用一个时钟,而系统中使用的其他各种频率需要在系统内部用分频器来产生,所以分频器是以后进行各种实验的关键。

偶数倍分频:

偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。如进行N 倍偶数分频,那么可以通过由待分频的时钟触发计数器计数,当计数器从0 计数到N/2-1 时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。这种方法可以实现任意的偶数分频。

奇数倍分频:

奇数倍分频有两种实现方法:首先,完全可以通过计数器来实现,如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比如可以在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转。即是在计数值在邻近的1和2进行了两次翻转。这样实现的三分频占空比为1/3 或者2/3。如果要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行三分频,然后下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比为50%的三分频时钟。这种方 6 / 9 法可以实现任意的奇数分频。归类为一般的方法为:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数选定到某一个值进行输出时钟翻转,然后经过(N-1)/2 再次进行翻转得到一个占空比非50%奇数n 分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同值时,进行输出时钟时钟翻转,同样经过(N-1)/2 时,输出时钟再次翻转生成占空比非50%的奇数n分频时钟。两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数n分频时钟。

小数分频:

首先介绍如何进行n+0.5 分频,这种分频需要对输入时钟进行操作。基本的设计思想:对于进行n+0.5 分频,首先进行模n 的计数,在计数到n-1 时,输出时钟赋为‘1’,回到计数0 时,又赋为0,因此,可以知道,当计数值为n-1 时,输出时钟才为1,因此,只要保持计数值n-1 为半个输入时钟周期,即实现了n+0.5 分频时钟,因此保持n-1 为半个时钟周期即是一个难点。从中可以发现,因为计数器是通过时钟上升沿计数,因此可以在计数为n-1 时对计数触发时钟进行翻转,那么时钟7 / 9 的下降沿变成了上升沿。即在计数值为n-1 期间的时钟下降沿变成了上升沿,则计数值n-1 只保持了半个时钟周期,由于时钟翻转下降沿变成上升沿,因此计数值变为0。因此,每产生一个n+0.5 分频时钟的周期,触发时钟都是要翻转一次。

三、源程序

Library ieee;

Use ieee.std_logic_1164.all;

Use ieee.std_logic_unsigned.all;

Use ieee.std_logic_arith.all;

Entity F_DIVIDER is

port(

clkin: IN std_logic; --时钟输入

clkout: OUT std_logic; -时钟输出1 clkout1: OUT std_logic; --时钟输出2 clkout2: OUT std_logic -时钟输出3 );

End F_DIVIDER;

Architecture behav of F_DIVIDER is

signal data:integer range 0 to 10;

signal cnt: std_logic_vector(9 downto 0); --cnt

signal cnt1: std_logic_vector(10 downto 0); --cnt1 signal Q:std_logic;

Begin

p1: process(clkin)

begin

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

cnt <= cnt+1;

end if;

end process p1;

clkout <= cnt(9);

p2: process(clkin)

begin

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

cnt1 <= cnt1+1;

end if;

end process p2;

clkout1 <= cnt1(10);

p3: process(clkin)

begin

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

if(data=0) then

data<=0;

Q<=not Q;

else

data<=data+1;

end if;

end if;

end process p3;

clkout2 <= Q;

End behav;

四、仿真波形

五、实验心得

做这个实验之前,我认真看了书上的例程,花了很多时间理解原理。对原理的理解还是比较深刻的,仿真的时候,由于对软件不是很熟,刚开始没有利用时钟,浪费了很多时间。最后看到同学跟我的方法不一样才改过来。

实验四、动态扫描数码显示器

一、实验目的

1.学习功能集成的设计方法;

2.设计6位扫描数码显示器,显示“123456”。

二、实验说明

在许多情况下为了节省I/O 管脚和内部逻辑资源,常用动态扫描的方法进行显示。动态扫描显示利用了时分的原理和人的视觉暂留效应。例如,一个 4 位动态扫描数码显示器的显示周期可划分为四个阶段:每个周期只选通一位数据。在周期1显示第一个数码,周期2

显示第二个数码在扫描4个阶段后,又重新按顺序循环。如果扫描的速度足够快,人感觉到就好像4个数码管同时显示。4位扫描数码显示器共有四组BCD码(4 位)输入线,8根8段译码输出线和4根位选通线。扫描工作中,先从四组BCD(什么是BCD码?)数据中选出一组,通过BCD/七段译码器译码后输出。与此同时,3/8 译码器产生位选通信号,则在此瞬间,显示器再改为显示要输出的数码。然后再选出下一组数据译码后输出,位选通信号则相应下移一位,将下一数码选通输出。

三、源程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY LED IS

PORT ( CLK: IN STD_LOGIC;

SG: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --段选信号输出

BT:OUT STD_LOGIC_VECTOR(2 DOWNTO 0) ; --位选信号输出

A:BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0));

END LED;

ARCHITECTURE rt OF LED IS

BEGIN

P1:PROCESS(CLK)

BEGIN

IF CLK'EVENT AND CLK='1' THEN

IF A="101" THEN A<="000"; --选到第五位后从第一位开始

ELSE A<=A+1;END IF;

END IF;

END PROCESS P1;

P2:PROCESS(A)

BEGIN

CASE A IS --输出数字123456

WHEN "000" =>BT<="000";SG<="1011111";

WHEN "001"=>BT<="001";SG<="1011011";

WHEN "010" =>BT<="010";SG<="0110011";

WHEN "011"=>BT<="011";SG<="1111001";

WHEN "100" =>BT<="100";SG<="1101101";

WHEN "101" =>BT<="101";SG<="0110000";

WHEN OTHERS =>SG<="XXXXXXX" ;

END CASE;

END PROCESS P2;

END rt;

四、实验心得

之前学习单片机的时候知道,数码管动态显示是利用人的视觉暂留效应,通过位选与段选连续输出进行输出,从而达到一起显示的效果。实验的编程比较顺利,但是连线的时候弄错了顺序,导致现实的数字乱码,最后对每个输出口进行检查才显示正确。

实验五、电子时钟

一、实验目的

设计一个电子钟,能正确的记时,并且有可以报时和校时的功能

这次实验分成了几个模块,首先是电子钟的实体部分,用元件例化语句连接起来。有key_debounce、div_freq 、control、counter、ring、display等。然后是分频部分,对1024Hz 的脉冲进行分频,然后再给其他几个部分进行分频,即:

clk_time<=Q(9); -----1Hz

ringtone2<=Q(11); ----0.25Hz

clk_change<=Q(8); ----2Hz

ringtone1<=Q(9); ----1Hz

clk_key<=Q(2); ----128Hz

clk_control<=Q(2); -----128Hz

clk_dis<=Q(0); ----512Hz

接下来是控制模块,利用setup来改变状态,同时将计时的小时和分钟、闹钟的小时和分钟分别用不同的状态控制,利用setup和ajust来调整。接着是计时模块,计时的分钟小时秒都分别进行考虑,具体在程序中体现出来。再就是响铃部分,响铃分为整点报时和闹钟响铃两个部分,分别用不同的状态进行控制。然后就是显示管扫描部分。这个实验我做了好久,在实验课上没能做好,在课下也花了好多时间,有些地方总是出现错误,所以再改了好久,也和同学商量了好多才能够做出来,但消抖部分仍然存在很大的问题,而且是在考试过后才验收的,不过收获还是很大。

二、源程序

1、代码

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_unsigned.all;

ENTITY digital_clock1 IS

PORT

( setup_k : IN STD_LOGIC;

adjust_k : IN STD_LOGIC;

clk : IN STD_LOGIC;

clr : IN STD_LOGIC;

LEDout : OUT STD_LOGIC_VECTOR(6 downto 0);

SCAN : OUT STD_LOGIC_VECTOR(2 downto 0);

mode:buffer std_logic_vector(3 downto 0);

ringtone : OUT STD_LOGIC);

end entity digital_clock1;

architecture beh of digital_clock1 is

component key_debounce

PORT(

clk_key: IN STD_LOGIC;

setup_k: IN STD_LOGIc;

adjust_k: IN STD_LOGIC;

k_setup,k_adjust:OUT STD_LOGIC );

END component;

component div_freq

PORT

( clk : IN STD_LOGIC;

clr : IN STD_LOGIC;

clk_key : OUT STD_LOGIC;

clk_control : OUT STD_LOGIC;

clk_time : OUT STD_LOGIC;

clk_change : OUT STD_LOGIC;

ringtone1 : OUT STD_LOGIC;

ringtone2 : OUT STD_LOGIC;

clk_dis : OUT STD_LOGIC );

END component;

component control

port(k_adjust:in std_logic;

k_setup:in std_logic;

clr:in std_logic;

clk_control:in std_logic;

mode :out std_logic_vector(3 downto 0));

end component;

component counter

port(

clk_time,clk_change,clr:in std_logic;

mode: in std_logic_vector(3 downto 0);

h1,h0: out std_logic_vector(3 downto 0);

min1,min0:out std_logic_vector(3 downto 0);

sec1,sec0:out std_logic_vector(3 downto 0));

end component;

component ring

port(

h1,h0,min1,min0,sec1,sec0 :in std_logic_vector(3 downto 0);

clk_change :in std_logic;

mode : in std_logic_vector(3 downto 0);

ringtone1 : in STD_LOGIC;

ringtone2 : in STD_LOGIC;

ringtone : out std_logic;

a_h1,a_h0,a_min1,a_min0: out std_logic_vector(3 downto 0));

end component;

component display

port(

c_h1,c_h0,c_min1,c_min0,c_sec1,c_sec0 : in std_logic_vector(3 downto 0);

a_h1,a_h0,a_min1,a_min0 : in std_logic_vector(3 downto 0);

clk_dis :in std_logic;

mode : in std_logic_vector(3 downto 0);

sel :out std_logic_vector(2 downto 0);

y: out std_logic_vector(6 downto 0)

);

end component;

signal clk_change,k_setup,k_adjust,clk_control,clk_time,clk_key,ringtone1,ringtone2,clk_dis : std_logic ;

signal c_h1,c_h0,c_min1,c_min0,c_sec1,c_sec0 :std_logic_vector(3 downto 0);

signal a_h1,a_h0,a_min1,a_min0 :std_logic_vector(3 downto 0);

begin

u1: key_debounce port map(clk_key,setup_k,adjust_k,k_setup,k_adjust);

u2: control port map(k_adjust,k_setup,clr,clk_control,mode);

u3: div_freq port map(clk,clr,clk_key,clk_control,clk_time,clk_change,ringtone1,ringtone2,clk_dis);

u4: counter port map(clk_time,clk_change,clr,mode,c_h1,c_h0,c_min1,c_min0,c_sec1,c_sec0);

u5: ring port map(c_h1,c_h0,c_min1,c_min0,c_sec1,c_sec0,clk_change,mode,ringtone1,ringtone2,ringtone,a_h 1,a_h0,a_min1,a_min0);

u6: display port map(c_h1,c_h0,c_min1,c_min0,c_sec1,c_sec0,a_h1,a_h0,a_min1,a_min0,clk_dis,mode,SCAN,LE Dout);

end architecture beh;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_Arith.ALL;

USE IEEE.STD_LOGIC_Unsigned.ALL;

ENTITY key_debounce IS

PORT(

clk_key: IN STD_LOGIC;

setup_k: IN STD_LOGIc;

adjust_k: IN STD_LOGIC;

k_setup,k_adjust:OUT STD_LOGIC );

END key_debounce;

ARCHITECTURE one OF key_debounce IS

SIGNAL dout1,dout2,dout3,dout4,dout5,dout6:STD_LOGIC;

BEGIN

k_setup<=dout1 OR dout2 OR dout3;

k_adjust<=dout4 OR dout5 OR dout6;

PROCESS(clk_key)

BEGIN

IF RISING_EDGE(clk_key)THEN

dout1<=setup_k; dout2<=dout1;dout3<=dout2;

dout4<=adjust_k; dout5<=dout4;dout6<=dout5;

END IF;

END PROCESS;

END one;

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_unsigned.all;

ENTITY div_freq IS

PORT

(

clk : IN STD_LOGIC;

clr : IN STD_LOGIC;

clk_key : OUT STD_LOGIC;

clk_control : OUT STD_LOGIC;

clk_time : OUT STD_LOGIC;

clk_change : OUT STD_LOGIC;

ringtone1 : OUT STD_LOGIC;

ringtone2 : OUT STD_LOGIC;

clk_dis : OUT STD_LOGIC

);

END div_freq;

ARCHITECTURE div_freq_architecture OF div_freq IS BEGIN

process(clk,clr)

variable Q : std_logic_vector(11 downto 0);

begin

if clr='1' then Q:="000000000000";

elsif clk'event and clk='1' then

if Q="111111111111" then Q:="000000000000";

else Q:=Q+1;

end if;

end if;

clk_time<=Q(9); -----1Hz

ringtone2<=Q(11); ----0.25Hz

clk_change<=Q(8); ----2Hz

ringtone1<=Q(9); ----1Hz

clk_key<=Q(2); ----128Hz

clk_control<=Q(2); -----128Hz

clk_dis<=Q(0); ----512Hz

end process;

END div_freq_architecture;

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_unsigned.all;

entity control is

port(k_adjust:in std_logic;

k_setup:in std_logic;

clr:in std_logic;

clk_control:in std_logic;

mode :out std_logic_vector(3 downto 0)

);

end entity control;

ARCHITECTURE control_architecture OF control IS

type states is (timing,changehour,changemin,setalarmh,setalarmm);

signal current_state,next_state:states;

BEGIN

reg:process(clr,clk_control)

begin

if clr='1' then current_state<=timing;

elsif clk_control'event and clk_control='1' then current_state<=next_state;

end if;

end process;

com:process(current_state,k_setup)

begin

case current_state is

when timing=>if k_setup='1' then next_state<=changehour;else next_state<=timing;

end if;

when changehour=>if k_setup='1' then next_state<=changemin;else next_state<=changehour;

end if;

when changemin=>if k_setup='1' then next_state<=setalarmh;else next_state<=changemin;

end if;

when setalarmh=>if k_setup='1' then next_state<=setalarmm;else next_state<=setalarmh;

end if;

when setalarmm=>if k_setup='1' then next_state<=timing;else next_state<=setalarmm;

end if;

end case;

end process;

output:process(current_state,k_adjust)

begin

case current_state is

when timing=>mode<="0000";

when changehour=>if k_adjust='1' thenmode<="0001";else mode<="0010";

end if;

when changemin=>if k_adjust='1' thenmode<="0011";else mode<="0100";

end if;

when setalarmh=>if k_adjust='1' thenmode<="0101";else mode<="0110";

end if;

when setalarmm=>if k_adjust='1' thenmode<="0111";else mode<="1000";

end if;

end case;

end process;

END control_architecture;

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_unsigned.all;

entity counter is

port(

clk_time,clk_change,clr:in std_logic;

mode: in std_logic_vector(3 downto 0);

h1,h0: out std_logic_vector(3 downto 0);

min1,min0:out std_logic_vector(3 downto 0);

sec1,sec0:out std_logic_vector(3 downto 0)

);

end entity counter;

architecture beh of counter is

component HOUR

port(clk_h,clr:in std_logic;

h1,h0:out std_logic_vector(3 downto 0));

end component;

component MINUTE

port(clk_m,clr:in std_logic;

min1,min0:out std_logic_vector(3 downto 0);

co:out std_logic);

end component;

component SECOND

port(clk_time,clr:in std_logic;

sec1,sec0:out std_logic_vector(3 downto 0);

co:out std_logic);

end component;

signal clk_h,clk_m,co_m,co_s :std_logic;

begin

u1: HOUR port map(clk_h,clr,h1,h0);

u2: MINUTE port map(clk_m,clr,min1,min0,co_m);

u3: SECOND port map(clk_time,clr,sec1,sec0,co_s);

process(mode)

begin

case mode is

when "0000" => clk_h<=co_m;clk_m<=co_s;when "0001" => clk_h<=clk_change;clk_m<='0';

when "0010" => clk_h<=co_m;clk_m<=co_s;when "0011" => clk_m<=clk_change;clk_h<='0';

when "0100" => clk_h<=co_m;clk_m<=co_s;when "0101" => clk_h<=co_m;clk_m<=co_s;

when "0110" => clk_h<=co_m;clk_m<=co_s;when "0111" => clk_h<=co_m;clk_m<=co_s;

when "1000" => clk_h<=co_m;clk_m<=co_s;when others => clk_h<=co_m;clk_m<=co_s;

end case;

end process;

end architecture beh;

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity HOUR is

port(clk_h,clr:in std_logic;

h1,h0:out std_logic_vector(3 downto 0));

end HOUR;

architecture hour_arc of HOUR is

begin

process(clk_h,clr)

variable cnt1,cnt0:std_logic_vector(3 downto 0);

begin

if clr='1' then cnt1:="0000";cnt0:="0000";

elsif clk_h'event and clk_h='1' then

if cnt1="0010" and cnt0="0011" then cnt0:="0000";cnt1:="0000";

elsif cnt1<"0010" and cnt0="1001" then cnt1:=cnt1+1;cnt0:="0000";

else cnt0:=cnt0+1;

end if;

end if;

h1<=cnt1;h0<=cnt0;

end process;

end hour_arc;

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity MINUTE is

port(clk_m,clr:in std_logic;

min1,min0:out std_logic_vector(3 downto 0);

co:out std_logic);

end MINUTE;

architecture MIN of MINUTE is

begin

process(clk_m,clr)

variable cnt1,cnt0:std_logic_vector(3 downto 0);

begin

if clr='1' then cnt1:="0000";cnt0:="0000";

elsif clk_m'event and clk_m='1' then

if cnt1="0101" and cnt0="1001" then co<='1';cnt0:="0000";cnt1:="0000"; elsif cnt1<"0101" and cnt0="1001" then co<='0';cnt1:=cnt1+1;cnt0:="0000"; else co<='0';cnt0:=cnt0+1;

end if;

end if;

min1<=cnt1;min0<=cnt0;

end process;

end MIN;

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity SECOND is

port(clk_time,clr:in std_logic;

sec1,sec0:out std_logic_vector(3 downto 0);

co:out std_logic);

end SECOND;

architecture SEC of SECOND is

begin

process(clk_time,clr)

variable cnt1,cnt0:std_logic_vector(3 downto 0);

begin

if clr='1' then co<='0';cnt1:="0000";cnt0:="0000";

elsif clk_time'event and clk_time='1' then

if cnt1="0101" and cnt0="1001" then co<='1';cnt0:="0000";cnt1:="0000"; elsif cnt1<"0101" and cnt0="1001" then co<='0';cnt1:=cnt1+1;cnt0:="0000"; else co<='0';cnt0:=cnt0+1;

end if;

end if;

sec1<=cnt1;sec0<=cnt0;

end process;

end SEC;

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_unsigned.all;

entity ring is

port(

h1,h0,min1,min0,sec1,sec0 :in std_logic_vector(3 downto 0);

clk_change :in std_logic;

mode : in std_logic_vector(3 downto 0);

ringtone1 : in STD_LOGIC;

ringtone2 : in STD_LOGIC;

ringtone : out std_logic;

a_h1,a_h0,a_min1,a_min0: out std_logic_vector(3 downto 0));

end entity ring;

architecture beh of ring is

component alarm

port( h1,h0,min1,min0:in std_logic_vector(3 downto 0);

clk_change:in std_logic;

mode : in std_logic_vector(3 downto 0);

ringtone1 : in STD_LOGIC;

ringtone_a :out std_logic;

a_h1,a_h0,a_min1,a_min0: buffer std_logic_vector(3 downto 0));

end component;

component baoshi

port( min1,min0,sec1,sec0:in std_logic_vector(3 downto 0);

clk :in std_logic;

ringtone1 : in STD_LOGIC;

ringtone2 : in STD_LOGIC;

ringtone_b :out std_logic

);

end component;

signal ringtone_a,ringtone_b: std_logic;

begin

u1 : alarm port map(h1,h0,min1,min0,clk_change,mode,ringtone1,ringtone_a,a_h1,a_h0,a_min1,a_min0);

u2 : baoshi port map(min1,min0,sec1,sec0,clk_change,ringtone1,ringtone2,ringtone_b);

process(ringtone_a,ringtone_b)

begin

ringtone<= ringtone_a or ringtone_b;

end process;

end beh;

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_unsigned.all;

entity baoshi is

port( min1,min0,sec1,sec0:in std_logic_vector(3 downto 0);

clk :in std_logic;

ringtone1 : in STD_LOGIC;

ringtone2 : in STD_LOGIC;

ringtone_b :out std_logic

);

end entity baoshi;

architecture beh of baoshi is

begin

process(sec0)

begin

if min1="0101"and min0="1001"and sec1="0101" then

if sec0="0001" then ringtone_b<=ringtone1;

elsif sec0="0011" then ringtone_b<=ringtone1;

elsif sec0="0101" then ringtone_b<=ringtone1;

elsif sec0="0111" then ringtone_b<=ringtone1;

elsif sec0="1001" then ringtone_b<=ringtone2;

else ringtone_b<='0';

end if;

else ringtone_b<='0';

end if;

end process;

end beh;

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_unsigned.all;

entity alarm is

port( h1,h0,min1,min0:in std_logic_vector(3 downto 0);

clk_change:in std_logic;

mode : in std_logic_vector(3 downto 0);

ringtone1 : in STD_LOGIC;

ringtone_a :out std_logic;

a_h1,a_h0,a_min1,a_min0: buffer std_logic_vector(3 downto 0));

end alarm;

architecture beh of alarm is

component alarm_h

port(

EDA技术实用教程-VHDL版课后答案

第一章 1-1 EDA技术与ASIC设计和FPGA开发有什么关系? P3~4 答:利用EDA技术进行电子系统设计的最后目标是完成专用集成电路ASIC的设计和实现;FPGA和CPLD是实现这一途径的主流器件。FPGA和CPLD通常也被称为可编程专用IC,或可编程ASIC。FPGA和CPLD的应用是EDA技术有机融合软硬件电子设计技术、SoC(片上系统)和ASIC设计,以及对自动设计与自动实现最典型的诠释。 1-2与软件描述语言相比,VHDL有什么特点? P6 答:编译器将软件程序翻译成基于某种特定CPU的机器代码,这种代码仅限于这种CPU而不能移植,并且机器代码不代表硬件结构,更不能改变CPU的硬件结构,只能被动地为其特定的硬件电路结构所利用。综合器将VHDL 程序转化的目标是底层的电路结构网表文件,这种满足VHDL设计程序功能描述的电路结构,不依赖于任何特定硬件环境;具有相对独立性。综合器在将VHDL(硬件描述语言)表达的电路功能转化成具体的电路结构网表过程中,具有明显的能动性和创造性,它不是机械的一一对应式的“翻译”,而是根据设计库、工艺库以及预先设置的各类约束条件,选择最优的方式完成电路结构的设计。 l-3什么是综合?有哪些类型?综合在电子设计自动化中的地位是什么? P5 什么是综合? 答:在电子设计领域中综合的概念可以表示为:将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。 有哪些类型? 答:(1)从自然语言转换到VHDL语言算法表示,即自然语言综合。(2)从算法表示转换到寄存器传输级(RegisterTransport Level,RTL),即从行为域到结构域的综合,即行为综合。(3)从RTL级表示转换到逻辑门(包括触发器)的表示,即逻辑综合。(4)从逻辑门表示转换到版图表示(ASIC设计),或转换到FPGA的配置网表文件,可称为版图综合或结构综合。 综合在电子设计自动化中的地位是什么? 答:是核心地位(见图1-3)。综合器具有更复杂的工作环境,综合器在接受VHDL程序并准备对其综合前,必须获得与最终实现设计电路硬件特征相关的工艺库信息,以及获得优化综合的诸多约束条件信息;根据工艺库和约束条件信息,将VHDL程序转化成电路实现的相关信息。 1-4在EDA技术中,自顶向下的设计方法的重要意义是什么? P7~10 答:在EDA技术应用中,自顶向下的设计方法,就是在整个设计流程中各设计环节逐步求精的过程。 1-5 IP在EDA技术的应用和发展中的意义是什么? P11~12 答:IP核具有规范的接口协议,良好的可移植与可测试性,为系统开发提供了可靠的保证。 第二章 2-1 叙述EDA的FPGA/CPLD设计流程。P13~16 答:1.设计输入(原理图/HDL文本编辑);2.综合;3.适配;4.时序仿真与功能仿真;5.编程下载;6.硬件测试。 2-2 IP是什么?IP与EDA技术的关系是什么? P24~26 IP是什么? 答:IP是知识产权核或知识产权模块,用于ASIC或FPGA/CPLD中的预先设计好的电路功能模块。 IP与EDA技术的关系是什么?答:IP在EDA技术开发中具有十分重要的地位;与EDA技术的关系分有软IP、固IP、硬IP:软IP是用VHDL等硬件描述语言描述的功能块,并不涉及用什么具体电路元件实现这些功能;软IP 通常是以硬件描述语言HDL源文件的形式出现。固IP是完成了综合的功能块,具有较大的设计深度,以网表文件的形式提交客户使用。硬IP提供设计的最终阶段产品:掩模。 2-3 叙述ASIC的设计方法。P18~19 答:ASIC设计方法,按版图结构及制造方法分有半定制(Semi-custom)和全定制(Full-custom)两种实现方法。 全定制方法是一种基于晶体管级的,手工设计版图的制造方法。 半定制法是一种约束性设计方式,约束的目的是简化设计,缩短设计周期,降低设计成本,提高设计正确率。半定制法按逻辑实现的方式不同,可再分为门阵列法、标准单元法和可编程逻辑器件法。 2-4 FPGA/CPLD在ASIC设计中有什么用途? P16,18 答:FPGA/CPLD在ASIC设计中,属于可编程ASIC的逻辑器件;使设计效率大为提高,上市的时间大为缩短。 2-5 简述在基于FPGA/CPLD的EDA设计流程中所涉及的EDA工具,及其在整个流程中的作用。 P19~23答:基于FPGA/CPLD的EDA设计流程中所涉及的EDA工具有:设计输入编辑器(作用:接受不同的设计输

《EDA技术及应用》全套教学教案

单元一教学设计 教学内容: 单元一EDA技术 学习任务1 EDA技术 一、认识课程 二、认识EDA技术 三、认识EDA技术的基本特征 学习任务2 可编程逻辑器件芯片 一、认识可编程逻辑器件 二、CPLD基本结构 三、FPGA基本结构 四、Altera公司的可编程逻辑器件汇报总结 评价与考核

教学设计与建议 教学设计:通过学习和查阅资料了解EDA技术,了解EDA技术的基本特征,并熟悉可编程逻辑器件的种类。了解CPLD和FPGA基本结构,熟悉 Altera公司的可编程逻辑器件。 教学建议:建议学生查找EDA技术发展与可编程逻辑器件应用相关资料,进行总结制作PPT,并进行汇报。 知识目标: 1.了解EDA技术 2.了解EDA技术的基本特征 3.了解可编程逻辑器件的种类 4.了解CPLD基本结构 5.了解FPGA基本结构 6.了解Altera公司的可编程逻辑器件 教学重点及难点: 教学重点:可编程逻辑器件种类 教学难点:熟悉Altera公司的可编程逻辑器件 教学载体与资源: 教学资源:教材、PPT、实训室、多媒体设备。 教学方法建议: 讲授与讨论相结合,查阅资料总结汇报。 教学过程: 1.下达任务和要求 2. 教师带领学生共同解析任务 3.学生展开讨论

4.学生查阅资料 5. 总结汇报 考核评价: 1.根据知识掌握情况评价 2.根据资料查找能力和小组汇报情况评价 教学板书: 任务1:EDA技术 认识课程 1.EDA技术是什么? 2.为什么学习EDA技术? 3.EDA技术学什么? 4.EDA技术怎么学? 相关知识 1.认识EDA技术 EDA(Electronic Design Automation,电子设计自动化)技术是帮助电子设计工程师在计算机上完成电路的功能设计、逻辑设计、性能分析、时序测试直至PCB(印制电路板)的自动设计等。 2.认识EDA技术的基本特征 (1)“自顶向下”设计方法 (2)硬件描述语言 (3)逻辑综合和优化 (4)开放性和标准化 (5)库的引入

eda技术的应用及发展

EDA技术的应用 摘要:随着科技的不断进步与发展,EDA (Electronic Design Automation)即电子设计自动化技术与我们的生活的交集越来越密切。随着微电子技术和计算机技术的不断发展,在涉及通信、国防、航天、工业自动化、仪器仪表等领域工作中,EDA技术的含量以惊人的速度上升,从而使它成为当今电子技术发展的前沿之一。本文简单的介绍EDA技术的发展应用及在未来的发展。 关键字:EDA,技术,应用, Abstract:With the advancement and development of technology,( Electronic Design Automation ) electronic design automation technology and our life is more and more close intersection. With microelectronic technology and the continuous development of computer technology, communication, national defense, involved in aerospace, industrial automation, instrumentation and other areas of work, EDA technical content is increasing at an alarming speed, so as to make it become the forefront of the development of electronic technology. This paper briefly introduced the development of EDA technology, application, and the future. Key world: EDA ,development , 一、前言 1·随着微电子技术和计算机技术的不断发展,在涉及通信、国防、航天、工业自动化、仪器仪表等领域工作中,EDA技术的含量以惊人的速度上升,从而使它成为当今电子技术发展的前沿之一。现代电子产品的性能提高、集成度和精密度不断的增加,电子产品更新换代的节奏越来越快。采用传统的电子设计方法设计电路越来越困难,EDA 技术提高了电路的设计效率和可靠性,减少了劳动强度,给电子系统设计带来了革命性的变化。 2·EDA:EDA是电子设计自动化(Electronic Design Automation)缩写,是90年代初从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。EDA技术是以计算机为工具,根据硬件描述语言HDL(Hardware Description language)完成的设计

EDA技术应用及发展前景介绍

EDA技术应用及发展前景介绍 EDA技术应用及发展前景介绍 电子设计技术的核心就是EDA技术,EDA是指以计算机为工作平台,融合应用电子技术、计算机技术、智能化技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作,即IC设计、电子电路设计和PCB设计。EDA技术已有30年的发展历程,大致可分为三个阶段。70年代为计算机辅助设计(CAD)阶段,人们开始用计算机辅助进行IC版图编辑、PCB布局布线,取代了手工操作。80年代为计算机辅助工程(CAE)阶段。与CAD相比,CAE除了有纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。CAE的主要功能是:原理图输入,逻辑仿真,电路分析,自动布局布线,PCB后分析。90年代为电子系统设计自动化(EDA)阶段。 一、EDA技术的基本特征 EDA代表了当今电子设计技术的最新发展方向,它的基本特征是:设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(HDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件,这样的设计方法被称为高层次的电子设计方法。下面介绍与EDA基本特征有关的几个概念。 1.“自顶向下”的设计方法10年前,电子设计的基本思路还是选用标准集成电路“自底向上”地构造出一个新的系统,这样的设计方法就如同一砖一瓦建造金字塔,不仅效率低、成本高而且容易出错。 高层次设计是一种“自顶向下”的全新设计方法,这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。然后,用综合优化工具生成具体门电路的网络表,其对应的物理实现级可以是印刷电路板或专用集成电路。由于设计的主要仿真和调试过程是在高层次上完成的,这既有利于早期发现结构设计上的错误,避免设计工作的浪费,又减少了逻辑功能仿真的工作量,提高了设计的一次成功率。 2.ASIC设计现代电子产品的复杂度日益提高,一个电子系统可能由数万个中小规模集成电路构成,这就带来了体积大、功耗大、可靠性差的问题。解决这一问题的有效方法就是采用ASIC芯片进行设计。ASIC按照设计方法的不同可分为全定制ASIC、半定制ASIC和可编程ASIC(也称为可编程逻辑器件)。 设计全定制ASIC芯片时,设计师要定义芯片上所有晶体管的几何图形和工艺规则,最后将设计结果交由IC厂家去进行掩模制造,做出产品。这种设计方法的优点是芯片可以获得最优的性能,即面积利用率高、速度快、功耗低,而缺点是开发周期长,费用高,只适合

EDA技术及应用【朱正伟】第五章课后习题部分答案

1.试说明实体端口模式BUFFER和INOUT的不同之处? 答:BUFFER端口:缓冲模式,具有读功能的输出模式,即信号输出到实体外部,但同时也在内部反馈使用,不允许作为双向端口使用。而INOUT端口:双向模式,即信号的流通是双向的,既可以对此端口赋值,也可以通过此端口读入数据。 2.VHDL的数据对象有哪几种?它们之间有什么不同? 答:VHDL的数据对象有三种:信号、变量、常量。它们之间的的区别如下: 信号赋值至少有δ延时,而变量和常量没有;信号除当前值外,有许多相关信息,变量只有当前值,常量的值在设计实体中始终不变;进程对信号敏感而对变量及常量不敏感;信号可以是多个进程的全局信号,变量只在定义它们的顺序域可见,而常量的使用范围取决于它被定义的位置;信号是硬件连线的抽象描述信号赋值,赋值符号 <= 而变量和常量的赋值符号 :=。 3.说明下列各定义的意义: SIGNAL a , b , c : BIT : =’0’; CONSTANT TIME1 , TIME2 : TIME : 20ns ; VARIABLE x , y , z : STD_LOGIC :=’x’; 答:○1定义3个位数据类型的信号a、b、c,它们取值为0; ○2定义2个时间数据类型的常量TIME1、TIME2,它们值为20ns; ○3定义3个标准逻辑位 STD_LOGIC数据类型的变量x、y、z,它们的值是强未知的。 4.什么是重载函数?重载运算符有何用处?如何调用重载运算符函数? 答:为了方便各种不同数据类型间的运算,VHDL允许用户对原有的基本操作符重新定义,赋予新的含义和功能,从而建立一种新的操作符,这就是重载操作符,定义这种操作符的函数成为重载函数。重载运算符的作用是为了方便各种不同的数据类型间的运算。要调用重载运算符函数,先要在程序包中进行函数体的定义,调用的格式如下:

EDA技术及应用实训报告

桂林电子科技大学信息科技学院《EDA技术及应用》实训报告 学号1252100301 姓名 指导教师:覃琴 2014年4 月29 日

实训题目:数字日历电路 1 系统设计 1.1 设计要求 1.1.1 设计任务 (1)用Verilog HDL语言设计出能够在EDA实训仪的I/O设备和PLD芯片实现的数字日历。 (2)数字日历能够显示年、月、日、时、分和秒。 (3)用EDA实训仪上的8只八段数码管分两屏分别显示年、月、日和时、分、秒,即在一定时间段内显示年、月、日(如20140101),然后在另一时间段内显示时、分、秒(如010101099),两个时间段能自动倒换。 (4)数字日历具有复位和校准年、月、日、时、分、秒的按钮,但校年和校时同用一个按钮,即在显示年、月、日时用此按钮校年,在显示时、分、秒时则用此按钮校时。 (5)体现创新部分 1.1.2 性能指标要求 1)数字电路能够在一定的时间内显示切换的功能,并且能手动校准年月日和时分秒 2)具有复位和进位的功能 3)能起到提示的作用,如闹钟或亮彩灯等。 1.2 设计思路及设计框图 1.2.1设计思路 如图1.2.2所示 1) EDA实训箱上的功能有限,可以用到的有8支数码管和12个lED灯。年、月、日和时、分、秒可以通过数码管显示,年月日和时分秒的切换可以通过拨动开关控制,校正可以通过按键实现。 2)输入的秒脉冲由DEA实训仪上的20MHZ晶振经过分频得到,秒脉冲经过60分频后产生1分钟脉冲信号,在经过60分频后产生1小时的脉冲信号,最后进行24分频,得到1天的脉冲送24进制的 cout输出。在将两个60分频和一个24分频的输出送到送到数码管的译码器输入端,得到24小时的计时显示结果。由此得到数字日历的计时器模块。

《EDA技术与应用》A卷及答案

汕头大学成人教育学院二0一0年春季学期期末考试试卷 试卷编号:A卷闭卷课程名称:《EDA技术与应用》班级专业: 姓名:学号: 一、填空题(20分,每小题1分) 1.VHDL的中文名称是__超高速集成电路硬件描述语言_____________。 2.用EDA技术进行电子系统设计的目标是最终完成 asic________ 的设计与实现。 3.可编程器件分为 fpga__ 和 _cpld______ 。 4.标准逻辑位数据类型常用的数值有 _1__ 、 __0_ 、 _z__ 等。 5.在VHDL语言中可以使用的数据类型有: _位____ 、 __标准逻辑位__________、 ___布尔_____。 6.完整的条件语句将产生 _组合_______ 电路,不完整的条件语句将产生 __时序______ 电路。 7.信号的赋值符号为 <= ___ 变量的赋值符号为 =___ 。 8.随着EDA技术的不断完善与成熟, ___自顶向下______的设计方法更多的被应用于VHDL 设计当中。 9.EDA设计过程中的仿真有三种,它们是___行为_____ 仿真、 _逻辑______ 仿真和 __ 时序____ 仿真。 10.目前国际上较大的PLD器件制造公司有 __altera________ 和 ___xilinx______ 公 司。 二、简答题(20分,每小题4分) 1、与HDL文本输入法相比较,原理图输入法有何优点?

2、写出结构体的一般语言格式并说明其作用 3、信号和变量的区别? 4、写出PROCESS语句结构的一般表达格式。 5、写出五种以上的VHDL的预定义数据类型。 三、程序注解(20分,每空1分) library ieee; __________ use ieee.std_logic_1164.all; _____________ ENTITY aa1 is ________ __ port(a,b,s:in bit; _______________________________

EDA课后问题详解(适用于朱正伟《EDA技术及应用》)

1.1、设计集成计数器74161,设计要求如下: 4-BIT BINARY UP COUNTER WITH SYNCHRONOUS LOAD AND ASYNCHRONOUS CLEAR NOTE INPUTS: CLK LDN CLRN D C B A OUTPUTS:QD QC QB QA RCO *RCO = QD & QC & QB & QA LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT4 IS PORT( CLK,LDN,CLRN : IN STD_LOGIC; D,C,B,A : IN STD_LOGIC; CARRY : OUT STD_LOGIC; QD,QC,QB,QA : OUT STD_LOGIC ); END; ARCHITECTURE A OF CNT4 IS SIGNAL DATA_IN: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN DATA_IN<=D&C&B&A; PROCESS(DATA_IN,CLK,LDN,CLRN) V ARIABLE CNT:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLRN='0' THEN CNT:=(OTHERS=>'0'); ELSIF CLK'EVENT AND CLK='1' THEN IF LDN='0' THEN CNT:=DATA_IN; ELSE CNT:=CNT+1; END IF; END IF; CASE CNT IS WHEN "1111"=> CARRY<='1'; WHEN OTHERS=> CARRY<='0'; END CASE; QA<=CNT(0); QB<=CNT(1); QC<=CNT(2); QD<=CNT(3); END PROCESS; END A; 1.2、设计一个通用双向数据缓冲器,要求缓冲器的输入和输出端口的位数可以由参数决定。 设计要求:N BIT数据输入端口A,B。工作使能端口EN=0时双

EDA技术的概念

EDA技术的概念 随着集成电路规模的扩大、半导体技术的发展,电子设计自动 化的重要性急剧增加。下面是的关于EDA技术的概念,欢迎大家参考! EDA技术的概念及范畴 EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。 利用EDA工具,电子设计师可以从概念、算法、协议等开始设 计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在计算机 上自动处理完成。 现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。EDA设计可分为系统级、电路级和物理实现级。 EDA常用软件 EDA工具层出不穷,目前进入我国并具有广泛影响的EDA软件有:EWB、PSPICE、OrCAD、PCAD、Protel、Viewlogic、Mentor、Graphics、Synopsys、LSIlogic、Cadence、MicroSim等等。这些工具都有较强

的功能,一般可用于几个方面,例如很多软件都可以进行电路设计与仿真,同时以可以进行PCB自动布局布线,可输出多种网表文件与第三方软件接口。下面按主要功能或主要应用场合,分为电路设计与仿真工具、PCB设计软件、IC设计软件、PLD设计工具及其它EDA软件,进行简单介绍。 1、电子电路设计与仿真工具 电子电路设计与仿真工具包括 SPICE/PSPICE;EWB;Matlab;SystemView;MMICAD等。下面简单介绍前三个软件。 (1)SPICE(SimulationProgramwithIntegratedCircuit Emphasis)是由美国加州大学推出的电路分析仿真软件,是20世纪80年代世界上应用最广的电路设计软件,1998年被定为美国国家标准。1984年,美国MicroSim公司推出了基于SPICE的微机版PSPICE(Personal—SPICE)。现在用得较多的是PSPICE6.2,可以说在同类产品中,它是功能最为强大的模拟和数字电路混合仿真EDA软件,在国内普遍使用。最新推出了PSPICE9.1版本。它可以进行各种各样的电路仿真、激励建立、温度与噪声分析、模拟控制、波形输出、数据输出、并在同一窗口内同时显示模拟与数字的仿真结果。无论对哪种器件哪些电路进行仿真,都可以得到精确的仿真结果,并可以自行建立元器件及元器件库。 (2)EWB(ElectronicWorkbench)软件是InteractiveImageTechnologiesLtd在20世纪90年代初推出的电路

EDA技术实用教程课后习题答案

第一章 1-1 EDA 技术与 ASIC 设计和 FPGA 开发有什么关系? 答:利用 EDA 技术进行电子系统设计的最后目标是完成专用集成电路 ASIC 的设计和实现;FPGA 和 CPLD 是实现 这一途径的主流器件。FPGA 和 CPLD 通常也被称为可编程专用 IC,或可编程 ASIC。FPGA 和 CPLD 的应用是 EDA 技术 有机融合软硬件电子设计技术、SoC(片上系统)和 ASIC 设计,以及对自动设计与自动实现最典型的诠释。 1-2 与软件描述语言相比,VHDL 有什么特点? P6 答:编译器将软件程序翻译成基于某种特定 CPU 的机器代码,这种代码仅限于这种 CPU 而不能移植,并且机器 代码不代表硬件结构,更不能改变 CPU 的硬件结构,只能被动地为其特定的硬件电路结构所利用。综合器将 VHDL 程序转化的目标是底层的电路结构网表文件,这种满足 VHDL 设计程序功能描述的电路结构,不依赖于任何特定硬 件环境;具有相对独立性。综合器在将 VHDL(硬件描述语言)表达的电路功能转化成具体的电路结构网表过程中,具 有明显的能动性和创造性,它不是机械的一一对应式的“翻译”,而是根据设计库、工艺库以及预先设置的各类约 束条件,选择最优的方式完成电路结构的设计。 l-3 什么是综合?有哪些类型?综合在电子设计自动化中的地位是什么?什么是综合? 答:在电子设计领域中综合的概念可以表示为:将用行为和功能层次表达的电子系统转换为低层 次的便于具体实现的模块组合装配的过程。 有哪些类型? 答:(1)从自然语言转换到 VHDL 语言算法表示,即自然语言综合。(2)从算法表示转换到寄存器 传输级(RegisterTransport Level,RTL),即从行为域到结构域的综合,即行为综合。(3)从 RTL 级表示转换到逻 辑门(包括触发器)的表示,即逻辑综合。(4)从逻辑门表示转换到版图表示(ASIC 设计),或转换到 FPGA 的配置网表 文件,可称为版图综合或结构综合。 综合在电子设计自动化中的地位是什么? 答:是核心地位(见图1-3)。综合器具有更复杂的工作环境,综合器 在接受 VHDL 程序并准备对其综合前,必须获得与最终实现设计电路硬件特征相关的工艺库信息,以及获得优化综 合的诸多约束条件信息;根据工艺库和约束条件信息,将 VHDL 程序转化成电路实现的相关信息。 1-4 在 EDA 技术中,自顶向下的设计方法的重要意义是什么? P7~10答:在 EDA 技术应用中,自顶向下的设计方法,就是在整个设计流程中各设计环节逐步求精的过程。 1-5 IP 在 EDA 技术的应用和发展中的意义是什么? P11~12 答:IP 核具有规范的接口协议,良好的可移植与可测试性,为系统开发提供了可靠的保证。 第二章 2-1 叙述 EDA 的 FPGA/CPLD 设计流程。 P13~16 答:1.设计输入(原理图/HDL 文本编辑);2.综合;3.适配;4.时序仿真与功能仿真;5.编程下载;6.硬件测试。 2-2 IP 是什么?IP 与 EDA 技术的关系是什么? P24~26 IP 是什么? 答:IP 是知识产权核或知识产权模块,用于 ASIC 或FPGA/CPLD 中的预先设计好的电路功能模块。 IP 与 EDA 技术的关系是什么? 答:IP 在 EDA 技术开发中具有十分重要的地位;与 EDA 技术的关系分有软 IP、 固 IP、硬 IP:软 IP 是用 VHDL 等硬件描述语言描述的功能块,并不涉及用什么具体电路元件实现这些功能;软 IP 通常是以硬件描述语言 HDL 源文件的形式出现。固 IP 是完成了综合的功能块,具有较大的设计深度,以网表文件 的形式提交客户使用。硬 IP 提供设计的最终阶段产品:掩模。 2-3 叙述 ASIC 的设计方法。 P18~19 答:ASIC 设计方法,按版图结构及制造方法分有半定制(Semi-custom)和全定制(Full-custom)两种实现方法。 全定制方法是一种基于晶体管级的,手工设计版图的制造方法。 半定制法是一种约束性设计方式,约束的目的是简化设计,缩短设计周期,降低设计成本,提高设计正确率。 半定制法按逻辑实现的方式不同,可再分为门阵列法、标准单元法和可编程逻辑器件法。 2-4 FPGA/CPLD 在 ASIC 设计中有什么用途? P16,18 答:FPGA/CPLD 在 ASIC 设计中,属于可编程 ASIC 的逻辑器件;使设计效率大为提高,上市的时间大为缩短。 2-5 简述在基于 FPGA/CPLD 的 EDA 设计流程中所涉及的 EDA 工具,及其在整个流程中的作用。 P19~23 答:基于 FPGA/CPLD 的 EDA 设计流程中所涉及的 EDA 工具有:设计输入编辑器(作用:接受不同的设计输 入表达方式,如原理图输入方式、状态图输入方式、波形输入方式以及HDL 的文本输入方式。);HDL 综合器(作用: HDL 综合器根据工艺库和约束条件信息,将设计输入编辑器提供的信息转化为目标器件硬件结构细节的信息,并在 数字电路设计技术、化简优化算法以及计算机软件等复杂结体进行优化处理);仿真器(作用:行为模型的表达、 电子系统的建模、逻辑电路的验证及门级系统的测试);适配器(作用:完成目标系统在器件上的布局和布线);下 载器(作用:把设计结果信息下载到对应的实际器件,实现硬件设计)。 第三章 3-1 OLMC(输出逻辑宏单元)有何功能?说明 GAL 是怎样实现可编程组合电路与时序电路的。 P34~36 OLMC 有何功能? 答:OLMC 单元设有多种组态,可配置成专用组合输出、专用输入、组合输出双向口、寄存器 输出、寄存器输出双向口等。 说明 GAL 是怎样实现可编程组合电路与时序电路的? 答:GAL(通用阵列逻辑器件)是通过对其中的 OLMC (输出逻辑宏单元)的编程和三种模式配置(寄存器模式、复合模式、简单模式),实现组合电路与时序电路设计 的。 3-2 什么是基于乘积项的可编程逻辑结构? P33~34,40 答:GAL、CPLD 之类都是基于乘积项的可编程结构;即包含有可编程与阵列和固定的或阵列的 PAL(可编程阵 列逻辑)器件构成。 3-3 什么是基于查找表的可编程逻辑结构? P40~41

《EDA技术及应用》朱正伟-三,四,五章部分课后题答案

第三章 3-5设计一个4选1多路选择器,当选择输入信号分别取“00”、“01”、“10”和“11”时,输出信号分别与一路输入信号相连。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MAX4_1 IS PORT(A,B,C,D,S1,S2 : IN STD_LOGIC; Y : OUT STD_LOGIC); END ENTITY MAX4_1; ARCHITECTURE HF1 OF MAX4_1 IS SIGNAL SS : STD_LOGIC_VECTOR (0 TO 1); BEGIN SS<=S2&S1; PROCESS(SS) BEGIN CASE SS IS WHEN "00" => Y<=A; WHEN "01" => Y<=B; WHEN "10" => Y<=C; WHEN "11" => Y<=D; WHEN OTHERS => NULL; END CASE; END PROCESS; END HF1; 3-6设计一个7人表决电路,参加表决者7人,同意为1,不同意为0,同意者过半则表决通过,绿指示灯亮;表决不通过则红指示灯亮。设计思路:根据7人表决电路设计要求,7人中至少有4个通过才可以表决通过,故可以在程序中设置一个变量TEMP,使其在表决电路中遇1则加1,遇0则加0(设计中1表示通过,0表示不通过)。当TEMP>=4时,表示表决通过,当TEMP<4时表决不通过。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY VOTE7 IS PORT (MEN:IN STD_LOGIC_VECTOR(6 DOWNTO 0); OUTPUT: OUT BIT); END VOTE7; ARCHITECTURE BEHAVE OF VOTE7 IS BEGIN PROCESS(MEN) V ARIABLE TEMP: INTEGER RANGE 0 TO 7; BEGIN TEMP:=0; FOR I IN 0 TO 6 LOOP IF(MEN(I)='1')THEN TEMP:=TEMP+1;

EDA技术的发展与应用

目录 1 引言 (2) 1.1 对EDA的简述 (2) 1.2 对Multisim 10软件的简述 (2) 2 单管共射放大电路的静态工作点 (3) 2.1 静态工作点( Q 点)的设置 (3) 2.1.1 创建单管共射电路 (3) 2.1.2 对静态工作点的分析 (3) 2.2 温度对静态工作点( Q 点) 的影响 (5) 3 单管共射放大电路的动态指标 (5) 3.1 电压增益 (5) 3.1.1 计算电压增益 (5) 3.1.2 对电压增益的分析 (5) 3.2 输入电阻 (6) 3.3 输出电阻 (6) 4 体会 (8) 4.1 对本文的分析 (8) 4.2 对本文的体会 (9) 参考文献 (10)

Multisim 10 在单管共射放大电路中的应用 罗其会 (北京石油化工学院信息学院计算机科学与技术大兴区北京 102607)摘要利用Multisim 10 仿真软件对单管共射放大电路进行了计算机辅助教学。采用直流工作点分析了电路静态工作点的设置。利用温度扫描和参数扫描分析了温度对静态工作点以及电路参数对输出波形的影响。对电压增益、输入电阻和输出电阻的仿真测试结果和理论计算基本吻合。研究表明,利用Multisim 10 强大的分析功能对电子电路进行计算机仿,可以提高教学质量和教学效果。 关键字Multisim 10; 电路仿真; 静态工作点; 动态参数 Application of Multisim 10 in Single Transistor Amplifier Luoqihui (Beijing oil institute of chemical information institute of computer science and technology Daxing Beijing 102607) Abstract Multisim 10 simulation software was used for computer aided teaching. The quiescent operating point w as set by using DC operating point. The influence of temperature on quiescent operating point and circuit parameter on output voltage waveform were analyzed by using temperature scanning and parameter scanning. The simulation test of voltage gain, input resistance and output resistance coincide with theoretical calculation basically. The results show that using the powerful analysis capability of Multisim 10, the computer simulation of electronic circuits can enhance the teaching quality and teaching effect. Keywords Multisim 10; circuit simulation; quiescent operating point; dynamic par ammeters 1引言 1.1 对EDA的简述 在电子技术的发展历程中, 随着计算机辅助技术的应用和普及, 以及电子产品向数字化、集成化、微型化和低功耗方向的发展, EDA ( Elect ronic Design Automat ion) 技术逐渐产生并日趋完善。电子、电气、信息类专业的学生可以应用EDA 技术进行电子电路的设计和测试。EDA 具有效率高, 周期短, 应用范围广的优点,已成为当今电子设计的主流手段和技术潮流。 1.2 对Multisim 10软件的简述 在众多的电路仿真软件中, Multisim 以其界面友好, 功能强大和容易使用而倍受高校电类专业师生和工程技术人员的青睐。Multisim 10 是美国国家仪器公司N I( National Instruments) 最新推出的Multisim 版本, 集电路设计和功能测试于一件, 为设计者提供 了一个功能强大,仪器齐全的虚拟电子工作平台[ 1-3]。设计者可以利用大量的虚拟电子元器

eda技术及应用第三版课后答案谭会生.doc

eda 技术及应用第三版课后答案谭会生 【篇一:《eda 技术》课程大纲】 >一、课程概述 1.课程描述 《eda 技术》是通信工程专业的一门重要的集中实践课,是通信工程专业学生所必须具备的现代电子设计技术技能知识。eda 是电子技术的发展方向,也是电子技术教学中必不可少的内容。本课程主要 介绍可编程逻辑器件在电子电路设计及实现上的应用,介绍电路原 理图和pcb 图的设计技术。开设该课程,就是要让学生了解大规模 专用集成电路fpga 和cpld 的结构,熟悉一种以上的硬件描述语言, 掌握一种以上的开发工具的使用等,掌握电路原理图和pcb 图的现代设计技术与方法,从而提高学生应用计算机对电子电路和高速智 能化系统进行分析与设计的能力。 2.设计思路 本课程坚持“以学生为中心”的原则,以项目任务驱动的方式,采取 理论知识与案例相结合的方式授课,提高学生的学习主动性。通过 必要的理论知识讲授、大量的实践训练和案例分析,培养学生的动 手设计和实践能力,掌握eda 开发的整个流程和基本技巧。 课程采用演示讲授和实践相结合,边讲边练的方法,让学生切身体 会并掌握eda 开发产品的流程和方法。 本课程集中 2 周时间开设,注重实践性,边讲边练,让学生切身体 会并掌握eda 开发技术。 3.实践要求 (1)纪律和安全要求 ①不得将食物带入实验室,每次实训后请将使用后的废弃物带走。 违反者每次扣罚平时分 2 分。 ②实训期间不得做与实训无关的其他事情,不得大声喧哗或做其他 影响实训正常进行的事宜。违反者每次扣罚平时分 2 分。 ③实训期间,若学生有事不能正常参加实训,须提前以书面形式请 假,并按指导教师的安排补做实训。未经指导教师许可,学生不得 任意调换实训时间和实训地点。违反者每次扣罚平时分 4 分。 ④学生不得以任何理由替代他人进行实训,违者直接取消实训成绩。 ⑤学生除操作自己所分配的计算机外,不得操作实验室内其他任何 设备。违者每次扣罚平时分 2 分。(2)业务要求

EDA技术与应用

EDA技术与应用 一、EDA简介 1.1 EDA概念 EDA(Electronic Design Automation )即电子设计自动化,是以微电子技术为物理层面,现代电子设计为灵魂,计算机软件技术为手段,最终形成集成电子系统或专用集成电路芯片ASIC(Application Specific Integrated Circuit)为目的的一门新兴技术。 现代电子设计技术的核心是EDA技术。EDA技术就是依靠功能强大的电子计算机,在EDA工具软件平台上,对以硬件描述语言(如VHDL)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、优化和仿真,直至下载到可编程逻辑器件CPLD/FPGA 或专用集成电路ASIC芯片中,实现既定的电子电路设计功能。 EDA技术是以计算机为工作平台、以EDA软件工具为开发环境、以硬件描述语言为设计语言、以ASIC(专用集成电路)为实现载体的电子产品自动化设计过程。 1.2 EDA基本特征与优势 EDA工具主要进行三项辅助设计工作:集成电路(IC)设计、电子电路设计及印刷电路板(PCB)设计。 在EDA软件平台上,根据原理图或硬件描述语言HDL完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真、目标芯片的适配编译、逻辑映射和编程下载等工作。 EDA技术的基本特征:采用高级语言描述;具有系统级仿真和综合能力;具有开放式设计环境;具有丰富的元器件模型库。 EDA技术的优势:(1)采用硬件描述语言,便于复杂系统设计(2)强大的系统建模和电路仿真功能(3)具有自主知识产权(4)开发技术的标准化和规范化(5)全方位地利用计算机的自动设计、仿真和测试技术(6)对设计者的硬件知识和硬件经验要求低。 EDA设计的实现目标:1、印刷电路板设计;2、集成电路(IC或ASIC)设计;3、可编程逻辑器件(FPGA/CPLD)设计;4、混合电路设计。 EDA设计整个综合过程就是将设计者在EDA平台上编辑输入的HDL文本、原理图或状态图形描述,依据给定的硬件结构组件和约束控制条件进行编译、优化、转换和综合,最终获得门级电路甚至更底层的电路描述网表文件。由此可见,综合器工作前,必须给定最后实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用某种网表文件的方式对应起来,成为相应互的映射关系。 1.3 EDA工具 EDA工具在EDA技术应用中占据极其重要的位置,EDA的核心是利用计算机完成电子设计全过程自动化,因此,基于计算机环境的EDA软件的支持是必不可少的。EDA工具大致可以分为如下5个模块:设计输入编辑器;仿真器;HDL综合器;适配器(或布局布线器);下载器。当然这种分类不是绝对的,现在往往把各EDA工具集成在一起,如MAX+PLUS Ⅱ、Quartus Ⅱ等。 二、QuartusⅡ简介及设计流程 2.1 QuartusⅡ简介

EDA技术的基本概念

1 EDA技术的基本概念(什么是EDA技术,EDA做什么 EDA即电子设计自动化,是Electronic Design Automation 的英文缩写。 EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。具体讲就是: 以大规模可编程逻辑器件为设计载体以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述的主要表达方式以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合、优化、逻辑布局布线、逻辑仿真直至完成对于特定目标芯片适配编译、逻辑映射、编程下载等工作最终形成集成电子系统或专用集成芯片。 2 EDA技术开发流程 设计输入硬件描述语言文本输入 这种方式与传统的计算机软件语言编辑输入基本一致,就是将使用了某种硬件描述语言(HDL)的电路设计文本,如VHDL或Verilog的源程序,进行编辑输入。 仿真让计算机根据一定的算法和一定的仿真库对EDA设计进行模拟,以验证设计排除错误。分为功能仿真和时序仿真两种不同级别的仿真测试 综合综合器不是机械的一对一翻译根据设计库、工艺库以及预先

设置的各类约束条件 选择最优的方式完成电路结构的形成。是选择一种能充分满足各项约束条件且最低成本的实现方案。 适配适配器也称结构综合器,功能是将综合产生的网表文件配置于指定的目标器件中,使之产生最终的下载文件,如JEDEC、Jam格式的文件。 下载和硬件测试把适配器生成的下载或配置文件,通过编程器或编程电缆向FPGA或CPLD进行下载,以便进行硬件调试和验证。 3 IP核基本概念介绍 就是知识产权核或知识产权模块的意思,即用于ASIC或FPGA/CPLD 中的预先设计好的电路模块,分为软IP、固IP和硬IP。 4名词解释:EDA CAD CAE SOC SOPC FPGA CPLD HDL VHDL IP ASIC 5条件赋值语句实现3-8译码器、三人表决器;学号末位奇偶校验位输出器设计 6 进程由信号的变化触发某电路的工作过程,就是进程。 这个信号对进程来说就是敏感信号。 7设计一个4位计数器 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY counter4 IS PORT ( CLK : IN STD_LOGIC;

相关文档
最新文档