EDA技术在数字电路设计中的应用

来源:互联网 发布:java socket示例代码 编辑:程序博客网 时间:2024/06/01 17:26
2006-05-11 22:30:30

字体变小 字体变大

EDA技术在数字电路设计中的应用

E1数字系统的层次化结构设计

前面介绍的组合逻辑电路和时序逻辑电路的设计都是属于功能部件的设计。功能部件设计是建立在真值表,特性表,状态转换图或工作时序图的基础上,在输入变量较少的情况,因描述逻辑函数关系的各种表格和图表较简单,设计电路分析建模的工作也较简单,按照前面介绍的方法就可以完成电路的设计工作。

但在大型数字系统的设计中,因输入变量,输出变量和状态变量的数目可能相当大,设计电路分析建模的工作将非常复杂,所以,前面介绍的设计方法在进行数字系统的设计时不适用,进行数字系统的设计需要引入层次化结构设计的思想。

层次化结构设计的思想是将设计的目标层层分解,对分解后的各层次电路分别进行设计,最后,再根据分解的规则将各层次电路综合起来组成数字系统。各层次模块组成系统的连接示意图如图E-1所示。因图E-1所示的系统结构连接示意图与树的形状相类似,所以,具有这种结构的系统称为树形结构系统。

对于树型结构系统存在着“自顶向下(Top-down)”设计和“自底向上(Bottom-up)”设计两种不同的设计思想。

自顶向下的设计强调性能上的最优,而自底向上设计强调的是设计上的经济性。实际的设计过程往往是这两种设计方法的综合,但在使用大规模集成电路,特别是使用可编程逻辑器件进行设计时,自顶向下的设计会有更多的优点。

随着电子设计自动化水平的提高,在进行复杂数字系统设计时, 使用EDA仿真工具可以使整个设计过程变得简捷和方便,特别是对各层次电路工作时序图的分析更为快捷和准确,为设计更大规模的数字系统提供了直观准确的实验数据。

下面以2位十进制频率计的设计为例,介绍层次化设计思想在EDA环境下的体现,所采用的EDA工具软件的平台是Max+PlusII

E2 2位十进制数字频率计的层次结构框图

根据2位十进制数字频率计的逻辑功能可知,2位十进制数字频率计应由十进制计数器电路和测频时序控制电路和频率计顶蹭电路三部分组成,2位十进制数字频率计的层次化结构示意图如图E-2所示。

利用EDA技术进行2位十进制数字频率计设计的步骤是:先分别设计底层的计数器电路模块和测频时序控制电路模块,再在频率计顶层电路中调入事先设计好的两个底层电路模块。

E21 设计有时钟使能的两位十进制计数器

数字频率计的核心元件之一是含时钟使能和进位扩展输出的十进制计数器。根据时序逻辑电路的设计方法可知,利用两片十进制计数器74160按图E-3a)所示的连接方法即可组
成有时钟使能的两位十进制计数器。根据图E-3a)可将带时钟使能的2位十进制计数器表示成如图E-3b)所示的模块。

模块中各输入输出信号的含义分别为:EN为计数使能信号,当EN为“1”时允许计数器计数;EN为“0”时禁止计数器计数;CLK为计数器的CP信号,在频率计电路中,该端口的输入信号就是待测频率的信号;CLR为计数器的清零信号;输出为两个4位总线的输出信号Q7-Q4Q3-Q0COUT为扩展输出的进位信号。

由集成电路手册可知,2位十进制计数器的功能除了用两片74160搭建外,采用双十进制计数器74390和附加的门电路来搭建也可以,采用74390Max+PlusII软件上搭建的2位十进制计数器电路的连接图如图E-4所示。

E-4中的74390连接成两个独立的十进制计数器,待测频率信号CLK通过一个与门输入74390计数器1的时钟输入端1CLKA,与门的另一端由计数器使能信号EN控制;当EN为“1”时允许计数;当EN为“0”时禁止计数。计数器14位输出Q[3]Q[2]Q[1]Q[0]并成总线表达方式即Q[3..0],由output端口向外输出。第二个计数器输出是Q[7]Q[6]Q[5]Q[4],总线输出信号为Q[7..4]

