文档库 最新最全的文档下载
当前位置:文档库 › EDA整理

EDA整理

EDA整理
EDA整理

一、EDA的概念

1、定义:电子(系统)设计的自动化,或电子线路或系统的计算机辅助设计。是基于计算机平台的一整套先进的设计电子系统的软件工具。

2、研究对象:电子电路与系统设计的全过程:低频、高频、微波电路、线性与非线性电路、模拟和数字电路、分离电路和集成电路。

3、设计的层次

三个层次:

系统级

电路级

物理实现级。

4.EDA技术发展的三个阶段

CAD阶段(70s):EDA的初级阶段。利用功能有限的计算机进行简单的电路性能分析和预测,PCB的计算机辅助布局布线,如smart work。

CAE阶段(80s):CAD工具逐步完善和发展,将许多单点工具集成在一起使用,EDA阶段(90s):超大规模集成电路时代,集成电路工艺水平达到深亚微米,一个芯片可集成上千万个晶体管,速度达giga bit/s,对电子设计的工具提出了更高的要求,同时也促进了设计工具的发展。出现了众多的ICCAD工具,如CADENCE,MENTOR GRAPHICS,SYNOPSIS等著名公司的EDA软件;中国的熊猫系统等。6、现代EDA 技术的特点

1)采用硬件描述语言(HDL);具有如下突出优点:语言的公开性和可利用性、设计与工艺无关、宽范围的描述能力、便于大规模系统设计和设计的可复用、交流、保存、修改;2)高层综合和优化:开发工具支持系统级的综合和仿真,可更好地支持自上而下的设计方法;

3)并行工程:系统化的、集成化的、并行的产品及相关过程的开发模式,支持多人同时并行进行设计工作。

4)开放性和标准化:EDA工具的相互兼容,有利于资源共享。

二、数字系统的设计思想

系统级设计→功能级描述→功能仿真→门级描述→时序仿真;自上而下逐级细化的设计方法。设计需要经过“设计-验证-修改-再验证”的过程。

三、IP核复用技术与SOC

1、IP复用技术

1)何谓IP复用技术:Intellectual Property(IP)原指知识产权、著作权等,在IC设计领域指具有某种功能的虚拟电路模块。设计系统时使用或反复使用某些IP称IP复用。

2)IP分硬核、固核和软核三种。硬核指固定的版图模块,用户不能修改;软核指用HDL 描述的功能模块,用户可以进行修改;固核介于硬核和软核之间,用户可进行一些修改。2、SOC

1)定义:System On a Chip系统芯片,即把整个系统集成在一片芯片中。

2)硬件和软件技术发展到今天,用户已经可以通过编程设计自己的系统,该系统可以包括微处理器(MCU)、RAM/ROM和逻辑电路等。

四、数字系统的实现方式

1、全定制(full custom)方式:基于版图的设计方法,分通用和专用集成电路设计;

2、半定制(semi custom)设计:是在厂家提供的基本单元的基础上的进行的二次设计,又有一下三种方式:

◆门阵列(gate array):在半成品基础上的设计方式。半成品含有加工好的大量的晶体

管和IO焊盘,但没有布线。布线由用户设计,实现特定的功能。

◆标准单元(standard cell):利用厂家的标准单元进行设计的方式。

◆PLD方式:器件已经制造好,用户自己编程便可实现各种功能。

5、硬件描述语言的不足

电路采用高级的简明结构HDL描述,它意味着放弃了对电路门级实现定义的控制;

由综合工具生成的逻辑实现效果不好;

工具的不同导致综合质量的不同。

第二部分可编程逻辑器件(PLD)

1、ASIC:Application Specific Integrated Circuits,即专用集成电路,是面向特定用户、具有专门用途的芯片,并依此区别于通用芯片.

2、PLD,Programmable Logic Devices,是20世纪70s发展起来的一种新型器件,它的应用和发展不仅简化了电路设计,降低了成本,提高了系统的可靠性,且给数字系统的设计带来了革命性变化。

(二)PLD的分类(p18)

(四)CPLD的结构与特点(EMP7032内部结构图)

CPLD是在PAL、GAL的基础上发展起来的阵列型PLD,具有高密度高速度的优点。从结构上看,CPLD一般包括3种结构:

◆宏单元:主要包括与或阵列、触发器和多路选择器

