一、综合的一般原则

1) 综合之前一定要进行仿真,这是因为仿真会暴露逻辑错误,所以建议大家这样做。如果不做仿真,没有发现的逻辑错误会进入综合器,使综合的结果产生同样的逻辑错误。
2) 每一次布局布线之后都要进行仿真,在器件编程或流片之前要做最后的仿真。
3) 用Verilog HDL描述的异步状态机是不能综合的,因此应该避免用综合器来设计,如果一定要设计异步状态机则可用电路图输入的方法来设计。
4) 如果要为电平敏感的锁存器建模,使用连续赋值语句是最简单的方法。

二、always块指导原则

1) 每个always块只能有一个事件控制"@(event-expression)",而且要紧跟在always关键字后面。
2) always块可以表示时序逻辑或者组合逻辑,也可以用always块既表示电平敏感的透明锁存器又同时表示组合逻辑。但是不推荐使用这种描述方法,因为这容易产生错误和多余的电平敏感的透明锁存器。
3) 带有posedge 或 negedge 关键字的事件表达式表示沿触发的时序逻辑,没有posedge 或negedge关键字的表示组合逻辑或电平敏感的锁存器,或者两种都表示。在表示时序和组合逻辑的事件控制表达式中如有多个沿和多个电平,其间必须用关键字 “ or ” 连接 。
4) 每个表示时序always块只能由一个时钟跳变沿触发,置位或复位最好也由该时钟跳变沿触发。
5) 每个在always块中赋值的信号都必需定义成reg型或整型。整型变量缺省为32bit,使用Verilog操作符可对其进行二进制求补的算术运算。综合器还支持整型量的范围说明,这样就允许产生不是32位的整型量。句法结构: integer[<msb>:<lsb>]。
6) always块中应该避免组合反馈回路。每次执行always块时,在生成组合逻辑的always块中赋值的所有信号必需都有明确的值;否则,需要设计者在设计中加入电平敏感的锁存器来保持赋值前的最后一个值,只有这样综合器才能正常生成电路。如果不这样做综合器会发出警告提示设计中插入了锁存器。如果在设计中存在综合器认为不是电平敏感锁存器的组合回路时,综合器会发出
错误信息(例如设计中有异步状态机时)。

赋值:
1) 对一个寄存器型(reg)和整型(integer)变量给定位的赋值只允许在一个always块内进行,如在另一always块也对其赋值,这是非法的。
2) 把某一信号值赋为'bx,综合器就把它解释成无关状态,因而综合器为其生成的硬件电路最简洁。

三、异步、同步置位与复位

(1)异步置位与复位是与时钟无关的.当异步置位与复位到来时它们立即分别置触发器的输出为1或0,不需要等到时钟沿到来才置位或复位。把它们列入always块的事件控制括号内就能触发always块的执行,因此,当它们到来时就能立即执行指定的操作。

(2)同步置位与复位是指只有在时钟的有效跳变沿时刻置位或复位信号才能使触发器置位或复位(即,使触发器的输出分别转变为逻辑1或0)。

四、阻塞与非阻塞赋值

在描述组合逻辑的 always 块中用阻塞赋值,则综合成组合逻辑的电路结构。
 在描述时序逻辑的 always 块中用非阻塞赋值,则综合成时序逻辑的电路结构。

五、模块编程要点

1) 时序电路建模时,用非阻塞赋值。
2) 锁存器电路建模时,用非阻塞赋值。
3) 用 always 块建立组合逻辑模型时,用阻塞赋值。
4) 在同一个 always 块中建立时序和组合逻辑电路时,用非阻塞赋值。
5) 在同一个 always 块中不要既用非阻塞赋值又用阻塞赋值。
6) 不要在一个以上的 always 块中为同一个变量赋值。
7) 用$strobe 系统任务来显示用非阻塞赋值的变量值
8) 在赋值时不要使用 #0 延迟

未完持续....................

