Verilog学习总结
1.多个always语句不能对同一变量赋值。
2.assign语句只能进行阻塞赋值,用来描述组合逻辑。
3.verilog描述方式:结构描述(门级描述和模块调用)、数据流描述(assign,wire型)、行为描述(initial、always,reg型)。
4.数据流描述根据信号(变量)之间的逻辑关系,采用连续赋值语句描述逻辑电路的方式,称为数据流描述。狭义理解:将传统意义上的“逻辑表达式”,运用VerilogHDL中的运算符,改变成连续赋值语句(assign语句)中的表达式。
assign 连线型变量名= 赋值表达式;
wire型变量没有数据保持能力,只有被连续驱动后,才能取得确定值。(而寄存器型变量只要在某时刻得到过一次过程赋值,就能一直保持该值,直到下一次过程赋值。)若一个连线型变量没有得到任何连续驱动,它的取值将是不定态“x”。assign连续赋值语句就是实现对连线型变量进行连续驱动的一种方法。
进一步讲,assign持续赋值语句对wire型变量赋值后,始终监视赋值表达式中的每一个操作数,只要赋值表达式中任一操作数发生变化,立即对wire型变量进行更新操作,以保持对wire型变量的连续驱动。体现了组合逻辑电路的特征——任何输入的变化,立即影响输出。所以,可根据组合电路的逻辑表达式,用assign持续赋值语句进行描述。数据类型缺省为wire型。
而reg型的驱动可以通过过程赋值语句实现,变量被赋值后在接受下一次的过程赋值之前,将保持原值不变。
5.永远不要忘记写default,以避免因为没有考虑完整case的所有分支而引入了不必要的锁存器。若正常功能的所有情况都包含在了case的显示条件判断分支中,则在default语句中,可以给输出变量赋x值。在仿真时,错误的x值可以传播,可以更容易发现因为case分支没有写全造成的错误。而在综合时,综合工具会自动选区最合适的固定值在default情况下赋值给输出信号,以生成最优化的电路。
6.在设计一个模块电路时,应尽量采用参数化的设计,即多用parameter定义一些可配置的电路参数。这样,该模块可以被更灵活的使用。在模块实例化时可重定义模块参数或使用defparam。如:fulladder #(2,3) u_fulladder。
7.多模块设计。建模思想。
8.分别用Quartus和ModelSim进行功能仿真和时序仿真。
9.当begin-end块中定义了局部变量时,必须有一个模块名。
10.FPGA上电寄存器初始值问题。
You can apply the Quartus II integrated synthesis Power-Up Level logic option to a
specific register or to a design entity, module or subdesign. If you do so, every register
in that block receives the value. Registers power up to 0 by default; therefore you can
use this assignment to force all registers to power up to 1 using NOT gate push-back.
如果要规定寄存器上电的电平
需要在Analysis & Synthesis Settings 中去掉Power-Up Don't Care 选项,
如果选择这个选项会让编译器按照逻辑优化对寄存器初值任意取值,或者根本就不关心是什么值。
而它是默认选中的。
当去掉这个选项之后,就可以在你的HDL源文件中,为寄存器变量赋初值了。
如Verilog中:
reg q = 1'b1;
11.时序的精确控制,定时计数器。
12.Verilog具有强大的位操作能力。
13.else,in RTL
inout use in top module(PAD)
dont use inout(tri) in sub module
也就是说,在内部模块最好不要出现inout,如果确实需要,那么用两个port实现,到顶层的时候再用三态实现。理由是:在非顶层模块用双向口的话,该双向口必然有它的上层跟它相连。既然是双向口,则上层至少有一个输入口和一个输出口联到该双向口上,则发生两个内部输出单元连接到一起的情况出现,这样在综合时往往会出错。
14.组合逻辑复杂时,优先always语句,语句中被赋值的必须是reg类型,可以实现较复杂的语句。
15.设计电路时要区分组合电路和时序电路。
16.要用到值的上一次值时,需要寄存器保存该值。
17.对于组合逻辑多输出,在case语句之前先赋给默认值,这样做避免了锁存器的产生,减少了在每一个case分支语句中对于其他输出的赋值,且强调了分支语句中某个输出的改变。
18.进入FPGA的信号先进行同步,保证同步设计时序,提高系统工作频率。
19.Verilog层次事件队列,优先级高到低:1.活跃事件:连续赋值(assign)、阻塞赋值、非阻塞赋值右式计算、$display、原语元件事件;2.非活跃事件:显示0延时的阻塞赋值、带PLI例程的回调过程;3.非阻塞赋值左值更新;4.监控事件:$monitor、$strobe;5.未来事件:未来非活跃事件、未来非阻塞赋值更新事件。
20.状态机跳转判断条件不应有较大的计数器(大于4位),应该移到状态机外部产生使能信号进行判断。
21.顶层尽量只做模块例化,不出现胶连逻辑,包括与非或门和选择器。
22.推荐模块间数据传递要寄存器化。
23.利用时钟使能电路解决设计中可能的多时钟,进而避免了不必要的亚稳态发生,在降低设计复杂度的同时也提高了设计的可靠性。详见http://www.cnblogs.com/qiweiwang/archive/2010/12/18/1910186.html#2690007和http://blog.163.com/xupengee@126/blog/static/141308243201052384539804/。
24.延迟n个时钟利用拼接运算符{}完成辅以assign,详见http://www.cnblogs.com/oomusou/archive/2009/06/15/verilog_dly_n_clk.html。
25.不要同时使用同一时钟的上升沿和下降沿,可以考虑利用PLL将原时钟倍频或者相移180度。
26.使能信号扇出过大,可以逻辑赋值或者打拍。
27.时序应该是先设计好,再实现。调试的时候可以通过SignalTap抓信号比对时序,进行修改(状态机输出信号)。
28.多周期约束能解决的问题:(1) 组合逻辑延时大,不可能在下一个时钟沿达到;(2) 不需要在下一时钟沿稳定; (3) 不同时钟域,但是有确定相位关系。
29.ALTERA的RAM宏模块默认输出时寄存一拍的,可以根据实际需要不寄存输出。
30.利用Modelsim、Matlab和SignalTap进行互相验证,尤其是Modelsim和Matlab的联调(基于读文本txt的方式),详见http://www.cnblogs.com/aikimi7/archive/2013/06/06/3122573.html。
31.ModelSim仿真出现“Unresolved reference to'...'”.,后续端口大小不匹配,原因是模块例化时端口前面没有加一点!!!
32.重要:更改状态机状态参数和其他parameter型参数时,为了使修改后的参数生效,务必重新生成bsf,用以顶层模块连接!!
33.Verilog-2001将`bz和`bx赋值扩展到变量的全部宽度,即wire [63:0] my_data = `bz,64位都为高阻值; 支持对数或者幂运算符“**”;带符号的算法运算;
Verilog介绍:http://zh.wikipedia.org/wiki/Verilog_HDL,Verilog-2001新特性:http://blog.sina.com.cn/s/blog_6e44841b0100mm91.html。
34.FIFO的作用:跨时钟域、数据缓冲、总线宽度转换等。
Verilog学习总结的更多相关文章
- Emacs 编辑verilog 学习日记
终于开始写博客啦.以前一直打算写.由于工作忙一次次延期了.写博客的好处不必多说. 以前有一些学习心得总是用一个word,或者note记录一些.时间久了都不知道弄哪儿去了.. 从今天开始记录学习中 ...
- Verilog学习笔记简单功能实现(二)...............全加器
先以一位全加器为例:Xi.Yi代表两个加数,Cin是地位进位信号,Cout是向高位的进位信号.列表有: Xi Yi Cin Sum Cout 0 0 0 0 0 0 0 1 1 0 ...
- Verilog学习笔记基本语法篇(十二)········ 编译预处理
h Verilog HDL语言和C语言一样也提供编译预处理的功能.在Verilog中为了和一般的语句相区别,这些预处理语句以符号"`"开头,注意,这个字符位于主键盘的左上角,其对应 ...
- Verilog学习笔记基本语法篇(十一)········ 常用系统函数
1)系统任务:$monitor 格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...
- Verilog学习笔记基本语法篇(十三)...............Gate门
Verilog中已有一些建立好的逻辑门和开关的模型.在所涉及的模块中,可通过实例引用这些门与开关模型,从而对模块进行结构化的描述. 逻辑门: and (output,input,...) nand ( ...
- Verilog学习笔记简单功能实现(六)...............计数分频电路
在分频器电路中最重要的概念有两个:1)奇分频/偶分频:2)占空比. A)其中最简单的就是二分频电路,占空比为50%,其Verilog程序为 module half_clk(clr,clk_in,clk ...
- Verilog学习笔记简单功能实现(五)...............序列检测设计
这里采用夏宇闻教授第十五章的序列检测为例来学习; 从以上的状态转换图可以写出状态机的程序: module seqdet(x,out,clk,rst); input x,clk,rst; output ...
- Verilog学习笔记设计和验证篇(五)...............层次化事件队列
详细的了解层次化事件队列有助于理解Verilog的阻塞赋值和非阻塞赋值功能.所谓层次化事件队列指的是用于调度仿真时间的不同Verilog事件队列.在IEEE的5.3节中定义了层次化事件队列在逻辑上分为 ...
- Verilog学习笔记设计和验证篇(三)...............同步有限状态机的指导原则
因为大多数的FPGA内部的触发器数目相当多,又加上独热码状态机(one hot code machine)的译码逻辑最为简单,所以在FPGA实现状态机时,往往采用独热码状态机(即每个状态只有一个寄存器 ...
- Verilog学习笔记简单功能实现(三)...............同步有限状态机
在Verilog中可以采用多种方法来描述有限状态机最常见的方法就是用always和case语句.如下图所示的状态转移图就表示了一个简单的有限状态机: 图中:图表示了一个四状态的状态机,输入为A和Res ...
随机推荐
- 跟着百度学PHP[14]-PDO之Mysql的事务处理1
事务处理:在实际案例当中干一件事的mysql语句(好比转账,小一同学转账100,小二同学收账,在mysql当中小一就要减去转账的钱,小二就要增加100快)倘若该语句执行过程中有任何一条的sql语句出错 ...
- 做过的自定义 View
做过的自定义 View android view custom 音频条状图 需求 详细设计 具体实现 音频条状图 需求 音频图 最终效果类似于音频图中的条状图 只是效果模拟,并不监听真实的音频 条的宽 ...
- Chapter 2 JavaScript Basic
Has 5 primitive types: Undefined, Null, Boolean, String, Number. typeof operator Undefined return u ...
- 远程访问Mysql的解决方案
在网上有很多关于这个的解决方案,我也采用了 写的比较详细的如:1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更 ...
- Django - 安装wagtail
感觉这个CMS系统不错,试用了一下,记录过程: 1. 安装Virtualenv mkdir wagtail virtualenv --no-site-packages --python=3.5 wag ...
- 第二百二十一节,jQuery EasyUI,Form(表单)组件
jQuery EasyUI,Form(表单)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Form(表单)组件的使用方法,这个组件不依赖于 ...
- 第一百六十二节,jQuery入门介绍
jQuery入门 学习要点: 1.什么是 jQuery 2.学习 jQuery的条件 3.jQuery的版本 4.jQuery的功能和优势 5.其他 JavaScript库 6.是否兼容低版本 I ...
- vc6项目-vc8项目 转换日志
此随笔参考了http://blog.163.com/feng_qihang/blog/static/7129199120093422722430/ 把VC6的项目转换成VS2005项目,经过VS200 ...
- IOS无限自动循环滚动banner(源码)
本文转载至 http://blog.csdn.net/iunion/article/details/19080259 目前有很多APP都开始使用一些滚动banner,我自己也做了一个,部分算法没有深 ...
- 储存应用程序的配置信息ini实现方式
1.C语言中文件操作.2.C++语言中的文件操作.3.Win32 API函数文件操作.4.MFC CFile类文件操作.5.MFC CFileDialog类的文件操作.6.注册表文件操作. 下面我来详 ...