等电路,可独立配置为组合逻辑或时序逻辑;

◆可编程IO单元:可独立配置为输入、输出和双向

IO;

◆可编程内部连线(PIA):其作用是在各逻辑宏单

元之间以及宏单元和IO之间提供互连网络。

(五)FPGA的结构与特点(FLEX10K10内部结构图)

与CPLD相比,FPGA具有更高的集成度、更强的逻辑功能和更大的灵活性。一般由3部分组成:

?可配置逻辑块(CLB,Configurable Logic Block )

?输入输出模块(IOB)

?可编程互连线(PI)

?片内RAM

(五)FPGA的结构与特点

1、可配置逻辑块(CLB,Configurable Logic Block ):是FPGA的基本结构单元,不仅能实现逻辑函数,还可以配置成RAM等形式。其显著特点是内部有查找表(LUT); 2、输入输出模块(IOB):作用同CPLD;

3、可编程互连线(PI):作用同CPLD,不同点是其布线延时不固定,与路径有关,而CPLD的固定。

4、片内RAM:其读的速度(3-4ns)和写的速度(5ns)非常快,比任何片外解决方案快很多倍,可配置成各种形式。

六)在系统可编程(ISP)与边界扫描(BST)技术

1、在系统可编程:ISP,In System Programmable,指的是对器件、电路板或整个电子系统的逻辑功能可随时进行修改或重构的能力。

2、边界扫描测试(BST)技术:由于器件越来越复杂,表面封装技术和电路板制造技术的进步,使得电路板的变小变密,传统的测试方法很难实现。

(七)PLD产品概述:PLD的发展趋势

?向大规模、高集成度方向发展;

?向低电压、低功耗、低价格的方向发展;

?向高速可预测延时方向发展;

?在PLD内嵌入多种功能模块;

?向模数混合可编程的方向发展。

二、ALTERA可编程逻辑器件

(二)MAX7000系列器件

MAX7000系列内部结构:组成模块:

(1)LAB: Logic Array Block,逻辑阵列块,内含16个宏单元,是器件的主要组成部分;

(2)MC:Macrocell,宏单元,由逻辑阵列、乘积项选择矩阵和可编程触发器组成,用于实现各种逻辑;(宏单元结构图)

(3)EPT:Expander Product Term,扩展乘积项,用于辅助逻辑阵列实现复杂的逻辑;

(4)PIA:Programmable Interconnect Array,可编程连线阵列,把LAB相互连接构成所需的逻辑。这个全局总线是可编程通道,它把器件中任何信号源连到其目的地;MAX系列的PIA 有固定的布线延时,而FLEX系列的布线延时与路径有关;

(5)I/O Control Block:I/O控制块,它允许每个I/O单独地配置为输入、输出和双向输入输出中的一种方式。(图)

(三)FLEX10K系列内部结构:小结

1)FLEX系列器件的特点:

1.容量大,用于实现复杂的电路和系统

2.内部含有ROM/RAM;

3.内部含LUT,尽量采用查表法实现逻辑函数;

4.FLEX器件内部布局布线的延时与路径有关。

2)器件的特性设定

1.电压摆率(Slew-Rate)设定:设置低噪声/高速度方式;

2.漏极开路(Open-Drain)设定:

3.多电压(MultiVolt)I/O接口:FLEX10K的核和外围IO可以工作于不同的电压,其中Vccin

引脚为内核和输入缓冲器提供工作电压,Vccio为I/O引脚提供工作电压。第三部分可编程逻辑器件开发软件

第四部分:基于原理图输入的数字电路(系统)设计

2参数化计数器的使用(lpm_counter)

1)输入信号选择

?data[]:数据输入,用于预置数;

?clock:输入时钟;

?clk_en:输入时钟使能;

?cnt_en:计数器使能;

?updown:加(1)减(0)法选择;

?aclr:异步清零;

?aset:异步置数(A V ALUE);

?aload:异步置数(data[]);

?sclr:同步清零;

?sload:同步置数(data[]);

?sset:同步置数(SV ALUE)。

2)输出信号选择

◆q[]:计数值输出;

◆eq[15..0]:计数值译码输出:

q[]=0 eq[0]=1; q[]=1 eq[1]=1;……q[]=15 eq[15]=1;

