《verilog_hdl教程_硬件描述语言_课件_PPT.ppt》由会员分享,可在线阅读,更多相关《verilog_hdl教程_硬件描述语言_课件_PPT.ppt(187页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、硬件描述语言及通信系统设计硬件描述语言及通信系统设计 相关安排相关安排8个学时理论(个学时理论(40分)分)+24学时设计(学时设计(60分)分)内容:内容:1 Verilog HDL 4学时学时 (20分)分)2 VHDL 4学时学时 (20分)分)3 设计设计24学时学时 4个课题(每个个课题(每个15分)分)1引言引言 嵌入式?嵌入式?顾名思义,嵌入式系统指的是嵌入到系统内部的计算机顾名思义,嵌入式系统指的是嵌入到系统内部的计算机系统,是面向特定应用设计的专用计算机系统。系统,是面向特定应用设计的专用计算机系统。早期的嵌入式系统一般是以通用处理器或单片机为核心,早期的嵌入式系统一般是以通
2、用处理器或单片机为核心,在外围电路中加入存储器、功率驱动器、通信接口、显示接在外围电路中加入存储器、功率驱动器、通信接口、显示接口、人机输入接口等外围接口,再加上应用软件,有些还加口、人机输入接口等外围接口,再加上应用软件,有些还加上了嵌入式操作系统,从而构成完整的系统。上了嵌入式操作系统,从而构成完整的系统。随着微电子技术的进步,随着微电子技术的进步,SoC已经在很多应用中取代了已经在很多应用中取代了传统的以单片机为中心的架构,将很多外设和存储器集成在传统的以单片机为中心的架构,将很多外设和存储器集成在一个芯片中,使系统的功耗和体积越来越小,而功能却越来一个芯片中,使系统的功耗和体积越来越小
3、,而功能却越来越强。越强。引言引言 FPGA在嵌入式系统中的应用前景在嵌入式系统中的应用前景 现在的现在的MCU和和DSP的功能已经非常强了,但处理能力的功能已经非常强了,但处理能力毕竟还是有限的,厂商在推出一款器件的时候,其性能就已毕竟还是有限的,厂商在推出一款器件的时候,其性能就已经固定了。当某一款产品的性能无法满足要求时,就必须选经固定了。当某一款产品的性能无法满足要求时,就必须选用新的处理器,常常意味着重新进行用新的处理器,常常意味着重新进行PCB的设计,重新进行的设计,重新进行各项软硬件的验证测试,所导致的工程资源的浪费是非常惊各项软硬件的验证测试,所导致的工程资源的浪费是非常惊人的
4、。人的。FPGA是通过逻辑组合来实现各种功能的器件,几乎可是通过逻辑组合来实现各种功能的器件,几乎可以进行任何类型的处理;对于常用的数字信号处理,有些以进行任何类型的处理;对于常用的数字信号处理,有些FPGA专门还提供了专门还提供了DSP模块来实现加速;模块来实现加速;FPGA的并行处理架构非常适合图像处理、数字信号处理的并行处理架构非常适合图像处理、数字信号处理等运算密集的应用;用某款芯片无法满足要求时,还可以通等运算密集的应用;用某款芯片无法满足要求时,还可以通过使用同样封装且容量更大的过使用同样封装且容量更大的FPGA芯片来提供更高的处理芯片来提供更高的处理能力,这样就可以保持管脚的兼容
5、性,从而无须对能力,这样就可以保持管脚的兼容性,从而无须对PCB板进板进行修改;行修改;FPGA的可编程性使设计工程师可以随时对设计进行修改,的可编程性使设计工程师可以随时对设计进行修改,即使在产品部署后也能对设计错误进行更正;即使在产品部署后也能对设计错误进行更正;FPGA不但可以完成不但可以完成MCU和和DSP的各种功能,还可以根的各种功能,还可以根据需要生成新的功能,或者调配各项功能之间的资源配比,据需要生成新的功能,或者调配各项功能之间的资源配比,使同一个硬件电路设计可以满足不同的应用需求;使同一个硬件电路设计可以满足不同的应用需求;FPGA还可以利用现成的处理器内核,直接生成软处理器
6、,还可以利用现成的处理器内核,直接生成软处理器,并在其上运行操作系统。并在其上运行操作系统。由于由于FPGA是通过逻辑组合来实现功能的,所以其功耗和是通过逻辑组合来实现功能的,所以其功耗和成本一般高于成本一般高于MCU和和DSP。在几年前,。在几年前,FPGA给人的印象一给人的印象一直是高高在上的价格,除了通信、航天、军工、工业等少数直是高高在上的价格,除了通信、航天、军工、工业等少数行业,行业,FPGA更多地是在扮演原型验证开发的角色,在消费更多地是在扮演原型验证开发的角色,在消费类电子等更广大的市场中迟迟未打开局面。类电子等更广大的市场中迟迟未打开局面。随着随着Xilinx和和Altera
7、竞相采用新的制造工艺,其单位门电竞相采用新的制造工艺,其单位门电路的价格下降得比路的价格下降得比ASIC还要快,价格在很多应用中已不再还要快,价格在很多应用中已不再是障碍了。特别是在一些需要特定功能的应用中,设计师在是障碍了。特别是在一些需要特定功能的应用中,设计师在市场上找不到可以满足要求的器件,他们就必须自己开发市场上找不到可以满足要求的器件,他们就必须自己开发ASIC芯片,或者用芯片,或者用FPGA进行设计。但开发进行设计。但开发ASIC的成本和的成本和风险在不断提高,甚至超过了未来的收益,用风险在不断提高,甚至超过了未来的收益,用FPGA就成了就成了一个非常实际的选择一个非常实际的选择
8、。VHDL 还是还是 Verilog HDL 硬件描述语言硬件描述语言HDL是一种用形式化方法描述数字电路和是一种用形式化方法描述数字电路和系统的语言。利用这种语言,数字电路系统的设计可以从上系统的语言。利用这种语言,数字电路系统的设计可以从上层到下层(从抽象到具体)逐层描述自己的设计思想,用一层到下层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后,利用系列分层次的模块来表示极其复杂的数字系统。然后,利用电子设计自动化(电子设计自动化(EDA)工具,逐层进行仿真验证,再把其)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具
9、转换到中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路门级电路网表。接下去,再用专用集成电路ASIC或现场可或现场可编程门阵列编程门阵列FPGA自动布局布线工具,把网表转换为要实现自动布局布线工具,把网表转换为要实现的具体电路布线结构。的具体电路布线结构。目前,这种高层次目前,这种高层次(high-level-design)的方法已被广泛的方法已被广泛采用。据统计,目前在美国硅谷约有采用。据统计,目前在美国硅谷约有90%以上的以上的ASIC和和FPGA采用硬件描述语言进行设计采用硬件描述语言进行设计 。20世纪世纪80年代后期,年代后期,VHDL和和V
10、erilog HDL语言适应了语言适应了这种趋势的要求,先后成为这种趋势的要求,先后成为IEEE标准。标准。现在,随着系统级现在,随着系统级FPGA以及系统芯片的出现,软硬件以及系统芯片的出现,软硬件协调设计和系统设计变得越来越重要。传统意义上的硬件设协调设计和系统设计变得越来越重要。传统意义上的硬件设计越来越倾向于与系统设计和软件设计结合。硬件描述语言计越来越倾向于与系统设计和软件设计结合。硬件描述语言为适应新的情况,迅速发展,出现了很多新的硬件描述语言,为适应新的情况,迅速发展,出现了很多新的硬件描述语言,像像Superlog、SystemC、Cynlib C+等等。等等。如何选择:如何选
11、择:对于特大型的系统级数字电路设计,对于特大型的系统级数字电路设计,VHDL是较为合适的。是较为合适的。对于一个系统芯片设计项目,可以采用的方案有多种:对于一个系统芯片设计项目,可以采用的方案有多种:最传统的办法是,在系统级采用最传统的办法是,在系统级采用VHDL,在软件级采用,在软件级采用C语言,在实现级采用语言,在实现级采用Verilog。目前,。目前,VHDL与与Verilog的的互操作性已经逐步走向标准化,但软件与硬件的协调设计还互操作性已经逐步走向标准化,但软件与硬件的协调设计还是一个很具挑战性的工作,因为软件越来越成为是一个很具挑战性的工作,因为软件越来越成为SOC设计的设计的关键
12、。该方案的特点是:风险小,集成难度大,与原有方法关键。该方案的特点是:风险小,集成难度大,与原有方法完全兼容,有现成的开发工具;但工具集成由开发者自行负完全兼容,有现成的开发工具;但工具集成由开发者自行负责完成。责完成。108 8 循环语句循环语句9 9 结构说明语句结构说明语句10 10 编译预处理语句编译预处理语句11 11 语句的顺序执行与并行执行语句的顺序执行与并行执行12 12 不同抽象级别的不同抽象级别的VerilogVerilog HDL HDL模型模型13 13 设计技巧设计技巧1 1 引言引言2 2 VerilogVerilog HDL HDL基本结构基本结构3 3 数据类型
13、及常量、变量数据类型及常量、变量4 4 运算符及表达式运算符及表达式5 5 语句语句6 6 赋值语句和块语句赋值语句和块语句7 7 条件语句条件语句硬件描述语言硬件描述语言VerilogVerilog HDL HDL11 1 1 引言引言一、什么是一、什么是VerilogVerilog HDL HDL二、二、VerilogVerilog HDL HDL的发展历史的发展历史三、不同层次的三、不同层次的VerilogVerilog HDL HDL抽象抽象 四、四、VerilogVerilog HDL HDL的特点的特点内容概要内容概要12 1 1 引言引言一、一、什么是什么是Verilog HDL
14、Verilog HDL是是一一种种用用于于数数字字逻逻辑辑电电路路设设计计的的硬硬件件描描述述语语言言(Hradware Description Language),可可以以用用来来进进行行数字电路的仿真验证、时序分析、逻辑综合。数字电路的仿真验证、时序分析、逻辑综合。用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型。Verilog HDL 既是一种行为描述语言也是一种结构描述语言。既既可可以以用用电电路路的的功功能能描描述述,也也可可以以用用元元器器件件及及其其之之间间的的连接来建立连接来建立VerilogVerilog HDL HDL模型。模型。13 1 1 引
15、言引言二、二、VerilogVerilog HDL HDL的发展历史的发展历史1983年年,由由GDA(GateWay Design Automation)公公司的司的Phil Moorby首创;首创;1989年,年,Cadence公司收购了公司收购了GDA公司;公司;1990年,年,Cadence公司公开发表公司公开发表Verilog HDL;1995年年,IEEE制制定定并并公公开开发发表表Verilog HDL1364-1995标准;标准;1999年年,模模拟拟和和数数字字电电路路都都适适用用的的Verilog标标准准公公开开发表发表14 1 1 引言引言三、不同层次的三、不同层次的Ve
16、rilogVerilog HDL HDL抽象抽象VerilogVerilog HDLHDL模模型型可可以以是是实实际际电电路路的的不不同同级级别别的的抽抽象象。抽象级别可分为抽象级别可分为五五级:级:系统级系统级(system level):(system level):用高级语言结构(如case语句)实现的设计模块外部性能的模型;算算法级法级(algorithmic level):(algorithmic level):用高级语言结构实现的设计算法模型(写出逻辑表达式);RTLRTL级级(register transfer level):(register transfer level):描
17、述数据在寄存器之间流动和如何处理这些数据的模型;门级门级(gate level):(gate level):描述逻辑门(如与门、非门、或门、与非门、三态门等)以及逻辑门之间连接的模型;开关级开关级(switch level):(switch level):描述器件中三极管和储存节点及其之间连接的模型。返回返回3.1215 1 1 引言引言四、四、VerilogVerilog HDL HDL的特点的特点语法结构上的主要语法结构上的主要特点特点:形式化地表示电路的行为和结构;借用C语言的结构和语句;可在多个层次上对所设计的系统加以描述,语言对设计规模不加任何限制;具有混合建模能力:一个设计中的各子
18、模块可用不同级别的抽象模型来描述;基本逻辑门、开关级结构模型均内置于语言中,可直接调用;易创建用户定义原语(UDP,User Designed Primitive)。易学易用,功能强易学易用,功能强与与C C语言语言非常相似非常相似!16 2 2 VerilogVerilog HDL HDL基本结构基本结构一、简单的一、简单的VerilogVerilog HDL HDL例子例子二、二、VerilogVerilog HDL HDL模块的结构模块的结构三、逻辑功能定义三、逻辑功能定义四、关键字四、关键字五、标识符五、标识符六、编写六、编写VerilogVerilog HDL HDL源代码的标准源代
19、码的标准内容概要内容概要17 2 2 VerilogVerilog HDL HDL基本结构基本结构一、简单的一、简单的VerilogVerilog HDL HDL例子例子 例例3.2.1 8 8位全加器位全加器module adder8(cout,sum,a,b,cin);output cout;/输出端口声明输出端口声明 output 7:0 sum;input 7:0 a,b;/输入端口声明输入端口声明 input cin;assign cout,sum=a+b+cin;endmodule assign语语句句:无无论论右右边边表表达达式式操操作作数数何何时时发发生生变变化化,右右边边表表
20、达达式式都都会重新计算,并且在指定的延迟后给左边表达式赋值。会重新计算,并且在指定的延迟后给左边表达式赋值。I/O说明说明端口定义端口定义功能描述功能描述模块名(文件名)整个整个VerilogVerilog HDL HDL程序嵌套在程序嵌套在modulemodule和和endmoduleendmodule声明语句中。声明语句中。每条语句相对每条语句相对modulemodule和和endmoduleendmodule最好缩进最好缩进2 2格或格或4 4格!格!/表示注释部分,一般只占据表示注释部分,一般只占据一一行。对编译不起作用!行。对编译不起作用!单行注释符18 2 2 VerilogVer
21、ilog HDL HDL基本结构基本结构 例例3.2.2 8 8位计数器位计数器module counter8(out,cout,data,load,cin,clk);output 7:0 out;output cout;input 7:0 data;input load,cin,clk;reg7:0 out;always(posedge clk)begin if(load)out=data;/同步预置数据同步预置数据 else out =out+1+cin;/加加1计数计数 end assign cout=&out&cin;/若若out为为8hFF,cin为为1,则,则cout为为1endm
22、oduleI/O说明说明端口定义端口定义功能描述功能描述信号类型声明信号类型声明缩减运算符位运算符19 2 2 VerilogVerilog HDL HDL基本结构基本结构 例例3.2.3 2 2位比较器位比较器module compare2(equal,a,b);output equal;input 1:0 a,b;assign equal=(a=b)?1:0;/*如果如果a等于等于b,则,则equal 为为1,否则为,否则为0*/endmodule“=”非非阻阻塞塞过过程程性性赋赋值值:将将想想要要赋赋给给左左式式的的值值安安排排在在未未来来时时刻刻。不不等等上上一一个个赋赋值值完成执行下
23、个赋值语句。完成执行下个赋值语句。“=”阻塞过程性赋值:按照顺序执行,前一个赋值结束才执行下边的赋值语句。阻塞过程性赋值:按照顺序执行,前一个赋值结束才执行下边的赋值语句。连续赋值语句连续赋值语句条件运算符条件运算符/*/*/*/内表示注释部分,一般可占据内表示注释部分,一般可占据多多行。行。对编译不起作用!对编译不起作用!多行注释符多行注释符20 2 2 VerilogVerilog HDL HDL基本结构基本结构 例例3.2.4 三态驱动器三态驱动器module trist2(out,in,enable);output out;input in,enable;bufif1 mybuf(ou
24、t,in,enable);endmodule例化元件名门元件关键字门元件例化门元件例化程序通过调用一程序通过调用一个在个在VerilogVerilog语言库中现存的实例语言库中现存的实例门元件来实现某逻辑门功能。门元件来实现某逻辑门功能。Inputs|OutputIN ENABLE|OUTX0|Z11|101|0bufif1bufif1的真值表的真值表门元件例化门元件例化21module trist1(out,in,enable);output out;input in,enable;mytri tri_inst(out,in,enable);endmodulemodule mytri(out
25、,in,enable);output out;input in,enable;assign out=enable?in:bz;/*如果如果enable为为1,则,则out=in,否则为高阻态,否则为高阻态*/endmodule 2 2 VerilogVerilog HDL HDL基本结构基本结构 例例3.2.5 三态驱动器三态驱动器例化元件名子模块名顶层模块顶层模块子模块子模块模块元件例化模块元件例化模模块块元元件件例例化化顶顶层层模模块块(trist1trist1)调调用用由由某某子子模模块块(mytrimytri)定义的实例元件()定义的实例元件(tri_insttri_inst)来实现某
26、功能。)来实现某功能。返回返回逻辑逻辑功能定义功能定义22 2 2 VerilogVerilog HDL HDL基本结构基本结构Verilog HDL程程序序是是由由模模块块构构成成的的。每每个个模模块块嵌嵌套套在在module和和endmodule声明语句中。模块是可以进行层次嵌套的。声明语句中。模块是可以进行层次嵌套的。每个每个Verilog HDL源文件中只准有一个顶层模块,其他为子模块。源文件中只准有一个顶层模块,其他为子模块。每每个个模模块块要要进进行行端端口口定定义义,并并说说明明输输入入输输出出端端口口,然然后后对对模模块块的的功能进行行为逻辑描述。功能进行行为逻辑描述。程程序序
27、书书写写格格式式自自由由,一一行行可可以以写写几几个个语语句句,一一个个语语句句也也可可以以分分多多行写。行写。除除了了endmodule语语句句、begin_end语语句句和和fork_join语语句句外外,每每个个语语句和数据定义的最后必须有分号。句和数据定义的最后必须有分号。可可用用/*.*/和和/.对对程程序序的的任任何何部部分分作作注注释释。加加上上必必要要的的注注释释,以以增强程序的可读性和可维护性。增强程序的可读性和可维护性。23 2 2 VerilogVerilog HDL HDL基本结构基本结构二、二、VerilogVerilog HDL HDL模块的结构模块的结构Veril
28、ogVerilog的基本设计单元是的基本设计单元是“模块模块 (block)(block)”。Verilog Verilog 模模块块的的结结构构由由在在modulemodule和和endmoduleendmodule关关键键词词之间的之间的4 4个主要部分组成:个主要部分组成:module block1(amodule block1(a,b b,c c,d)d);input ainput a,b b,c c;output doutput d;wire xwire x;assign d=a|xassign d=a|x;assign x=(b&assign x=(b&c)c);endmodule
29、endmoduleI/O说明说明端口定义端口定义功能描述功能描述信号类型声明信号类型声明123424 2 2 VerilogVerilog HDL HDL基本结构基本结构三、逻辑功能定义三、逻辑功能定义在在Verilog Verilog 模块中有模块中有3 3种方法可以描述电路的逻辑功能种方法可以描述电路的逻辑功能:(1 1)用用assign 语句语句 assign x=(b&c);连续赋值语句连续赋值语句常用于描述组合组合逻辑门元件例化门元件例化模块元件例化模块元件例化例化元件名门元件关键字(2 2)用元件例化(用元件例化(instantiate)and myand3(f,a,b,c);v注
30、注1 1:元件例化即是调用:元件例化即是调用VerilogVerilog HDL HDL提供的元件;提供的元件;v注注2 2:元件例化包括:元件例化包括门门元件例化和元件例化和模块模块元件例化;元件例化;v注注3 3:每每个个实实例例元元件件的的名名字字必必须须唯唯一一!以以避避免免与与其其它调用元件的实例相混淆。它调用元件的实例相混淆。v注注4 4:例化元件名也可以省略!例化元件名也可以省略!25 2 2 VerilogVerilog HDL HDL基本结构基本结构(3 3)用用 “alwaysalways”块语句块语句 always(posedge clk)/每当时钟上升沿到来时执行一遍块
31、内语句每当时钟上升沿到来时执行一遍块内语句 begin if(load)out=data;/同步预置数据同步预置数据 else out=data+1+cin;/加加1计数计数 end结构说明语句结构说明语句v注注1 1:“alwaysalways”块块语语句句常常用用于于描描述述时时序序逻逻辑辑,也也可描述可描述组合组合逻辑。逻辑。v注注2 2:“alwaysalways”块块可可用用多多种种手手段段来来表表达达逻逻辑辑关关系系,如用如用if-elseif-else语句或语句或casecase语句。语句。v注注3 3:“alwaysalways”块块语语句句与与assignassign语语句句
32、是是并并发发执执行行的的,assignassign语语句句一一定定要要放放在在“alwaysalways”块块语语句句之之外外!26 2 2 VerilogVerilog HDL HDL基本结构基本结构vVerilog Verilog HDLHDL模块的模板(仅考虑用于逻辑综合的部分)模块的模板(仅考虑用于逻辑综合的部分)module ();output 输出端口列表;输出端口列表;input 输入端口列表输入端口列表;/(1)使用)使用assign语句定义逻辑功能语句定义逻辑功能 wire 结果信号名;结果信号名;assign =表达式表达式;/(2)使用)使用always块定义逻辑功能块定
33、义逻辑功能 always()begin /过程赋值语句过程赋值语句 /if语句语句 /case语句语句 /while,repeat,for循环语句循环语句 /task,function调用调用 end27 2 2 VerilogVerilog HDL HDL基本结构基本结构/(3)元件例化)元件例化 ();/模块元件例化模块元件例化 ();/门元件例化门元件例化endmodule例化元件名例化元件名也可以省略!也可以省略!28 2 2 VerilogVerilog HDL HDL基本结构基本结构四、关键字四、关键字关键字关键字事先定义好的确认符,用来组织语言结构;事先定义好的确认符,用来组织语
34、言结构;或者用于定义或者用于定义VerilogVerilog HDL HDL提供的门元件(如提供的门元件(如andand,notnot,oror,bufbuf)。)。用用小写小写字母定义!字母定义!如如always,assign,begin,case,casex,else,end,for,function,if,input,output,repeat,table,time,while,wire见见数字系统设计与数字系统设计与Verilog HDL P285附录附录A。用户程序中的用户程序中的变量变量、节点等、节点等名称不能名称不能与与关键字关键字同名!同名!29 2 2 VerilogVeri
35、log HDL HDL基本结构基本结构Verilog HDL关键字关键字edgeelseendendcaseendfunctionendprimitiveendmoduleendspecifyendtableendtaskeventforforceforeverforkfunction highz0highz1 ififnoneinitialinoutinputintegerjoinlargemacromodulemediummodulenandnegedgenor notnotif0notif1nmosoroutputparameterpmosposedgeprimitivepulldown
36、pulluppull0pull1andalwaysassignbeginbufbufif0bufif1casecasexcasezcmosdeassigndefaultdefparamdisable30 2 2 VerilogVerilog HDL HDL基本结构基本结构Verilog HDL关键字关键字(续)(续)tri0tri1 vectoredwaitwandweak0weak1whilewireworxnorxorrcmosrealrealtimeregreleaserepeatrnmosrpmosrtranrtranif0rtranif1scalaredsmallspecifyspe
37、cparamstrengthstrong0 strong1supply0supply1tabletasktrantranif0tranif1timetritriandtriortrireg31 2 2 VerilogVerilog HDL HDL基本结构基本结构五、标识符五、标识符 任任何何用用Verilog Verilog HDLHDL语语言言描描述述的的“东东西西”都都通通过过其其名名字字来来识识别别,这个名字被称为这个名字被称为标识符标识符。如源文件名、模块名、端口名、变量名、常量名、实例名等。如源文件名、模块名、端口名、变量名、常量名、实例名等。标标识识符符可可由由字字母母、数数字字、
38、下下划划线线和和$符符号号构构成成;但但第第一一个个字字符符必须是字母或下划线,不能是数字或必须是字母或下划线,不能是数字或$符号符号!在在Verilog Verilog HDLHDL中变量名是区分大小写的!中变量名是区分大小写的!合法合法的名字:的名字:A_99_ZReset_54MHz_Clock$Module 不合法不合法的名字:的名字:123a$datamodule7seg.v标识符标识符不能与不能与关键字关键字同名!同名!32 2 2 VerilogVerilog HDL HDL基本结构基本结构六、编写六、编写VerilogVerilog HDL HDL源代码的标准源代码的标准编写编
39、写VerilogVerilog HDL HDL源代码的标准源代码的标准分为两类:分为两类:(1 1)语汇语汇代码的编写标准代码的编写标准 规规定定了了文文本本布布局局、命命名名和和注注释释的的约约定定,以以提提高高源源代代码码的的可可读读性性和和可维护性可维护性。(2 2)综合综合代码的编写标准代码的编写标准 规规定定了了VerilogVerilog风风格格,尽尽量量保保证证能能够够综综合合,以以避避免免常常见见的的不不能能综综合合及及综综合合结结果果存存在在缺缺陷陷的的问问题题,并并在在设设计计流流程程中中及及时时发发现现综综合合中中存存在在的的错误。错误。v综综合合:将将用用HDLHDL语
40、语言言或或图图形形方方式式描描述述的的电电路路设设计计转转换换为为实实际际门门级级电电路路(如如触触发发器器、逻逻辑辑门门等等),得得到到一一个个网网表表文文件件,用于进行适配(在实际器件中进行布局和布线)。用于进行适配(在实际器件中进行布局和布线)。33 2 2 VerilogVerilog HDL HDL基本结构基本结构(1 1)每每个个VerilogVerilog HDLHDL源源文文件件中中只只准准编编写写一一个个顶顶层层模模块块,也也不能把一个顶层模块分成几部分写在几个源文件中不能把一个顶层模块分成几部分写在几个源文件中。(2 2)源源文文件件名名字字应应与与文文件件内内容容有有关关
41、,最最好好与与顶顶层层模模块块同同名名!源源文文件件名名字字的的第第一一个个字字符符必必须须是是字字母母或或下下划划线线,不不能能是数字或是数字或$符号符号!(3 3)每行只写一个声明语句或说明。每行只写一个声明语句或说明。(4 4)源代码用源代码用层层缩进层层缩进的格式来写。的格式来写。1 1 语汇代码的编写标准语汇代码的编写标准34 2 2 VerilogVerilog HDL HDL基本结构基本结构(5 5)定定义义变变量量名名的的大大小小写写应应自自始始至至终终保保持持一一致致(如如变变量量名名第第一一个个字母均大写)。字母均大写)。(6 6)变变量量名名应应该该有有意意义义,而而且且
42、含含有有一一定定的的有有关关信信息息。局局部部变变量量名名(如循环变量)应简单扼要。(如循环变量)应简单扼要。(7 7)通通过过注注释释对对源源代代码码做做必必要要的的说说明明,尤尤其其对对接接口口(如如模模块块参参数数、端口、任务、函数变量)做必要的端口、任务、函数变量)做必要的注释注释很重要。很重要。(8 8)常常量量尽尽可可能能多多地地使使用用参参数数定定义义和和宏宏定定义义,而而不不要要在在语语句句中中直直接使用字母、数字和字符串。接使用字母、数字和字符串。参数定义(用一个标识符来代表一个常量)的格式:参数定义(用一个标识符来代表一个常量)的格式:parameterparameter
43、参数名参数名1=1=表达式,参数名表达式,参数名2=2=表达式,表达式,;宏定义(用一个简单的宏名来代替一个复杂的表达式)的格式:宏定义(用一个简单的宏名来代替一个复杂的表达式)的格式:definedefine 标志符(即宏名)字符串(即宏内容)标志符(即宏名)字符串(即宏内容)1 1 语汇代码的编写标准(续)语汇代码的编写标准(续)35 2 2 VerilogVerilog HDL HDL基本结构基本结构(1 1)把把设设计计分分割割成成较较小小的的功功能能块块,每每块块用用行行为为风风格格设设计计。除除设设计计中中对对速速度响应要求比较临界的部分外,都应度响应要求比较临界的部分外,都应避免
44、门级描述避免门级描述。(2 2)建建立立一一个个好好的的时时钟钟策策略略(如如单单时时钟钟、多多相相位位时时钟钟,经经过过门门产产生生的的时时钟钟、多多时时钟钟域域等等)。保保证证源源代代码码中中时时钟钟和和复复位位信信号号是是干干净净的的(即即不不是是由组合逻辑或没有考虑到的门产生的)。由组合逻辑或没有考虑到的门产生的)。(3 3)建建立立一一个个好好的的测测试试策策略略,使使所所有有触触发发器器都都是是可可复复位位的的,使使测测试试能能通通过外部管脚进行,又没有冗余的功能。过外部管脚进行,又没有冗余的功能。(4 4)所所有有源源代代码码都都必必须须遵遵守守并并符符合合在在alwaysalw
45、ays块块语语句句的的4 4种种可可综综合合标标准准模模板板之一之一。(5 5)描描述述组组合合和和锁锁存存逻逻辑辑的的alwaysalways块块,必必须须在在alwaysalways块块开开头头的的控控制制事事件件列表中列出列表中列出所有所有的的输入输入信号。信号。2 2 综合代码的编写标准综合代码的编写标准always块语句模板块语句模板36 2 2 VerilogVerilog HDL HDL基本结构基本结构(6 6)描描述述组组合合逻逻辑辑的的alwaysalways块块,一一定定不不能能有有不不完完全全赋赋值值,即即所所有有输输出出变变量必须被各输入值的组合值赋值,不能有例外。量必
46、须被各输入值的组合值赋值,不能有例外。(7 7)描描述述组组合合和和锁锁存存逻逻辑辑的的always块块一一定定不不能能包包含含反反馈馈,即即在在always块块中中已已被被定定义义为为输输出出的的寄寄存存器器变变量量绝绝对对不不能能再再在在该该always块块中中读读进进来来作作为输入信号。为输入信号。(8 8)时时钟钟沿沿触触发发的的always块块必必须须是是单单时时钟钟的的,且且任任何何异异步步控控制制输输入入(通通常是复位或置位信号)必须在控制事件列表中列出。常是复位或置位信号)必须在控制事件列表中列出。例例:always(posedge clk or negedge set or
47、negedge reset)(9 9)避避免免生生成成不不想想要要的的锁锁存存器器。在在无无时时钟钟的的always块块中中,若若有有的的输输出出变变量量被被赋赋了了某某个个信信号号变变量量值值,而而该该信信号号变变量量并并未未在在该该always块块的的电电平平敏敏感控制事件中列出,则会在综合中生成不想要的锁存器。感控制事件中列出,则会在综合中生成不想要的锁存器。2 2 综合代码的编写标准(续综合代码的编写标准(续1 1)37 2 2 VerilogVerilog HDL HDL基本结构基本结构(1010)避免生成不想要的触发器避免生成不想要的触发器。在在时时钟钟沿沿触触发发的的always
48、always块块中中,如如果果用用非非阻阻塞塞赋赋值值语语句句对对regreg型型变变量量赋赋值值;或或者者当当regreg型型变变量量经经过过多多次次循循环环其其值值仍仍保保持持不不变,则会在综合中生成触发器。变,则会在综合中生成触发器。用用regreg型变量生成型变量生成触发器触发器举举例例:module rw2(clk,d,out1);input clk,d;output out1;reg out1;always(posedge clk)/沿沿触发触发 out1=d;endmodule 2 2 综合代码的编写标准(续综合代码的编写标准(续2 2)非阻塞赋值语句dclkout1DQDFF3
49、8 2 2 VerilogVerilog HDL HDL基本结构基本结构若若不不想想生生成成触触发发器器,而而是是希希望望用用regreg型型变变量量生生成成组组合合逻逻辑,则应使用辑,则应使用电平电平触发触发:module rw2(clk,d,out1);input clk,d;output out1;reg out1;always(d)/电平电平触发触发 out1=d;endmodule 2 2 综合代码的编写标准(续综合代码的编写标准(续3 3)dout1BUFF39 2 2 VerilogVerilog HDL HDL基本结构基本结构(1111)所所有有内内部部状状态态寄寄存存器器必必
50、须须是是可可复复位位的的,这这是是为为了了使使RTLRTL级级和和门门级级描描述述能够被复位成同一个已知的状态,以便进行门级逻辑验证。能够被复位成同一个已知的状态,以便进行门级逻辑验证。(1212)对对存存在在无无效效状状态态的的有有限限状状态态机机和和其其他他时时序序电电路路(如如4 4位位十十进进制制计计数数器器有有6 6个个无无效效状状态态),必必须须明明确确描描述述所所有有的的2 2的的N N次次幂幂种种状状态态下下的的行行为为(包包括无效状态),才能综合出安全可靠的状态机。括无效状态),才能综合出安全可靠的状态机。(1313)一般地,一般地,在赋值语句中不能使用延迟在赋值语句中不能使