Verilog代码规范I
Verilog代码规范I
"规范"这问题
"规范"这个富含专业气息的词汇(个人感觉),其实规范这种东西,就是大家都约定熟成的东西,一旦你不遵守这个东西,专业人士就会觉得你不够专业,特别是程序开发方面的问题。
为什么要规范呢?一方面能体现你足够专业,另一方面也是最重要的一方面,代码的规范性有利于开发交流,让代码的可读性大大增强,也有利于降低代码的出错率。
网上关于EDA设计方面的代码规范问题的资料,以前开发的时候都没有养成一个很好的代码规范,在大的项目工程中,这方面的弊端开始慢慢显现,对后续的修改和维护造成很大的影响,重新去编写又浪费很多的时间,所以请记住一句话"千里之行始于足下",不要到走了很远之后才发现导向错了。
Verilog代码有哪些规范?
- 文件名必须体现出设计模块的功能;
 
在verilog设计中,模块名就是文件名,这是由于软件编译的问题而限制的。所以设置模块名的时候也决定了文件名。因此,模块名的设定要体现出模块的功能,这样设定对于大的工程项目设计很有用处,便于查找分析。
- 时钟信号及低电平有效信号的命名:
 
时钟信号一般的命名为:clk;
请回忆一下,你所编写的程序中低电平复位信号是如何编写的,目前我所见过的版本有:reset,rst,reset_n,rst_n;普遍就是这四种。前两种体现出该信号是高电平有效的,而后两种体现该复位信号是低电平有效的,在设计规范中就是采用*_n来表示低电平有效的。所以低电平有效的信号一律采用*_n表示,增强代码的可读性。
- 参数parameter和宏定义`define
 
在定义参数和宏定义时,名字要采用大写进行表示,如下:
parameter DATA_WIDTH = 32;
`define AHB_TRANS_SEQ 2'b11;
- 信号、端口、模块、例化
 
有关这四个方面的代码设计最好采用小写进行设计,如下:

- 命名字符的长度
 
一般字符命名的长度不要超过32个;
- 有关模块调用的实体名的设定,参考如下:
mux4 u_mux4_1 (…);
mux4 u_mux4_2 (…);
 - 位宽的描述
 
在Verilog的设计中一般采用的为[x:0];在VHDL中一般采用的是x downto 0;
采用的都是从高在左低位在右符合人的阅读顺序的方式。
- Begin和end、case和endcase、if和else的对准问题
 
这里采用一个实例进行说明:

- 到这里所说到的都是关于文本输入形式的,那么在原理图输入方式中有没有相关的规范问题呢?答案是肯定的!!!所以经常采用原理图输入的好好注意了!!!
原理图输入方式中,有时会将自己所写的文本生生成一个原理图的模块,然后导入到原理图的设计中,这时该原理图也被设置为顶层模块,所以有时问题就产生在这里。当有多个模块导入原理图时,这是就需要将这些模块连接起来,如果在连接的时候用一些分立的逻辑元件将模块与模块之间连接起来,这就产生了一个所谓"胶合逻辑"的问题,因为该逻辑元件在综合时是没有加入到任何一个模块里面的,所以就无法进行整体的最优化综合,所以就无法产生一个最优化的电路,这个逻辑元件将两个模块有缝地连接起来,这样的电路在同步中又怎么会稳定呢?
所以请记住一点,有文本输入和原理图输入的工程中,原理图作为顶层文件时,原理图最好是页水平的分层结构,即原理图中的模块都是采用文本输入之后生成的,这样就避免了"胶合逻辑",让综合器更好地综合我们设计的电路。
"胶合逻辑"实例:是否在你的原理图中出现过呢?。。。。。。。。。。。。。

 
- 非阻塞和阻塞问题,这个问题在FPGA设计中是老生常谈的问题
 
下面看看一个实例,相信你就懂了:

从时间上进行分析的话,非阻塞赋值就是同时赋值,而阻塞赋值就是顺序赋值,软件综合时也会帮你对电路进行简化。
- 信号敏感列表
 
什么是信号敏感列表呢?就是在需要信号输入的模块中,如always @()--括号内包含的信号就是敏感信号,也就是说在括号内的信号都将会影响模块的工作或者是模块内某些信号的输出。
那什么信号是敏感信号呢?凡是影响模块输出和工作状态的信号都将是敏感信号,一般有:时钟信号、复位信号、置数信号、某些赋值语句的右边信号还有一些条件信号。

- 复位&初始化
 
