Verilog语言的特点.docx
- 文档编号:16392695
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:30
- 大小:5.51MB
Verilog语言的特点.docx
《Verilog语言的特点.docx》由会员分享,可在线阅读,更多相关《Verilog语言的特点.docx(30页珍藏版)》请在冰点文库上搜索。
Verilog语言的特点
一、第一章
1.几个英文缩写:
PLA(ProgrammableLogicArray)可编程逻辑阵列
FPGA(FieldProgrammableGateArray)现场可编程逻辑门阵列
CPLD(ComplexProgrammableLogicDevice)复杂可编程逻辑器件
CAD(ComputerAidedDesign)计算机辅助设计
CAE(computeraidedengineering)
EDA(electronicdesignautomation)电子设计自动化
2.EDA定义:
以计算机为工作平台,以EDA软件为开发环境,以PLD器件或者ASIC专用集成电路为目标器件设计实现电路系统的一种技术。
3.现代EDA技术的特征【简答】
(1)采用硬件描述语言(HDL)进行设计
HDL语言更适合于描述规模大、功能复杂的数字系统,使设计者在比较抽象的层次上对所设计系统的结构和逻辑功能进行描述。
(2)逻辑综合与优化
目前EDA工具最高只能接受行为级和RTL级描述的HDL文件进行逻辑综合
(3)开放性和标准化
普遍采用标准化和开放性的框架结构,可以与其他的EDA工具一起进行设计工作,实现各种工具的优化组合,集成在一个易于管理的统一环境下,实现资源共享提高工作效率,利于大规模设计。
(4)更完备的库(Library)
在电路设计的各个阶段,EDA系统需要不同层次、不同种类的元器件模型库的支持。
EDA工具要具有更强大的设计能力和更高的设计效率,必须配有丰富的库。
各种模型库的功能和规模是衡量EDA工具优劣的一个标志
4.
基于EDA技术的设计思路(P4~P5)
(1)Top-down设计,即自顶向下的设计
将设计分成几个不同的层次:
系统级、功能级、门级、开关级,按照自上而下的顺序,在不同的层次上对系统进行设计和仿真。
首先从系统设计入手,在顶层进行功能框图的划分和机构设计。
在功能级进行仿真纠错,并用HDL对高层次的系统行为进行描述,然后用综合工具将设计转化为具体门电路网表。
Top-down的设计须经过“设计—验证—修改设计—再验证”的过程,不断反复,直到结果能够实现所要求的功能,并在速度、功耗、价格和可靠性方面实现较为合理的平衡。
(2)Bottom-up设计,即自底向上的设计
设计者选择标准集成电路,或者将各种基本单元做成基本单元库,调用这些基本单元,直到设计出满足需要的系统。
缺点:
效率低、易出错
5.IP核的一些概念(intellectualproperty)
IP核(IP模块):
指功能完整,性能指标可靠,已验证的、可重用的电路功能模块。
分为硬核、固核、软核。
(1)软核:
如ARM。
是指在寄存器级或门级对电路功能用HDL描述,表现为用VHDL等硬件描述语言描述的功能块,但是并不涉及用什么具体电路元件实现这些功能。
(2)硬核:
以版图形式实现的设计模块,基于一定的设计工艺。
供设计的最终阶段产品:
掩膜。
(3)固核:
完成了综合的功能块。
以网表形式提交客户使用。
软核使用灵活,但可预测性差;硬核可靠性高,能确保性能,并和很快投入使用。
6.SOC:
SYSTEMonaCHIP
芯片系统、片上系统。
是指把一个完整的系统集成在一个芯片上;或者说用一个芯片实现一个功能完整的系统。
举例:
由微处理器核(MPUCore),数字信号处理器核(DSPCore),存储器核(RAM/ROM),A/D、D/A核以及USB接口核等构成一个单片系统(SoC)。
7.设计方法的演变(见下图)
8.基于FPGA/CPLD的数字系统设计流程(见下图)
9.综合
将较高层次的设计描述自动转化为较低层次描述的过程。
◆行为综合:
从算法表示、行为描述转换到寄存器传输级(RTL)
◆逻辑综合:
RTL级描述转换到逻辑门级(包括触发器)
◆版图综合或结构综合:
从逻辑门表示转换到版图表示,或转换到PLD器件的配置网表表示
综合器是能自动实现上述转换的软件工具,是能将原理图或HDL语言描述的电路功能转化为具体电路网表的工具
注意VHDL与C的区别。
。
。
。
10.仿真
仿真是对所设计电路的功能的验证。
在设计过程中对整个系统和各个模块进行仿真,在PC上用软件验证功能是否正确,各部分时序配合是否准确。
(1)功能仿真(FunctionSimulation)
不考虑信号延时等因素
(2)时序仿真(TimingSimulation)
选择具体器件并完成布局布线后进行的包含延时的仿真。
11.常用的EDA软件工具
●按公司分:
(1)第三方EDA软件工具,如cadencedesignsystems\mentorgraphics\synopsys
功能强、有良好的兼容性、适合复杂和高效率的设计,但价格昂贵
(2)PLD厂商专用开发工具,如altera\xilinx\lattice
针对性好、提高资源利用率,降低功耗
●按软件功能分:
(1)集成的FPGA/CPLD开发工具
(2)设计输入工具
(3)逻辑综合器
将设计者在EDA平台上编辑输入的HDL、原理图、状态图等,依据给定的硬件结构和约束控制条件进行编译、优化和转换,最终获得门级电路甚至更底层的电路描述网表文件的过程。
专业逻辑综合软件有:
Synopsys的FPGAExpress,fpgacompiler,fpgacompilerII
Synplicity的synplifypro/synplify
Mentor的leonardospectrum
(4)仿真工具
(5)其他设计工具
二、第二章
(1)PLD理论基础(P19)【简答】
任何组合逻辑函数均可化为“与或”表达式,用“与门—或门”二级电路实现,任何时序电路又都可以由组合电路加上存储元件(触发器)构成。
因此,从原理上说,与或阵列加上触发器的结构就可以实现任意的数字逻辑。
(2)CPLD和FPGA的区别
?
?
(3)JTAG边界扫描测试(P42)
为了解决超大规模集成电路(VLSI)的测试问题,自1986年开始,IC领域的专家成立了“联合测试行动组”(JTAG,JointTestActionGroup),并制定出了IEEE1149.1边界扫描测试(BST,BoundaryScanTest)技术规范
这种测试方法提供一个串行扫描路径,它能捕获器件逻辑的内容,以可以测试遵守JTAG规范的器件之间的引脚连接情况,且可以在器件正常工作时捕获功能数据。
测试数据从左边的一个边界单元串行移入,捕获的数据从右边的一个边界扫描单元串行移入,然后同标准数据进行比较,就能够知道芯片性能的好坏。
(4)在系统可编程(ISP)in-systemprogrammable)
指的是对器件、电路板或整个电子系统的逻辑功能可随时进行修改或重构的能力。
三、第三章
1.
QuartusII设计开发流程(P56)
(1)设计输入:
包括原理图输入、HDL文本输入、EDIF网表输入、波形输入
(2)编译:
先根据设计要求设定编译方式和编译策略,如器件的选择,逻辑综合方法的选择。
然后根据设定的参数和策略对设计项目进行网表提取、逻辑综合、器件适配,并产生报告文件、延时信息文件及编程文件,供分析、仿真编程使用。
(3)仿真:
用以验证设计项目的逻辑功能和时序关系是否正确
(4)编程与验证:
用得到的编程文件通过编程电缆配置PLD,加入实际激励,进行在线测试。
2.时序分析
建立时间(tsu):
在触发器记时的时钟信号已在时钟引脚确立之前,通过输入或使能端输入而进入寄存器的数据必须在输入引脚处出现的时间长度
保持时间(th):
在触发器记时的时钟信号已在时钟引脚确立之后,通过输入或使能端输入而进入寄存器的数据必须在输入引脚处出现的时间长度
时钟至输出延时(tco):
时钟信号在触发寄存器的输入引脚发生转换之后,再由寄存器馈送到信号的输出引脚上取得有效输出所需的时间
引脚至引脚延时(tpd):
输入引脚处信号通过组合逻辑进行传输并出现在外部
最大时钟频率(fmax):
在不违反内部tsu和th要求下可以达到的最大频率。
延缓时间:
3.宏模块库
Quartus自带的有Megafunctions\maxplusii\primitives.
Megafunction库是Altera提供的参数化模块库。
从功能上看,可以把Megafunction库中的元器件分为:
算术运算模块(arithmetic)\逻辑门模块(gates)\储存模块(storage)\IO模块(I/O)
四、第四章
1.Verilog语言的特点:
从C发展而来【简答】
(1)既适合于可综合的电路设计,也可胜任电路与系统的仿真
(2)能在多个层次上对所设计的系统加以描述,从开关级、门级、寄存器传输级、行为级,同时该语言不对设计规模加以限制
(3)灵活多样的描述风格,包括行为描述和结构描述,支持混合建模,可以在一个设计中不同模块在不同层次上建模和描述
(4)Verilog的行为描述语句,如条件语句、赋值语句和循环语句等,类似于软件高级语言,便于学习和使用。
(5)内置各种基本逻辑门,可以方便进行门级结构描述,内置各种开关级元件,可以进行开关级建模
(6)易学易用,功能强,可满足各个层次设计人员的需要。
2.Verilog程序的特点:
(1)Verilog程序由模块构成,没搞个模块的内容嵌在module和endmodule两个关键字之间;每个模块实现特定功能
(2)每个模块首先要进行端口定义,并说明输入和输出口,然后对模块的功能进行定义
(3)Verilog程序书写格式自由,一行可以写几个语句,一个语句也可以分多行写
(4)除了endmodule等少数语句外,每个语句最后必须有分号
(5)可以用/*……*/和//……对Verilog程序做注释,以增强程序的可读性和可维护性
3.Verilog模块基本结构:
图4.2
(1)
模块声明
(2)端口定义:
端口类型有三种(输入端口、输出端口、输入输出双向端口)
(3)信号类型声明(输入端口和双向端口不可以用寄存器型)
(4)逻辑功能描述
assign语句:
一般用于组合逻辑赋值
always语句:
既可用于组合电路也可以描述时序电路
元件例化:
调用元件的方法类似于在电路图输入方式下调入图形符号来完成设计,这种方法侧重于电路的结构描述。
/*******************************************************/
module<顶层模块名>(<输入输出端口列表>);
output输出端口列表;//输出端口声明
input输入端口列表;//输入端口声明
/*定义数据,信号的类型,函数声明*/
reg信号名;
//逻辑功能定义
assign<结果信号名>=<表达式>;//使用assign语句定义逻辑功能
//用always块描述逻辑功能
always@(<敏感信号表达式>)
begin
//过程赋值
//if-else,case语句
//while,repeat,for循环语句
//task,function调用
end
//调用其他模块
<调用模块名module_name><例化模块名>(<端口列表port_list>);
//门元件例化
门元件关键字<例化门元件名>(<端口列表port_list>);
endmodule
/****************************************************************/
五、第五章
1.Verilog中的标识符可以是任意一组字母、数字以及符号“$”和“_”(下划线)的组合,但标识符的第一个字符必须是字母或者下划线。
另外,标识符是区分大小写的。
2.Verilog有下面四种基本的逻辑状态。
◆0:
低电平、逻辑0或逻辑非
◆1:
高电平、逻辑1或“真”
◆x或X:
不确定或未知的逻辑状态
◆z或Z:
高阻态
3.Verilog中的变量分为如下两种数据类型:
◆net型◆variable型
◆Net型数据相当于硬件电路中的各种物理连接,其特点是输出的值紧跟输入值的变化而变化。
对连线型有两种驱动方式,一种方式是在结构描述中将其连接到一个门元件或模块的输出端;另一种方式是用持续赋值语句assign对其进行赋值。
wire是最常用的Net型变量,tri跟wire完全一样
◆variable型变量必须放在过程语句(如initial、always)中,通过过程赋值语句赋值;在always、initial等过程块内被赋值的信号也必须定义成variable型。
注意:
variable型变量并不意味着一定对应着硬件上的一个触发器或寄存器等存储元件,在综合器进行综合时,variable型变量会根据具体情况来确定是映射成连线还是映射为触发器或寄存器。
4.在Verilog语言中,用参数parameter来定义符号常量,即用parameter来定义一个标志符代表一个常量。
参数常用来定义时延和变量的宽度。
5.向量
(1)标量与向量宽度为1位的变量称为标量,如果在变量声明中没有指定位宽,则默认为标量(1位)。
(2)在表达式中可任意选中向量中的一位或相邻几位,分别称为位选择和域选择
(3)向量分为:
标量类向量、向量类向量。
标量类支持位选择域选择,后者不支持。
前者用scalared说明,后者用vectored说明。
(4)在数字设计中用reg类型阵列构成的存储器在综合时均被综合成存储器宏模块。
而不是真正的RAM\ROM。
6.运算符
(1)位拼接运算符
(2)可用括号()控制运算符的优先级
六、第六章
1.Verilog行为语句包括:
过程语句、块语句、赋值语句、条件语句、循环语句、编译指示语句
2.过程语句
过程语句包括initial、always。
多数过程模块均从属于此。
两者区别:
在一个模块(module)中,使用initial和always语句的次数是不受限制的。
initial语句常用于仿真中的初始化;initial过程块中的语句仅执行一次,always块内的语句则是不断重复执行的;always语句带触发条件,initial不带;always可综合,initial不可综合;两者过程块中均只对reg型变量赋值
3.块语句
块语句是由块标志符串行块begin-end或并行块fork-join界定的一组语句,当块语句只包含一条语句时,块标志符可以缺省。
4.赋值语句
。
。
。
5.过程赋值语句
过程赋值语句多用于对reg型变量进行赋值。
(1)非阻塞(non_blocking)赋值方式赋值符号为“<=”,如:
b<=a;
(2)阻塞(blocking)赋值方式赋值符号为“=”,如:
b=a;
(3)阻塞赋值与非阻塞赋值的区别:
非阻塞赋值语句右端表达式计算完后并不立即赋给左端,而是同时启动下一条语句继续执行,在进程结束时同时赋给左端变量
(4)使用时应当注意的事项:
1)当用always块描述组合逻辑时,既可以用阻塞赋值,又可以用非阻塞赋值,建议使用阻塞赋值
2)设计时序逻辑电路,尽量使用非阻塞赋值
3)描述锁存器尽量使用非阻塞赋值
4)若在同一个always过程块中既为组合逻辑建模,又为时序逻辑建模,最好使用非阻塞赋值
5)在同一个always过程中,最好不要混合使用阻塞赋值和非阻塞赋值,对同一个变量,不能既进行阻塞赋值,又进行非阻塞赋值
6)不能在两个或两个以上的always过程中对同一个变量赋值
7)仿真时使用$strobe显示非阻塞赋值的变量
在always过程块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为赋值语句是并发执行的。
6.任务与函数的区别
7.顺序执行与并发执行
两个或更多个“always”过程块、“assign”持续赋值语句、实例元件调用等操作都是同时执行的。
在“always”模块内部,其语句如果是非阻塞赋值,也是并发执行的;而如果是阻塞赋值,则语句是按照指定的顺序执行的,语句的书写顺序对程序的执行结果有着直接的影响。
moduleserial2(q,a,clk);
outputq,a;
inputclk;
regq,a;
always@(posedgeclk)
begin
a=~q;
q=~q;
end
endmodule
moduleserial1(q,a,clk);
outputq,a;
inputclk;
regq,a;
always@(posedgeclk)
begin
q=~q;
a=~q;
end
endmodule
七、第七章
1.VerilogHDL是一种能够在多个层级对数字系统进行描述的语言,verilogHDL模型可以是实际电路不同级别的抽象。
这些抽象级别可分为5级
(1)系统级(systemlevel)
(2)算法级(algorithmlevel)
(3)寄存器传输级(RTL,RegisterTransferLevel)
(4)门级(GateLevel)
(5)开关级(Switchlevel)
2.VerilogHDL允许设计者用三种方式来描述逻辑电路:
●结构描述(structural)
●行为描述(behavioural)
●数据流描述(dataflow)
(1)结构描述方式,就是指在设计中,通过调用库中的元件或是以设计好的模块来完成设计实体功能的描述。
(2)行为描述,就是对设计实体的数学模型的描述,其抽象程度远高于结构描述,无须知道具体电路的结构,只要描述清楚输入与输出信号的行为
●可综合的verilog行为描述方式多采用always过程语句实现,这种行为描述既适合于设计时序逻辑电路,也适合于设计组合逻辑电路。
●采用行为描述方式时注意以下几点
1用行为描述方式设计电路,可以降低设计难度。
行为描述只需表示输入与输出之间的关系,不需要包含任何结构方面的信息。
2设计者只需写出源程序,而挑选电路方案的工作由EDA软件自动完成,最终选取的电路的优化程度,往往取决与综合软件的技术水平和器件的支持能力。
可能最终选取得电路方案所耗用的器件资源并非是最少的。
3在电路规模较大或者需要描述复杂的逻辑关系时,应首先考虑用行为描述方式设计电路,如果设计的结果不能满足资源耗用的要求,则应改变描述方式。
(3)数据流描述方式主要使用持续赋值语句,多用于描述组合逻辑电路。
用数据流描述方式设计电路与用传统的逻辑方程设计电路很相似。
3.采用的描述级别越高,设计越容易:
对综合器而言,行为级的描述为综合器的优化提供了更大的空间,较之门级结构描述更能发挥综合器的性能,所以在电路设计中,除非一些关键路径的设计采用门级结构描述外,一般更多地采用行为建模方式。
4.简易微处理器
(1)代码
(2)测试代码
5.同步双端口8*128FIFO
八、第八章
有限状态机(FiniteStateMachine,FSM)是时序电路设计中经常采用的一种方式,尤其适于设计数字系统的控制模块。
优点是:
具有速度快,结构简单,可靠性高等优点,过程明确,适用于控制。
1.状态机可分为两类:
米里型(Mealy)和摩尔型(moore)。
摩尔型状态机的输出只用当前状态的函数,米里型状态机的输出则是当前状态和当前输入的函数
2.状态机有三种表示方法:
状态图(statediagram)、状态表(statetable)、流程图
3.状态机设计中主要包含三个对象:
(1)当前状态,或称为现态(currentstate,cs)
(2)下一个状态,或称为次态(NextState,ns)
(3)输出逻辑(outlogic,ol)
相应的,在用verilog描述有限状态机时,有下面几种描述方式
(1)用三个过程描述:
即现态(cs),次态(ns),输出逻辑(ol)各用一个always过程描述
(2)双过程描述(CS+NS,OL双过程描述):
使用两个always过程来描述有限状态机,一个过程描述现态和次态时序逻辑(CS+NS);另一个过程描述输出逻辑(OL)
(3)双过程描述(CS,NS+OL双过程描述);一个过程用来描述现态(CS);另一个过程描述次态和输出逻辑(NS+OL).
(4)单过程描述:
在但过程描述方式中,将状态机现态。
次态,和输出逻辑(CS+NS+OL)放在一个always过程中进行描述。
4.101序列检测器
(1)三过程
modulefsm1_seq101(clk,clr,x,z);
inputclk,clr,x;outputregz;reg[1:
0]state,next_state;
parameterS0=2'b00,S1=2'b01,S2=2'b11,S3=2'b10;
/*状态编码,采用格雷(Gray)编码方式*/
always@(posedgeclkorposedgeclr)/*该过程定义当前状态*/
beginif(clr)state<=S0;//异步复位,s0为起始状态
elsestate<=next_state;
end
always@(stateorx)/*该过程定义次态*/
begin
case(state)
S0:
beginif(x)next_state<=S1;
elsenext_state<=S0;end
S1:
beginif(x)next_state<=S1;
elsenext_state<=S2;end
S2:
begin
if(x)next_state<=S3;
elsenext_state<=S0;end
S3:
beginif(x)next_state<=S1;
elsenext_state<=S2;end
default:
next_state<=S0;/*default语句*/
endcase
end
always@(state)/*该过程产生输出逻辑*/
begincase(state)
S3:
z=1'b1;
default:
z=1'b0;
endcase
end
endmodule
(2)CS,NS+OL
(3)单过程
modulefsm4_seq101(clk,clr,x,z);
inputclk,clr,x;outputregz;reg[1:
0]state;
parameterS0=2'b00,S1=2'b01,S2=2'b11,S3=2'b10;
/*状态编码,采用格雷(Gray)编码方式*/
always@(posedgeclkorposedgeclr)
Beginif(clr)state<=S0;//异步复位,s0为起始状态
elsecase(state)
S0:
beginif(x)beginstate<=S1;z=1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Verilog 语言 特点