《数字集成电路设计工具及使用.ppt》由会员分享,可在线阅读,更多相关《数字集成电路设计工具及使用.ppt(133页珍藏版)》请在三一办公上搜索。
1、数字集成电路设计工具及使用,数字集成电路设计分为前端设计和后端设计两部分,前端设计指综合及综合之前的相关设计步骤,而后端设计指综合之后直到Tape out的相关步骤。典型的前端设计流程如下图所示:,前端设计,数字IC设计流程,后端设计,设计输入:以电路图或HDL语言的形式形成电路文件;输入的文件经过编译后,可以形成对电路逻辑模型的标准描述;逻辑仿真(功能仿真):对如上形成的逻辑描述加入输入测试信号,检查输出信号是否满足设计要求;在此没有考虑任何时间关系,只是检测逻辑是否有错;,数字集成电路的设计流程,系统分割(设计综合):采用特定的设计方法分解实现电路模型,得到电路实际采用的逻辑单元及其相互连
2、接形式;在GA设计时,电路会分割为2-3输入的逻辑单元,在FPGA设计中,分割为4输入逻辑单元,而采用CPLD设计时,则分割为更大的逻辑单元。,数字集成电路的设计流程,前仿真:采用综合出的电路结构,对每个逻辑单元添加上对应的时间延迟信息;在此基础上进行仿真,检测电路是否存在逻辑或时序错误;电路的布局,定位与布线:对于通过前仿真的电路系统,从全局到局部,进行每个单元的定位以及相关的连线安排;,数字集成电路的设计流程,电路参数提取:根据连线的具体长度和负载程度,提取每一根连线的电阻/电容参数,得到相应的时间延迟信息;后仿真:将提取的连线参数代入到电路中,在此基础上进行仿真,检测电路是否存在逻辑或时
3、序错误;,数字集成电路的设计流程,在逻辑设计阶段,针对设计的输入编辑、仿真和综合过程,需要使用必要的软件工具进行支持;这种设计工具主要可以分为两类:一类是由PLD的制造商推出的针对特定器件的设计工具;另一类是由专业软件公司推出的针对特定用途的设计工具。,数字集成电路的设计工具,由PLD的制造商推出,例如Altera公司的Maxplus II,Quartus II,Xilinx公司的ISE等。这类工具的优点是从设计输入直到器件下载,设计的全过程都能在一个工具中实现,使用非常简单方便;缺点是该类工具以器件综合为目标,对于不能实现直接综合的电路的行为设计不能支持。,针对特定器件的设计工具,由专业的工
4、具设计者推出,例如Synplicity公司的综合工具Synplify,Model Technology公司的仿真工具ModelSim等。这类工具通常专业性比较强,包容性好,可以最大限度地兼容HDL语言的各种描述,适应从抽象到具体的各种设计方式。缺点是其专用性比较强,使用的简便性不及第一类。,针对特定用途的设计工具,仿真工具ModelSim综合工具Synplify 设计工具Maxplus II,Quartus,关于设计工具的简单介绍,电路仿真的要点,使用输入向量对电路模型进行测试;仿真失败表明该模型存在错误(不能工作);仿真成功不能证明该模型正确!仿真可以从高级别到低级别分为很多层次,高级别比较
5、抽象,低级别比较详细。,行为仿真(功能仿真),对于行为模型进行仿真:根据输入的变化或指定的时间,开始一个仿真循环,执行所有进程;每个进程启动执行到其中止为止;模型中的有效信号更新时,会产生一个事件;如果在本仿真循环中有信号产生了事件,则仿真将重新执行一遍;仿真循环的执行时间为delta时间。,结构仿真(前仿真),对于电路逻辑结构模型进行仿真:结构仿真可以根据使用器件的情况,为不同的元件添加不同的延迟时间,所以能够在一定程度上反映出电路的时间性能,并分析影响电路速度的关键因素,便于对电路进行修改。,电路仿真(后仿真),对于布局布线后的电路模型进行仿真:电路仿真可以根据器件的布局和连接情况,通过从
6、电路中提取连线物理参数,估算出连线延迟,从而为电路中信号的传递附加传输延迟,能够更准确地反映出电路的时间性能,便于进行电路的时序设计修改。,数字电路设计与Verilog,硬件描述HDL(Hardware Description Language)语言,是一种用形式化方法来描述数字电路和系统的语言。HDL语言既包含一些高层程序设计语言的结构形式,同时也兼顾描述硬件线路连接的具体构件。通过使用结构级或行为级描述可以在不同的抽象层次描述设计,主要包括三个领域五个抽象层次。HDL语言是并发的,即具有在同一时刻执行多任务的能力。HDL语言有时序的概念。,什么是硬件描述语言HDL,具有特殊结构能够对硬件逻
7、辑电路的功能进行描述的一种高级编程语言这种特殊结构能够:描述电路的连接描述电路的功能在不同抽象级上描述电路描述电路的时序表达具有并行性HDL主要有两种:Verilog和VHDLVerilog起源于C语言,因此非常类似于C语言,容易掌握VHDL起源于ADA语言,格式严谨,不易学习。VHDL出现较晚,但标准化早。IEEE 1706-1985标准。,为什么使用HDL,使用HDL描述设计具有下列优点:设计在高层次进行,与具体实现无关设计开发更加容易早在设计期间就能发现问题能够自动的将高级描述映射到具体工艺实现在具体实现时才做出某些决定HDL具有更大的灵活性可重用可以选择工具及生产厂HDL能够利用先进的
8、软件更快的输入易于管理,Verilog的历史,Verilog HDL是在1983年由GDA(GateWay Design Automation)公司的Phil Moorby所创。Phi Moorby后来成为Verilog-XL的主要设计者和Cadence公司的第一个合伙人。在19841985年间,Moorby设计出了第一个Verilog-XL的仿真器。1986年,Moorby提出了用于快速门级仿真的XL算法。1990年,Cadence公司收购了GDA公司1991年,Cadence公司公开发表Verilog语言,成立了OVI(Open Verilog International)组织来负责Ver
9、ilog HDL语言的发展。1995年制定了Verilog HDL的IEEE标准,即IEEE1364。,Verilog的用途,Verilog的主要应用包括:ASIC和FPGA工程师编写可综合的RTL代码高抽象级系统仿真进行系统结构开发测试工程师用于编写各种层次的测试程序用于ASIC和FPGA单元或更高层次的模块的模型开发,抽象级(Levels of Abstraction),Verilog既是一种行为描述的语言也是一种结构描述语言。Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别包括:,系统说明-设计文档/算法描述RTL/功能级-Verilog门级/结构级-Verilog版图/
10、物理级-几何图形,行为综合综合前仿真逻辑综合综合后仿真版图,抽象级(Levels of Abstraction),在抽象级上需要进行折衷,系统说明-设计文档/算术描述RTL/功能级-Verilog门级/结构级-Verilog版图/物理级-几何图形,详细程度 低 高,输入/仿真速度 高 低,抽象级(Levels of Abstraction),Verilog可以在三种抽象级上进行描述,行为级 用功能块之间的数据流对系统进行描述 在需要时在函数块之间进行调度赋值。RTL级/功能级用功能块内部或功能块之间的数据流和控制信号描述系统基于一个已定义的时钟的周期来定义系统模型结构级/门级用基本单元(pri
11、mitive)或低层元件(component)的连接来描述系统以得到更高的精确性,特别是时序方面。在综合时用特定工艺和低层元件将RTL描述映射到门级网表,抽象级(Levels of Abstraction),设计工程师在不同的设计阶段采用不同的抽象级首先在行为级描述各功能块,以降低描述难度,提高仿真速度。在综合前将各功能模块进行RTL级描述。用于综合的库中的大多数单元采用结构级描述。在本教程中的结构级描述部分将对结构级(门级)描述进行更详细的说明。Verilog还有一定的晶体管级描述能力及算法级描述能力,行为级和RTL级,MUX的行为可以描述为:只要信号a或b或sel发生变化,如果sel为0则
12、选择a输出;否则选择b输出。,module muxtwo(out,a,b,sel);input a,b,sel;output out;reg out;always(sel or a or b)if(!sel)out=a;else out=b;endmodule,这个行为级RTL描述不处理X和Z状态输入,并且没有延时。在行为级模型中,逻辑功能描述采用高级语言结构,如,while,wait,if,case。Testbench(test fixture)通常采用行为级描述。所有行为级结构在testbench描述中都可以采用。RTL模型中数据流都是基于时钟的。任何时钟元件在时钟沿处的行为都要精确描述。
13、RTL级描述是行为级Verilog的子集。,仅需一种语言,Verilog的一个主要特点是可应用于各种抽象级。建模时可采用门级和RTL级混合描述,在开发testfixture时可以采用行为级描述。,结构级描述,结构级Verilog适合开发小规模元件,如ASIC和FPGA的单元Verilog内部带有描述基本逻辑功能的基本单元(primitive),如and门。用户可以定义自己的基本单元UDP(User Defined Privitives)综合产生的结果网表通常是结构级的。用户可以用结构级描述粘接(glue)逻辑。下面是MUX的结构级描述,采用Verilog基本单元(门)描述。描述中含有传输延时。
14、,module twomux(out,a,b,sl);input a,b,sl;output out;not u1(nsl,sl);and#1 u2(sela,a,nsl);and#1 u3(selb,b,sl);or#2 u4(out,sela,selb);endmodule,综合不支持!,Verilog HDL建模概述,数字电路=线+器件线:器件管教之间的物理连接器件:组合逻辑(如与或非门等)和时序逻辑器件(如寄存器、锁存器、RAM等)Verilog HDL建模:使用HDL语言对数字电路的两种基本要素的特性及相互之间的关系进行描述。,2.1 建模,Verilog HDL建模概述,是Veri
15、log的基本描述单元,用于描述某个设计的功能或结构及其与其他模块通信的外部端口概念上可等同一个器件,如通用器件(与门、三态门等)或通用宏单元(计数器、ALU、CPU)等。模块可被另一个模块调用一个电路设计可由多个模块组合而成。,2.2 模块(module),Verilog HDL建模概述,例1.加法器,2.2 模块(module),简单实例,Verilog HDL建模概述,例2.比较器,2.2 模块(module),简单实例,Verilog HDL建模概述,例3.三态门驱动器,2.2 模块(module),简单实例,Verilog HDL建模概述,模块内容位于module和endmodule两
16、个语句之间模块包括接口描述部分和逻辑功能描述部分。可与实际器件相类比每个模块要进行端口定义,并说明输入、输出口,然后对模块的功能进行逻辑描述(测试模块例外)书写格式自由,一行可以写几个语句,一个语句可以分几行写。除endmodule与局外,每个语句后面需要有分号表示该语句结束,2.3 模块的结构,Verilog HDL建模概述,2.4 模块语法,Verilog HDL建模概述,一个模块用一个文件模块名与文件名要同名一行一句语句信号方向按输入、输出、双向顺序描述尽量采用参数化,提高设计的重用,2.5 书写语法建议,Verilog HDL建模概述,信号在电路中传输会有传播延时,如线延时、器件延时等
17、时延就是对延时特性的HDL描述所有时延都必须根据时间单位进行定义,定义方式为在文件头添加如下语句:是Verilog HDL提供的预编译处理命令,1ns表示时间单位是1ns,100ps表示时间精度是100ps。,2.6 时延,Verilog HDL建模概述,表示B信号在2个时间单位后得到A信号的值。,2.6 时延,时延举例,Verilog HDL建模概述,结构化描述方式数据流描述方式行为描述方式,2.7 三种建模方式,Verilog HDL建模概述,通过对电路结构的描述来建模,即通过对器件的调用(HDL概念称为“例化”),并使用线来连接各器件的描述方式器件包括:Verilog的内置门(如与门an
18、d,异或门xor等),也可以是用户的一个设计反映了一个设计的层次结构,2.7 三种建模方式,结构化描述方式,Verilog HDL建模概述,2.7 三种建模方式,结构化描述方式例1:一位全加器,Verilog HDL建模概述,1.两个异或门、两个与门、一个或门2.S1、T1、T2是门与门之间的连线3.纯结构的建模方式4.Xor、and、or为Verilog内置的门器件,Xor表明调用一个内置的异或门,器件名称xor,代码实例化名X1;括号内的S1,A,B表明该器件管脚的实际连接线的名称,其中A、B是输入,S1是输出。其他相同,一位全加器代码,Verilog HDL建模概述,结构化描述方式例2:
19、两位全加器,两位全加器结构示意框图,Verilog HDL建模概述,两位全加器代码,Verilog HDL建模概述,通过对数据流在设计中的具体行为的描述来建模使用连续赋值语句。借助于Verilog提供的一些运算符,如按位逻辑运算,逻辑与(&),逻辑或(|)等,2.7 三种建模方式,数据流描述方式,Verilog HDL建模概述,2.7 三种建模方式,数据流描述方式例1:一位全加器,Verilog HDL建模概述,一位全加器代码,注意:各assign语句之间是并行执行的,即各语句的执行与语句之间的顺序无关。如上,当A有变化时,S1、T2将同时变化,S1的变化又会造成Sum和T1的同时变化。,Ve
20、rilog HDL建模概述,采用对信号行为级的描述(不是结构级的描述)的方法来建模一般采用initial块语句或always块语句通常采用行为级的运算符如加法(+),减法(-)运算符等,2.7 三种建模方式,行为描述方式,Verilog HDL建模概述,一位全加器行为建模注意:只有寄存器类型的信号才可以在always和initial语句中进行赋值,类型定义通过reg语句实现Always语句一直重复执行,由敏感表中的变量触发在begin和end之间的语句顺序执行,属于串行语句,行为描述方式例1,Verilog HDL建模概述,一位全加器行为建模采用更高级(更趋于行为级)的描述方式,即直接采用“+
21、”来描述加法Cout,Sun表述将两个信号拼接成一个宽度更长的信号。,行为描述方式例2,Verilog HDL建模概述,实际设计中往往是多种设计模式的混合。一般,对顶层设计采用结构描述方式;对底层模块,可采用数据流、行为级或两者的结合如上面的两位全加器,对顶层模块(Four_bit_FA)采用结构描述方式进行“例化”,对底层模块(FA)可采用结构描述、数据流描述或行为描述。,2.7 三种建模方式,混合设计描述,Verilog HDL基本语法,标识符注释格式数字值集合数据类型运算符和表达式条件语句Case语句,1、标识符,定义:标识符(identifier)用于定义模块名、端口名、信号等。可以是
22、一组字母、数字、$符号和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划线。另外,标识符区分大小写。例:Count COUNT/与Count不同 R56_68 FIVE$关键字,Verilog中的保留字。注意:只有小写的关键字才是保留字,书写规范建议,用有意义的有效的名字,如Sum、CPU_addr等用下划线区分词采用一些前缀或后缀,时钟采用Clk前缀:Clk_50,Clk_CPU 低电平采用_n后缀:Enable_n统一一定的缩写,如全局复位信号Rst同一信号在不同层次保持一致性,如同一时钟信号必须在各模块中保持一致自定义的标识符不能与保留字同名参数采用大写,如SIZE,2、注
23、释,Verilog中有两种注释的方式,一种是一“/*”符号开始,以“*/”符号结束,在两个符号之间的语句都是注释语句,因此可以扩展到多行。如:以上n各语句都是注释语句另一种是以“/”开头的语句,它表示以/开始到本行的结束都属于注释语句,3、格式,Verilog HDL是区分大小写的,即大小写不同的标识符是不同的Verilog书写格式自由,一条语句可多行书写;一行可写多个语句空白(新行、制表符、空格)没有特殊意义如 与 是一样的一个语句一行采用空四格的TAB键进行缩进,4、数字值集合,值的集合常量(整型、实型、字符型)变量,4.1值集合,四种基本的值类型0:逻辑0或“假”1:逻辑1或“真”X:未
24、知值Z:高阻四种值得解释内置于语言中与门的输入或表达式中的“z”的值通常解释为“x”X值与z值不区分大小写,及0 x1z和0X1Z相同,4.2常量,整型、实型、字符串型下划线符号“_”可随意用在整数或实数中,用来提高易读性。注:下划线不能作为首字符。整型书写格式:简单的十进制数格式;基数格式字符串型:双引号内的字符系列。,整型-简单的十进制格式,带有一个可选的“+”或“-”操作符的数字序列例如:32 十进制数32-15 十进制数-15,整型-基数表示法(一),格式:sizebase valueSize定义以位计的常量的位长;base为o或O(表示八进制),b或B(表示二进制),d或D(表示十进
25、制),h或H(表示十六进制)之一;value是基于base的值的数字序列。值x和z以及十六进制中的a到f不区分大小写,整型-基数表示法(二),合法例子:非法例子:,整型-基数表示法(三),注意:x(或z)在十六进制中代表4位x(或z),在八进制中代表3位x(或z),在二进制中代表1位x(或z)。整型数的长度定义是可选的,如没有定义长度,数的长度为相应值中定义的位数,如:如果定义的长度比常量制定的长度长,通常在左边填0补位。但是如果数最左边一位为“x”或“z”,就相应地用x或z在左边补位。如:如果长度定义的要小,最左边的位相应地被截断。如:,字符串型,双引号内的字符序列。字符串不能分成多行书写。
26、例:整数型常量是可以综合的,而实数型和字符串型常量都是不可综合的,5、数据类型,线网类型(net type)寄存器类型(reg type),5.1数据类型-线网类型(net type),常用wire定义用于对结构化器件之间的物理连线建模代表物理连接线,不存储逻辑值,必须由器件驱动,通常由Assign进行赋值,如:当一个wire类型的信号没有被驱动时,缺省值为z(高阻)信号非有定义数据类型时,缺省为wire类型语法:,5.2数据类型-寄存器类型(reg type),Reg是最常用的寄存器类型,用于对存储单元的描述,如D触发器,ROM。在某种触发机制下分配一个值,在分配下一个值之前保留原值Reg类
27、型的变量,不一定是存储单元,如在always语句中进行描述的必须用reg类型的变量。语法:例:,5.2数据类型-寄存器类型(reg type),建模举例:用寄存器类型构建两位的D触发器:用寄存器数组类型来建立存储器的模型,如对2个8位的RAM建模如下:存储单元必须一个一个地赋值,6、运算符,关系运算符算术运算符逻辑运算符按位逻辑运算符条件运算符连接运算符移位运算符,6.1运算符-算术运算符,常用算术运算符:加法(二元运算符):“+”减法(二元运算符):“-”乘法(二元运算符):“*”除法(二元运算符):“/”求余(二元运算符):“%”,6.2运算符-关系运算符(一),包括:大于=不小于=不大于
28、=等于=全等!=不等!=不全等结果为True(1)或False(0)。如果操作数中有一位为x或z,那么结果为x,6.2运算符-关系运算符(二),例:如果操作数长度不同,长度较短的操作数在左方填0补齐。例:逻辑相等与不等的比较中,只要一个操作数含有x或z,比较结果为未知(x)。如:,6.3运算符-逻辑运算符(一),包括:&逻辑与|逻辑或!逻辑非语法:(表达式1)逻辑运算符(表达式2)运算结果为0或1,例:,6.3运算符-逻辑运算符(二),逻辑与(&)的真值表:逻辑或(|)的真值表:,6.4运算符-按位逻辑运算符(一),包括:一元非,相当于非门运算&二元与,相当于与门运算|二元或,相当于或门运算二
29、元异或,相当于异或门运算,二元异或非,即同或,相当于同或门运算在输入操作数的对应位上按位操作,产生向量结果。,6.4运算符-按位逻辑运算符(二),按位逻辑运算符真值表:,6.2运算符-按位逻辑运算符(三),例:如果操作数长度不相等,长度较小的操作数在最左端填0补位。例如:,6.5运算符-条件运算符,根据条件表达式的值选择表达式语法:cond_expr?expr1:expr2;如果cond_expr为真(1),选项expr1,如果cond_expr为假(0),选择expr2.如果cond_expr为x或z,结果是按以下逻辑expr1和expr2按位操作的值:0与0得1,1与1得1,其余情况为x例
30、:,6.6运算符-连接运算符,将小表达式合并形成大表达式语法:expr1,expr2,exprN例:,6.7运算符:移位运算符,右移位运算符语法:an 或 a2的值为5b00110 A2的值为5b00100,7、If_else(条件)语句,用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。三种形式:,If_else语句的三种形式,说明:,1.if语句后面都有表达式,一般为逻辑表达式或关系表达式。0、x、z按“假”处理,1按“真”处理。2.注意分号的使用,if、else合起来是一条语句,else不能单独使用3.if、else后面如果有多个操作语句,必须用begin
31、和end关键字包含起来组成为一个复合语句,例,说明:,4.允许一定形式的表达式简写,例如:5.if语句的嵌套注意if和else的配对关系,else总是与它上面最近的if配对。可以用begin、end块语句来确定配对关系。例:,例:使用begin和end块语句来确定if和else的配对关系,8、case语句,多分支选择语句三种形式:1.case(表达式)endcase2.casez(表达式)endcase3.casex(表达式)endcase语法:,说明:,1.case括号中的表达式称为控制表达式,分支项中的表达式称为分支表达式。2.当控制表达式的值与分支表达式的值项相等时,就执行分支表达式后面
32、的语句;如果所有的分支表达式的值都没有与控制表达式的值相匹配,就执行default后面的语句3.default项可有可无,一个case语句只能有一个default项4.每个分支表达式的值必须互不相同,否则会出现矛盾。5.所有表达式值的位宽必须相等。6.case、casez、casex的区别,case为全等比较,casez对表达式中出现z的相应位不予比较,casex对表达式中出现x、z的相应位均不予比较,见真值表,三种建模方式详解,结构建模数据流建模行为建模,1、结构建模(一),描述语句主要是实例化语句实例化的对象主要是PLD厂家提供的宏单元和设计者已有的设计,结构建模(二)实例化语句,语法:m
33、odule_name instance_name(port_associations);端口关联可通过位置或名称关联,但两者不能混用通过位置关联(port_expr1,port_expr2,port_exprn);通过名称关联(.PortName(portexpr1),.PortName(port_expr2),.PortName(port_exprn);,结构建模(二)实例化语句,例1:.module and(C,A,B);input A,B;output C;.and A1(T3,A,B);/实例化时采用位置关联,T3对应输出端口C,A对应A,B对应B。and A2(/实例化时采用名字关联
34、,.C是and器件的端口,其与信号T3相连.C(T3),.A(A),.B(B);,结构建模(二)实例化语句,port_expr可以是以下的任何类型:1)标识符(reg或net)如.C(T3),T3为wire型标识符。2)位选择,如.C(D0),C端口接到D信号的第0bit位。3)部分选择,如.Bus(Din5:4)。4)上述类型的合并,如.Addr(A1,A21:0。5)表达式(只适用于输入端口),如.A(wire Zire=0)。建议:在例化的端口映射中请采用名字关联,这样,当被调用的模块管脚改变时不易出错。,结构建模(二)实例化语句,端口悬空的处理:在我们的实例化中,可能有些管脚没用到,可
35、在映射中采用空白处理,如:DFF d1(.Q(QS),.Qbar(),.Data(D),.Preset(),/该管脚悬空.Clock(CK);/名称对应方式。对输入管脚悬空的,则该管脚输入为高阻Z,输出管脚被悬空的,该输出管脚废弃不用。,当端口和局部端口表达式的长度不同时,端口通过无符号数的右对齐或截断方式进行匹配例如:module Child(Pba,Ppy);input5:0Pba;output2:0Ppy;.endmodulemodule Top;wire1:2Bdl;wire2:6M p r;Child C1(Bdl,Mpr);endmodule,在对Child模块的实例中,Bdl2连
36、接到Pba0,Bdl1连接到Pba1,余下的输入端口Pba5、Pba4和Pba3悬空,因此为高阻态z。与之相似,Mpr6连接到Ppy0,Mpr5连接到Ppy1,Mpr4连接到Ppy2。参见下图:,结构化建模具体实例,对一个数字系统的设计,我们采用的是自顶向下的设计方式。可把系统划分成几个功能模块,每个功能模块再划分成下一层的子模块。每个模块的设计对应一个module,一个module设计成一个verilog HDL程序文件。因此,对一个系统的顶层模块,我们采用结构化的设计,即顶层模块分别调用了各个功能模块。下面以一个实例(一个频率计数器系统)说明如何用HDL进行系统设计。在该系统中,我们划分成
37、如下三个部分:2输入与门模块,LED显示模块,4位计数器模块。系统的层次描述如下:,顶层模块CNT_BCD,文件名CNT_BCD.v,该模块调用了低层模块AND2、CNT_4b和HEX2LED。,2、数据流建模(一),主要描述方式为持续性赋值语句,数据流建模(二)持续性赋值语句,也称连续赋值语句(continuous assignment)对线网类型变量赋值语法:assign net_type=expression;主要用于组合逻辑的建模执行过程:只要右边表达式任一个变量有变化,表达式立即被计算,计算的结果立即赋给左边信号为并行执行语句,与书写顺序无关,数据流建模(二)持续性赋值语句,举例:,
38、例:2选1多路选择器,阻塞(blocking)赋值方式赋值符号为“=”,如:b=a;语句结束时立即完成赋值操作,即b的值在该条件语句结束后立即改变同一个块语句中,如果有多个阻塞赋值语句,那么前面的赋值操作没完成之前,后面的语句就不能被执行,仿佛被阻塞(blocking)了一样。,阻塞性过程赋值:在其后所有语句执行前执行,即在下一语句执行前该 赋值语句完成执行如:always(A or B or Cin)Begin:CARRY_OUTReg T1,T2,T3T1=A&BT2=B&CinT3=A&CinCout=(T1|T2)|T3end,使用内部延时控制的阻塞性过程赋值语句如:initialbe
39、ginClr=#5 0/在0时刻执行,5个时间单位后被赋值Clr=#4 1/4个时间单位后被赋值为1Clr=#10 0/10个时间单位后被赋值为0end,非阻塞(non-blocking)赋值方式赋值符号为“=”,如:b=a;非阻塞赋值在整个过程块结束时才完成赋值操作,即b的值并不是立即就改变的,非阻塞性过程赋值中,对目标的赋值是非阻塞的,即为时间并行的,所有的赋值均在同一时刻发生如:initialbeginClr=#5 1/在第5个时间单位被赋值为1Clr=#4 0/在第4个时间单位被赋值为0Clr=#10 0/在第10个时间单位被赋值为0end,赋值语句阻塞赋值与非阻塞赋值,例1:非阻塞赋
40、值 例2:阻塞赋值,赋值语句阻塞赋值与非阻塞赋值,例1仿真结果例2仿真结果,赋值语句阻塞赋值与非阻塞赋值,例1综合结果例2综合结果,赋值语句阻塞赋值与非阻塞赋值,六点建议:时序电路建模时,用非阻塞赋值锁存器电路建模时,用非阻塞赋值用always块建立组合逻辑模型时,用阻塞赋值在同一个always块中建立时序和组合逻辑电路时,用非阻塞赋值在同一个always块中不要既用阻塞赋值又用非阻塞赋值不要在一个以上的always块中为同一变量赋值,3、行为建模,通过对设计的行为的描述来实现对设计建模一般采用过程语句(initial语句和always语句),行为建模initial语句,语法1:initial
41、 语句1;语法2:只执行一次常用于产生激励信号或寄存器变量的初始化仿真语句,不能被综合,行为建模initial语句,例:用initial语句产生激励信号,行为建模always语句,语法1:always 时序控制 语句1;语法2:always语句不断重复执行,即一直检测时序控制条件,一旦满足,其后的语句被执行一次,行为建模always语句,例:时序控制通常为敏感信号表达式,当表达式中变量的值改变时,其后的语句被执行一次,多个表达式之间用“or”连接,此时的语法为:敏感信号一般为两种类型:边沿敏感型和电平敏感型,两者一般不要在一个always语句中同时使用,行为建模always语句,边沿触发的al
42、ways常常描述时序行为,综合后生成的电路为寄存器加门级组合逻辑电平触发的always常常描述组合逻辑行为,综合后生成的电路为门级组合逻辑或带锁存器的组合逻辑例:,行为建模posedge和negedge关键字,对时序电路的建模(时序电路由时钟边沿触发)posedge表示上升沿;negedge表示下降沿注意同步、异步控制信号的描述方法,行为建模posedge和negedge关键字,例1:同步置位、同步清零的计数器,行为建模posedge和negedge关键字,上例中,敏感信号表达式中没有列出输入信号,load和reset,因为它们为同步控制信号,在时钟的上升沿才检测这些信号,行为建模posedg
43、e和negedge关键字,例2:异步控制信号的描述方式,行为建模posedge和negedge关键字,注意块内的逻辑描述要与敏感信号表达式信号中的有效电平一致,如下错误的描述:,其他语法,参数定义:parameter编译预处理宏定义define文件包含处理include时间尺度timescale,2、参数定义:parameter,用parameter来定义一个标识符代表一个常量,称为符号常量,采用符号常量可提高程序的可读性和可维护性语法:表达式必须为常数表达式参数型常数常用于定义延迟时间和变量宽度,参数定义:parameter,例:,3、编译预处理命令,和C语言的编译预处理功能类似Verilo
44、g HDL的编译系统通常先对这些特殊的命令进行“预处理”,然后将处理的结果和源程序进行通常的编译处理(综合)预处理命令以“”开头,“”位于“tab”键的上面,编译预处理:宏定义define,用一个指定的标识符(即宏名称)来代表一个字符串。语法:起作用是指定用标识符signal代替string这个字符串,在编译预处理时,把程序中该命令与后所有的signal都替换成string作用:以一个简单的名字代替一个长的字符串;用一个有含义的名字来代替没有含义的数字或符号,编译预处理:宏定义define,说明:宏名建议用大写,以与变量名相区别define命令可以在模块内,也可以在模块外引用已定义的宏名时,必
45、须在宏名前加上符号“”对宏定义不做语法检查,即使错误也照样带入宏定义不是Verilog语句,行末不用加分号,否则会连分号一起进行置换进行宏定义时,可以使用已定义的宏名宏名和宏定义必须在同一行声明,可以包含注释行。,编译预处理:文件包含处理include,一个源文件将另外一个源文件的全部内容包含进来语法:include“文件名”编译预处理时,将file2.v的内容全部复制插入到include“file1.v”命令出现的地方,编译预处理:文件包含处理include,例:文件aaa.v文件bbb.v,编译预处理:文件包含处理include,说明:一个include只能指定一个被包含的文件,如果要包含n个文件,要使用n个include命令include命令可以出现在源程序的任何地方,文件名可以是绝对路径,也可以是相对路径可以将多个include命令写在一行include命令可以嵌套行末没有分号,编译预处理:时间尺度timescale,用来说明跟在该命令后面的模块的时间单位和时间精度语法:时间单位用来定义模块中仿真时间和延迟时间的基准单位时间精度用来声明模块的仿真时间的精确程度,用来对延迟时间单位进行取整时间单位和时间精度的数字必须是整数,有效数字为1,10,100,单位为s,ms,us,ns,ps,fs,编译预处理:时间尺度timescale,例:该例中,取整后实际的延迟时间为16ns,
链接地址:https://www.31ppt.com/p-6295011.html