verilog语法实例学习(13)-程序员宅基地

verilog代码编写指南


变量及信号命名规范

 1. 系统级信号的命名。 

      系统级信号指复位信号,置位信号,时钟信号等需要输送到各个模块的全局信号;系统信号以字符串Sys开头。 

2. 低电平有效的信号后一律加下划线和字母n。如:SysRst_n;FifoFull_n;  

3. 经过锁存器锁存后的信号,后加下划线和字母r,与锁存前的信号区别

      如CpuRamRd信号,经锁存后应命名为CpuRamRd_r。  低电平有效的信号经过锁存器锁存后,其命名应在_n后加r。如CpuRamRd_n信号,经锁存后应命名为CpuRamRd_nr  多级锁存的信号,可多加r以标明。如CpuRamRd信号,经两级触发器锁存后,应命名为CpuRamRd_rr。

 4. 模块的命名。 

       在系统设计阶段应该为每个模块进行命名。命名的方法是,将模块英文名称的各个单词首字母组合起来,形成3到5个字符的缩写。若模块的英文名只有一个单词,可取该单词的前3个字母。各模块的命名以3个字母为宜。例如:  Arithmatic Logical Unit模块,命名为ALU。 Data Memory Interface模块,命名为DMI。 Decoder模块,命名为DEC。 

5. 模块之间的接口信号的命名。

      所有变量命名分为两个部分,第一部分表明数据方向,其中数据发出方在前,数据接收方在后,第二部分为数据名称。  两部分之间用下划线隔离开。  第一部分全部大写,第二部分所有具有明确意义的英文名全部拼写或缩写的第一个字母大写,其余部分小写。  举例:CPUMMU_WrReq,下划线左边是第一部分,代表数据方向是从CPU模块发向存储器管理单元模块(MMU)。下划线右边Wr为Write的缩写,Req是Request的缩写。两个缩写的第一个字母都大写,便于理解。整个变量连起来的意思就是CPU发送给MMU的写请求信号。 模块上下层次间信号的命名也遵循本规定。  若某个信号从一个模块传递到多个模块,其命名应视信号的主要路径而定。

   6. 模块内部信号

   模块内部的信号由几个单词连接而成,缩写要求能基本表明本单词的含义;  单词除常用的缩写方法外(如:Clock->Clk, Write->Wr, Read->Rd等),一律取该单词的前几个字母( 如:Frequency->Freq, Variable->Var 等); 每个缩写单词的第一个字母大写;  若遇两个大写字母相邻,中间添加一个下划线(如DivN_Cntr); 举例:SdramWrEn_n;FlashAddrLatchEn;

编码格式规范。

   1. 分节书写,各节之间加1到多行空格。

      如每个always,initial语句都是一节。每节基本上完成一个特定的功能,即用于描述某几个信号的产生。在每节之前有几行注释对该节代码加以描述,至少列出本节中描述的信号的含义。 

  2. 行首不要使用空格来对齐,而是用Tab键,Tab键的宽度设为4个字符宽度。行尾不要有多余的空格。 

  3. 注释

  使用//进行的注释行以分号结束;  使用/* */进行的注释,/*和*/各占用一行,并且顶头; 例:  // Edge detector used to synchronize the input signal;  

4. 空格的使用

    不同变量,以及变量与符号、变量与括号之间都应当保留一个空格。 Verilog关键字与其它任何字符串之间都应当保留一个空格。如: Always @ (……)  使用大括号和小括号时,前括号的后边和后括号的前边应当留有一个空格。  逻辑运算符、算术运算符、比较运算符等运算符的两侧各留一个空格,与变量分隔开来;单操作数运算符例外,直接位于操作数前,不使用空格。  使用//进行的注释,在//后应当有一个空格;注释行的末尾不要有多余的空格。 例:  assign SramAddrBus = { AddrBus[31:24], AddrBus[7:0] }; assign DivCntr[3:0] = DivCntr[3:0] + 4’b0001; 

