Verilog学习总结.ppt_第1页
Verilog学习总结.ppt_第2页
Verilog学习总结.ppt_第3页
Verilog学习总结.ppt_第4页
Verilog学习总结.ppt_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Verilog学习总结,verilog特点, 区分大小写,所有关键字都要求小写 不是强类型语言,不同类型数据之间可以赋值和运算 /是单行注释 可以跨行注释 描述风格有系统级描述、行为级描述、RTL级描述、门级描述,其中RTL级和门级别与具体电路结构有关,行为级描述要遵守可综合原 门级描述使用门级模型或者用户自定义模型UDP来代替具体基本元件,在IDE中针对不同FPGA器件已经有对应的基本元件原语,verlog语法要点, module endmodule之间由两部分构成:接口描述和逻辑功能描述 IO端口种类: input output inout 相同位宽的输入输出信号可以一起声明, input

2、3:0 a,b; 不同位宽的必须分开写 内部信号为reg类型,内部信号信号的状态: 0 1 x z, 3bx1=3bxx1 x/z会往左扩展 3b1=3b001 数字不往左扩展 逻辑功能描述中常用assign描述组合逻辑电路,always既可以描述组合逻辑电路又可以描述时序逻辑电路,还可以用元件调用方法描述逻辑功能 always之间、assign之间、实例引用之间以及它们之间都是并行执行,always内部是顺序执行,verlog语法要点,常量格式: : 默认进制为10进制 默认位宽为32位 位宽是从二进制宽度角度而言的 由位宽决定从低位截取二进制数2hFF=2b11,通常由被赋值的reg变量位

3、宽决定 parameter常用于定义延迟和变量位宽,可用常量或常量表达式定义,verlog语法要点,变量种类: wire reg memory IO信号默认为wire类型,除非指定为reg类型wire可以用作任何输入输出端口 wire包括input output inoutwire不带寄存功能 assign赋值语句中,被赋值的信号都是wire类型assign之所以称为连续赋值,是因为不断检测表达式的变化reg类型可以被赋值后再使用,而不是向wire一样只能输出 reg类型变量初始值为x always模块里被赋值的信号都必须定义为reg类型,因为always可以反复执行,而reg表示信号的寄存,

4、可以保留上次执行的值reg类型变量与integer变量不同,即使赋负值,实质上也是按二进制无符号数存储的,integer是有符号数,verlog语法要点,verilog中所有内部信号都是静态变量,因为它们的值都在reg中存储起来 memory型只有一维数组,由reg型变量组成 memory初始化只能按地址赋值,不能一次性赋值 1*256的memory写法: reg mema255:0 mema3=0; 不同位宽的变量之间赋值,处理之前都以被赋值的变量位宽为准扩展或截取 Aa:b 无论a b谁大,a总是实际电路的信号高位,b总是实际电路的信号低位 算术运算中如果有X值则结果为X for循环中的变

5、量另外定义成integer,因为它不是实际信号,有正负;reg则以无符号数存在 = 和!=只比较0、1,遇到z或x时结果都为x (x在if中算做假条件),结果可能是1、0、x =和!=比较更加苛刻,包括x和z的精确比较,结果可能是0、1 end 如果A事件不发生则永远不能执行下去,被阻塞了 由于时钟的延时(往往在ps级),多个always(posedge)之间究竟谁先执行是个未知数 使用原则: 同一个always过程块内建立时序电路用= 纯组合逻辑电路用=,生成的电路结构最简单,执行速度最快 同一个always块内不要混用=和= 不要在多个always块内对同一个变量赋值(多源驱动),verl

6、og语法要点,if else的三种形式,第三种形式适合描述优先编码器 if条件中0/x/z当成假,1当成真,非0的数值也当成真 case语句的三种: case(四种状态的比较) casez(忽略z) casex(忽略x和z,只看哪些位的信号有用) case语句中所有表达式值的位宽必须相等,default中不能将nbx用bx代 避免生成锁存器的方法: 电平触发时if后加else case中加default ? 使用casex会将不必要的状态视为无关项,使得综合出来的电路最简单 两种特殊的括号: begin 顺序语句. end fork 并行语句. join,其差别在于块内语句的起止时间、执行顺序