3 参数化RAM/ROM的使用(lpm_rom)

设计要点1:存储器输入输出的选择:

INPUTS OUTPUTS

address[] :输入地址q[]:存储器输出

Inclock :输入锁存时钟

Outclock :输出锁存时钟

memenab:使能

(六)小结

(一)基于PLD的数字系统设计的优点

1、系统开发周期短

●设计输入方法灵活多样;

●软件仿真,错误自动定位

●修改方便;

2、系统体积小

3、系统可靠性好

4、系统保密性好

5、价格?可进一步降低价格。

(二)系统的设计思想

1、TOP-DOWN:用于设计性能级:概念-〉产品说明书(性能指标)-〉系统输入输出图(黑匣子);

功能级:系统输入输出图-〉系统框图(功能划分)-〉功能实现-〉仿真-〉网表;

结构级:原理图网表-〉版图布局-〉版图布线-〉后仿真-〉网表

物理级:基本逻辑单元的设计。

重要概念:

●from concept to netlist;

●from concept to layout;

●from concept to product;

2、bottom-up:用于实现基本逻辑单元-〉子功能模块-〉子系统-〉系统

(三)基于MAXPLUS II的系统设计流程

3.1概念-〉功能模块

3.2设计输入

1、原理图输入方法

●最基本的方法;

●充分利用已有基本单元,74XX等;

缺点:不够灵活(虽然编译时可自动消除冗余电路),如32位加法器等。例1:多路选择器

输入信号:in1[3..0],in2[3..0],in3[3..0],d[2..0];

输出信号:q[3..0];

要求:d[]=110时,q[]=in1[]; d[]=101时q[]=in2[];d[]=011时q[]=in3[];

点评:该多路选择器不属于常规电路,没有现成的电路(74XX),用原理图输入非常麻烦,但用文本输入则方便快捷。

SUBDESIGN trymux

(

in1[3..0],in2[3..0],in3[3..0],d[2..0] :INPUT;

q[3..0] :OUTPUT;

)

begin

defaults

q[]=GND;

end defaults;

case d[] is

when B"110"=>q[]=in1[];

when B"101"=>q[]=in2[];

when B"011"=>q[]=in3[];

end case;

end;

例2:地址发生器

输入信号:clk;

输出信号:111->110->101->011->110…;

要求:每来一个时钟脉冲,产生循环地址110、101、011;初始值为111。

点评:1)本地址发生器也不是规范电路,用原理图输入方法非常麻烦,但用AHDL非常方便;2)在AHDL中,状态机是非常好用的工具,可方便地实现各种时间序列,如计数器、序列发生器、地址发生器、波形发生器等。

3.3 设计编译

编译的功能为:逻辑综合、逻辑试配

1、选择一个器件系列,不知具体选用哪个型号时选AUTO;

2、打开Design Doctor,进行错误检测和错误定位;

3、打开保护位:

●选择是否设置保护位;

●选择保留资源(reserved sources)的比例;I/O和逻辑单元一般留10%,使器件留有

修改的余地。

4、选择全局的项目逻辑综合方式:选择是否自动选全局clock、clear、preset、output enable (缺省);

5、打开FLOOR PLAN EDITOR观察试配结果

●可以为某些型号指定引脚号;

●一般不能全部指定,否则影响试配的成功;

3.4 设计仿真

1、编辑输入波形,注意要覆盖设计电路的所有功能;

2、输入/输出信号可以从SNF选择,把有用的、关键的信号选出,不重要的中间波形可不选;

3、信号可选group形式或单个形式;

4、选择前仿真还是后仿真;

5、结果不对时,重新设计电路。

3.5 设计的下载

1、用编程卡+主编程器+适配器下载;

2、用BYTE BLASTER/BIT BLASTER下载(ISP器件);

3.5 通电试验

1、每个VCC 与GND之间要加0.1μF的电容;

2、通电后器件微微发热,是正常现象;

3、学会一些调试手段和方法;

(三)系统设计的要点

1、概念-〉功能模块的能力训练;

2、熟练运用三种设计输入方法,特别是综合运用原理图输入和文本输入方法;文本输入方法中必须掌握组合逻辑电路和状态机的设计方法;

3、熟练掌握以上数字系统设计的各个环节。

第五部分Verilog HDL

(一) 硬件描述语言的概念

