Verilog以及VHDL所倡导的的代码准则
文章目录
- 写在前面
- 正文
- 前缀
- 关于大写的说明
- 关于初始化信号的注意事项
- Xilinx related HDL coding guidelines
- Altera's Recommended HDL Coding Styles
- Lattice HDL Coding Guidelines
- opencores_coding_guidelines
- 参考资料
写在前面
对于代码准则这个话题,各个公司或者机构都有各自的要求,但是他们之间的统一性在于这样一个目的:
- 提高代码的可读性,使代码易于理解;
- 编写代码的统一性,规范代码设计;
- 使得代码不容易出错。
如果做到这些呢?它们有一些共性,我们最好在编写Verilog以及VHDL时统一这些规则,以便达成共识!
我搜集了互联网上公开的各种资料,对这个话题进行总结如下!
正文
前缀
i_ Input signal
o_ Output signal
r_ Register signal (has registered logic)
w_ Wire signal (has no registered logic)
c_ Constant
g_ Generic (VHDL only)
t_ User-Defined Type
你有没有遇到过这种情况?
在不太规范的大型工程设计,阅读例化模块时,在繁多的端口列表中难以区分输入输出,不得不进入具体的模块中,去寻找输入输出关系,耗费眼力也耗费体力,让人苦恼不堪!
于是抱怨Verilog以及VHDL的可阅读性,其实不然,上面的前缀可以解决这个基本的烦恼,如果统一对输入输出变量的命名方式,也就是使用上述前缀,是一个不错的习惯!
下面根据重要性程度分别对其介绍:
i_和o_前缀:
这是您应该采用的最重要的样式! 太多的设计人员没有表明他们的信号是实体/模块的输入还是输出。 浏览代码以确定信号方向可能非常困难且烦人。 另外,一个名为“data”且为输出的信号比名为“ o_data”的信号更难通过搜索在代码中找到。 示例:i_address,o_data_valid。
r_和w_前缀:
这是您需要使用的第二重要的样式。 指出您的信号是reg类型还是wire类型,对于编写好的代码非常重要。 Verilog的优势在于它可以迫使您将信号声明为reg或wire,但是VHDL却没有这样的要求! 因此,这种样式对于VHDL编码器尤其重要。 用r_声明的所有信号都应具有初始条件。 在时序process中(在VHDL中)或always(在Verilog中),用w_声明的所有信号都绝对不能出现在赋值运算符的左侧。 示例:r_Row_Count,w_Pixel_Done。
c_,g_ 和 t_(前缀):
这些在编码时很有帮助。 c_表示您正在引用VHDL中的常量或Verilog中的参数。 g_用于所有VHDL泛型。 t_表示您正在定义自己的数据类型。 我发现这些有帮助。 示例:c_NUM_BYTES,t_MAIN_STATE_MACHINE。 对于状态机,我喜欢使用所有大写字母…例如 IDLE,DONE,CLEANUP。 在过去,我使用s_来指示状态,但是我已经不用了。 首选项更改为使用c作为前缀。
关于大写的说明
是否要大写信号名称取决于您。 如您在上面的示例中看到的那样,除前缀之外,我将所有不是输入或输出的信号都大写。 如果您更愿意将信号命名为r_Row_Count或r_row_count而不是r_ROW_COUNT,那么这完全取决于您。 我建议您保持一致! VHDL不区分大小写,因此r_ROW_COUNT与r_Row_Count相同,但是在Verilog中不是这样。 Verilog区分大小写,因此维护大写规则非常重要! 当您只想创建一个信号时,您不想意外地创建两个不同的信号,否则您将度过非常糟糕的时光。
关于初始化信号的注意事项
人们普遍存在一个误解,认为FPGA中的寄存器需要复位信号才能初始化。 这是不正确的,FPGA寄存器可以具有初始值。所有FPGA都可以初始化为零或非零值。 实际上,最佳实践是在设计中复位尽可能少的触发器,而是依靠初始化所有触发器。 这样做的原因是,您添加到触发器中的每条复位线都会占用布线资源和功耗,并使您的设计更难以满足时序要求。
您应遵循的规则是:所有寄存器(由r_前缀标识)应始终具有初始条件。 禁止对wire型(用w_前缀标识)施加初始条件。 当您仿真设计时,在仿真甚至开始之前,所有信号都应为绿色。 如果这是真的,那么您会更快乐。
当然,上面是通用的规则,各大公司还有各自推荐的规则,例如:
Xilinx related HDL coding guidelines
Xilinx related HDL coding guidelines1
ug901-vivado-synthesis
Xilinx_HDL_Coding_style
Altera’s Recommended HDL Coding Styles
内容太多,各位参考资料:
Altera’s Recommended HDL Coding Styles
Lattice HDL Coding Guidelines
[Lattice HDL Coding Guidelines](file:///D:/Downloads/HDLcodingguidelines.pdf)
opencores_coding_guidelines
opencores_coding_guidelines
参考资料
- nandland coding-style-recommendations-vhdl-verilog
- Altera’s Recommended HDL Coding Styles
- [Lattice HDL Coding Guidelines](file:///D:/Downloads/HDLcodingguidelines.pdf)
- opencores_coding_guidelines
- springer
- Xilinx related HDL coding guidelines1
- Xilinx_HDL_Coding_style
Verilog以及VHDL所倡导的的代码准则相关推荐
- FPGA/ASIC初学者应该学习Verilog还是VHDL?
博文目录 写在前面 正文 常识讨论 数据分析 写在最后 参考资料 交个朋友 写在前面 个人微信公众号: FPGA LAB 个人博客首页 正文 对于FPGA或者ASIC的初学者来说,选择哪种语言貌似应该 ...
- MyHDL中文手册(十)——转换成Verilog和VHDL
转换成Verilog和VHDL代码 导言 解决方案说明 特征 精细化后转换 从信号使用情况推断模块端口 接口可转换 if-Then-Else结构可以映射到case语句 内存 ROM存储器 有符号算法 ...
- 吃透Chisel语言.01.大家Verilog和VHDL用得好好的,为什么要整个Chisel语言出来?
大家Verilog和VHDL用得好好的,为什么要整个Chisel语言出来??? 说到数字芯片或微处理器的设计实现,你首先想到的语言是什么?可能会是Verilog和VHDL这种早在上世纪八十年代就开发出 ...
- (61)FPGA面试题-使用Verilog语言编写异步复位同步释放代码
1.1 FPGA面试题-使用Verilog语言编写异步复位同步释放代码 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-使用Verilog语言编写异步复位 ...
- (71)FPGA模块调用(system Verilog调用VHDL)
(71)FPGA模块调用(system Verilog调用VHDL) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA模块调用(system Verilog调用V ...
- (68)FPGA模块调用(Verilog调用VHDL)
(68)FPGA模块调用(Verilog调用VHDL) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA模块调用(Verilog调用VHDL) 5)结语 1.2 ...
- (27)呼吸灯verilog与VHDL编码(学无止境)
5 呼吸灯verilog与VHDL编码 1 本章目录 1)FPGA简介 2)Verilog简介 3)VHDL简介 4)呼吸灯verilog编码 5)呼吸灯VHDL编码 6)结束语 2 FPGA简介 F ...
- (26)计数器verilog与VHDL编码(学无止境)
4 计数器verilog与VHDL编码 1 本章目录 1)FPGA简介 2)Verilog简介 3)VHDL简介 4)计数器verilog编码 5)计数器VHDL编码 6)结束语 2 FPGA简介 F ...
- (25)二分频verilog与VHDL编码(学无止境)
3 二分频verilog与VHDL编码 1 本章目录 1)FPGA简介 2)Verilog简介 3)VHDL简介 4)二分频verilog编码 5)二分频VHDL编码 6)结束语 2 FPGA简介 F ...
最新文章
- 【转】浅谈php://filter的妙用
- 程序员第一次相亲,因请女方吃肯德基而被怒删!
- 使用java自带的日志管理_java日志管理
- 更改Docker默认的images存储位置
- ant vue 离线文档_超全离线开发手册
- Flutter学习之纵向布局
- 基于JAVA+SpringMVC+Mybatis+MYSQL的高校运动会管理系统
- 怎样搞定机器学习里的数学?斯坦福高手教你具体问题具体分析
- c++11 function
- 反编译OD工具OllyDBG 2.0.1下载
- OpenGL多重纹理使用与理解
- 逾期的人真有这么多吗?
- 外汇交易中正确的策略是什么标准呢?ForexClub相信要做到这5点
- H5+echarts模拟全国程序员可视化大数据【附完整源码】
- leaflet实现风场动态粒子效果
- 阿里最全面试116题整理
- kaliddos教学
- 陌生人的善意 amp;amp;amp;amp; 绝对不要因为陌生人而生气
- 富士通扫描仪PaperStream系列软件喜迎新成员;B2B音乐授权市场Songtradr完成D轮融资并获超额认购| 全球TMT...
- 快来直播帮您了解移动互联网的未来发展趋势
热门文章
- checkio的日子(3)
- TortoiseGit入门(图文教程) Git,Github,puttygen,SSH
- 笔记本电脑处理器_英特尔发布第九代酷睿移动处理器:笔记本电脑进入8核5.0GHz时代!...
- java jar 版本号_java – 获取JAR文件版本号
- 怎样用java编写日志_用JAVA写一个日志类程序以供大家学习
- java length 使用方法 例题_java.util.BitSet.length()方法实例
- 如何去选取第一批要阅读的论文?_MPA论文如何选题?
- 嵌入式linux编译环境搭建,嵌入式Linux开发环境搭建
- python并发之协程_python并发编程之协程
- 2021年春季学期-信号与系统-第八次作业参考答案-第十小题