FPGA——verilog编写规范
2018-01-14 19:56
711 查看
这个寒假本来是想出去找份实习工作,锻炼一下自己的动手能力,结果事与愿违,当然,我只能怨自己会的太少。所以现在在只能窝在家里。 这个寒假我想打牢我FPGA的基础。把特权同学的《深入浅出FPGA》读完,并且将自己学到的东西,写到博客上来。 代码规范是一个大问题,特别是我在看学弟学妹写的verilog代码的时候,真的深有体会,想哭的感觉都有了。 网上有一份“据说”是华为内部的代码规范。我手打过来,避免自己忘记和也方便我自己过来看。
设计风格
低电平有效的信号,信号后缀名“_n”
模块名小写
module例化名用U_xx_x(多次例化用次序号0、1、2…)
使用降序排列定义向量有效位顺序,最低为是0
采用小写字母定义wire,reg和input/inout/output (注:inout这种形式,我没有用过)
采用大写字母定义 参数,参数名小于20个字母
时钟信号应前缀“clk”,复位信号应前缀“rst”
三态输出的寄存器信号应后缀“_z”
代码中不能使用保留字
输出信号必须被寄存
三态逻辑可以在顶层模块使用,子模块中避免使用三态
没有未连接的端口
到其他模块的接口信号,按如下顺序定义端口信号:输入、双向、输出
建议使用coregen生成的乘法电路
采用基于名字的调用而非基于顺序的调用
不要书写空的模块,即一个模块至少要有一个输入和一个输出
时钟事件的表达式要用“negedge ”或“posedge ”的形式
异步复位,高电平有效用“if( == 1’b1)”,低电平有效用“if( == 1’b0)”
if语句不能嵌套太多
建议不适用include语句
建议每个模块加timescale
代码中给出必要的注释
每个文件 有一个文件头
每个文件只包含一个模块
模块名和文件名保持一致
设计可靠性
同步时序逻辑的always block中有且只有一个时钟 信号,并且在同一个沿动作
同步时序逻辑的module中,在时钟信号的同一个沿动作
采用同步设计,避免使用异步逻辑(全局异步复位除外)
一般不要将时钟 信号作为数据信号输入
不要在时钟路径上添加任何buffer
不要门控时钟
在顶层模块中,时钟信号必须可见
不要采用向量的方式定义一组时钟信号
不要在模块内部生成时钟信号,使用DLL/PLL产生时钟信号
建议使用单一的全局同步复位电路或者单一的全部异步复位电路
不要在复位路径上添加任何buffer,也不要使用任何门控复
9f47
位信号
不适用PLI函数
建议不适用任务
不使用事件变量
不使用系统函数
不使用用户自定义单元(UDP)
不使用disable语句
不适用===、!===等不可综合语句
建议不使用forever、repeat、while等循环语句
避免产生Latch(除CPU接口)
组合逻辑语句块敏感表中的敏感变量必须和该块中使用的相一致,不能多也不能少
在一个always语句块中只能有一个事件列表
在时序的always块的敏感事件列表必须都是沿触发事件
数据位宽要匹配
不使用real、time、realtime类型
建议不使用integer类型
移位变量必须是一个常数
避免使用异步反馈电路
时序逻辑语句块中统一使用非阻塞幅值
组合逻辑语句块中使用阻塞性赋值
非阻塞型赋值应不见单位延时,尤其是对于寄存器类型的变量赋值时
不常用规则
整数常量基数格式中不能有“?”
字符串不能含有控制字符
不要在连续赋值语句中引入驱动强度和延时
不要为net、n_input、n_output、enable_gate型变量定义驱动强度、电荷保持强度以及延时
禁止使用空的时序电路块及非法的always语句块
禁止使用triregNET型定义
禁止使用tri1、tri0、triand和trio型的连接
在RTL级代码中不能含有initial结构,也不可以对任何信号进行初始化赋值,而应采用复位的方式进行初始化
不要在过程语句中使用assign、deassign、force、release等语句
不要使用wait语句
不要使用fork-join语句
不要为驱动类型supply0和supply1型的连接赋值
设计中不适用macro_module
不要在RTL代码中实例门级单元
不要使用specify模块
——————————————————————
就是这些了,在看这些规范的时候,有很多名词我都不了解,说明自己真正会的东西实在是少之又少,必须得继续努力了。
相关文章推荐
- Verilog代码编写规范
- FPGA 使用verilog 编写的AD tlc549 测试程序,数码管做显示,本程序已验证
- Verilog代码编写规范小结
- Verilog代码编写规范
- verilog语言编写规范笔记_华为
- 【奔跑的FPGA】part five TestBench的编写规范
- Verilog代码编写规范-转贴
- FPGA中各种分频的verilog 编写
- 常见代码的编写规范(三)---对象的赋值与保存
- 如何在FPGA里烧写pof文件(存verilog工程)
- 为什么谷歌要执行严格的代码编写规范
- 高质量JAVA代码编写规范
- 从零开始编写自己的C#框架(3)——开发规范
- 【连载】 FPGA Verilog HDL 系列实例--------3-8译码器
- 【连载】 FPGA Verilog HDL 系列实例--------半加器与全加器
- 函数可重入性及编写规范
- FPGA之verilog第一天学习(00011101序列产生器)
- Verilog良好代码编写风格25条
- 软件编写规范(可读性)
- 编写高质量代码规范