?硬件描述语言(Hardware Description Language),是电子系统硬件行为描述、结构描

述、数据流描述的语言。

?硬件描述语言诞生原因:在计算机辅助电子设计的过程中,逻辑图、分立元件作为

整个越来越复杂的电子系统的设计已经不适应,需要一种硬件描述语言来作为EDA 工具的工作语言。

二、V erilog HDL语言介绍

1、V erilog HDL实例

module adder1(cout,sum,a,b,cin,enable);//模块声明output[7:0] sum;//输出声明

output cout;

input[7:0] a,b;//输入声明

input cin,enable;

reg cout;//变量类型声明

reg[7:0] sum;

always@(posedge enable)//always语句

begin

{cout,sum}=a[7:0]+b[7:0]+cin;

end

endmodule

2、Verilog HDL程序基本结构

module<顶层模块名>(输入输出端口列表)

output 端口名1,。。。,端口名N;

input端口名1,。。。,端口名M;

wire //结果信号名

assign

always@(敏感信号表达式)

begin

end

元件例化:and myand(a,b,c);

Endmodule

3、Verilog HDL中逻辑功能的定义

1)用assign语句

Assign F=~((A&B)|(C&D));

2)用元件例化

And myand3(f,a,b,c);

3)用always@语句描述各种逻辑功能

(二) 数据类型及常量、变量

1、常量的表示

8?b11000101

8?hc5

197

6?b1001xx-------------不定值

8?b1010zzzz----------高阻态

Parameter SEL=8, CODE=8?ha3;

2、变量的表示

Wire 数据名1,。。。,数据名n;

Verilog HDL的缺省输入输出信号类型,只能用assign赋值,取值为0,1,x,z。

Reg 数据名1,。。。,数据名n;

Reg[7:0] data;

Reg[7:0] mymem[1023:0]

变量小结:

https://www.wendangku.net/doc/c310762924.html,s型变量:其输出始终根据输入的变化而更新其值的变量,它一般指硬件电路中的各种物理连接。如wire变量。

2.register变量:它对应的是具有状态保持作用的电路元件,如触发器、寄存器等。如reg, integer变量。

3.register与nets变量的根本区别:前者有记忆性,后者无。

(三)运算符及表达式

6、缩减运算符

&:与;~&:与非;|:或;~|:或非;^:异或;^~, ~^:同或

缩减运算符是单目运算符,对单个操作数进行运算。

例若定义reg[3:0] a;

则:b=&a等效为

b=a[0]&a[1]&a[2]&a[3];

又如,若A=5?b11001,则

&A=0;

|A=1;

7、移位运算符

>>:右移<<:左移; 例:若A=5?b11001,则A>>2的值为:5…b00110

8、条件运算符----?:

是一种三目运算符,对三个操作数进行运算。其用法如下:

Signal=condition? true_expression : false_expression

Condition=1时执行true_expression,condition=0时执行false_expression.

9、位拼接运算符:{}

作用:把两个或多个信号的某些位拼接起来。

例如:全加器的描述

input[3:0] ina,inb; ina+inb+cin的进位自动放入

input cin;

output[3:0] sum;

output cout; assign {cout, sum}=ina+inb+cin;

(三)运算符及表达式:运算符的优先级

不清楚优先级时,用扩号()来控制运算的优先级。

(四)赋值语句

1、连续赋值语句(continue assignments)assign为连续赋值语句,它对wire型变量进行赋值。例如:assign c=a&b;这里a b c为wire型变量,a和b信号的任何变化都随时反映到c上来,因此称为连续赋值方式;

2、过程赋值语句(procedural assignments)对寄存器型(reg)变量进行赋值。分为非阻塞赋值语句和阻塞赋值语句。

(1)非阻塞赋值(non-blocking):b<=a;

特点:非阻塞赋值必需在块结束时才完成赋值操作,即b的值不是立刻就变的。

(2)阻塞赋值(blocking):b=a;

特点:赋值语句结束时就完成赋值操作,即b的值在赋值语句结束后立刻就变。

(五)条件语句

1、if –else语句(p144)

语句若为多句,用begin-end括起来。

2、case语句(p145)

要点:敏感表达式一般为一个变量或表达式;一般要列出敏感表达式的所有可能取值,不能穷举时,剩余其它情况执行default语句;