相信你看过的经典代码中,一般都会包含有复位信号rst_n吧!
为什么要复位呢?
一个是为了初始化,另一个是在系统工作异常时重新进入初始状态(就像电脑有时死机重启一样)。
为什么要初始化呢?
在FPGA中经常要用到reg,不是吗?而且是经常要用到,没有reg就没有FPGA。而reg在上电后里面所寄存的是1还是0是不一定的,这将会造成很大的问题,会造成输出不确定、会造成状态机进入与确定的状态…………所以就需要在上电的时候,利用复位信号进行初始化,就reg的值进行初始化,使一切都是确定的,防止不确定状态的出现。实例如下:

每日推送不同科技解读,原创深耕解读当下科技,敬请关注微信公众号“科乎”。

Verilog代码规范I的更多相关文章
- Verilog代码规范(持续更新)
		
1.输入输出的定义,看起来整齐 2.always.if或其他语句后begin写在同一行,这样可以避免begin占用过多的行,代码密度更大 3.end后面要有注释,以标明是哪个关键词的结束,除了endc ...
 - Verilog 编写规范
		
在学习Python时,作者有一句话对我影响很大.作者希望我们在学习编写程序的时候注意一些业内约定的规范.在内行人眼中,你的编写格式,就已经暴露了你的程度.学习verilog也是一样的道理,一段好的ve ...
 - iOS代码规范(OC和Swift)
		
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
 - 谈谈PHP代码规范
		
[转] http://www.syyong.com/php/Talk-about-PHP-code-specification.html 我向往这样一个php世界,里面没有代码规范之争.你我都一样,都 ...
 - 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述
		
对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ...
 - C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义
		
类型判断符号: C#:object a; if(a is int) { } 用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...
 - 作业三: 代码规范、代码复审、PSP
		
分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规范和原则. 规范不能 ...
 - 转!!Java代码规范、格式化和checkstyle检查配置文档
		
为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...
 - C#代码规范
		
C#代码规范 一.文件命名 1 文件名 文件名统一使用帕斯卡命名法,以C#类名命名,拓展名小写. 示例: GameManager.cs 2 文件注释 每个文件头须包含注释说明,文件头位置指的是文件最 ...
 
随机推荐
- LeetCode #329. Longest Increasing Path in a Matrix
			
题目 Given an integer matrix, find the length of the longest increasing path. From each cell, you can ...
 - 优化SQL查询:如何写出高性能SQL语句
			
1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条 ...
 - 分布式系统理论之Quorum机制
			
一,Quorum机制介绍 在分布式系统中有个CAP理论,对于P(分区容忍性)而言,是实际存在 从而无法避免的.因为,分布系统中的处理不是在本机,而是网络中的许多机器相互通信,故网络分区.网络通信故障问 ...
 - POJ3211 Washing Clothes[DP 分解 01背包可行性]
			
Washing Clothes Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 9707 Accepted: 3114 ...
 - .Net工程详解及项目版本管理
			
前言 写这篇文章的目地是为了让更多的小伙伴对VS生成的工程有一个清晰的认识.在开发过程中,为了赶进度,并不是每个人都有学习的时间. 但如果上层项目管理人员对这些工程目录不熟悉的话,把VS编译的中间文件 ...
 - [转]ASP.NET MVC3 + EF 性能优化解决方案以及最优架构
			
[集思广议] 我们用 asp.net mvc3 + ef 做了一个网站,现在是内测阶段,发现打开速度非常慢.首页打开(无缓存)都在5-6s以上(测试环境:程序和db都在本机),请问各位 mv ...
 - 万能的 SQL编程
			
简介:T-SQL语句创建库.创建表和听.和添加约束等.T-SQL是数据库结构化查询语言,常见的增加.删出.修改.查询.创建库和创建表的语句,还支持定义变量.输出语句.逻辑控制语句(IF.CASE.WH ...
 - luogu[1140]相似基因
			
题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了4种核苷酸,简记作A,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务中,生物学家研究 ...
 - rqnoj28[stupid]愚蠢的宠物
			
题目描述 背景 大家都知道,sheep有两只可爱的宠物(一只叫神牛,一只叫神菜).有一天,sheep带着两只宠物到狗狗家时,这两只可爱的宠物竟然迷路了…… 描述 狗狗的家因为常常遭到猫猫的攻击,所以不 ...
 - JS 中如何判断字符串类型的数字
			
function isNumberStr(str){ var n = Number(str); return !isNaN(n); } console.log(isNumberStr('37')); ...