74390内部含有两片74290电路,742902-5-10进制的计数器,要将74290芯片连接成十进制的计数器,计数器的Q[0]Q[4]输出端信号应分别与1CLKB2CLKB输入端相连接。因74390芯片没有进位输出信号的引脚,用4输入的与门来搭建进位输出信号,当Q[3..0]计数到9时,4输入的与门输出为“1”,产生进位输出信号。进位输出信号一方面送到6输入的与门电路作为其中的一个输入信号,另一方面送到743902CLKA时钟信号输入端,作为十位数计数器的CP信号,从而实现2位十进制计数的功能。

E22 MAX+plusII中实现计数器电路

要在MAX+plusII软件上搭建图E-4所示的电路,必须先启动MAX+plusII软件。启动MAX+plusII软件可看到如图E-5所示的启动界面。

MAX+plusII软件提供两种实现计数器电路的方法,一种是原理图输入法,另一种是文本输入法。图E-4所示的电路是利用原理图输入法建立的电路,下面介绍用原理图输入法建立计数器电路的操作步骤:

1.为本项工程(project)设计建立文件夹

EDA软件中任何一项设计都是一个工程(project),都必须建立一个文件夹来存入与该工程相关的文件。该文件夹将被EDA软件默认为工作库(Work Library)。设本项工程的文件夹为d:/cjz/myproject

2.输入设计项目并存盘

1)运行MAX+plusII,选择File|NEW命令,点击如图E-6a)所示的项目,在弹出如图E-6b)所示的对话框中选择第一项Grapgic Editor file(原理图编辑),然后按下OK键即可打开如图E-7所示的原理图编辑窗口。

2)在原理图编辑窗口的任一位置右击鼠标,在弹出的快捷菜单中选择“Enter Symbol”(输入元件项),如图E-8a)所示;在弹出的对话框中双击“d:/mxaplus2/maxlib/mf”宏功能元件库,找到74390器件,双击将其调入到原理图编辑窗口中,如图E-8b)所示。也可以在“Symbol Name”框中用键盘直接输入所需的元件名74390,点击“ok”即可将74390调入工作界面。

要了解74390电路的内部结构,将鼠标移到74390芯片上,双击74390,屏幕上即可显示如图E-9所示的74390芯片内部电路结构逻辑图。

3)用同样的方法在“Enter Symbol”对话框中的“d:/mxaplus2/maxlib/prim”(基本元件库)中调入与门、非门和输入,输出端口等基本元件,如图E-10所示。

E-10中的“+”虚线是电路连线的指示标记,电路连线的方法是:将鼠标移到要连线电路的端口,鼠标自动变为“+”形状,按住鼠标的左键,并将鼠标拖到连线的另一个端口上,放开左键 ,电路的连接线即可画好。要删除连接好的导线,只要单击该导线,并按 Del 键即可。

输入端口和输出端口也是在d:/mxaplus2/maxlib/prim”(基本元件库)中,只要在前面介绍的对话框中输入“input”和“output”就可以将这两个器件调入工作界面。分别在inputoutputPIN NAME上双击使其变为黑色,就可以对该端口进行更改名字的操作。

在电路中进行信号标记和总线表达方式的方法是:单击要表达成总线的细线使其变成红色,然后单击右键,根据如图E-11所示的方法选择粗线,即可将该导线表达成总线。在总线旁边加信号标记的方法是:点击总线,在出现小黑点的指示符后,从键盘上输入标号名称,电路上标有相同标号的线段可视为连接线段,不必再另外直接连接,图E-4所示电路中的Q[3..0]为总线输出方式,分别代表电路中Q[3]Q[2]Q[1]Q[0]的信号输出端。

在连接电路时,若要移动元件的位置,只要用鼠标单击,选择该元件,这时元件的周围会出现一个红色的方框,用鼠标拖动即可移动元件的位置。

4)连接好电路后,选择FILE|SAVE AS命令,将设计好的文件存到事先准备好的文件夹d:/cjz/myproject下,文件扩展名为gdf