2)casez与casex语句

当case的分支取值每些位为高阻z,那末对这些位不予比较,只比关注别的位的比较结果,这时用casez语句;当case的分支取值每些位为高阻z或不定值x,那末对这些位不予比较,只比关注别的位的比较结果,这时用casex语句;可以用“?”标识x或z,表示无关值.如:

Casez(select)

4?b???1: out=a;

4?b??10: out=b;//优先编码器

4?b?100: out=c;

4?b1000: out=d;

endcase

3、条件语句小结:

1)使用条件语句时,应注意列出所有条件分支,否则编译器认为条件不满足时,会引进一个触发器保持原值;

2)不可能列出所有分支时,if 语句后加else,case语句最后加default语句;

例6.9:

Module burried_ff(c,b,a);

Output c;

Input b, a;

Reg c;

Always @ (a or b)

begin

if ((a==1)&&(b==1)) c=1;

end

endmodule

实现的功能为实现的电路为

例6.10

Module tryand2(c,b,a);

Output c;

Input b, a;

Reg c;

Always @ (a or b)

begin

if (a==1)&&(b==1) c=1;

else c=0;

end

endmodule

实现的功能为实现的电路为

(六)循环语句:for 语句

For(表达式1;表达式2;表达式3)

表达式1:循环变量初值;表达式2:循环结束条件;表达式3:循环变量增值。

Module voter7(pass,vote);

Output pass;

Input [6:0] vote;

Reg [2:0] sum;

Integer i;

Reg pass;

Always@(vote)

Begin

sum=0;

for(i=0;i<=6;i=i+1)

if(vote[i]) sum=sum+1;

if(sum[2]) pass=1;//4人以上为1。

else pass=0;

end

(七)结构说明语句:always@语句

格式:always@(<敏感信号表达式>)

敏感信号表达式:又称敏感表,当该表达式的值改变时,就会执行一遍块内的语句。例如:always@(in0 or in1 or in2 or in3);

always@(posedge clk or negedge clear);上升沿posedge;下降沿negedge

(八)语句的顺序执行与并行执行

always@块内的语句按照指定的顺序执行;always@块语句、assign语句、元件例化语句之间并行执行。

module serial1(q,a,clk); input clk;

output q,a;

reg q,a;

always@(posedge clk) begin

q=~q;

a=~q;

end

endmodule module serial2(q,a,clk); input clk;

output q,a;

reg q,a;

always@(posedge clk) begin

a=~q;

q=~q;

end

endmodule

再如:

module paral1(q,a,clk); input clk;

output q,a;

reg q,a;

always@(posedge clk) begin

a=~q;

end

always@(posedge clk) begin

q=~q;

end

endmodule module paral2(q,a,clk); input clk;

output q,a;

reg q,a;

always@(posedge clk) begin

q=~q;

end

always@(posedge clk) begin

a=~q;

end

endmodule

注:两个模块的功能是一样的!

(九)不同抽象级别的Verilog HDL模型

Verilog HDL的门级描述(p179):调用门原语(primitive)进行电路描述。

Verilog HDL行为级描述(p180):用各种语句进行电路描述。

对于设计者而言,采用的描述级别越高,设计越容易。但对综合器而言,有可能无法将某些抽象级别高的描述转化为电路。因此设计者应了解综合器的性能。

第六部分:用Verilog HDL语言设计数字电路

一、常用组合电路的设计

(一)、基本门电路的设计

1)调用门原语的描述方法

module gate1(f,a,b,c,d); 2)用assign语句描述

input a,b,c,d; module gate1(f,a,b,c,d);

output f; input a,b,c,d;

nand(f1,a,b); output f;

and(f2,b,c,d); assign f=(!(a&b))|(b&c&d);

or(f,f1,f2); endmodule

endmodule

3)用always语句的描述方法

module gate1(f,a,b,c,d);

input a,b,c,d;

output f;

reg f;--------------------注意

always@(a or b or c or d)

begin

f=!(a&b)|(b&c&d);

end

endmodule

(二)、编码译码器

1、3-8译码器

module decoder_38(out,in);

output[7:0] out;

input[2:0] in;

reg[7:0] out;

always@(in)

begin

case(in)--------------------------设计要点:采用case语句。

3'd0:out=8'b11111110;

3'd1:out=8'b11111101;