7、、相对延时 块被命名后,其内部变量可以被调用,因为变量都是静态的(调用信号:对应电路中的一个信号线被引到另一处),verlog语法要点,initial块只无条件执行一次 always块在满足条件时不断执行 initial常用来写测试文件, always块常用来写电路描述 always既可以描述组合逻辑电路又可以描述时序逻辑电路 always如果后面有敏感信号列表则不能用wait语句 always既可以描述电平触发又可以描述边沿触发,wait只能描述电平触发 assign常用于描述组合逻辑电路 测试文件中一般都是现initial 后always 生成语句:生成快的本质是使用循环内的一条语句代替多

8、条重复的verilog语句,简化了用户的编程。 genvar用于声明生成变量,生成变量只能用在生成快之间 仿真时,仿真器会将生成块中的代码展平,在确立后的方针代码中,生成变量是不存在的。最好是先想象出来循环生成语句被展平后的电路样子,再写相关的描述语句,verlog语法要点,task和function的区别: task可以定义自己的仿真时间单位,function与主模块共用同一个仿真时间单位函数不能启动任务,任务能够启动函数函数至少要有一个输入变量,任务没有输入变量函数返回一个值,任务不返回值,verlog语法要点,一个模块的设计包括3个部分: 电路模块的设计 测试模块的设计 设计文档的编写

9、设计者通过布局布线工具生成具有布线延迟的电路,再进行 仿真,得到时序分析报告 从时序分析报告中可以知道电路的实际延迟t,同步电路内每个时钟周期要大于t,从而可确定该运算逻辑的最高频率 综合器之所以能够实现加法器、乘法器是因为库中已经存在可配置的参数化器件模型 FPGA内总线宽度容易自定义,以便实现高速数据流, 三态数据总线相当于数据流的控制阀门 数字系统内数据流的控制: 开关(或三态数据总线)、数据暂存部件(寄存器)、 同步状态机控制(整个系统在一个时钟内),verlog语法要点,流水线操作pipe line: K级流水线就是从组合逻辑的输入到输出恰好有K个寄存器组,上一级的输出是下一级的输入

10、 流水线操作获得第一个结果的时间要比不用流水线操作的时间长,但以后结果获得时间都只需要一个时钟周期,提高了数据吞吐量 流水线操作的保证:TclkK*(组合逻辑延迟+触发器的建立保持时间/触发时间),即时间片段要长于最大路径延迟 体现了面积换速度的思想,在综合时考虑的是以面积小为主还是以速度为主 本质上是一种同步逻辑,verlog语法要点,同步时序逻辑和异步时序逻辑: 同步时序逻辑指所有寄存器组由唯一时钟触发 always(posedgeclk) 或always(negedageclk) 异步时序逻辑指触发条件不唯一,任意一个条件都会引起触发always(posedgeclk or poseda

11、ge reset) 目前的综合器是以同步时序逻辑综合的,因为同步时序逻辑较异步时序逻辑可靠 严格的同步要求时钟信号传递速度远远大于各部分的延迟,实际中clk要单独用线,而不要经过反相器等部件 always (posedge. ) begin .=. end 表示同步时序逻辑(同时刻赋值) 不同速率数据接口的处理方法(异步数据的处理方法):帧同步 FIFO 双端口RAM,verlog语法要点,同步状态机: 包括moore和mealy型两种,及其反馈模型(是一种反馈控制系统,当前状态就是其内部状态变量) 状态机的开发步骤: 根据实际问题列出输入输出变量和状态数 画出状态图并化简 写出状态转移真值表

12、得到逻辑表达式 用D触发器或JK触发器构建电路(目前用D触发器多) verilog描述时只需要得到简化的状态图就可以描述 状态编码方式: 独热码 格雷码状态机主体程序有单always描述方式和多always描述方式 采用case/casez/casex建立模型最好,因为x是无关态,生成的电路最简单 default: state=bx与实际情况更一致,效果等同于 default: state=idle 只有同步状态机才能被目前的综合,verlog语法要点,for语句会将所有变量的情况展开,占用巨量逻辑资源,替代 办法是用计数器和case语句说明所有情况 有优先级的if else结构会消耗更多资源