assign Result = ~Operand; 

5. 同一个层次的所有语句左端对齐

      Initial、always等语句块的begin关键词跟在本行的末尾,相应的end关键词与Initial、always对齐;这样做的好处是避免因begin独占一行而造成行数太多; 例: 

     always @ ( posedge SysClk or negedge SysRst ) begin

            if( !SysRst )

               DataOut <= 4'b0000;

           elseif( LdEn ) begin

               DataOut <= DataIn;

           end

         else

            DataOut <= DataOut + 4'b0001;

     end

6. 不同层次之间的语句使用Tab键进行缩进,每加深一层缩进一个Tab

7. 在endmodule,endtask,endcase等标记一个代码块结束的关键词后面要加上一行注释说明这个代码块的名称;

8. 在task名称前加tsk以示标记。在function的名称前加func以示标记。

      例如: task tskResetSystem; ……  endtask //of tskResetSystem 

小结

     以上列出的代码编写规范无法覆盖代码编写的方方面面,还有很多细节问题,需要在实际编写过程中加以考虑。并且有些规定也不是绝对的,需要灵活处理。并不是律条,但是在一个项目组内部、一个项目的进程中,应该有一套类似的代码编写规范来作为约束。 总的方向是,努力写整洁、可读性好的代码

转载于:https://www.cnblogs.com/mikewolf2002/p/10197795.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34088598/article/details/93521677

智能推荐

Winform中实现更改DevExpress的RadioGroup的选项时更改其他控件(TextEdit、ColorPickEdit)的值_winform radiogroup 属性-程序员宅基地

文章浏览阅读794次。场景Winform中实现读取xml配置文件并动态配置ZedGraph的RadioGroup的选项:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100540708在上面实现了将RadioGroup的选项根据配置文件动态配置后,比如这里有三个选项,在更改选项时会对其他的控件的值进行更改。效果关注公..._winform radiogroup 属性

异常:javassist.CannotCompileException: [source error] getEveryUserNum_orika cannotcompileexception-程序员宅基地

文章浏览阅读1.3k次。添加接口后dubbo启动失败,抛出的异常。各种调试、测试,没有发现代码的问题。于是百度了一下,说可能是由于提供的接口以getXXX 开头,而且接口没有返回值,从而出现此种异常。因此尝试修改方法名称,再次启动,成功!果然因为如此!但是这是为什么呐?原因在于dubbo暴露服务,将getxxx开头的方法,当做获取属性方法来进行编译,然后方法没有返回值,所以抛出异常。贴上dubbo的动..._orika cannotcompileexception

js时间格式化函数formatDate(RegExp)-程序员宅基地