3.将设计文件设置成工程文件(project

为了使MAX+PlusII能对输入的设计项目按设计者的要求进行各项处理,必须将设计项目的文件转换成工程文件,转换工程文件的方法是:先打开设计文件,然后根据如图E-12所示的选择项目,执行FILE|PROJECT|SET PROJECT TO CURRENT FILE命令,即可将当前设计文件转换成工程文件(Project)。

执行该命令后可在标题栏中显示出所设文件的路径,这时要特别注意此路径的指向是否正确。

4.选择目标器件并编译

为了获得与目标器件对应的、精确的时序仿真文件,在对文件进行编译前必须选定最后实现本项目的目标器件,在MAX+PlusII环境下需要选择Altera公司的FPGACPLD器件。在选择器件时可以自己选择某个具体的器件,也可以让编译器在该器件系列内自动选择最适合本项目的器件。具体方法如下:

1)在Assign菜单中选择Device项,将出现Device对话框。如图E-13所示:

2)在Device Family对话框中选择一个器件系列。

3)在Devices列表框中选择某一器件或者选择AutoMAX+PlusII为本项目的设计选择一个合适的器件,然后按OK键。

4)接下来打开编译器窗口。在MAX+PlusII菜单中选择Compiler项,在如图E-14所示的编译器窗口中选择Start按钮开始编译,MAX+PlusII编译器将检查项目是否有错,并对项目进行逻辑综合,然后配置到我们上面所选定的Altera器件中,同时将产生报告文件、编程文件和用于时间仿真用的输出文件。

5.时序仿真

电路设计完成以后,可以利用时序仿真来测试设计项目的正确性,时序仿真的操作步骤是:

1)建立波形文件

选择MAX+PlusII下的菜单命令FILE|NEW,在弹出的对话框中选择“Waveform Editor file”(波形编辑文件)选项,打开如图E-15所示的波形编辑窗口。

2)输入信号节点

在波形编辑窗口中选择菜单命令NODE|Enter Nodes from SNF…,在弹出如图E-16所示的对话框中单击“List”按钮,这时左边的列表框中将列出该设计项目所有的信号节点。如果用户只需观察其中部分的信号波形,可利用“<=”键将需要观察的信号选到右边的列表框中,然后单击“OK”按钮即可。

3)设置波形参量

在为波形编辑框中的信号设定必要的测试电平之前,首先必须设定相关的仿真参数。

例如,在“Option”菜单中取消“Snap to Grid(对齐网格)项的“”号,以便能够在任意位置设置输入电平,或设置输入信号的时钟周期。

4)设置仿真时间

选择File|End Time项,在End Time对话框中选择适当的仿真时间,如20s

5)加上输入信号

利用左边工具栏中的工具为输入信号设定测试电平,工具栏波形编辑窗口的功能如图E-17所示

用鼠标点击选择窗口左边的各个信号名称并拖动,可以改变各信号之间的顺序关系。为了更好地观察信号的波形,将各信号之间的关系调整成如图E-18所示的形式。

然后对信号进行赋值,信号赋值的过程如下:首先点击CLK信号,然后单击左边工具栏中的时钟周期按钮,在弹出如图E-19所示的对话框内将时钟周期设置为200ms

如果窗口中看不到各个时钟周期波形,可以单击窗口左边工具栏中的放大和缩小按钮。接着选择CLR信号,先点击赋“0”值按钮使其赋值为0,再用鼠标将某段波形拖黑,再按左侧的“赋1值”按钮,将其赋值为1。用同样的方法也可设置EN信号的波形。

5)波形文件存盘

选择File|Save as命令将波形文件存盘,如图E-20所示,波形文件的默认扩展名为.scf

6)运行仿真器。

选择如图E-21a)所示的MAX+PlusII主菜单下的仿真项Simulator选项,在弹出如图E-21b)所示的仿真对话框中选择“Start”按钮,即可得到如图E-22所示的仿真结果。

a b

E-21 仿真对话框

观察图E-22所示的分析波形可知计数器能正确工作。图E-22工作界面窗口的右侧有一条竖线是测试参考线,它与鼠标之间的时间差显示在窗口上方的“Interval”窗口中。

打开MAX+PlusII主菜单下的“Timing Analyzer”(时序分析器)项,可以精确测量电路输入和输出波形之间的延时量。

7)包装元件入库