13、,建议用无优先级的 case替代模块的复用往往比代码上修改节省的资源多PLL的分 频、倍频、移相操作会增加设计精度同步时序电路的延时#x 通常用于仿真测试,实际硬件延时是:长延迟用计数器,小 延迟用D触发器,此方法用来取代延迟链同步电路中,稳定的 数据采用必须满足采样寄存器的建立和保持时间reg类型在 always中不一定综合成时序电路,也可能是组合逻辑电路乒乓操作与作用 异步时钟域同步问题延迟包括门延迟和线延迟组合逻辑产生的时钟仅能应用在时钟频率较低、精度要求不高的情况下增减敏感信号得到的结果一样,补充,verilog的标识符区分大小写,关键字使用小写; 用来进行单行注释,用* *来进行跨行

14、注释; 标识符由字母、数字、下划线构成,并以字母开头; 关键字又叫保留字,只有小写的关键字才是保留字; 信号的状态有4种: 0 1 x zx和z在描述电路时不区分大小写,在仿真时大小写有不同意义;字符和字符串都以ASICII码形式存在,也可以当成电路内的信号; 字符串必须包含在同一行,不能分成多行书写; 如果表达式或者赋值语句中将字符串当成操作数,则字符串 中的每个字符都被看成8位的ASCII值序列;,补充,常量表达式中:x z不区分大小写;进制符号h o d b与H O D B不区分大小写;十六进制中af不区分大小写;下划线_用于提高可读性;?在数中可以代替z;x和z的左端补位; 可综合的信

15、号类型:wire reg memory 它们用来描述数字电路不可综合的数据类型:integer real 它们只用仿真,位于testbench中,补充,wire是连线的抽象模型,不能保存数据,其值由驱动元的值决定; wire不能用在always或initial块中; wire的默认值为高阻z; wire的使用情形: 1.作为模块的输出端口 2.用连续赋值语句assign赋值; reg是1位寄存器(触发器)的抽象模型,可以保存数据; reg必须用在always或initial块中; reg的默认值为x; reg的使用情形:1.阻塞赋值= 2.非阻塞赋值= memory只能是一维的; memory

16、只能对每个单元分别初始化,方法:1.一个一个赋值 2. 通过系统任务$readmem赋值reg3:0 fc;/一个4位寄存器 reg fc3:0 /4个一位寄存器 parameter的作用:仿真开始以前对其进行赋值,整个仿真过程中保持其值不变;,补充,关系运算符将以逻辑1或逻辑0返回比较的结果;= !=的返回值有0 1 x三种情况,= !=的返回值只有0 1两种情况; verilog由于是描述电路的,用于位的操作较多,有: 位逻辑操作,移位操作,并置操作,归约操作;位逻辑运算的结果中,位数与原操作数一样多;归约符是在原操作数的所有位上进行操作,并产生1位结果;并置运算可以发生在bit与bit之

17、间 bit与矢量之间 矢量与矢量之间,补充,用于仿真的系统任务: 所有系统任务都必须在initial或always内; 所有系统任务都必须以$开头; 常见系统任务: 显示任务($diplay系列和$write系列) 监控任务($monitor系列) 探测任务($strobe系列) 文件打开、输入、关闭任务(&fopen &fclose &fdisplay.) 读取文件任务($readmemb $readmemh) 仿真结束控制任务($finish $stop) 随即信号任务($random),补充,过程块: initial块和always块一个module内可以包含多个initial或alwa

18、ys模块;所有initial或always块在0时刻开始并行执行,各initial或always块内部顺序执行;initial过程块主要是面向testbench的,通常不具有可综合性;always过程块在描述电路时既可以描述组合逻辑电路(电平敏感)又可以描述时序逻辑电路(边沿敏感);写testbench时initial通常用于初始化以及顺序波形的描述,always通常用于重复波形的描述;,补充,任务task与函数function: 为了描述模块中被多次执行的部分以及为了增强代码的易读性verilog中的高级程序语句如for循环语句只用在写testbench中;begin end和fork join是两种特殊的括号if语句的第三种形式适合描述优先编码器,case语句适合描述

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论