文章浏览阅读483次。((‘00’ + o[k]).substr((’’ + o[k]).length))) 这个地方真的巧妙。欢迎关注微信公众号(大明前端)export function formatDate(date, fmt) { if (typeof date == 'string') { return date; } if (!fmt) fmt = "yyyy-MM-dd hh:mm:ss"; if (!date || date == null) return null; let o

[原]通过 dumpsys SurfaceFlinger 分析Android 系统图层_surfaceflinger log-程序员宅基地

文章浏览阅读1.6w次,点赞3次,收藏16次。一、通过 dumpsysSurfaceFlinger 分析Android 系统图层:从下面的dumpsys log看出当前系统有三个图层(红色部分是每个图层的坐标和大小),从最底层到上层分别是ImageWallpaper(壁纸), SurfaceView(视频小窗口), launcher(桌面)。其中视频小窗口用Overlay的方式独立输出到视频层,这样的话只有壁纸层和桌面层通过GPU混合_surfaceflinger log

一文搞懂 Java 线程中断_java 线程退出会打印什么-程序员宅基地

文章浏览阅读3.3k次,点赞6次,收藏12次。在之前的一文《如何"优雅"地终止一个线程》中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程的方法吗?答案是肯定的,它就是我们今天要分享的——线程中断。下面的这断代码大家应该再熟悉不过了,线程休眠需要捕获或者抛出线程中断异常,也就是你在睡觉的时候突然有个人冲进来把你吵醒了。try { Thread.sleep(3000);} catch (Interrup..._java 线程退出会打印什么

RedHat/CentOS-7搭建FTP服务器_如何用centos7访问ftp服务器-程序员宅基地

文章浏览阅读4.6k次,点赞2次,收藏17次。前言:本文以搭建vsftp为例进行。1、安装vsftpd和lftp:yum -y install vsftpd lftp2、创建用户://创建用户useradd -d /ftpfile -s /sbin/nologin test//-d-->更改用户的家目录为/ftpfile//-s /sbin/nologin --> 不让用户登录linux系统,只能以..._如何用centos7访问ftp服务器

随便推点

基于Linux X86 汇编——Java调用汇编指令-程序员宅基地

文章浏览阅读854次。话不多说直接上代码1. 需要引用maven包 <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>262</version> </dependency>2.代码调_java调用汇编

'netstat -....' 不是内部或外部命令,也不是可运行的程序 或批处理文件。_netstat-ano' 不是内部或外部命令,也不是可运行的程序 或批处理文件。-程序员宅基地

文章浏览阅读5.2k次,点赞3次,收藏5次。这个时候发现有好多的互联网大侠在网上给出答案,不知道为啥,我一个也用不到小白答案:也许这一次你就成功了!执行:系统高级环境变量设置一>用户变量一>找到path一>在里面新建加入C:\WINDOWS\system32一>完成任务没有必要把系统中的path也改了..._netstat-ano' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

【Linux线程同步专题】五、进程间同步_linux c++进程间同步与互斥-程序员宅基地

文章浏览阅读686次,点赞8次,收藏10次。《Linux从小白到大神》 | 系统学习Linux开发、VIM/GCC/GDB/Make工具、Linux文件IO、进程管理、进程通信、多线程等,请关注专栏免费学习。_linux c++进程间同步与互斥

因果推断笔记——数据科学领域因果推断案例集锦(九)-程序员宅基地

文章浏览阅读1.5w次,点赞37次,收藏214次。2 腾讯看点:视频笔记​2.1 观测数据 、 实验数据的理论介绍​![image.png](https://img-blog.csdnimg.cn/img_convert/c66bdbcdd86d5031040f51924397952d.png#clientId=u8e2473a0-856a-4&from=paste&height=746&id=ud2728b80&margin=[object Object]&name=image.png&origin_因果推断笔记

【Mysql系列】Data too long_mysql data to long-程序员宅基地

文章浏览阅读3.3k次。MySQL 报 Data too long for column ‘…’今天设计了一张表 其中一个字段我设置的类型是 text 类型的 ,按照正常的情况下 text 是不限制长度的,因此插入了一段很长的 txt 内容 ,结果出现了 悲剧性的事情,提示了 数据太长 Data too long for column ‘…’ at row 1 这就很尴尬了,百度了半天,有去改配置的,有去改编码的,最后没有一个有效的。那么好吧,还是先去看看数据结构吧text 嗯 ,没错,双击一下,我上翻翻下翻翻,突然发现,_mysql data to long

伪随机生成器具体实现——杂乱的方法_杂凑函数生成伪随机数发生器-程序员宅基地

文章浏览阅读1k次。一 点睛具体的伪随机生成器有下面几种杂乱的方法 线性同余法 单向散列函数 密码法 ANSI X9.17二 杂乱的方法——这种方法不可取可能有人会说,既然是要生成杂乱无章的数列,那么用杂乱无章的算法不就可以了吗?比如说,可以使用连程序员都无法理解的混乱又复杂的方法。然而,这种做法是错误的。如果只是把算法搞得复杂,那么算法是无法用于密码技术的。其中一个原因就是周期太短。使用复..._杂凑函数生成伪随机数发生器

推荐文章

热门文章

相关标签