文章目录

  • 写在前面
  • 正文
    • 前缀
    • 关于大写的说明
    • 关于初始化信号的注意事项
    • Xilinx related HDL coding guidelines
    • Altera's Recommended HDL Coding Styles
    • Lattice HDL Coding Guidelines
    • opencores_coding_guidelines
  • 参考资料

写在前面

对于代码准则这个话题,各个公司或者机构都有各自的要求,但是他们之间的统一性在于这样一个目的:

  1. 提高代码的可读性,使代码易于理解;
  2. 编写代码的统一性,规范代码设计;
  3. 使得代码不容易出错。

如果做到这些呢?它们有一些共性,我们最好在编写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

参考资料

  1. nandland coding-style-recommendations-vhdl-verilog
  2. Altera’s Recommended HDL Coding Styles
  3. [Lattice HDL Coding Guidelines](file:///D:/Downloads/HDLcodingguidelines.pdf)
  4. opencores_coding_guidelines
  5. springer
  6. Xilinx related HDL coding guidelines1
  7. Xilinx_HDL_Coding_style

Verilog以及VHDL所倡导的的代码准则相关推荐

  1. FPGA/ASIC初学者应该学习Verilog还是VHDL?

    博文目录 写在前面 正文 常识讨论 数据分析 写在最后 参考资料 交个朋友 写在前面 个人微信公众号: FPGA LAB 个人博客首页 正文 对于FPGA或者ASIC的初学者来说,选择哪种语言貌似应该 ...

  2. MyHDL中文手册(十)——转换成Verilog和VHDL

    转换成Verilog和VHDL代码 导言 解决方案说明 特征 精细化后转换 从信号使用情况推断模块端口 接口可转换 if-Then-Else结构可以映射到case语句 内存 ROM存储器 有符号算法 ...

  3. 吃透Chisel语言.01.大家Verilog和VHDL用得好好的,为什么要整个Chisel语言出来?

    大家Verilog和VHDL用得好好的,为什么要整个Chisel语言出来??? 说到数字芯片或微处理器的设计实现,你首先想到的语言是什么?可能会是Verilog和VHDL这种早在上世纪八十年代就开发出 ...

  4. (61)FPGA面试题-使用Verilog语言编写异步复位同步释放代码

    1.1 FPGA面试题-使用Verilog语言编写异步复位同步释放代码 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-使用Verilog语言编写异步复位 ...

  5. (71)FPGA模块调用(system Verilog调用VHDL)

    (71)FPGA模块调用(system Verilog调用VHDL) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA模块调用(system Verilog调用V ...

  6. (68)FPGA模块调用(Verilog调用VHDL)

    (68)FPGA模块调用(Verilog调用VHDL) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA模块调用(Verilog调用VHDL) 5)结语 1.2 ...

  7. (27)呼吸灯verilog与VHDL编码(学无止境)

    5 呼吸灯verilog与VHDL编码 1 本章目录 1)FPGA简介 2)Verilog简介 3)VHDL简介 4)呼吸灯verilog编码 5)呼吸灯VHDL编码 6)结束语 2 FPGA简介 F ...

  8. (26)计数器verilog与VHDL编码(学无止境)

    4 计数器verilog与VHDL编码 1 本章目录 1)FPGA简介 2)Verilog简介 3)VHDL简介 4)计数器verilog编码 5)计数器VHDL编码 6)结束语 2 FPGA简介 F ...

  9. (25)二分频verilog与VHDL编码(学无止境)

    3 二分频verilog与VHDL编码 1 本章目录 1)FPGA简介 2)Verilog简介 3)VHDL简介 4)二分频verilog编码 5)二分频VHDL编码 6)结束语 2 FPGA简介 F ...

最新文章

  1. 【转】浅谈php://filter的妙用
  2. 程序员第一次相亲,因请女方吃肯德基而被怒删!
  3. 使用java自带的日志管理_java日志管理
  4. 更改Docker默认的images存储位置
  5. ant vue 离线文档_超全离线开发手册
  6. Flutter学习之纵向布局
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的高校运动会管理系统
  8. 怎样搞定机器学习里的数学?斯坦福高手教你具体问题具体分析
  9. c++11 function
  10. 反编译OD工具OllyDBG 2.0.1下载
  11. OpenGL多重纹理使用与理解
  12. 逾期的人真有这么多吗?
  13. 外汇交易中正确的策略是什么标准呢?ForexClub相信要做到这5点
  14. H5+echarts模拟全国程序员可视化大数据【附完整源码】
  15. leaflet实现风场动态粒子效果
  16. 阿里最全面试116题整理
  17. kaliddos教学
  18. 陌生人的善意 amp;amp;amp;amp; 绝对不要因为陌生人而生气
  19. 富士通扫描仪PaperStream系列软件喜迎新成员;B2B音乐授权市场Songtradr完成D轮融资并获超额认购| 全球TMT...
  20. 快来直播帮您了解移动互联网的未来发展趋势

热门文章

  1. checkio的日子(3)
  2. TortoiseGit入门(图文教程) Git,Github,puttygen,SSH
  3. 笔记本电脑处理器_英特尔发布第九代酷睿移动处理器:笔记本电脑进入8核5.0GHz时代!...
  4. java jar 版本号_java – 获取JAR文件版本号
  5. 怎样用java编写日志_用JAVA写一个日志类程序以供大家学习
  6. java length 使用方法 例题_java.util.BitSet.length()方法实例
  7. 如何去选取第一批要阅读的论文?_MPA论文如何选题?
  8. 嵌入式linux编译环境搭建,嵌入式Linux开发环境搭建
  9. python并发之协程_python并发编程之协程
  10. 2021年春季学期-信号与系统-第八次作业参考答案-第十小题