选择菜单File|open,在open对话框中选择“Graphic Editor Files”,重新打开刚才设计好的文件,然后选择“File”菜单的“Create Default Symbol”选项,将当前文件变成一个包装好的单一元件(Symbol,并放置在工程路径指定的文件夹中备用。

E23 MAX+plusII中实现测频时序控制电路的设计

要使频率计能够自动测频,必须在电路中增加一个测频控制电路。测频控制电路能够产生CNT_EN(测频使能)、CLK(计数)和CLR(清零) 三个控制信号,控制频率计顺利的完成测频,计数,锁存和清0的工作。根据控制信号CNT_ENLOCKCLR时序的要求可得,测频时序控制电路应由三个部分组成:42进制计数器74934线-16线译码器74154和两个双与非门构成的RS触发器。测频时序控制电路的逻辑图如图E-23所示。

根据上面介绍的方法可产生如图E24所示的控制信号,分析该信号的时序关系可得电路的设计满足要求。

E24 频率计顶层电路设计

根据频率计的测频原理和实际使用的需要可得,频率计顶层电路应由数码显示器和数据锁存器组成。频率计顶层电路的逻辑图如图E-25所示。

电路中的743748位锁存器,742487BCD译码器,分别用于显示个位与十位的频率计数值,F_IN是待测频率信号。CET_EN是对待测频率脉冲计数的使能信号,高电平时允许计数,低电平时禁止计数;Lock的锁存信号用于将计数器的输出锁存到74374中,锁存器的作用是:当计数器(counter)被清0后,保证数码管仍能稳定的显示频率计所测量到的频率值。图E-26是当待测信号F_IN的周期取为1ms,测频控制信号CLK的周期取为10ms时频率计的仿真波形。根据测频电路原理,测频显示结果应为80,该结果与图E-26给出的数值完全一致。在图E-26中可以看到,测频计数器的计数值随F_IN脉冲信号的输入而不断变化,但由于74374的锁存器功能,两个74248的测频结果L[6..0]H[7..4]始终分别稳定在“3F”和“7F”上。

完成上述的电路设计,并通过时序验证后,将各电路打包入库。

E25设计项目的其他信息和资源配置

最终的电路设计完成后还可以利用MAX+PlusII提供的功能进一步了解设计项目的其他相关信息。

1)选择MAX+PlusII下的菜单项Hierarchy Display可以了解设计项目的设计层次。

2)选择MAX+PlusII下的菜单项Floorplan Editor可以了解资源分配情况。

3)选择MAX+PlusII下的菜单项Timing Analyzer可以了解设计项目的速度/延时特性。

E3 数字逻辑电路的VHDL描述

硬件描述语言HDLHardware Description Language)是一种对数字电路和系统进行性能描述和模拟的语言,利用该语言可以进行不同设计阶段的系统描述。目前,该语言正广泛应用于EDA技术中。

E3 1 VHDL描述的基本结构

MAX+PlusII除了允许电路用原理图输入外,还允许用VHDL描述的文本文件输入。基本的VHDL描述由两部分组成:实体描述(entity)和结构体描述(architecture)

实体描述的基本格式为:

Entity 实体名

PORT(信号名:类别 信号类型;

。。。

信号名:类别 信号类型);

END 实体名;

结构体描述的基本格式:

Architecture 结构体名 of 实体名 IS

>声明部分<

BEGIN

>结构体描述部分<

END 结构体名;

E32 VHDL描述组合逻辑电路和时序逻辑电路

因用VHDL来描述数字频率计的程序很长,下面以与非门电路和译码器电路为例来简单介绍用VHDL来描述组合逻辑电路的方法,以D触发器和计数器为例来介绍用VHDL来描述时序逻辑电路的方法。

1.组合逻辑电路的描述

1)用VHDL描述与非门电路的程序如下:

Library IEEE;--打开IEEE

Use IEEE.STD_LOGIC_1164.all;--打开IEEE库中的STD_LOGIC_1164程序包中的所有内容

Entity nor2 IS --实体描述

Port(a,b:IN STD_LOGIC; --端口描述

Y:OUT STD_LOGIC);

END nor2;

ARCHITECTURE nor2_1 OF nor2 IS--结构体描述

BEGIN

y>=a NOR b;--输入与输出信号之间的行为描述

END nor2_1;

结构体的描述方法有三种:行为(Behavioural Description)描述、数据流(Dataflow Description)描述和结构描述(Structural Description)。在以上对与非门电路的描述中我们采用的是结构体的行为描述方法。与非门电路也可以用数据流的描述方法,具体描述如下:

Library IEEE;

USE STD_LOGIC_1164.all;

ENTITY nor2 IS

