Verilog设计规范

关注、星标公众号,精彩内容每日送达
来源:网络素材

Verilog规范对于一个好的IC设计至关重要。

本文包含以下几方面内容,程序设计,模块例化、运算符,模块设计模板

目标:用最简单,最简洁的方式,设计最易读,最高效的代码

1、程序设计

1)设计时不用的语法

e85c9cc6fa9d3f14d9211b989eaeff79.png

2)设计时使用的语法,主要为下述a,b,c三类

74e56be143417b4b3dcfff406f327973.png

3)电路设计结构,主要有以下三种

4d3fe6d04a4ab5bdadb857584b9bea46.png  96cc4012a93fe61acfa203dc042b9d19.png92f5705b33ed2930f1d5d38d1dadeb7b.png

0d98707fadcd26726172b9a697247566.png

5542ab6f76cc40d96ff880dbe4a3b32f.png

a53a8f63d60d1ccb6552c16f14d2ad5f.png

4)电路设计要点

[1] 一个always只产生一个信号

下述不合适

245486731623484e53b416cf248cadc1.png

改为下述,只考虑一个信号,调试,分析,代码修改很方便,不需要考虑很多

8fc612684d7c96b179e5945ec23f6334.png

[2] 一个信号只在一个always中产生

下述不符合要求,在多个always中产生

1a0cccb9ef0557749bb9a870f3f3e3ae.png

[3] always是描述一个信号产生的方法,即在什么情况下,信号值为多少,其它情况下,值又为多少,情况要全部考虑

cbec50952838138b84c86cf8e7070c55.png

[4] 条件判断只允许使用if else和case,其它的不使用(包括casex);

[5] 含有posedge或negedge的,一定是D触发器,是时序电路

[6] 想立即有结果用组合逻辑,延迟一拍有结果用时序逻辑

2、模块例化

1)什么是例化,简单到复杂

eaa0d76501bbe7740a9709655be10911.png

ed8ea79efd1665196445620fa9b1510f.png

d4e90ee608da4567aed781229b1f2d82.png

2)例化方法

8acbbbbd1808480ceb426a4c8e05f9ce.png

3)参数例化

7bc0d55d6e05a6c7333a306ed797a4d8.png    2f82621b690cd852b65c41d94480d619.png

3、运算符

1)信号类型reg/wire

(1)设计代码仅用reg,wire两种类型

(2)设计代码中,由本模块且是always产生的信号,为reg类型 

f1445e07c0200feb66c3b20e6c231f51.png

3f5c31f5f3a17d09560e6d105e1c735b.png

(3)测试代码中,用initial产生的对测试模块的输入信号,用reg类型

(4)其它情况都用wire

8657ac78f7e97422eebbf703eb9489ce.png

b17af13e2d241ce04171a6d254fdd9e4.png

(5)reg类型的信号,不一定产生寄存器

2)参数parameter

67618ea4c317ccf09c7f3dfbfb393067.png

(1)将整个模块中的CNT_C_W替换成12

(2)参数名用大写

3)算术运算符(+,-,*,/,%)

(1)+,-,*用的多,/,%少用,消耗资源多,用的少

4)赋值运算符(=,<=),注:时序逻辑用<=,组合逻辑用=,其它情况不存在

(1)时序逻辑用<=

(2)组合逻辑用=

5)关系运算符(>,<,>=,<=)

6)逻辑运算符(&&,||,!)

(1)一般两边都是1bit信号,多Bit也可以

(2)一般用于条件判断

7)位运算符(~,|,^,&)

(1)一般用于赋值

8)移位运算符(<<,>>)

(1)一般用于乘除运算

(2)右移1位表示除2,左移1位表示乘2

9)拼接运算符({ })

(1){a[0],b[3:2]}

(2){{3{a[0]}},b[2],a[1]}

4、模块设计模板

1)解析电路功能

下图为自加1的电路图,左边为组合逻辑,右边为时序逻辑

baa95b57167026dc7006ba377c6dc1dc.png

2)修改电路设计模块

verilog模板

规则:输出信号必须打一拍送出去,所以会在always中赋值,所以输出信号定义为reg类型

先定义,位宽参数,输入,输出,中间信号,编写组合逻辑,时序逻辑代码,下述为上图加法器代码

eef289844ca35299d515706ea4586687.jpeg

共同学习,共同进步,更多verilog学习资料,关注本公众号回复666即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值