3'd2:out=8'b11111011;

3'd3:out=8'b11110111;

3'd4:out=8'b11101111;

3'd5:out=8'b11011111;

3'd6:out=8'b10111111;

3'd7:out=8'b01111111;

Endcase------------------------此处加不加default语句??end

endmodule

(二)、编码译码器

2、8-3优先编码器要点:用if-else语句。

module

try83coder(none_on,outcode,a,b,c,d,e,f,g,h); output none_on;

output[2:0] outcode;

input a,b,c,d,e,f,g,h;

reg[3:0] outtemp;

assign {none_on,outcode}=outtemp; always@(a or b or c or d or e or f or g or h) begin if(h) outtemp=4'b0111;

else if(g) outtemp=4'b0110;

else if(f) outtemp=4'b0101;

else if(e) outtemp=4'b0100;

else if(d) outtemp=4'b0011;

else if(c) outtemp=4'b0010;

else if(b) outtemp=4'b0001;

else if(a) outtemp=4'b0000;

else outtemp=4'b1000; end

endmodule

用case语句实现8-3优先编码器module

try83coder(none_on,outcode,a,b,c,d,e,f,g,h); output none_on;

output[2:0] outcode;

input a,b,c,d,e,f,g,h;

reg[3:0] outtemp;

assign {none_on,outcode}=outtemp; always@(a or b or c or d or e or f or g or h) begin casez({a,b,c,d,e,f,g,h})

8?b???????1: outtemp=4'b0111;

8?b??????10 : outtemp=4'b0110;

8?b?????100: outtemp=4'b0101;

8?b????1000: outtemp=4'b0100;

8?b???10000: outtemp=4'b0011;

8?b??100000: outtemp=4'b0010;

8?b?1000000: outtemp=4'b0001;

8?b10000000: outtemp=4'b0000;

default: outtemp=4?b1000;

endcase

end

endmodule

3、BCD-7段码译码器

二、常用时序电路模块的设计

1、D触发器1:基本D触发器Module DFF(Q,D,CLK);

Output Q;

Input D,CLK;

Reg Q;

Always@(posedge CLK)

begin

Q=D;

end

endmodule

2、D触发器2:带置位和清零端Module DFF(Q,D,CLK,CLR,PRESET); Output Q;

Input D,CLK,CLR,PRESET;

Reg Q;

Always@(posedge CLK or posedge PRESET )

begin

If(PRESET) Q=1;

else if(CLR) Q=0;

else Q=D;

end

endmodule

3、数据寄存器(特点:边沿敏感)

Module reg8(data_in,data_out, clk,clr); Input[7:0] data_in;

Input clk,clr;

Output[7:0] data_out;

Reg[7:0] data_out;

Always@ (posedge clk or posedge clr) begin

if(clr) data_out=0;

else data_out=data_in; end

endmodule

4、移位寄存器

Module shifter(din,clk,clr,dout); Input din,clk,clr;

Output[7:0] dout;

Reg[7:0] dout;

Always@(posedge clk)

Begin If(clr) dout=8?b00000000;

else

begin dout=dout>>1; dout[7]=din; end

end

endmodule 5、8位加法/减法计数器

module counter(d,clk,clear,load,up_down,q) input[7:0] d;

input clk,clear,load,up_down;

output[7:0] q;

reg[7:0] cnt;

assign q=cnt;

always@(posedge clk) begin

if(!clear) cnt=8?h00;

else if(load) cnt=d;

else if(up_down) cnt=cnt+1;

else cnt=cnt-1;

end

ednmodule

问题:1、该计数器的特点?2、任意进制计数器的设计?

6、模60BCD码计数器

module

count_60(qout,cout,data,load,reset,clk); output[7:0] qout;

output cout;

input[7:0] data;

input load,clk,reset;

reg[7:0] qout;

always@(posedge clk)

begin

if(reset) qout=0; //同步复位

else if(load) qout=data; //同步置数;

else

begin if(qout[3:0]==9) //模10控制

begin

qout[3:0]=0;

if(qout[7:4]==5) qout[7:4]=0; //模60控制;

else qout[7:4]=qout[7:4]+1;

end

else qout[3:0]=qout[3:0]+1;

end

end

assign cout=(qout==8b?01011001)?1:0; //进位控制;

endmodule

