首页 verilog黄金参考指南中文版.pdf

verilog黄金参考指南中文版.pdf

verilog黄金参考指南中文版.pdf

上传者: wanghao198901 2013-12-08 评分1 评论0 下载0 收藏0 阅读量622 暂无简介 简介 举报

简介:本文档为《verilog黄金参考指南中文版pdf》,可适用于硬件技术领域,主题内容包含广州周立功单片机发展有限公司Tel:()Fax:http:wwwzlgmcucomVerilog黄金参考指南V年月版权Doulos保留所有权力本刊物符等。

广州周立功单片机发展有限公司Tel:()Fax:http:wwwzlgmcucomVerilog黄金参考指南V年月版权Doulos保留所有权力本刊物的任何部分在得到DOULOS的书面许可前都不能通过包括电子机械影印录像或其他任何形式或任何方式复制保存在搜索系统或发布在英国和北爱尔兰印刷VerilogXLTM是商标Verilog是CadenceDesignSystemInc的注册商标DOULOSChurchHatch,MarketPlace,RingwoodHampshireBHAWEnglandTel()()Fax()()EmailinfodouloscoukURLhttp:wwwdouloscouk广州周立功单片机发展有限公司Tel:()Fax:http:wwwzlgmcucom序言指南的使用索引用于定义Verilog语法的记号说明Verilog的简单介绍背景语言编译模块结构语句按字母顺序参考的部分AlwaysBeginCase编码标准注释连续赋值DefparamDelay设计流程Disable错误事件表达式ForForceForeverFork函数函数调用门IEEEIfInitial实例化模块名字线网数字运算符参数PATHPULSE$端口过程赋值广州周立功单片机发展有限公司Tel:()Fax:http:wwwzlgmcucom过程连续赋值编程语言接口寄存器Repeat保留字SpecifySpecparam语句强度字符串任务任务使能定时控制用户定义的原语While编译器伪指令编译器伪指令`define`ifdef`timescale系统任务和函数系统任务和函数$display和$write$fopen和$fclose$monitor等$readmemb和$readmemh$strobe$timeformat随机建模定时检查值改变转储命令行选项命令行选项广州周立功单片机发展有限公司Tel:()Fax:http:wwwzlgmcucom序言Verilog黄金参考指南是Verilog硬件描述语言及其语法语义合并以及将它应用到硬件设计的一个简明的快速参考指南Verilog黄金参考指南并不是要代替IEEE的标准Verilog语言参考手册它不像IEEE的标准手册提供了Verilog完整正式的描述相反黄金参考指南以一种方便的参考格式解答了在Verilog的实践应用过程中经常遇到的问题Verilog黄金参考指南也不想成为介绍性的指南这里所提出的信息是一种扼要的参考格式而不是学习像Verilog这种复杂的主题所必要的渐进和共鸣方式但必须承认的是已经熟悉计算机语言的人希望将这个参考指南作为Verilog的课本因此在开始本指南就会对这个主题进行一个简单的非正式介绍Verilog黄金参考指南的主要特征是它包含了从许多Verilog项目中积聚起来的大量实践知识指南不仅提供方便的语法参考很多类似的书也有还对最常见的语言错误提出警告在代码不能编译的时候给出线索指出要看什么地方警告你注意合并问题并对改善你的编码形式提出建议Verilog黄金参考指南是为了给Doulos的系列Verilog训练课程增值也是HDLPaceMakerDoulosVerilog计算机基础训练包的补充指南的使用本指南的主体被分成个主要部分每个部分都按字母顺序组织每一部分都以每页顶部的关键字词条作为索引通常你只要快速翻阅指南查找相应的关键字词条的就可以找到想要的信息如果找不到也可以用最后的完整索引查找本指南的很多信息都围绕Verilog的句法组织但也有另外一些有关编码标准设计流程错误保留字以及在正文按字母顺序参考部分后面的编译器伪指令系统任务和函数以及命令行选项等特殊的部分如果你是Verilog的新手请先阅读次页的Verilog简单介绍索引粗体的索引条目在指南的主体有对应的页剩下的索引条目按重要性的顺序在字符参考部分的页参考后面用于定义Verilog语法的记号说明在任何可能的时候语法定义要写得和例子相似但有需要引入一些额外的记号简单地来说方括号包含可选的项目三个点号…表示重复花括号{}包含的是注释斜体表示语法该部分在别处定义记号的完整描述如下包含注释的花括号{}所不是被定义的Verilog语法的一部分但它向你提供了有关语法定义的补充信息粗体的花括号{}是Verilog句法的一部分连接运算符包含在方括号中的语法是可选的粗体的方括号是Verilog语法的一部分矢量范围位和部分选择存储器元素…表示前面的项目或行的重复次或者多次或者表示一个列表例如Item…表示Item重复次或多次,…表示在用逗号分隔的列表重复例如A,B,C列表中至少有一个项目列表的结尾没有,号小写的字是保留字是Verilog语言的组成部分例如module以大写字母开头的字不是斜体是Verilog的标识符即用户定义的名字它们都不是保留的标识符例如InstanceName斜体的字是句法范畴即在别处完整给出句法名字的定义句法范畴可以在相同的页里定义也可以在独立的页定义还可以在下面定义的其中一个特殊范畴中定义广州周立功单片机发展有限公司Tel:()Fax:http:wwwzlgmcucom斜体=表示在同一页定义和使用的句法范畴特殊的语法范畴MinTypMaxExpression以Expression定义UnsignedNumber以Number定义SomethingExpression=Expression其中Something给出有关表达式的含意信息例如ConstantExpressionConstantMinTypMaxExpressionVerilog的简单介绍下面向不懂Verilog语言的读者在技术上简要介绍一下Verilog背景Verilog硬件描述语言HDL是描述电子电路行为和结构的一种语言是一种IEEE标准IEEEStdVerilog用于模拟从随机和纯行为到门级和开关级的抽象范围等层次的数字电子电路功能也用于从许多抽象寄存器传输级描述合并即自动产生门级描述Verilog一般用于支持高层次的设计或基于语言的设计其中电子设计在用自动合并工具进行详细设计前要通过高层次的完全抽象仿真来检验Verilog也广泛应用于IC的门级检验包括仿真故障仿真和定时检验Verilog最初是在年由GatewayDesignAutomation公司开发VerilogXL仿真器的时候一起开发出来年CadenceDesignSystems公司并购Gateway公司同时拥有对Verilog语言和VerilogXL仿真器的权力年Cadence将Verilog语言不是VerilogXL放到公共领域为了使Verilog语言通过IEEE标准化过程一个非赢利性组织OpenVerilogInternationalOVI将它不断推进结果在年Verilog成为一个IEEE标准此后OVI仍继续不断维护和开发这种语言语言在本部分和指南剩下的部分以大写字母开头的斜体字都是技术术语都可以在本指南的主体中找到硬件设计的层次部分在Verilog中用模块Module描述模块定义了硬件单元的接口即输入和输出及其内部结构或行为大量的原语或者门Gates都内置在Verilog语言内它们表示基本的逻辑门例如andor另外还可以定义用户定义的原语UserDefinedPrimitivesUDPs电子电路的结构通过在高层模块内对模块和原语UDPs和门举实例Instances来描述而且实例之间通过线网Nets连接线网表示一个电气连接一条线路或总线端口Port连接列表用于将线网连接到模块的端口或者连接到原语的实例其中一个端口表示一个管脚寄存器Registers见下面也可以连接到实例的输入端口只能连接到输入端口线网和寄存器的值由逻辑值X未知或未初始化的和Z高阻或悬空组成除了逻辑值外线网还有强度Strength值强度广泛地用于开关级模型以及解释网络有超过一个驱动器的情况电子电路的行为是用Initial和Aways结构以及连续赋值ContinuousAssignments描述这些结构以及UDPs和门表示设计的层次树的叶子每个InitialAlways连续赋值UDP和门实例相对于所有其他结构是同时执行的Initial或Always内的语句Statements在很多方面上都和软件编程语言的语句相似它们在用定时控制TimingControls规定的时间例如延迟以及用仿真事件控制触发执行语句在BeginEnd块顺序地执行在ForkJoin块并行地执行连续赋值语句修改线网的值Initial和Aways修改寄存器的值Initial或Always可以分解成有给定变量的指定的任务Tasks和函数FunctionsVerilog语言还有大量内置的系统任务SystemTasks和函数Functions编程语言接口ProgrammingLanguageInterfacePLI是Verilog语言的一个组成部分它提供了一种和调用系统任务和函数相同的方法调用以C写的函数广州周立功单片机发展有限公司Tel:()Fax:http:wwwzlgmcucom编译Verilog源代码通常输入到计算机的一个或多个文本文件中然后这些文本文件被提交到Verilog编译器或解释器编译用于仿真或合并的数据文件有时候仿真在编译后立即进行不创建中间的数据文件模块结构moduleM(P,P,P,P)inputP,Poutput:PinoutPreg:R,M:wireW,W,W,WparameterC="Thisisastring"initialbegin:BlockName语句endalwaysbegin语句end连续赋值assignW=Expressionwire(Strong,Weak):#(,)W=Expression模块实例COMPU(W,W)COMPU(P(W),P(W))taskTinputAinoutAoutputAbegin语句endendtaskfunction:FinputAbegin广州周立功单片机发展有限公司Tel:()Fax:http:wwwzlgmcucom语句F=Expressionendendfunctionendmodule语句#delaywait(Expression)(AorBorC)(posedgeClk)Reg=ExpressionReg<=ExpressionVectorRegBit=ExpressionVectorRegMSB:LSB=ExpressionMemoryAddress=ExpressionassignReg=ExpressiondeassignRegTaskEnable()disableTaskOrBlock>EventNameif(Condition)elseif(Condition)elsecase(Selection)Choice:Choice,Choice:default:endcasefor(I=I<MAXI=I)广州周立功单片机发展有限公司Tel:()Fax:http:wwwzlgmcucomrepeat()while(Condition)forever这个快速参考语法摘要不遵从本指南剩余部分所使用的符号惯例广州周立功单片机发展有限公司Tel:()Fax:http:wwwzlgmcucomVerilog黄金参考指南按字母顺序参考的部分Always包含一条或多条语句过程赋值任务使能ifcase和循环语句这些语句在仿真运行中重复执行由定时控制管理语法alwaysStatement在何处使用module<HERE>endmodule规则•always只能赋值寄存器regintegerrealtimerealtime类型•启动仿真时所有always都开始执行而且在仿真过程中持续执行当到达always的最后一条语句时程序返回到always的第一条语句继续执行注意•如果Always包含超过一条语句语句要包含在beginend或forkjoin块中•没有定时控制的always将永远循环合并always是其中一条很有用的Verilog合并语句但always通常是不合并的为了使结果最好代码应受到下面其中一种模板的限制always(Inputs)所有输入begin组合逻辑endalways(Inputs)所有输入if(Enable)begin锁存器的动作endalways(posedgeClock)只是时钟begin同步的动作endalways(posedgeClockornegedgeReset)广州周立功单片机发展有限公司Tel:()Fax:http:wwwzlgmcucom只是时钟和复位beginif(!Reset)测试异步复位的有效激活电平异步行动else同步行动end给出触发器逻辑举例下面的例子是一个寄存器传送级alwaysalways(posedgeClockornegedgeReset)beginif(!Reset)异步复位Count<=elseif(!Load)同步载入Count<=DataelseCount<=Countend接下来的例子是描述组合逻辑的alwaysalways(AorBorCorD)beginR={A,B,C,D}F=begin:LoopintegerIfor(I=I<I=I)if(RI)beginF=IdisableLoopendend循环endBegin用于组合语句使它们按顺序执行Verilog的语法通常要求例如在always中只有一条语句如果需要超过一条语句语句就要被包含在一个beginend块内语法begin:LabelDeclarations广州周立功单片机发展有限公司Tel:()Fax:http:wwwzlgmcucomStatementsendDeclaration={either}RegisterParameterEvent在何处使用见语句规则•beginend块必须包含至少一条语句•Beginend块内的语句按顺序执行定时控制与前一语句有关执行完beginend块的最后一条语句后整个beginend块的执行也完成•Beginend和forkjoin块可在自己内部或相互之间嵌套•如果beginend块要包含局部声明必须先命名这个beginend块即必须有标记•如果要禁能一个beginend块必须先命名这个块注意仿真中VerilogLRM允许beginend块被交叉执行这就是说即使beginend块包含的两个相邻语句之间没有定时控制仿真器也可以选择执行另一个过程的部分例如另一个always的语句这就是Verilog语言有不确定性的原因提示•在没有局部声明和块不会被禁能的情况下也可以给beginend块加上标记增加其可读性•不会在别处使用的寄存器可以用局部声明来声明这使声明更明确举例initialbegin:GenerateInputsintegerIfor(I=I<I=I)#Period{A,B,C}=IendinitialbeginLoad=时刻Enable=Reset=#Reset=时刻#Enable=时刻#Load=时刻end广州周立功单片机发展有限公司Tel:()Fax:http:wwwzlgmcucomCase一个语句基于case表达式的值条件地执行最多一个分支语法CaseKeyword(Expression)Expression,:Statement{表达式可以是变量}Expression,:Statement{任意数量的情况}default:Statement{不一定在结尾}endcaseCaseKeyword={either}casecasexcasez在何处使用见语句规则•casex语句的X和Z以及casez语句的Z表示无关•最多可以有一条default语句当没有标记表达式符合case表达式时执行default语句标记是在冒号左面的一个表达式或是用逗号分隔的表达式列表也可以是保留字defaultdefault后面可以有或者没有冒号•如果标记是用逗号分隔的两个或多个表达式列表只要case表达式符合其中一个标记表达式就认为标记就符合case表达式•如果没有标记表达式符合case表达式而且没有default语句case语句不起作用注意•如果特殊的标记要执行超过一条语句语句必须包含在beginend或forkjoin块内•如果相应的标记是第一个符合case表达式的标记case只会执行这个分支Case的标记不需要互斥因此当相同的标记被错误地重复使用时Verilog编译器不会

职业精品

打卡考勤管理制度(附各式详细申请表).doc

员工考勤与值班管理制度(全网最详细制度).doc

指纹打卡考勤细则.doc

办公设备、办公用品管理制度.doc

用户评论

0/200
    暂无评论
上传我的资料

精彩专题

相关资料换一换

资料评价:

/ 93
所需积分:1 立即下载

意见
反馈

返回
顶部