PORT(a,b:STD_LOGIC;

y: OUT STD_LOGIC);

END nor2;

ARCHITECTURE nor2_2 of nor2 IS

BEGIN

T2:

Process(a,b)

Variable:comb:STD_LOGIC_VECTOR(1 downto 0);--定义变量

BEGIN

Comb:=a&b;

CASE comb IS—选择语句

When “00”==’1’;

When “01”==’0’;

When “10”==’0’;

When “11”==’0’;

When others==’x’;

END Case;

END process t2;

END nor2_2;

274LS138译码器的VHDL描述如下

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY decoder3_8 IS

PORT(a,b,c,g1,g2a,g2b:IN STD_LOGIC;

y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

END decoder3_8;

ARCHITECTURE rt1 OF decoder3_8 IS

SIGNAL indata:STD_LOGIC_VECTOR(2 Downto 0);

BEGIN

Indata>=c&b&a;

PROCESS(indata,g1,g2a,g2b)

BEGIN

IF(g1=1 AND g2a=0 AND g2b=0) THEN

CASE indata IS

WHEN “000” ==”11111110”;

WHEN “001” ==”11111101”;

WHEN “010” ==”11111011”;

WHEN “011” ==”11110111”;

WHEN “100” ==”11101111”;

WHEN “101” ==”11011111”;

WHEN “110” ==”10111111”;

WHEN “111” ==”01111111”;

WHEN OTHERS==”XXXXXXXX”;

END CASE;

ELSE

Y>=”11111111”;

END IF;

END PROCESS;

END rt1;

2.时序逻辑电路的VHDL描述

1D触发器的VHDL描述如下:

LIBRARY IEEE

USE IEEE.STD_LOGIC_1164.All;

ENTITY dff_logic IS

PORT(d,clk:IN STD_LOGIC;

q:OUT STD_LOGIC);

END dff_logic;

ARCHITECTURE dff1 OF dff_logic IS

Begin

Process(clk)

Begin

IF (clk’event and clk=1)Then

q>=d;--clk上升沿,d赋予q

END IF;

END process;

END dff1;

这里我们用clk’event and clk=1来表示上升沿,也可以用rising_edge(clk)来表示。

2)计数器的VHDL描述如下:

Library IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CNT4 IS

PORT(clk,clr,en:IN STD_LOGIC;

q: OUT STD_LOGIC_VECTOR(3 Downto 0);

END CNT4;

ARCHITECTURE bhv OF CNT4 IS

SIGNAL q1:STD_LOGIC_VECTOR(3 Downto 0);

BEGIN

q>=q1;

process(clk,clr);

BEGIN

IF(clr=’1’) Then

q1>=”0000”;

ELSIF (Clk’Event And clk=’1’) Then

IF(en=’1’) Then

If (q1=”1111”) Then

q1=”0000”;

ELSE

q1>=q1+1;

END IF;

END IF;

END IF;

END process;

END bhv;

E33 MAX+PlusII中的文本输入设计方法

1VHDL文件的创建

可以使用任何的文件编辑器进行VHDL代码的输入,MAX+PlusII软件中提供了VHDL文本编辑器。运行MAX+PlusII软件,选择FILE|NEW命令,在出现的文件类型选择对话框中选择“Text Editor file”选项然后单击”OK”按钮确定。

在打开的文本输入窗口中输入VHDL代码,如图E-27所示:

2.输入完毕后,选择菜单命令FILE|SAVE将弹出”Save as”对话框的Directories目录框中选择已建立的存放该文件的文件夹,并在”File Name”对话框中输入文件名***.vhd。注意:这里的文件名必须与实体相同,文件扩展名为.VHD。

3.选择菜单命令Peoject|Set Project to Current File将当前文件转换为工程文件,以进行后面的编译。

4 . 打开编译器窗口,在MAX+PlusII菜单中选择Compiler项,在弹出的编译器窗口中,选择Interfaces菜单下的VHDL Netlist Reader Settings选项,进行VHDL文本编译版本号的设置,如图E-28所示。

选择MAX+PlusII|COMPILER命令,将出现编译器窗口,如下图所示:

5.单击编译器窗口中的“START”进行编译,若有错,及时排查错误。

6.重复上面介绍的时序仿真步骤即可进行电路设计的时序仿真。

原创粉丝点击