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#2690007http://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学习总结的更多相关文章

  1. Emacs 编辑verilog 学习日记

       终于开始写博客啦.以前一直打算写.由于工作忙一次次延期了.写博客的好处不必多说. 以前有一些学习心得总是用一个word,或者note记录一些.时间久了都不知道弄哪儿去了.. 从今天开始记录学习中 ...

  2. Verilog学习笔记简单功能实现(二)...............全加器

    先以一位全加器为例:Xi.Yi代表两个加数,Cin是地位进位信号,Cout是向高位的进位信号.列表有:   Xi     Yi    Cin Sum Cout 0 0 0 0 0 0 0 1 1 0 ...

  3. Verilog学习笔记基本语法篇(十二)········ 编译预处理

    h Verilog HDL语言和C语言一样也提供编译预处理的功能.在Verilog中为了和一般的语句相区别,这些预处理语句以符号"`"开头,注意,这个字符位于主键盘的左上角,其对应 ...

  4. Verilog学习笔记基本语法篇(十一)········ 常用系统函数

    1)系统任务:$monitor   格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...

  5. Verilog学习笔记基本语法篇(十三)...............Gate门

    Verilog中已有一些建立好的逻辑门和开关的模型.在所涉及的模块中,可通过实例引用这些门与开关模型,从而对模块进行结构化的描述. 逻辑门: and (output,input,...) nand ( ...

  6. Verilog学习笔记简单功能实现(六)...............计数分频电路

    在分频器电路中最重要的概念有两个:1)奇分频/偶分频:2)占空比. A)其中最简单的就是二分频电路,占空比为50%,其Verilog程序为 module half_clk(clr,clk_in,clk ...

  7. Verilog学习笔记简单功能实现(五)...............序列检测设计

    这里采用夏宇闻教授第十五章的序列检测为例来学习; 从以上的状态转换图可以写出状态机的程序: module seqdet(x,out,clk,rst); input x,clk,rst; output ...

  8. Verilog学习笔记设计和验证篇(五)...............层次化事件队列

    详细的了解层次化事件队列有助于理解Verilog的阻塞赋值和非阻塞赋值功能.所谓层次化事件队列指的是用于调度仿真时间的不同Verilog事件队列.在IEEE的5.3节中定义了层次化事件队列在逻辑上分为 ...

  9. Verilog学习笔记设计和验证篇(三)...............同步有限状态机的指导原则

    因为大多数的FPGA内部的触发器数目相当多,又加上独热码状态机(one hot code machine)的译码逻辑最为简单,所以在FPGA实现状态机时,往往采用独热码状态机(即每个状态只有一个寄存器 ...

  10. Verilog学习笔记简单功能实现(三)...............同步有限状态机

    在Verilog中可以采用多种方法来描述有限状态机最常见的方法就是用always和case语句.如下图所示的状态转移图就表示了一个简单的有限状态机: 图中:图表示了一个四状态的状态机,输入为A和Res ...

随机推荐

  1. 跟着百度学PHP[14]-PDO之Mysql的事务处理1

    事务处理:在实际案例当中干一件事的mysql语句(好比转账,小一同学转账100,小二同学收账,在mysql当中小一就要减去转账的钱,小二就要增加100快)倘若该语句执行过程中有任何一条的sql语句出错 ...

  2. 做过的自定义 View

    做过的自定义 View android view custom 音频条状图 需求 详细设计 具体实现 音频条状图 需求 音频图 最终效果类似于音频图中的条状图 只是效果模拟,并不监听真实的音频 条的宽 ...

  3. Chapter 2 JavaScript Basic

    Has 5 primitive types: Undefined, Null, Boolean, String, Number. typeof  operator Undefined return u ...

  4. 远程访问Mysql的解决方案

    在网上有很多关于这个的解决方案,我也采用了 写的比较详细的如:1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更 ...

  5. Django - 安装wagtail

    感觉这个CMS系统不错,试用了一下,记录过程: 1. 安装Virtualenv mkdir wagtail virtualenv --no-site-packages --python=3.5 wag ...

  6. 第二百二十一节,jQuery EasyUI,Form(表单)组件

    jQuery EasyUI,Form(表单)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Form(表单)组件的使用方法,这个组件不依赖于 ...

  7. 第一百六十二节,jQuery入门介绍

    jQuery入门 学习要点: 1.什么是  jQuery 2.学习 jQuery的条件 3.jQuery的版本 4.jQuery的功能和优势 5.其他 JavaScript库 6.是否兼容低版本  I ...

  8. vc6项目-vc8项目 转换日志

    此随笔参考了http://blog.163.com/feng_qihang/blog/static/7129199120093422722430/ 把VC6的项目转换成VS2005项目,经过VS200 ...

  9. IOS无限自动循环滚动banner(源码)

    本文转载至 http://blog.csdn.net/iunion/article/details/19080259  目前有很多APP都开始使用一些滚动banner,我自己也做了一个,部分算法没有深 ...

  10. 储存应用程序的配置信息ini实现方式

    1.C语言中文件操作.2.C++语言中的文件操作.3.Win32 API函数文件操作.4.MFC CFile类文件操作.5.MFC CFileDialog类的文件操作.6.注册表文件操作. 下面我来详 ...