基于VerilogHDL语言的可综合性设计

合集下载

Verilog HDL数字设计与综合(第二版) 第五章课后习题答案

Verilog HDL数字设计与综合(第二版) 第五章课后习题答案

1.利用双输入端的nand门,用Verilog编写自己的双输入端的与门、或门和非门,把它们分别命名为my_or,my_and和my_not,并通过激励模块验证这些门的功能。

答:`timescale 1ns/1ns/**************************** ********** my_and *********** ****************************/ module my_and(in1,in2,out); input in1,in2;output out;wire out1;nand a1(out,out1,out1);nand a2(out1,in1,in2); endmodule/**************************** ********** my_or ************ ****************************/ module my_or(in1,in2,out);input in1,in2;output out;wire out1,out2;nand o1(out,out1,out2);nand o2(out1,in1,in1);nand o3(out2,in2,in2); endmodule/**************************** ********** my_not *********** ****************************/ module my_not(in,out);input in;output out;nand n1(out,in,in);endmodule/**************************** ********** test ***************************************/module test;reg a,b;wire and_c,or_c,not_c;initialbegina<=0;b<=0;#10 a<=0;b<=1;#10 a<=1;b<=0;#10 a<=1;b<=1;#10 $stop;endmy_and myand1(a,b,and_c);my_or myor1(a,b,or_c);my_not mynot1(a,not_c); endmodule2.使用上题中完成的my_or,my_and和my_not门构造一个双输入端的xor门,其功能是计算z第5章门级建模41= x’y + x y’,其中x和y为输入,z为输出;编写激励模块对x和y的四种输入组合进行测试仿真。

verilog第二章简单的Verilog模块

verilog第二章简单的Verilog模块
not u1(nsl, sl);
and #1 u2(sela, a, nsl);
and #1 u3(selb, b, sl);
or #1 u4(out, sela, selb);
endmodule
/*一个名为adder的三位加法器的例子。*/
module adder ( count,sum,a,b,cin ); //模块定义开始
// 选择逻辑组合
2.2.2 模块的概念
一个设计是由一个个模块构成的。一个模块的设计如下:
1 模块内容是嵌套在module和endmodule两个语句之间。每个
模块实现特定的功能,模块是可以进行层次嵌套的。正因为
如此,才可以将大型的数字电路设计分割成不同的小模块来
实现特定的功能,最后通过顶层模块调用子模块来实现整体
endmodule
数据流语句
▪这个例子描述了一个三位的加法器。从例子中可以看出整个
Verilog HDL程序是嵌套在module和endmodule声明语句里
的,只出现了一个assign语句。
例SR触发器模块
S
Q
//SR 触发器
module SR_FF (Q, Q_n,S,R);
R
Q_n
output Q, Q_n; //端口声明
input S,R;
nand n1(Q, S,Q_n);
nand n2(Q_n,R,Q);
nand为verilog
中的与非门门级
原语部件
endmodule
模块中的5个部分并没全部出现,只出现在
低层次模块实例化
D触发器模块
//D 触发器
module D_FF (d, clk,clr,q,qb);

第十讲(可综合的组合时序逻辑电路)

第十讲(可综合的组合时序逻辑电路)

1.概述
寄存器传输级(RTL)是按照存储器之间的数据 流描述一个数字电路。RTL级语法是Verilog HDL 语言的一个子集,即是可综合的那部分语法内容; 主要描述数据任何在寄存器之间传输、控制和处 理。用这部分语法去描述实际的电路行为,即为 在RTL建模。
1.概述
Verilog HDL的行为级描述,是面向电路的行为, 比RTL建模更加灵活;它可以通过各种方法描述 电路的行为,不需要有物理电路与之对应;行为 级描述没有严格的代码规范,更多用于高层次抽 象方面的应用;它带有很强的软件设计思想;行 为级的语法包括RTL级语法,覆盖Verilog语法中 的大部分。
rtll级描述语言逻逻辑优化最终的门级电路翻译工艺优化设计约束及与工艺有关的单元库3可综合风格设计的一般原则?使用veriloghdl进行可综合设计时其设计风格直接影响逻辑综合最终产生的门级网表从而影响电路的效率
第四章 现场可编程逻辑器件的应用 设计技术
4.1 Verilog HDL硬件描述语言
可综合风格的组合逻辑电路设计 可综合风格的时序逻辑电路设计
4 .可综合的组合 逻辑电路设计 在用always语句描述组合逻辑时,注意在这种描 述中,对每种输入组合输出都必须有一个值与之 对应,否则会导致锁存器产生。 例如: 4位比较器,给定两个4位输入a、b。如果 a>b,则agtb输出为高电平;如果a<b,则altb输 出为高电平;a=b,则aeqb输出为高电平。
4 .可综合的组合 逻辑电路设计 (3)使用always描述组合逻辑电路: 1)在敏感列表中使用电平敏感事件。 2)为变量赋值要使用阻塞赋值。 3) always块内赋值的变量必须为寄存器变量。 因此尽管组合逻辑不含任何记忆单元,但如果变 量需要在always块内赋值,就必须定义为寄存器 变量。但这并不表示所描述的数字电路系统中包 含有记忆元件。

7-5-基于HDL设计方法教程

7-5-基于HDL设计方法教程

Abstract Models
RTL Models
(Register Transfer Level) always @ (posedge clock) result_register=a+b+carry;
Gate Level Models
(function+structure)
o
给综合工具提供 了可优化的空间
Decoder Add32 Mult
addbit addbit addbit
Module ALU (…); hierarchy Decoder u1 (…); Module Add32 (…); Add32 u2 (…); addbit a1 (…); Module addbit (…); Mult u3 (…); adder a2 (…); and g1 (…); … nor g2 (…); …
1-bit Adder
自顶向下的设计(1 3)
1
2
3
自顶向下的设计(1 3)
CPU CPU 1、整个设计的行为化建模 和功能正确性仿真 2、设计分支主要的部分且 每个部分按RTL行为级建模
PC IR RAM
ALU
(1)仿真每个部分 (2)对整个设计重仿真 CPU
3、按库元件生成每个部分 的结构化模型 (1)每个主要部分重仿真 (2)对整个设计重仿真
Switch Level Models
(function+structure)
Detailed models
集成电路设计方法
– 芯片设计的抽象层次 – 芯片设计描述方式 – Model的设计层次
Verilog 的设计描述方式
行为(Behavioural)描述(RTL级建模属于行为级建模)

EDA基础-1

EDA基础-1
n 系统级 ¨ 用功能模块之间的数据流对系统进行逻辑描述,
¨ 需要时在函数块之间进行调度赋值。
n 功能级/RTL级
¨ 用功能块内部或功能块之间的数据流和控制信号描述系统, ¨ 基于一个已定义的时钟的周期来定义系统模型。
n 结构级/门级 ¨ 用基本单元(primitive)或门级元件(component)的连接来描 述系统以得到更高的精确性,特别是时序方面。 ¨ 在综合时用特定工艺和低层元件将RTL描述映射到门级 网表。
ASIC (Application Specific Integrated Circuit) :专用集成电路 FPGA(Filed programmable Gate Array) :场可编程门阵列
第12页,共33页。
抽象级(Levels of Abstraction)
Verilog既是一种行为描述的语言也是一种结构描述语言。
最长可以是1023个字符
标识符区分大小写,sel和SEL是不同的标识符
模块、端口和实例的名字都是标识符
module MUX2_1 (out, a, b, sel);
output out; input a, b, sel;
Verilog标识符
not not1 (sel_, sel);
and and1 (a1, a, sel_);
硬件描述语言HDL:描述电路硬件结构及电路时序的一种编 程语言。
仿真器:读入HDL并进行解释及执行的一种软件。 抽象级:描述风格的详细程度,如行为级。 自下而上的设计流程:一种先构建底层单元,然后由底层单元构造
更大的系统的设计方法 。
自顶向下的设计流程:一种设计方法,先用高抽象级构造系统, 然后再设计下层单元。
HDL Simulation

verilog hdl数字集成电路设计与原理

verilog hdl数字集成电路设计与原理

verilog hdl数字集成电路设计与原理 数字集成电路是现代电子技术中的重要组成部分,其设计与原理对于电子工程师来说至关重要。

本文将以Verilog HDL为工具,介绍数字集成电路的设计与原理。

一、数字集成电路的概述 数字集成电路是由稳定的电气或电子器件组成的,能够执行数字逻辑操作的电路。

它们以二进制表示,通过与、或、非等逻辑门实现简单或复杂的数字逻辑功能。

数字集成电路的设计与原理是研究数字逻辑电路的基础,是实现数字系统的关键。

二、Verilog HDL的介绍 Verilog HDL是硬件描述语言(Hardware Description Language )的一种,广泛应用于数字电路设计领域。

它不仅可以用于描述数字电路的结构和功能,还可以用于验证和仿真电路的行为。

Verilog HDL 为数字集成电路设计与原理提供了一种高效的工具和方法。

三、数字集成电路的设计步骤 1. 确定需求:在进行数字集成电路的设计之前,首先要明确电路的需求和功能。

例如,设计一个加法器电路,需要明确输入和输出的位数,以及所需的运算规则。

2. 设计逻辑功能:根据电路的需求和功能,使用Verilog HDL描述电路的逻辑功能。

例如,使用逻辑门和寄存器等基本组件,以及运算、比较和控制逻辑来实现增加和溢出处理。

3. 进行仿真:使用Verilog HDL工具进行电路的仿真,验证设计的正确性。

通过使用测试输入数据,观察输出是否符合预期结果。

如果有错误或问题,需要进行调试和修改。

4. 进行综合:将Verilog HDL代码综合为门级电路。

综合工具会将Verilog HDL描述的逻辑电路转化为实际的门级电路,包括各种逻辑门、寄存器和其他组件。

5. 进行布局布线:将综合后的电路进行物理设计,包括电路的布局和布线。

布局布线工具将综合后的门级电路映射到实际器件上,并进行连线等工作,以满足电路的时序和功耗要求。

6. 进行验证:验证设计的正确性和性能。

FPGAverilog课程设计报告

FPGAverilog课程设计报告

FPGA verilog课程设计报告一、教学目标本课程旨在通过FPGA Verilog的学习,让学生掌握数字电路设计的基本原理和方法,学会使用Verilog硬件描述语言进行数字电路设计和仿真。

具体目标如下:1.理解FPGA的基本原理和结构。

2.掌握Verilog语言的基本语法和编程技巧。

3.熟悉数字电路的设计方法和流程。

4.能够使用Verilog语言编写简单的数字电路模块。

5.能够进行FPGA的配置和编程。

6.能够使用FPGA开发工具进行数字电路的仿真和测试。

情感态度价值观目标:1.培养学生的创新意识和团队合作精神。

2.增强学生对新技术的敏感性和学习兴趣。

3.培养学生对工程实践的热爱和责任感。

二、教学内容本课程的教学内容主要包括FPGA的基本原理和结构、Verilog语言的基本语法和编程技巧、数字电路的设计方法和流程。

具体安排如下:第1-2课时:FPGA的基本原理和结构1.FPGA的定义和发展历程。

2.FPGA的内部结构和组成。

3.FPGA的配置和编程方法。

第3-4课时:Verilog语言的基本语法和编程技巧1.Verilog语言的基本数据类型和操作符。

2.Verilog语言的逻辑表达式和语句。

3.Verilog语言的模块结构和参数传递。

第5-6课时:数字电路的设计方法和流程1.数字电路的设计原则和技巧。

2.数字电路的设计流程和步骤。

3.数字电路的仿真和测试方法。

三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。

1.讲授法:通过讲解和演示,让学生掌握FPGA和Verilog的基本知识和技巧。

2.案例分析法:通过分析具体的数字电路设计案例,让学生熟悉设计方法和流程。

3.实验法:通过动手实验,让学生亲手配置FPGA、编写Verilog代码并进行仿真测试,提高学生的实际操作能力。

四、教学资源1.教材:《FPGA Verilog设计与实践》。

2.参考书:《数字电路与FPGA设计入门》、《Verilog HDL入门与提高》。

Verilog HDL数字设计与综合(第二版) 第四章课后习题答案

Verilog HDL数字设计与综合(第二版) 第四章课后习题答案

1.模块的基本组成部分有哪些?哪几个部分必须出现?答:模块的基本组成部分包括:关键字module ,模块名、端口列表、端口声明和可选的参数声明,模块内部还有5个基本组成部分是:变量声明、数据流语句、低层模块实例、行为语句块以及任务和函数。

在模块的所有组成部分中,只有module 、模块名和endmodule 必须出现,其他部分都是可选的,用户可以根据设计的需要随意选用。

2.一个不与外部环境交互的模块是否有端口?模块定义中是否有端口列表?答:严格意义上讲,一个模块如果与外界没有任何交互,那么自然是不需要有而且是不可能有端口的。

在没有端口的情况下,端口列表自然也是不存在的。

3.一个4位并行移位寄存器的I/O 引脚如下图所示。

写出模块shift_reg 的定义,只需写出端口列表和端口定义,不必写出模块的内部结构。

答:模块代码如下:module shift_reg(clock,reg_in,reg_out);input clock;input [3:0] reg_in;output [3:0] reg_out;//********XXXXXXX**************endmodule4.定义一个顶层模块stimulus ,在其中声明reg 变量REG_IN (4位)和CLK (1位)以及wire变量REG_OUT (4位)。

在其中调用(实例引用)模块shift_reg ,实例名为sr1,使用顺序端口连接。

答:模块代码如下module stimulus();reg CLOCK;reg [3:0] REG_IN;wire [3:0] REG_OUT;//*******connect in order************shift_reg sr1(CLOCK,REG_IN,REG_OUT);endmodulereg_in [3:0] clockreg_out [3:0]32Verilog HDL数字设计与综合(第二版)5.将上题的端口连接方法改为命名连接。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Verilog HDL语言的可综合性设计1 引言逻辑综合带来了数字设计行业的革命,有效地提高了生产率,减少了设计周期时间。

在手动转换设计的年代,设计过程受到诸多限制,结更容易带来人为的错误。

而一个小小的错误就导致整个模块需进行重新设计,设计转换工作占去了整个设计周期的大部分时间,验证工作进行困难,设计技术无法重用等等。

而自动逻辑综合工具的出现,突破了上述种种限制,使得设计者从繁琐的转换工作中解脱出来,将更多的时间用于验证和优化,不仅保证了功能的实现,而且有利于提高性能。

可见,综合在逻辑设计中具有举足轻重的作用。

2 综合的概念及其过程2.1 逻辑综合概述综合就是在给定标准元件库和一定的设计约束条件下,把用语言描述的电路模型转换成门级网表的过程。

要完成一次综合过程,必须包含三要素:RTL级描述、约束条件和工艺库。

2.2 RTL级描述RTL级描述是以规定设计中采用各种寄存器形式为特征,然后在寄存器之间插入组合逻辑,其可以用如图1所示的“寄存器和云图”方式来表示。

图1 RTL级描述2.3 约束条件为了控制优化输出和映射工艺要用约束,它为优化和映射试图满足的工艺约束提供了目标,并且它们控制设计的结构实现方式。

目前综合工具中可用的约束包括面积、速度、功耗和可测性约束,未来我们或许会看到对封装的约束和对布图的约束等,但是,目前的最普遍的约束是按面积和按时间的约束。

时钟限制条件规定时钟的工作频率,面积限制条件规定该设计将花的最大面积。

综合工具将试图用各种可能的规则和算法尽可能地满足这些条件。

2.4 工艺库按照所希望的逻辑行为功能和有关的约束建立设计的网表时,工艺库持有综合工具必须的全部信息。

工艺库含有允许综合进程为建立设计做正确选择的全部信息,工艺库不仅含有ASIC单元的逻辑功能,而且还有该单元的面积、单元输入到输出的定时关系、有关单元扇出的某种限制和对单元所需的定时检查。

2.5 综合过程逻辑综合工具将RTL级描述转换成门级描述一般有3个步骤:(1)将RTL级描述转换成未优化的门级布尔描述(通常为原型门,如与门、或门、触发器和锁存器),这一步称为“展平”。

(2)执行优化算法,化简布尔方程,产生一个优化的布尔方程描述,这一步称为“优化”。

(3)按半导体工艺要求,采用相应的工艺库,把优化的布尔描述映射成实际的逻辑电路,这一步称为“设计实现”。

具体的综合过程如图2所示:图2 综合过程2.6 综合涉及的两个领域从代码到门级电路的“翻译”是通过综合工具内部的映射机制实现的,其中涉及的两个领域之间的映射机制如图3所示。

图3 综合涉及的两个领域因为不同综合工具的映射机制可能不同,所以相同的程序在不同综合工具下可能得到不同的电路。

3 可综合模型的设计Verilog HDL这种硬件描述语言允许用户在不同的抽象层次上对电路进行建模,这些层次从门级、寄存器传输级、行为级直至算法级。

因此,同一个电路就可以有多种不同的描述方式,但不是每一种描述都是可综合的。

图4中使用Verilog HDL以不同的方式描述了同一个电路。

某综合系统支持对方式A和方式B的综合,但可能不支持对方式C的综合。

而方式D可能根本就不可综合。

这一局限给设计者造成了严重障碍,因为设计者不仅需要理解Verilog HDL,而且还必须理解特定综合系统的建模方式,才能编写出可综合的模型。

图4 同样的行为,不同的建模方式3.1 可综合模型的结构如果程序只用于仿真,那么几乎所有的语法和编程语句都可以使用。

但如果程序是用于硬件实现,那么我们就必须保证程序的可综合性,即所编写的程序能被综合器转化为相应的电路结构。

不可综合的HDL 语句在用综合工具综合时将被忽略或者报错。

作为设计者,应该对可综合模型的结构有所了解。

虽然不同的综合工具对Verilog HDL语法结构的支持不尽相同,但Verilog HDL中某些典型的结构是很明确地被所有综合工具支持或不支持的。

(1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。

(2)所有综合工具都不支持的结构:time,defparam,$finish,fork,join,initial,delays,UDP,wait。

(3)有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。

因此,要编写出可综合的模型,应尽量采用所有综合工具都支持的结构来描述,这样才能保证设计的正确性和缩短设计周期。

3.2 建立可综合模型的原则要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点:(1)不使用初始化语句。

(2)不使用带有延时的描述。

(3)不使用循环次数不确定的循环语句,如forever、while等。

(4)不使用用户自定义原语(UDP元件)。

(5)尽量使用同步方式设计电路。

(6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。

(7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。

(8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。

(9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。

对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。

但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。

(10)不能在一个以上的always过程块中对同一个变量赋值。

而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。

(11)如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。

(12)避免混合使用上升沿和下降沿触发的触发器。

(13)同一个变量的赋值不能受多个时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。

(14)避免在case语句的分支项中使用x值或z值。

4 综合结果的验证对综合后的网表进行功能验证的方法是将在设计模型的仿真过程中使用的那组激励拿来对网表进行仿真,将仿真结果保存在结果文件中,然后比较两者的仿真结果是否完全相同。

Verilog HDL模型综合成网表后,通过验证来确保综合出的网表的功能与设计初衷一致是很重要的,因为综合系统可能对Verilog HDL代码作了某些与设计初衷不一致的假设或解释。

下面介绍一些由于综合时采用了不同的解释而导致功能不一致的情况。

4.1 赋值语句中的延迟综合系统通常会忽略模型中的延迟,从而导致综合出的网表的仿真结果与设计模型的仿真结果存在相位差,或者在某一时刻的结果与原来设计的完全不一致。

如下面的模型:P = #3 ‘b1;if(Q)P = #5 ‘b0;…设计者的意图是在Q为真的情况下,P的值先为1,延迟5ns后其值再变为0。

而综合系统由于忽略了延迟,当Q为真时,P始终为0,中间不会出现跳变,导致与原设计不符。

4.2 事件表综合系统在综合时常常会忽略某个always语句的事件表,而按照always语句块中的语句产生相应的硬件。

如下面的模型:always @(Read)P = Read&Write;综合出的网表是对Read信号和Write信号都敏感的一个语门,Read和Write中任何一个发生变化,都会执行语句“P = Read&Write”,使P发生变化。

而原模型仿真出来的结果则是P只受Read信号的触发,只有Read信号发生变化,才会执行语句“P = Read&Write”。

4.3 锁存器综合系统推导出锁存器的规则是:(1)变量在条件语句(if或case语句)中被赋值。

(2)变量未在条件语句的所有分支中都被赋值。

(3)在always语句的多次调用之间需要保存变量值。

必须同时满足以上3个条件,才会将变量推导成锁存器。

在设计时应明确是否需要将某一个变量推导成锁存器,如果需要,就必须按照上面3条规则来编写代码。

否则就会导致综合前后功能的不一致。

4.4 阻塞与非阻塞建议在时序逻辑建模时使用非阻塞式赋值。

因为对于阻塞式赋值来说,赋值语句的顺序对最后的综合结果有着直接的影响,设计者稍不留意就会使综合结果与设计本意大相径庭。

而如果采用非阻塞式赋值,则可以不考虑赋值语句的排列顺序,只需将其连接关系描述清楚即可。

如下面的模型:always @ (posedge clkA) //Label AwA… = DataOut; //读DataOut的值always @ (posedge clkA) //Label AwBDataOut <= …; //采用非阻塞式赋值如果将上述模型改为阻塞式赋值“DataOut = …”,按照程序中的书写顺序模拟这些always语句,在clkA上升沿处,always语句AwA读取了DataOut的当前值,然后always语句AwB再向DataOut赋新值。

如果颠倒了这两条always语句的顺序(或仿真器选择重新排定这两条always语句的执行顺序),那么先执行always语句AwB,导致零时间内将新值赋给DataOut,随后always语句AwA读取的便是更新后的DataOut 值。

这看起来是由于always语句都可以执行时,向DataOut的赋值是在零时间内发生并完成的。

因此根据先执行哪一条always语句,AwA中读取的DataOut值可能是其原值,也可能是其新值。

使用非阻塞赋值就可以消除这种仿真行为的依赖性,这时,读取DataOut发生在当前时刻,而在当前仿真周期结束时(即所有的变量读取都已完成)才将新值赋给DataOut。

这样上述模型的行为不再受always语句执行顺序的影响。

因此,在某条always语句内对变量赋值而在该always语句外读取变量,那么赋值语句应是非阻塞式赋值。

5 综合工具使用简介常见的综合工具有Synopsys公司的FPGA Express和FPGA Compiler II、Synplicity公司的Synplify 以及Mentor Graphics公司的Leonardo Spectrum等,MAX+plusII中也集成了综合器。

相关文档
最新文档