Verilog语言和软件语言不一样,有些时候理所当然的编写,也没有报语法错误,可是功能就是不对。唉,把遇到的坑都记在本篇博客吧。

  1. initial begin...end里面不能有always,如果非要在里面达到always的效果,那用forever就行了。

  2. reg   [3:0] a=4'd7; 这样写是对的,

    wire [3:0] a=4'd7; 这样写是错的。

  3. 时序电路建议赋初始值,组合电路则不需要。

  4. Verilog中不建议使用 * 和 / ,%可以偶尔使用。

  5. &&、||、!是逻辑符,结果为1(真)或0(假)。

   &、|、~ 是按位符,结果是化为2进制后,再按位进行比较后的结果。

  6. 三目运算符是允许嵌套的,例如:assign a = (b>6) ? 1 : (b<5) ? 1 : 0 ;

  7.如果你想表达 5 < a < 9,那么你直接这样写是错的,应该写成 5 < a && a < 9 ,不信?我们看看代码和波形!

 //======================================================================
// --- 名称 : test
// --- 作者 : xianyu_FPGA
// --- 日期 :
// --- 描述 : 5<a<9 5<a && a<9 的区别
/* -----------------------------
| a | 1 | 7 | 10 |
-----------------------------
| 希望的 | 0 | 1 | 0 |
-----------------------------
| b_1 | 1 | 1 | 1 |
-----------------------------
| b_2 | 0 | 1 | 0 |
-----------------------------
结论:b_2的表达方式才是对的!
*/
//====================================================================== module test
//---------------------<端口声明>---------------------------------------
(
input clk , //时钟,50Mhz
input rst_n , //复位,低电平有效
input [:] a ,
output reg b_1 ,
output reg b_2
); //----------------------------------------------------------------------
//-- 程序开始
//----------------------------------------------------------------------
always @(*)begin
if(<a<)
b_1 = ;
else
b_1 = ;
end always @(*)begin
if(<a && a<)
b_2 = ;
else
b_2 = ;
end endmodule

8.组合逻辑中,如果en1有效是一种情况,en2有效是一种情况,en1||en2有效又是一种情况,那么en1||en2有效应该写在第一个,否则会导致逻辑错误。

9.本来[3:0]led==4’b1101,

  (1) 如果led <= 1;则led==4’b0001,如果led <= 4’b1111,则led==4’b1111。

  (2) 如果led <= 0;则led==4’b0000。

10.[a-:b]:例如[23 -:8]等价于[23 : 16]。

11.[7:0]a <= 1’b1 << cnt:cnt=0时,a=0000_0001;cnt=1时,a=0000_0010,以此类推。

Verilog的各种坑的更多相关文章

  1. 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)

    本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...

  2. 基于UVM的verilog验证

    Abstract 本文介绍UVM框架,并以crc7为例进行UVM的验证,最后指出常见的UVM验证开发有哪些坑,以及怎么避免. Introduction 本例使用环境:ModelSim 10.2c,UV ...

  3. 基于UVM的verilog验证(转)

    reference:https://www.cnblogs.com/bettty/p/5285785.html Abstract 本文介绍UVM框架,并以crc7为例进行UVM的验证,最后指出常见的U ...

  4. Verilog乘法器

    乘法器,不能用乘号直接表示,略坑呀 坑归坑,做还是要做的 思路:首先乘法分为有符号乘与无符号乘,所以建立两个module分别运算有符号与无符号.然后在总module中用case语句判断输出应赋的值. ...

  5. Arduino+AS608指纹锁避坑记

    Arduino+AS608指纹锁避坑记 .title { text-align: center; margin-bottom: 0.2em } .subtitle { text-align: cent ...

  6. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  7. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  8. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  9. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

随机推荐

  1. WinDbg常用命令系列---?*

    ? (Command Help) 问号(?)字符显示所有命令和运算符的列表.问号本身显示命令帮助. 环境 模式 用户模式下,内核模式 目标 实时. 崩溃转储 平台 全部 0:000> ? Ope ...

  2. Xamarin.Forms 开发热加载利器 HotReload 推荐

    https://github.com/AndreiMisiukevich/HotReload

  3. windowns server 2008 r2 AD桌面文件重定向设置

    1.创建将要进行重定向的组(此处为chongdingxiangzu) 2.选择要重定向的用户,并将此用户加入到要重定向的组里 3.打开组策略管理,右击刚才用户所属的组织单位(OU)进行新建GPO(此处 ...

  4. 虚拟变量陷阱(Dummy Variable Trap)

    虚拟变量陷阱(Dummy Variable Trap):指当原特征有m个类别时,如果将其转换成m个虚拟变量,就会导致变量间出现完全共线性的情况. 假设我们有一个特征“性别”,包含男性和女性两个类别,如 ...

  5. 66、Spark Streaming:数据处理原理剖析与源码分析(block与batch关系透彻解析)

    一.数据处理原理剖析 每隔我们设置的batch interval 的time,就去找ReceiverTracker,将其中的,从上次划分batch的时间,到目前为止的这个batch interval ...

  6. Python配置环境变量

    Python安装完成之后,运行cmd(win+R): 在控制台中输入Python,若安装完成,会在控制台中打开Python:   如果Python未添加至环境变量,则会提示"python不是 ...

  7. Idea 编译项目异常 Error:java: Compilation failed: internal java compiler error

  8. 记录一次SpringBoot实现AOP编程

    需求 最近碰到一个问题,需要对关键操作的入参和返回值进行记录,并不是使用log记录,而是插入到数据库中. 思路:如果采用硬编码,在每个操作后都添加,会产生大量重复代码.因而打算使用自定义注解,通过AO ...

  9. SpringDataRedis的简单案例使用

    一.SpringDataRedis环境搭建 第一步.导入坐标 <!-- 缓存 --> <dependency> <groupId>redis.clients< ...

  10. Monkey框架(基础知识篇) - monkey事件介绍

    Monkey所执行的随机事件流中包含11大事件,分别是触摸事件.手势事件.二指缩放事件.轨迹事件.屏幕旋转事件.基本导航事件.主要导航事件.系统按键事件.启动Activity事件.键盘事件.其他类型事 ...