VerilogHDL的入门学习(可编辑修改word版)
Verilog HDL入门教程
文档编号 资源类别: HDL语言
版本 1.0
密级
内部公开
共41页
Verilog HDL入门教程
(仅供内部使用)
拟制: 批准: 批准:
中研基础 中研基础
日期: 日期: 日期:
2004.8.3 yyyy/mm/dd
版权所有 不得复制
Verilog HDL 入门教程
日期 2004.8.3
修订记录
2.4.1 历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4.2 能力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3 Verilog HDL 建模概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.1 模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.1.1 简单事例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
VerilogHDL基础语法入门
1) $dumpfile(“file.dump”); //打开记录数据变化的数据文件
2) $dumpvars();
//选择需要记录的变量
3) $dumpflush; //把记录在数据文件中的资料转送到硬盘保存
4) $dumpoff;
//停止记录数据变化
5) $dumpon;
//重新开始记录数据变化
模块的抽象
技术指标:
用文字表示 用算法表示 用高级行为的Verilog模块表示
RTL/功能级:
用可综合的Verilog模块表示
门级/结构级:
用实例引用的Verilog模块表示
版图布局/物理级:
用几何形状来表示
行为综合 综合前仿真
逻辑综合
综合后仿真 布局布线
第三部分.简单的 Verilog HDL 模块
转换为门级电路互连的电路结构(综合)。 ▪ 需要对已经转换为门级电路结构的逻辑
进行测试(门级电路仿真)。 ▪ 需要对布局布线后的电路结构进行测试。
(布局布线后仿真)。
模块的测试
激励和控 制信号
被测模块
输出响应 和验证
模块的测试
测试模块常见的形式:
module t; reg …; //被测模块输入/输出变量类型定义 wire…; //被测模块输入/输出变量类型定义 initial begin …; …; …; end … …//产生测试信号 always #delay begin …; end … …//产生测试信号
▪ Verilog HDL的构造性语句可以精确地建立信号的 模型。这是因为在Verilog HDL中,提供了延迟和输出 强度的原语来建立精确程度很高的信号模型。信号值 可以有不同的的强度,可以通过设定宽范围的模糊值 来降低不确定条件的影响。
初学者学习Verilog HDL的步骤和经验技巧
初学者学习Verilog HDL的步骤和经验技巧Verilog HDL是一种硬件描述语言(HDL:Hardware DiscripTIon Language),Verilog HDL语言是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
Verilog HDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。
前者由Gateway Design AutomaTIon公司(该公司于1989年被Cadence 公司收购)开发。
两种HDL均为IEEE标准Verilog HDL语言学习用途就是在最广泛的C语言的基础上发展起来的一种件描述语言,它是由GDA(Gateway Design AutomaTIon)公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。
1985年Moorby推出它的第三个商用仿真器Verilog-XL,获得了巨大的成功,从而使得Verilog HDL迅速得到推广应用。
1989年CADENCE公司收购了GDA公司,使得VerilogHDL成为了该公司的独家专利。
1990年CADENCE公司公开发表了Verilog HDL,并成立LVI组织以促进Verilog HDL成为IEEE标准,即IEEE Standard 1364-1995.Verilog HDL的最大特点就是易学易用,如果有C语言的编程经验,可以在一个较短的时间内很快的学习和掌握,因而可以把Verilog HDL内容安排在与ASIC设计等相关课程内部进行讲授,由于HDL语言本身是专门面向硬件与系统设计的,这样的安排可以使学习者同时获得设计实际电路的经验。
与之相比,VHDL的学习要困难一些。
但Verilog HDL较**的语法,也容易造成初学者犯一些错误,这一点要注意。
VerilogHDL入门教程
VerilogHDL入门教程第一部分:Verilog HDL概述(约200字)Verilog HDL是一种硬件描述语言,用于描述和建模数字电路和系统。
它是一种被广泛使用的硬件设计语言,特别适合用于逻辑设计和验证。
Verilog HDL提供了一种形式化的方式来表示数字电路和系统的行为和结构,使得工程师可以更轻松地进行硬件设计和验证。
第二部分:Verilog HDL基础(约400字)在Verilog HDL中,最基本的组成单元是模块。
模块是Verilog HDL中的一个独立的、可重用的单元,可以由其他模块实例化和连接。
每个模块由端口(输入和输出)和内部功能(如逻辑代码和信号声明)组成。
module and_gate(input a, input b, output y);assign y = a & b;endmodule这个模块表示一个与门,它有两个输入a和b,一个输出y。
使用assign语句,我们将输出y连接到输入a和b的逻辑与操作。
第三部分:Verilog HDL高级特性(约400字)除了基本的模块和连接之外,Verilog HDL还提供了一些高级特性,用于更复杂的电路建模和验证。
一种特殊的构造是always块。
always块用于描述模块内的行为,基于一个条件或时钟信号的变化。
例如,下面是一个使用always块的模块示例:module counter(input clk, input enable, output reg count);if (enable)count = count + 1;endendmodule这个模块表示一个简单的计数器,在时钟上升沿时根据enable信号增加计数器的值。
Verilog HDL还支持层次化的建模,允许将模块层次化地组织起来,以便更好地管理和复用代码。
层次化建模通过使用模块的层次命名和连接来实现。
例如,我们可以将上面的计数器模块实例化为另一个模块,如下所示:module top_module(input clk, input enable, output reg count);countercounter_inst(.clk(clk), .enable(enable), .count(count));endmodule这个模块实例化了上面定义的计数器模块,并将其内部信号和端口连接到外部接口。
Verilog HDL基础知识
tri tri0 tri1 triand trior trireg unsigned vectored wait wand weak0 weak1 while wire wor xnor xor
第3章 Verilog HDL基础知识
3.2 数 据 类 型
Verilog HDL支持两种形式的注释符:/*……*/与//。其中, /*……*/为多行注释符,用于对多行语句注释;//为单行注释符, 只对注释符所在的行有效。下面是一个使用注释符对1位加法器 进行说明的例子。
第3章 Verilog HDL基础知识
【例3-2】注释符的例子。
/* 该例利用一位加法器来说明单行注释符与多行注释符的
第3章 Verilog HDL基础知识
1. 字符串变量的声明 Verilog HDL中采用寄存器变量来存储字符串,寄存器变量的 位数要大于字符串的最大长度。需要注意的是,Verilog HDL中并 不需要特殊位来存储终止符。 【例3-6】字符串变量的声明。
reg [8*12:1] stringvar; initial
'<base_format><number> 符号“'”为基数格式表示的固有字符,该字符不能省略,否 则为非法表示形式;参数<base_format>用于说明数值采用的进制 格式;参数<number>为相应进制格式下的一串数字。这种格式未 指定位宽,其缺省值至少为32位。
第3章 Verilog HDL基础知识
第3章 Verilog HDL基础知识
module addbit (a,b,ci,sum,co);
input
Verilog HDL入门
线网型:wire,tri
wor,trior,wand,triand,trireg,tri1,tri0 supply0,supply1
寄存器型:
reg integer,time real,realtime
wire和tri
用于连接单元的连线是最常见的线网类型。 默认值为z。 wire与tri语法和语义一致; 三态线可以用于描述多个驱动源驱动同一根线 的线网类型;并且没有其他特殊的意义。 通常都用wire。 其他线网型用于底层设计与仿真,FPGA设计通 常不会涉及。
简单的Verilog程序
该程序例子通过另一种方法描述了一个三态 门。 在这个例子中存在着两个模块:模块trist1 在这个例子中存在着两个模块:模块trist1 tri_inst。 调用模块 mytri 的实例元件 tri_inst。 是上层模块。 模块 trist1 是上层模块。模块 mytri 则被 称为子模块。 称为子模块。 通过这种结构性模块构造可构成特大型模块 。
例:always @(b or c) always a=b&c;
元件(实)例化
例:and and1(a,b,c); BUFG BUFG_inst ( .O(out), // Clock buffer output .I(in) // Clock buffer input );
注意
三种方式可以在同一个模块之内混合使用 ; 同一个模块内可以有多个always块,多个 assign和多个元件例化。 所有这些单元是并行执行的。 这些单元的书写顺序不影响逻辑功能;
128状态值集合:包含强度信息
其他值集合
整数(32bits) 实数 字符串 时间(64bits) 布尔值(0,1) ……
提纲
Verilog HDL基础
还可以在模块实例引用时,改变引用模块或实例中已 定义的参数。
module decode(A,F) parameter IN_Width=4,OUT_Width=16; …
endmodule;
4.4 变量--数据类型
wire型
用assign赋值的组合逻辑信号,输入输出信号 默认为wire型,取值为0、1、x和z
4.2 Verilog基本语法—语言要素
间隔符: Verilog 的间隔符主要起分隔文本的作用, 可以使文本排列有序,便于阅读与修改。
间隔符包括空格符(\b)、TAB 键(\t)、换行符(\n) 及换页符。
注释符:注释只是为了改善程序的可读性,在编译时 被忽略。
多行注释符“/* --- */”:用于写多行注释; 单行注释符“//”:以开始到行尾结束为注释文字。
如:8’b01010011,8’h53
x代表不定值,z代表高阻,每个字符所代表的 宽度取决于所用进制
下划线:用来分隔数,以提高程序可读性
如16’b0011101001010001可写成 16’b0011_1010_0101_0001
4.4常量--parameter
Parameter用来定义一个标识符代表一个常量,称为 符号常量,用以提高程序的可读性,经常用于定义变 量的宽度。
4.7 循环移位寄存器(1)
always @ (posedge clk) if(preset) begin q3=0; q2=1; q1=1; end begin q3=q2; q2=q1; q1=q3; end;
Verilog-HDL基础知识
Verilog-HDL基础知识第⼆章 Verilog-HDL基础知识1.Verilog-HDL概述1.1 什么是硬件描述语⾔(HDL)HDL:Hardware Description Language硬件描述语⾔HDL是⼀种⽤形式化⽅法描述数字电路和系统的语⾔,可以描述硬件电路的功能、信号连接关系和定时关系。
1.2 使⽤HDL的优点电路的逻辑功能容易理解;便于计算机对逻辑进⾏分析处理;把逻辑设计与具体电路的实现分成两个独⽴的阶段来操作;逻辑设计与实现的⼯艺⽆关;逻辑设计的资源积累可以重复利⽤;可以由多⼈共同更好更快地设计⾮常复杂的逻辑电路(⼏⼗万门以上的逻辑系统)。
1.3 Top_Down设计思想1.4 Verilog-HDL简介1.4.1 Verilog HDL的发展1.4.2 Verilog-HDL与VHDL的⽐较☆ VHDL-VHSIC Hardware Description Language。
VHDL于 1987年成为IEEE标准。
☆ Verilog-HDL简单易学,语法⽐较灵活。
VHDL语法严谨,需要较长的时间学会。
☆ Verilog-HDL在系统抽象⽅⾯⽐VHDL略差,但在门级开关电路描述⽅⾯⽐VHDL强。
1.4.3 Verilog-HDL 的应⽤ASIC和FPGA设计师可⽤它来编写可综合的代码。
描述系统的结构,做⾼层次的仿真。
验证⼯程师编写各种层次的测试模块对具体电路设计⼯程师所设计的模块进⾏全⾯细致的验证。
库模型的设计:可以⽤于描述ASIC 和FPGA的基本单元(Cell)部件,也可以描述复杂的宏单元(Macro Cell)。
1.4.4 Verilog-HDL的抽象级别⽤Verilog-HDL描述的电路设计就是该电路的Verilog HDL模型,这些模型可以是实际电路的不同级别的抽象,这些抽象的级别和它们对应的模型类型共有以下五种:?系统级(system): ⽤⾼级语⾔结构实现设计模块的外部性能的模型。
VerilogHDL入门(可编辑)
Verilog HDL入门Introduction to Verilog pldcomcnCourse Objectivesn Learn the basic constructs of Verilogn Learn the modeling structure of Verilogn Learn the concept of delays and their effects in simulationpldcomcnCourse OutlinenVerilog Overviewn Basic Structure of a Verilog Modeln Components of a Verilog Module– Ports– Data Types– Assigning Values and Numbers– Operators– Behavioral ModelingContinuous AssignmentsProcedural Blocks– Structural Modelingn Summary Verilog EnvironmentpldcomcnVerilogOverviewpldcomcnWhat is Verilogn IEEE industry standard Hardware DescriptionLanguage HDL - used to describe a digital system n For both Simulation SynthesispldcomcnVerilog Historyn Introduced in 1984 by Gateway Design Automationn 1989 Cadence purchased Gateway Verilog-XLsimulatorn 1990 Cadence released Verilog to the publicn Open Verilog International OVI was formed to control the language specificationsn 1993 OVI released version 20n 1993 IEEE accepted OVI Verilog as a standard Verilog 1364pldcomcnVerilog StructurenVerilog HDL Consists of Keywords syntax andsemantics used to describe hardware functionality and timingn PLI Programming Language Interface provides Clanguage routines used to interact between Verilog and EDA tools SimulatorsWaveform displaysn SDF Standard Delay Format - a file used to back-annotate accurate timing information to simulators and other toolspldcomcnTerminologyn HDL - Hardware Description Language is a softwareprogramming language that is used to model a piece of hardwaren Behavior Modeling - A component is described by itsinputoutput responsen Structural Modeling - A component is described byinterconnecting lower-level componentsprimitives pldcomcnBehavior Modelingn Only the functionality of the circuit no structure n No specific hardware intentn For the purpose of synthesis as well as simulationoutput 1 outputninput 1 inputnif input 1for j 0 j 8 j j25 output 1 1b0elsefor j 1 j 8 j j25 output 1 1b1pldcomcnStructural Modelingn Functionality and structure of the circuitn Call out the specific hardwaren For the purpose of synthesisHigher-level Componentinput1 output 1Lower-levelComponent1Lower-levelComponent1inputnoutputnpldcomcnMore Terminologyn Register Transfer Level RTL - A type of behavioralmodeling for the purpose of synthesis– Hardware is implied or inferred– Synthesizablen Synthesis - Translating HDL to a circuit and thenoptimizing the represented circuitn RTL Synthesis - The process of translating a RTLmodel of hardware into an optimized technologyspecific gate level implementationpldcomcnRTL Synthesisalways a or b or c or d or sel ainferredbegin b mux_outcase sel c2b00 mux_out a d2b01 mux_out b sel2b10 mux_out c 22b11 mux_out dendcaseaTranslationdaOptimization dpldcomcnVerilog vs Other HDL StandardsnVerilog– Tell me how your circuit should behave and I will give youthe hardware that does the jobnVHDL– Similar to VerilognABEL PALASM AHDL– Tell me what hardware you want and I will give it to youpldcomcnVerilog vs Other HDL StandardsnVerilog– Give me a circuit whose output only changes when there isa low-to-high transition on a particular input When thetransition happens make the output equal to the input untilthe next transition–Result Verilog Synthesis provides a positive edge-triggeredflipflopnABEL PALASM AHDL– Give me a D-type flipflop– Result ABEL PALASM AHDL synthesis provides a D-typeflipflop The sense of the clock depends on the synthesistoolpldcomcnTypical Synthesis Design FlowVerilog TechnologyModel LibrarySynthesisCompilerTiming Analysis Netlist PlaceRouteText OutputTestSimulationVectorsWaveformpldcomcnTypical Simulation Design FlowVerilog VerilogModelTestBenchOptionalSimulationCompilerSimulation TestModel VectorsWaveform Verilog Text OutputSimulationpldcomcnVerilogModelingpldcomcnVerilog - Basic Modeling Structuren CASE-sensitvemodule module_name port_list nAll keywords areport declarations lowercasenWhitespace is used fordata type declarations readabilitynSemicolon is thecircuit functionality statement terminatornSingle line commenttiming specifications n Multi-line commentendmodule nTiming specification isfor simulationpldcomcnComponents of a Verilog ModulemoduleTiming SpecificationsPort ListPort Data Type Circuit SubprogramsDeclarations Declarations FunctionalityInstantiation taskinput NetContinuous Procedural functionoutput Register Assignment BlocksSystem Tasksinout parameter assign initialblockCompilerDirectivesalwaysblockpldcomcnComponents of a Verilog Modulemodule Module_name Port_listPort declarations if ports are presentParameters optionalData type declarationsContinuous Assignments assignProcedural Blocks initial andalways- behavioral statementsInstantiation of lower-level modulesTasks and FunctionsTiming SpecificationsendmodulepldcomcnSchematic Representation - MACadder_outoutinaD Qmult_out clkXinbclr CLRNpldcomcnVerilog Model Mulitiplier-Accumulator MACtimescale 1 ns 10 ps assign adder_out mult_out outmodule mult_acc out ina inb clk clr alwaysposedge clk or posedge clrbegininput [70] ina inb if clrinput clk clr out 16h0000output [150] out elseout adder_outwire [150] mult_out adder_out endreg [150] outmulta u1 in_a ina in_b inb m_out mult_outparameter set 10parameter hld 20 specify setup ina posedge clk sethold posedge clk ina hldsetup inb posedge clk sethold posedge clk inb hldendspecifyendmodulepldcomcnLets take a look atmoduleTiming SpecificationsPort ListPort Data Type Circuit SubprogramsDeclarations Declarations FunctionalityInstantiation taskinput NetContinuous Procedural functionoutput Register Assignment BlocksSystem Tasksinout parameter assign initialblock CompilerDirectivesalwaysblockpldcomcnPortsn Port List– A listing of the port names– Examplemodule mult_acc out ina inb clk clr n Port Types– input -- input port– output -- output port– inout -- bidirectional portn Port Declarations–– Exampleinput [70] ina inbinput clk clroutput [150] outpldcomcnPorts List and Declarationtimescale 1 ns 10 ps assign adder_out mult_out outmodule mult_acc out ina inb clk clr always posedge clk or posedge clrbegininput [70] ina inb if clrout 16h0000input clk clr elseoutput [150] out out adder_outendwire [150] mult_out adder_outreg [150] out multa u1 in_aina in_b inb m_out mult_outparameter set 10 specifyparameter hld 20 setup ina posedge clk sethold posedge clk ina hldsetup inb posedge clk sethold posedge clk inb hldendspecify endmodule pldcomcnData Typesn Net Data Type - represent physical interconnect betweenprocesses activity flowsprocess processFunctional Functionalnets nets nets Block BlockMUX Addersnets netsnRegister Data Type - represent variable to store datatemporarily– It does not represent a physical hardware registerTemporary StoragepldcomcnNet Data Typenwire -- represents a nodentri -- represents a tri-state node n Bus Declarations– [MSB LSB ]– [LSB MSB]n Examples– wire– wire [150] mult_out adder_outpldcomcnNet Data TypesSupported byNet Data Type Functionality Synthesiswire tri Used for interconnectsupply0 supply1 Constant logic valuewand triand Used to model ECLwor trior Used to model ECLtri0 tri1 Pull-down Pull-uptrireg Stores last value whennot drivenpldcomcnRegister Data Typesnreg - unsigned variable of any bit size ninteger - signed variable usually 32 bits n Bus Declarations– [MSB LSB ]– [LSB MSB]n Examples– reg– reg [7 0] outpldcomcnRegister Data TypesRegisterSupported byData Type Functionality Synthesisreg Unsigned variable ofany bit sizeinteger Signed variable -usually 32 bitstime Unsigned integer -usually 64 bitsreal Double precisionfloating point variablepldcomcnMemorynTwo dimensional register arrayn Can not be a net typen Examplesreg [310] mem[01023] 1Kx32 reg [310] instrinstr mem[2]n Double-indexing is not permittedinstr mem[2][70] Illegal pldcomcnParametern Parameter - assigning a value to a symbolic nameparameter size 8reg [size-10] a bpldcomcnData Typen Every signal which includes ports must have a datatype– Signals must be explicitly declared in the data type declarations of your module– Ports are by default wire net data types if theyare not explicitly declaredpldcomcnData Types Declarationtimescale 1 ns 10 ps assignadder_out mult_out outmodule mult_acc out ina inb clk clr alwaysposedge clk or posedge clrbegininput [70] ina inb if clrinput clk clr out 16h0000output [150] out elseout adder_outwire [150] mult_out adder_out endreg [150] out multa u1 in_aina in_b inb m_out mult_outparameter set 10 specifyparameter hld 20 setup ina posedge clk sethold posedge clk ina hldsetup inb posedge clk sethold posedge clk inb hldendspecifyendmodule pldcomcnAssigning Values - NumbersandOperatorspldcomcnAssigning Values - NumbersnAre sized or unsized– Sized example 3b010 3-bit wide binary number The prefix 3 indicates the size of number– Unsized example 123 32-bit wide decimal number by defaultDefaults– No specified defaults to decimal–No specified defaults to 32-bit wide numbern Base Format–Decimal d or D 16d255 16-bit wide decimal number– Hexadecimal h or H 8h9a 8-bit wide hexadecimal number– Binary b or B b1010 32-bit wide binary numer– Octal o or O o21 32-bit wide octal numberpldcomcnNumbersn Negative numbers - specified by putting a minus sign beforethe– Legal -8d3 8-bit negative number stored as 2s complement of 3– Illegal 4d-2 ERRORn Special Number Characters– _ underscore used for readabilityExample 32h21_65_bc_fe 32-bit hexadecimal number– x or X unknown valueExample 12h12x 12-bit hexadecimal number LSBs unknown– z or Z high impedance valueExample 1bz 1-bit high impedance numberpldcomcnNumbersn Extended– If MSB is 0 x or z number is extended to fill MSBs with 0 xorz respectivelyExamples 3b01 3b001 3bx1 3bxx1 3bz 3bzzz– If MSB is 1 number is extended to fill MSBs with 0Example 3b1 3b001pldcomcnShort Quizn Short Quiz– Q What is the actual value for 4d017 in binary pldcomcnAnswersn Short Quiz– Q What is the actual value for 4d017 in binary– A 4b0001 MSB is truncated 10001pldcomcnArithmetic OperatorsOperator Operation ExamplesSymbol Performed ain 5 bin 10 cin 2b01 din 2b0ZAdd bin cin 11- Subtract Negate bin - cin 9 -bin -10Multiply ain bin 50Divide bin ain 2Modulus bin ain 0nTreats vectors as a whole valuen If any operand is Z or X then the results are unknown– Example ain din unknownn If results and operands are same size then carry is lostpldcomcnBitwise OperatorsOperator Operation ExamplesSymbol Performed ain 3b101 bin 3b110 cin 3b01XInvert each bit ain is 3b010And each bit ain bin is 3 b100 bin cin is 3b010Or each bit ain bin is 3b111Xor each bit ain bin is 3 b011or Xnor each bit ain bin 3b100n Operates on each bit of the operandn Result is the size of the largest operandn Left-extended if sizes are differentpldcomcnReduction OperatorsOperator Operation ExamplesSymbol Performed ain 5b10101 bin 4b0011cin 3bZ00 din 3bX011And all bits ain 1b0 din 1b0Nand all bits ain 1b1Or all bits ain 1b1 cin 1bXNor all bits ain 1b0Xor all bits ain 1b1or Xnor all bits ain 1b0n Reduces a vector to a single bitnX or Z are considered unkown but result maybe a knownvalue– Example din results in 1b0pldcomcnRelational OperatorsOperator Operation ExamplesSymbol Performed ain 3b010 bin 3b100 cin 3b111。
初学者学习Verilog HDL的步骤和经验技巧
初学者学习Verilog HDL的步骤和经验技巧Verilog HDL是一种硬件描述语言(HDL:Hardware DiscripTIon Language),Verilog HDL语言是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
Verilog HDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。
前者由Gateway Design AutomaTIon公司(该公司于1989年被Cadence 公司收购)开发。
两种HDL均为IEEE标准Verilog HDL语言学习用途就是在最广泛的C语言的基础上发展起来的一种件描述语言,它是由GDA(Gateway Design AutomaTIon)公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。
1985年Moorby推出它的第三个商用仿真器Verilog-XL,获得了巨大的成功,从而使得Verilog HDL迅速得到推广应用。
1989年CADENCE公司收购了GDA公司,使得VerilogHDL成为了该公司的独家专利。
1990年CADENCE公司公开发表了Verilog HDL,并成立LVI组织以促进Verilog HDL成为IEEE标准,即IEEE Standard 1364-1995.Verilog HDL的最大特点就是易学易用,如果有C语言的编程经验,可以在一个较短的时间内很快的学习和掌握,因而可以把Verilog HDL内容安排在与ASIC设计等相关课程内部进行讲授,由于HDL语言本身是专门面向硬件与系统设计的,这样的安排可以使学习者同时获得设计实际电路的经验。
与之相比,VHDL的学习要困难一些。
但Verilog HDL较**的语法,也容易造成初学者犯一些错误,这一点要注意。
硬件描述语言VerilogHDL基础
入zz x x x
CSLG
4、设计举例
试用Verilog语言的门级 元件描述2线-4线译码器.
E1
& Y0
//Gate-level description of a 2-to-4-
line decoder
module _2to4decoder (A1,A0,E,Y);
input A,B,E;
output [3:0] Y;
常量
格式为:<+/-><位宽>’<基数符号><数 例值如>:3’b101、5’o37、8’he3,8’b1001_0011
实数型常量 十进制记数法 如: 0.1、2.0、5.67
科学记数法 如: 23_5.1e2、5E-4
23510.0、 0.0005
CSLG
❖Verilog允许用参数定义语句定义一个标识 符来代表一个常量,称为符号常量。
CSLG
CSLG
用Verilog HDL描述组合逻辑电路
用VerilogHDL描述组合逻辑电路
❖用VerilogHDL描述组合逻辑电路有三种不 同抽象级别:
▪ 门级描述 ▪ 数据流描述 ▪ 行为级描述
❖VerilogHDL描述的电路就是该电路的 VerilogHDL模型。
CSLG
•门级描述:
一般使用Primitive(内部元件)、自定义的下层模块对电 路描述。主要用于层次化设计中。
多输入端的或非门
多输入端的异或非门
多输出端的反相器
控制信号高电平有效的 三态反相器
控制信号低电平有效的 三态反相器
CSLG
Verilog 基本门级元件
and n-input AND gate
第1章 Verilog HDL入门
Verilog HDL 是硬件描述语言的一种,它是 目前应用最广泛的一种硬件描述语言,用于数字 系统的设计。设计者用它进行数字逻辑系统的仿 真模拟、时序分析、逻辑综合。
1.2.2 Verilog HDL的发展历史
1980`s
Verilog-XL 诞生
Verilog IEEE 1364-2005……
2001 Verilog EEE1364-2001 标准公开发表
1989 Cadence 公司购买 Verilog HDL的版权
1999 模拟和数字都适用的 Verilog 标准公开发表
1990 Verilog HDL 公开发表
1995 Verilog IEEE1364 标准公开发表
1990有关Verilog HDL的 全部权利都移交给OVI(Open Verilog International)组织
1.3复杂数字系统的设计方法
1.3.1 什么是复杂数字逻辑系统
• 嵌入式微处理机系统 • 数字信号处理系统 • 高速并行计算逻辑 • 高速通信协议电路 • 高速编码/解码、加密/解密电路 • 复杂的多功能智能接口 • 门逻辑总数超过几万门达到几百甚至达几千万门的数
字系统
1.3.2 传统的设计方法
1.4 典型设计流程
Top-Down 设计思想 Top-Down 设计思想
系统级设计
模块A
模块B
模块C
模 块 A11
模 块 B2
模 块 B3
模 块 C1
模 块 C2
用EDA设计数字系统的典型流程
设计要求 电路图设计 电路功能仿真 HDL设计 HDL功能仿真 逻辑综合、时序 验证 工艺文 件 优化、布局布线 布线后门级仿真
采用Verilog HDL输入法时,由于 Verilog HDL的标准化,可以很容易把完成 的设计进行移植到不同厂家的不同芯片。 采用Verilog HDL输入法最大的优点是其与 工艺无关性。
Verilog HDL基础知识
心 中 数据类型定义:寄存器型(有保持功能)
实验缺省:wire导线型 系 电时钟上升沿执行下面语句块:描述时序
语句 begin
信
块
描述组 合电路
if (reset) q<=0;//清学0
else q<=
q
+
大 cin浙; 江//计数或保持
reset cin clk
cout 8
end
assign cout=&q && cin; // 进位
浙
true_expression:false_expression;
例,2选1的MUX:
out=sel?in1:in0
电
input[N:1]
in0,in1;
信 学
输入、输出端口描述
--描述外部特性
input sel;
大
assign out=sel浙?i江n1:in0;
endmodule
逻辑功能描述 --描述内部特性
程序为模块结构,包含在module与endmodule之间
8 out
第8页
例0.2 4位二进制加法计数器(带同步清0) 1、功能描述:
其功能,隐藏其具体的细节实现。 心
•提高逻辑设计的效率,降低设计成验本中,更重要的是缩
短设计同期。
实
系
•可读性强,易修改。
电
信
学
注意
大 江
浙
HDL追求对硬件的全面描述,而将HDL描述在目标器件上实现是
由EDA工具软件的综合器完成。受限于目标器件,并不是所有Verilog
HDL语句均可被综合。
第6页
0.2 Verilog HDL的基本结构
VerilogHDL教程
VerilogHDL教程verilog hdl教程一、Verilog HDL概述二、Verilog HDL语法1.模块定义和端口声明模块是Verilog HDL的基本单元,用于描述电路的结构和行为。
以下是一个简单的模块定义和端口声明的例子:module adderinput wire [3:0] a,input wire [3:0] b,output wire [3:0] sum//模块内部的逻辑和信号声明//...endmodule2.信号声明和赋值wire [3:0] a;reg [3:0] b;assign a = 4'b0110;b<=a;end3.组合逻辑和时序逻辑组合逻辑通过组合逻辑操作(如AND,OR,XOR等)来描述电路的行为。
时序逻辑通过时钟沿的触发条件来描述电路的行为。
以下是组合逻辑和时序逻辑的例子://组合逻辑assign c = a & b;assign d = a ^ b;//时序逻辑if (reset) begine<=0;end else begine<=a+b;endend三、Verilog HDL用法1.模块实例化add4 adder_inst.a(a),.b(b),.sum(sum)2.仿真和验证Verilog HDL可以使用仿真工具进行仿真和验证。
常用的仿真工具包括ModelSim,Xilinx ISE和Cadence Incisive等。
仿真工具可以使用Verilog HDL代码来模拟和验证电路的功能和性能。
四、总结Verilog HDL是一种用于描述数字电路的硬件描述语言。
它提供了一种清晰,结构化的方式来描述电路的行为和结构。
通过模块化的设计和调试,Verilog HDL使设计人员能够更好地建模和分析复杂的电路。
它支持多种级别的抽象,如行为级,RTL级和门级,以满足不同层次的设计需求。
通过实例化已定义的模块和使用仿真工具,Verilog HDL可以方便地进行电路的仿真和验证。
VERILOGHDL语言基础
VERILOGHDL语⾔基础第1节 Verilog HDL语⾔简介Verilog HDL语⾔简介Verilog HDL和VHDL是⽬前世界上最流⾏的两种硬件描述语⾔(HDL:Hardware Description Language),均为IEEE标准,被⼴泛地应⽤于基于可编程逻辑器件的项⽬开发。
⼆者都是在20世纪80年代中期开发出来的,前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发,后者由美国军⽅研发。
HDL语⾔以⽂本形式来描述数字系统硬件结构和⾏为,是⼀种⽤形式化⽅法来描述数字电路和系统的语⾔,可以从上层到下层来逐层描述⾃⼰的设计思想。
即⽤⼀系列分层次的模块来表⽰复杂的数字系统,并逐层进⾏验证仿真,再把具体的模块组合由综合⼯具转化成门级⽹表,接下去再利⽤布局布线⼯具把⽹表转化为具体电路结构的实现。
⽬前,这种⾃顶向下的⽅法已被⼴泛使⽤。
概括地讲,HDL语⾔包含以下主要特征:* HDL语⾔既包含⼀些⾼级程序设计语⾔的结构形式,同时也兼顾描述硬件线路连接的具体结构。
* 通过使⽤结构级⾏为描述,可以在不同的抽象层次描述设计。
HDL语⾔采⽤⾃顶向下的数字电路设计⽅法,主要包括3个领域5个抽象层次。
* HDL语⾔是并⾏处理的,具有同⼀时刻执⾏多任务的能⼒。
这和⼀般⾼级设计语⾔(例如C 语⾔等)串⾏执⾏的特征是不同的。
* HDL语⾔具有时序的概念。
⼀般的⾼级编程语⾔是没有时序概念的,但在硬件电路中从输⼊到输出总是有延时存在的,为了描述这⼀特征,需要引⼊时延的概念。
HDL语⾔不仅可以描述硬件电路的功能,还可以描述电路的时序。
2.1.1 Verilog HDL语⾔的历史1983年,Gateway Design Automation(GDA)硬件描述语⾔公司的Philip Moorby⾸创了Verilog HDL。
后来Moorby成为Verilog HDL-XL的主要设计者和Cadence公司的第⼀合伙⼈。
verilog HDL语言基础知识总结
3)
1与门
2与非门
3LED的闪烁
4或门
module OR2_G(A,B,F);
Output F;
Input A,B;
Assign F=A|B;
endmodule
5或非门
Module NOR2_G(A,B,F);
Case(opcode)
Add: out=a+b;
Minus: out=a-b;
Band: out=a&b;
Bor: out=a|b;
Bnot: out=~a;
Default: out=8’hx;
ห้องสมุดไป่ตู้Endcase
End
endmodule
(三)块语句
1串行块begin-end
Begin
语句1;
.
.
语句n;
Define bor 3’d3
Define bnot 3’d4
Module alu(out,opcode,a,b);
Output[7:0] out;
Reg[7:0] out;
Input[2:0] opcode;
Input[7:0] a,b;
Always @(opcode or a or b)
Begin
end
2并行块fork-join
Fork
语句1;
.
.
语句n;
join
(四)条件语句
1If-else语句
1)使用方法1
If(表达式)语句1;
2)使用方法2
If(表达式)语句1;
Verilog HDL 入门教程(华为)
文档中心文档编号资源类别: HDL语言版本1.0密级内部公开共41页Verilog HDL入门教程(仅供内部使用)拟制:批准:批准:中研基础中研基础日期:日期:日期:2004.8.3yyyy/mm/dd版权所有不得复制Verilog HDL 入门教程绝密请输入文档编号日期2004.8.3修订版本1.00描述初稿完成修订记录作者2004-08-16 第2页,共41页版权所有,侵权必究Verilog HDL 入门教程绝密请输入文档编号目录1 前言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 HDL设计方法学简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.1 数字电路设计方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 硬件描述语言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.3 设计方法学 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.4 Verilog HDL简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.4.1 历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.4.2 能力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Verilog HDL 建模概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.1 模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.1.1 简单事例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.1.2 模块的结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103.1.3 模块语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.2 时延 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.3 三种建模方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.3.1 结构化描述方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.3.2 数据流描述方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.3.3 行为描述方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.3.4 混合设计描述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Verilog HDL 基本语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.1 标识符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.1.1 定义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.1.2 关键词 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.1.3 书写规范建议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.2 注释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.3 格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.4 数字值集合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.4.1 值集合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.4.2 常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.5 数据类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.5.1 线网类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.5.2 寄存器类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.6 运算符和表达式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.6.1 算术运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.6.2 关系运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.6.3 逻辑运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.6.4 按位逻辑运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.6.5 条件运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.6.6 连接运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.7 条件语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.8 case 语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 结构建模 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282004-08-16 第3页,共41页版权所有,侵权必究Verilog HDL 入门教程绝密请输入文档编号5.1 模块定义结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.2 模块端口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.3 实例化语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295.4 结构化建模具体实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 数据流建模 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346.1 连续赋值语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346.2 阻塞赋值语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346.3 数据流建模具体实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 行为建模 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357.1 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357.2 顺序语句块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357.3 过程赋值语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367.4 行为建模具体实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 其他方面 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3910 附录A Verilog 保留字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402004-08-16 第4页,共41页版权所有,侵权必究Verilog HDL 入门教程Verilog HDL 入门教程绝密请输入文档编号关键词:摘要:本文主要介绍了Verilog HDL 语言的一些基本知识,目的是使初学者能够迅速掌握HDL 设计方法,初步了解并掌握Verilog HDL语言的基本要素,能够读懂简单的设计代码并能够进行一些简单设计的Verilog HDL建模。
(完整word版)Verilog-A30分钟快速入门教程.docx
?Verilog-A 30分钟快速入门教程进入正题,学了几天的Verilog-A,平台是Agilent ADS,主要参考“ Verilog- AMS Language Reference Manual”和ADS的帮助文档。
现在的状态算是入门了,写了个简单的PLL。
总结这几天的学习,觉得效率太低,我以前有一定 Verilog 基础,研一时学过一点 VHDL-AMS ,学到现在这个状态应该半天就够了;入门的话, 30 分钟足矣;跟着这个教程走,你会很快了解和熟悉Verilog-A 。
(前提是有一定的 Verilog 基础和电路基础)1、基尔霍夫定律撑起了整个电路学的大厦(当然也可以认为基尔霍夫定律只是麦克斯韦方程的简化版),作为模拟电路描述语言 Verilog-A ,同样将基尔霍夫定律作为其基本,最重要的两个概念便是流量 (Flow) 和位 (Potential) ,在电学里是电流和电压,在力学里可以是力和距离,在热学里可以是功率和温差,等等。
在 Verilog-A中,你可以将电阻电容电感等器件用一个方程式来表述,比如I(out) <+ V(out)/R ,这样就产生了一个电阻,最后 Verilog-A 仿真器会用某种算法( 迭代是最常见的 ) 将 I(out) 和 V(out) 求解出来,然后根据这个解去算下一个时刻的 I 、V 等,当然这仅仅是指时域仿真。
2 、下面讲Verilog-A的语法:begin end //相当于C语言的一对大括号,与Verilog同if ( expression ) true_statement ;[ else false_statement ; ] //与Verilog同case ( expression ) case_item { case_item } endcasefor ( procedural_assignment ; expression;procedural_assignment ) statement//case与for语句都跟Verilog、C语言类似cross( expr [, dir [, time_tol [, expr_tol ]]] );//cross 用来产生一个 event ,如:@(cross(V(sample) -2.0, +1.0))//指 sample 的电压超过 2.0 时触发该事件,将会执行后面的语句, +1.0 表示正向越过, -1.0 则相反ddt( expr )// 求导,如:I(n1,n2) <+ C * ddt(V(n1, n2)); //表示了一个电容idt( expr ,[ ic [, assert [, abstol ]]] ) //积分,如:V(out) <+ gain * idt(V(in) ,0) + gain * V(in);// 比例积分,式中的 0 表示积分的初值transition( expr [, time_delay [, rise_time [, fall_time [, time_tol ]]]] )// 将 expr 的值 delay一下并指定上升下降沿时间,相当于一个传输门laplace_zp( expr ,ζ ,ρ)将 expr 进行拉普拉斯变换,具体表达式参看相关文献,还有laplace_zd()等数据类型:integer 、real ,另外就是 discipline ,不知道怎么翻译比较好,比如说它将电压电流这两个 nature 类型作为一个 discipline ,这些都在 disciplines.vams这个头文件里建好了,编程时要`include "disciplines.vams"。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
先记下来:1、不使用初始化语句;2、不使用延时语句;3、不使用循环次数不确定的语句,如:forever,while 等;4、尽量采用同步方式设计电路;5、尽量采用行为语句完成设计;6、always 过程块描述组合逻辑,应在敏感信号表中列出所有的输入信号;7、所有的内部寄存器都应该可以被复位;8、用户自定义原件(UDP 元件)是不能被综合的。
一:基本Verilog 中的变量有线网类型和寄存器类型。
线网型变量综合成wire,而寄存器可能综合成WIRE,锁存器和触发器,还有可能被优化掉。
二:verilog 语句结构到门级的映射1、连续性赋值:assign连续性赋值语句逻辑结构上就是将等式右边的驱动左边的结点。
因此连续性赋值的目标结点总是综合成由组合逻辑驱动的结点。
Assign 语句中的延时综合时都将忽视。
2、过程性赋值:过程性赋值只出现在always 语句中。
阻塞赋值和非阻塞赋值就该赋值本身是没有区别的,只是对后面的语句有不同的影响。
建议设计组合逻辑电路时用阻塞赋值,设计时序电路时用非阻塞赋值。
过程性赋值的赋值对象有可能综合成wire, latch,和flip-flop,取决于具体状况。
如,时钟控制下的非阻塞赋值综合成flip-flop。
过程性赋值语句中的任何延时在综合时都将忽略。
建议同一个变量单一地使用阻塞或者非阻塞赋值。
3、逻辑操作符:逻辑操作符对应于硬件中已有的逻辑门,一些操作符不能被综合:===、!==。
4、算术操作符:Verilog 中将reg 视为无符号数,而integer 视为有符号数。
因此,进行有符号操作时使用integer,使用无符号操作时使用reg。
5、进位:通常会将进行运算操作的结果比原操作数扩展一位,用来存放进位或者借位。
如:Wire [3:0] A,B;Wire [4:0] C;Assign C=A+B;C 的最高位用来存放进位。
6、关系运算符:关系运算符:<,>,<=,>=和算术操作符一样,可以进行有符号和无符号运算,取决于数据类型是reg,net 还是integer。
7、相等运算符:==,!=注意:===和!==是不可综合的。
可以进行有符号或无符号操作,取决于数据类型8、移位运算符:左移,右移,右边操作数可以是常数或者是变量,二者综合出来的结果不同。
9、部分选择:部分选择索引必须是常量。
10、BIT 选择:BIT 选择中的索引可以用变量,这样将综合成多路(复用)器。
11、敏感表:Always 过程中,所有被读取的数据,即等号右边的变量都要应放在敏感表中,不然,综合时不能正确地映射到所用的门。
12、IF:如果变量没有在IF 语句的每个分支中进行赋值,将会产生latch。
如果IF 语句中产生了latch,则IF 的条件中最好不要用到算术操作。
Case 语句类似。
Case 的条款可以是变量。
如果一个变量在同一个IF 条件分支中先赎值然后读取,则不会产生latch。
如果先读取,后赎值,则会产生latch。
13、循环:只有for-loop 语句是可以综合的。
14、设计时序电路时,建议变量在always 语句中赋值,而在该always 语句外使用,使综合时能准确地匹配。
建议不要使用局部变量。
15、不能在多个always 块中对同一个变量赎值16、函数函数代表一个组合逻辑,所有内部定义的变量都是临时的,这些变量综合后为wire。
17、任务:任务可能是组合逻辑或者时序逻辑,取决于何种情况下调用任务。
18、Z:Z 会综合成一个三态门,必须在条件语句中赋值19、参数化设计:优点:参数可重载,不需要多次定义模块四:模块优化1、资源共享:当进程涉及到共用ALU 时,要考虑资源分配问题。
可以共享的操作符主要有:关系操作符、加减乘除操作符。
通常乘和加不共用AL U,乘除通常在其内部共用。
2、共用表达式:如:C=A+B;D=G+(A+B);两者虽然有共用的A+B,但是有些综合工具不能识别.可以将第二句改为:D=G+C;这样只需两个加法器.3、转移代码:如循环语句中没有发生变化的语句移出循环.4、避免latch:两种方法:1、在每一个IF 分支中对变量赋值。
2、在每一个IF 语句中都对变量赋初值。
5:模块:综合生成的存储器如ROM 或RAM 不是一种好方法,只是成堆的寄存器,很费资源。
最好用库自带的存储器模块。
五、验证:1、敏感表:在always 语句中,如果敏感表不含时钟,最好将所有的被读取的信号都放在敏感表中。
2、异步复位:建议不要在异步时对变量读取,即异步复位时,对信号赋以常数值。
Averilog 的流行,有两方面的原因;B verilog 与VHDL 相比的优点C典型的verilog 模块D verilog 语法要点A)verilog 的流行,有两方面的原因:1它是cadence 的模拟器verilog-XL 的基础,cadence 的广泛流行使得verilog 在90年代深入人心;2它在硅谷获得广泛使用;B)verilog 与VHDL 相比的优点二者的关系仿佛C 与FORTRAN,具体而言:1 verilog 的代码效率更高:比较明显的对比:VHDL 在描述一个实体时采用entity/architecture 模式,verilog 在描述一个实体时只需用一个"module/edumodule"语句块.此外verilog 的高效性还在很多地方体现出来;2 verilog 支持二进制的加减运算:VHDL 在进行二进制的加减运算时使用conv_***函数或者进行其他的定义,总之必须通知编译器;verilog 直接用形如"c=a+b"的表示二进制的加减运算;3综合时可控制性好:VHDL 对信号不加区分地定义为"signal",而verilog 区分为register 类型的和wire 类型的;但是也有人支持VHDL,认为verilog 和VHDL 的关系仿佛 C 和C++.C)典型的verilog 模块讨论以下典型电路的verilog 描述:*与非门;*加法器; //即全加器*D 触发器;*计数器; //**分频的counter*latch;*时序机;*RAM; // 用synopsys 的*模块引用;*预编译;*与非门的verilog 描述如下://verilog 使用和C 语言相同的注释方法module nd02(a1,a2,zn);//一个verilog 模块总是以module 开始,以endmodule 结束,nd02 是模块名,a1,a2,zn 是模块的 3 个输入输出信号input a1,a2; //告诉编译器a1,a2 对此模块而言是输入,并且数据类型是"bit" output zn; //告诉编译器zn 对此模块而言是输出,数据类型也是"bit"nand (zn,a1,a2); //我理解nand 是运算符,我们不必深究verilog 中的正式术语是什么了吧,总之这种形式表示zn=~(a1 && a2);你一定已经想到类似的运算符还有"not","and","or","nor","xor"了吧;除了"not",括号里的信号数可以任意,例如or (z,f,g,h)表示z=f || g || h,并且延时是3 个单位时间,#x 表示延时x 个单位时间; endmodule*加法器的verilog 描述如下:module ad03d1(A,B,CI,S,CO) ;input [2:0] A,B;//表示A,B 是输入信号,并且是3 位矢量,上界是2,下界是0 input CI;output [2:0] S;output CO;assign {CO,S}=A+B+CI;//一对"{"和"}"表示链接,即将CO 和S 合并成4 位矢量endmodule*带异步清零端的D 触发器的verilog 描述如下:module dfctnb (d,cp,cdn,q,qn);input d,cp,cdn;output q,qn;reg q,qn; //关键字"reg"表示q 和qn 是"register"类型的信号;verilog 中有两种类型的信号:"register"类型和"wire"类型.你可以简单地把register 类型的信号想象为某个D 触发器的输出,而wire 类型的的信号是组合逻辑的输出.二者的最大区别在于:你可以对register 类型的信号进行定时赋值(用wait 语句在特定时刻的赋值,详见下面always 语句),而对于wire 类型的信号则不可.always wait (cdn==0) //表示每当cdn=0 时,将要对D 触发器清零,"always"和"wait" 嵌套,"wait"和"@"是verilog 的两个关键字,表示一旦有某事发生;则执行下面的语句块,"always"有点象C 语言中的"if ... then...","wait"和"@"的区别:请参考本模块.wait 表示本语句块的进程停止,直到"cdn=0"的条件出现才继续;我理解在verilog 中,每个最外层语句块都是一个***的进程;"@"(请看下个always 语句)也表示本语句块的进程停止,直到后面定义"posedge cp"(即出现cp 的上升沿)的事件出现才继续;也许wait 和@可以合二为一吧,但至少到目前verilog 中wait 表示"条件"@,表示"事件";具体运用中,wait 总是用于类似"wait(xxx=1)"之类的场合,@总是用于类似"@(xxx)"或"@(posedge/negedge xxx)"之类的场合整句话的意思是"每当cdn 等于0 时,则作以下事情"begin //begin...end 结构的用法类似于pascal 语言q=0;qn=1;wait (cdn==1);endalways @ (posedge cp)//"@(posedge cp)"中有两个关键字:"@ (x)"表示"每当事件x 发生","posedge x"表示"x 的上升沿,"negedge x"表示"x 的下降沿",整句话的意思是"每当cp 的上升沿,则作以下事情"if (cdn) //如果cdn=1(意味着清零端无效)beginq=d;qn=~q;//"~"表示反相endendmodule*计数器的verilog 描述如下:module count(in,set,cp,out) ;//此计数器,在cp 的上升沿将输入赋给输出,在cp 的上升沿使输出加一input [15:0] in;input set,cp;output [15:0] out;reg [15:0] out;always @ (posedge set)out = in;always @(posedge cp)out = out+1; //verilog 容许一个信号同时出现在等号两端,只要它是reg 类型的endmodule*latch 的描述如下:always @(clk or d)if (clk) q = d;*时序机的verilog 描述如下:always @(posedge CLK) //D 是下一个状态,Q 是当前状态,e1,e2 是输入,a,b 是输出Q=D;always @(Q or othercase) begin //当Q 变化或输入e1,e2 变化时D 要相应变化D = Q; //note1a = 0;b = 0;......case(Q)q1:beginq1 action;if(e1)D=d1;if(e2)D=d2;else D=d3;a = 1; //note 2endq2:beginb = 1;......enddefault:begina = 0;b = 0;......endend---annotations---note 1:This is a custom expression,after reset,D should be equal to Q;note 2:In this state machine,a is only equal to 1 at state q1,inother state,a is equal to 0;*RAM 的verilog 描述如下:module ram(din,ain,dout,aout,rd,wr);//这是一个双口RAM,分别有:输入端:输入地址ain;输入数据din;上升沿有效的写信号wr;/输出端:输出地址aout;输出数据dout;高电平有效的读信号rd;inout [7:0] din;input [7:0] ain,aout;input rd,wr;output [7:0] dout;reg [7:0] memory [0:255]; //请注意这是存储阵列的描述方法,描述了一个共有2 56 个字的存储阵列,每个字是8 位assign dout = rd ? memory[aout] : 8'bz; //"assign"关键字表示并行赋值语句的开始"?"运算符的作用和在C 语言中一样"8'bz"是一个常量,表示一个字节的高阻态,其中8 表示长度是8bit,"'"是固定分割符,"b"表示后面的数据是以比特形式给出的,"z"表示高阻;举例:4'ha 表示长4bit 的数"1010"。