三、有限状态机

1、状态机的概念

moor状态机:输出只与当前状态有关;mealy状态机:输出与当前状态和输入有关;

2、moor状态机的实现:用case语句和else-if语句实现。

module moor_fsm(clk,reset,in,state_out); input clk, reset, in;

output state_out;

reg state_out;

reg[3:0] current, next; parameter ST1=4'b0001, ST2=4'b0010, ST3=4'b0100, ST4=4'b1000;

always@(posedge reset or posedge clk) begin

if(reset) begin state_out=0;

current=ST1;end

else begin

case(current)

ST1:begin state_out=0;

if(in) next=ST2;

else next=ST1;end

ST2:begin state_out=1;

if(in) next=ST3;

else next=ST2;end

ST3:begin state_out=1;

if(in) next=ST4;

else next=ST3;end

ST4:begin state_out=0;

if(in) next=ST1;

else next=ST4;end

default: next=ST1;

endcase

end

current=next;

End

endmodule

4、状态机的应用

?实现各种计数器;

?实现各种序列发生器;

?实现序列检测;

?其它时序电路。

例1:用状态机实现模7计数器模7计数器状态图

module counter_fsm(clk,clear,co,q);

input clk,clear;

output co;

output[3:0] q;

reg co;

reg[3:0] current,next,q;

parameter

ST0=0,ST1=1,ST2=2,ST3=3,ST4=4,ST5=5,S T6=6;

always@(posedge clk)

begin

if(!clear) begin q=0;co=0;next=ST1;end

else begin

case(current)

ST0:begin

q=current;co=0;next=ST1;end

ST1:begin q=current;co=0;next=ST2;end

ST2:begin

q=current;co=0;next=ST3;end

ST3:begin

q=current;co=0;next=ST4;end

ST4:begin

q=current;co=0;next=ST5;end

ST5:begin

q=current;co=0;next=ST6;end

ST6:begin

q=current;co=1;next=ST0;end

default: next=ST0;

endcase

end

current=next; end

endmodule

四、层次化设计的实现

设计思想:分析采用自上而下的方法;实现采用自下而上的方法。

层次化设计的实现方法:

?原理图输入设计方法;

?原理图输入与文本输入混合设计方法;

?文本输入设计方法

(一)原理图输入与文本输入混合设计方法

1、设计要点:

?把系统细分为小的功能模块,直到划分出来的功能模块易于实现;

?功能模块若用原理图输入设计方法方便就用原理图输入法;若用文本输入设计方法方便就用文本输入法;

?顶层用原理图输入设计方法比较方便。

2、文本输入设计生成Symbol的方法:

用File\Create Default Symbol命令

层次化设计实现方法1:复制法

脉冲发生器实例

module pulse2(in,clk,out); //

input in,clk;

output out;

reg out1,out;

pulse1 mypulse1(in,clk,out1); //调用pulse1 pulse1 mypulse2(!out1,clk,out); endmodule

module pulse1(in,clk,out); //被调用模块input in,clk;

output out;

endmodule

五、利用纯Verilog HDL语言单层数字电路或系统的设计

实例1:数字跑表的设计

always@(posedge CLK or posedge CLR) //该块用于对百分秒进行计数,满100,cn1产生一个进位;

always@(posedge cn1 or posedge CLR) //该块对秒进行计数,计满60,cn2产生一个进位;always@(posedge cn2 or posedge CLR) //该块对分钟进行计数,计满60,系统自动清零;特点:1)每个块相当于一个计数器,每个计数器之间巧妙用进位信号连接起来。2)计数值分别在每个模块直接输出。

实例2:频率计的设计:用单层语言描述法

实例3:交通灯控制器

实例4:多功能数字钟

习题:

1.5 IP在EDA技术的应用和发展中的意义是什么?

答:IP核具有规范的接口协议,良好的可移植与可测试性,为系统开发提供了可靠的保证1.11FPGA和ASIC的概念,他们的区别?

答案:FPGA是可编程ASIC。

ASIC:专用集成电路,它是面向专门用途的电路,专门为一个用户设计和制造的。根据一个用户的特定要求,能以低研

制成本,短、交货周期供货的全定制,半定制集成电路。与门阵列等其它ASIC(Application Specific IC)相比,它们

又具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以

及可实时在线检验等优点。

相关文档