verilog之编程应该注意的事项相关推荐

  1. Verilog HDL 编程规范

    文章目录 目录 前言 一.文件声明 二.命名 三.注释 四.模块 五.wire.reg 六.表达式 七.条件语句 八.可综合性 九.可重用性 十.同步设计 十一.循环语句 十二.约束 十三.PLL.D ...

  2. 在 Java OOP 编程中的注意事项

    在 Java OOP 编程中的注意事项 重写 方法 字段 反射 static 接口 abstract Maven JUnit 重写 方法 当子类重写超类的方法时,子类该方法的被访问权限不能低于超类方法 ...

  3. System Verilog面向对象编程(OPP)基础——类(class)的基本使用

    该文主要是笔者梳理绿皮书对应章节的内容 System Verilog面向对象编程OPP基础--类(class)的基本使用 面向对象编程 概述 考虑名词而非动词 编写第一个类class OOP术语 创建 ...

  4. python plc fx5u_三菱PLC FX5U定位编程时的注意事项说明

    FX5U定位编程时的注意事项说明 本文从以下几个方面来说明FX5U定位编程时应注意的一些事项. 一.同轴的定位指令 1.请不要驱动多个同轴内的定位指令.定位动作的脉冲停止且在定位指令的驱动触点未置为O ...

  5. 您知道Linux下C语言编程的一些注意事项吗_教育中国

    您知道Linux下C语言编程的一些注意事项吗_教育中国 云风的 BLOG: 一个 C 接口设计的问题 一个 C 接口设计的问题 C 语言在本质上,参数传递都是值传递.不像 Pascal 和 C++ 可 ...

  6. verilog能直接用c语言编程软件,verilog语言编程

    求一个用Verilog语言编写的程序要能获取系统当前时间并且用数码管(四位数码管)输出,非常感谢 $time. 使用举例 $display("Now the time is %t" ...

  7. 嵌入式编程规范及注意事项

    嵌入式系统已经在各行各业中得到了广泛的应用,随着人们的生活向信息化,智能化的发展,嵌入式技术将彻底融入到我们的生活,在我们的生活当中扮演越来越重要的角色.对于嵌入式系统来讲,嵌入式软件相当于嵌入式系统 ...

  8. FPGA 40 专题 verilog语法编程规范

    FPGA 40 专题 verilog语法编程规范 在这里主要是给自己写一个备忘录,加强个人记忆. 详细可以参考地址1:https://www.runoob.com/w3cnote/verilog2-c ...

  9. 【数字系统】简单逻辑电路设计:与非门/逻辑门 Quartus II 环境/Verilog 语言/编程+仿真+开发板/FPGA/CPLD/EDA

    一. 实验要求 1. 实现二输入与非门电路以及其他简单门电路: 2. 在Quartus II 环境下,运用Verilog HDL 语言进行编程开发,并完成对电路工作情况的仿真模拟: 3. 完成配置程序 ...

最新文章

  1. 将某表一行数据的某些字段插入到该表
  2. 东北大学 计算机网络试题,东北大学秦皇岛分校计算机网络考试试卷(含答案)
  3. 【C/C++】中的__FILE__、__LINE__、#line、__func__关键字(预定义宏)
  4. Win64 驱动内核编程-10.突破WIN7的PatchGuard
  5. h.264 rtp打包
  6. 《jQuery基础》总结
  7. sql语句优化总结 mysql_MySQL-SQL优化总结
  8. 2016/05/13 thinkphp 3.2.2 ① 数据删除及执行原生sql语句 ②表单验证
  9. 轻松学习理解ACL访问控制列表(转)
  10. js Promise理解,同时请求多个接口等
  11. project安装包_Microsoft project 2019软件功能介绍(附安装包)
  12. shiro721复现
  13. 基于multisim的zcs电路仿真
  14. 论文-Knowledge Graph Grounded Goal Planning for Open-Domain Conversation Generation
  15. 离散信号的周期性判定,C++实现
  16. 惠普m154a状态页_惠普M154a说明书
  17. 蓝牙耳机气传导哪个牌子好,试试这几款不入耳的气传导耳机
  18. ie怎么修改html代码,如何修改IE默认网页源码查看器
  19. 基于百度飞浆平台(EasyDL)设计的人脸识别考勤系统
  20. [分治] 51Nod1472 Codeforces #549F. Yura and Developers

热门文章

  1. 【NOI OpenJudge】【1.1】编程基础之输入输出
  2. 【LGR-050】洛谷8月月赛
  3. 【LibreOJ109】【模板】并查集
  4. matlab怎么相加相同id的几行,matlab几个有用的技巧
  5. Python入门--特殊属性
  6. Unity3D实践2:控制物体移动与旋转
  7. Unity3D之NGUI基础3.1:代码控制UILabel
  8. HDU 6178 2017 多校训练:Monkeys(DFS)
  9. 人脸检测caffe下步骤
  10. matlab 关于double和im2double