目前最流行的硬件设计语言有两种,分别是VHDL和Verilog HDL,各有利弊,各有相当数量的支持者。VHDL语言是美军引进的,最早通过了国际电气工程师协会(IEEE)的标准,在北美和欧洲广泛使用。Verilog HDL语言由Gateway公司提出,Cadence收购,Synopsys支持。在得到这两家EDA公司的支持后,也通过了IEEE标准,在美国、日本和台湾省广泛使用。
让我们具体比较一下这两种语言:
1.整体结构
评论:
两种结构基本相似,并行语句的类型也相似。
VHDL语言需要大量的解释,程序通常比较长;
Verilog HDL一般不解释,或者只给出很短的解释,程序比较短。
2.数据对象和类型
极高密度脂蛋白
恒定信号变量9预定义类型各种用户定义类型
可以描述各种数量
类型描述是必需的
计算时必须考虑类型的一致性和适用性
硬件描述语言
常数:数量,参数
变量:网络寄存器类型
类型很少
在操作中几乎没有限制
3.操作符号
运算主要分为三类:算术运算、逻辑运算、关系运算。
算术运算
VHDL中有10种,但很多是不能合成的,只能用于行为描述
Verilog HDL只有五种可以合成
逻辑操作
常用的VHDL有6种,都是用字符表示的
Verilog HDL中有3类14种,
分为一般逻辑运算、位逻辑运算和简化逻辑运算
关系运算
VHDL有6种
Verilog HDL分2类8种,比较中加入同余和不完全(用于不定态的比较)。
除了以上三种操作外,VHDL中还有联接操作,Verilog HDL中还有联接操作、移位操作和条件操作。
评论:
VHDL的操作部分是抽象的,有着广泛的应用
Verilog HDL的运算划分更具体,更细致地体现了逻辑代数。
4.声明
两种语言的语句分为并行语句和顺序语句。主程序使用并行语句,而顺序语句只能在子结构中使用。
并行语句分为三种形式:
5.基础
“函数函数”定义
程序任务
6.附加结构
图书馆
“包”包括
7.典型程序的比较:
8位1/4 1MUX
8位加法器
8位二进制加法计数器
序列信号发生器:kser
预先设计的模块:8个1MUX中的1个:MUX8控制输入A [2...0]数据输入D [7...0]数据输出y。
3位二进制向上计数器:COUNTER3时钟输入clk状态输出q [2...0]
设计要求:“11110101”序列信号由Y口根据时钟节拍输出
新手经常为哪个词条合适而头疼。其实选一个就好。最重要的是在满足功能和性能目标的前提下,开发出良好的代码编写风格,增强代码的可读性和可移植性。
良好代码编写风格的一般原则总结如下:
(1)所有信号名、变量名、端口名都使用小写,以保持与行业习惯一致;常量名称和用户定义的类型要大写;
(2)使用有意义的信号名、端口名、函数名和参数名;
(3)信号名称长度不宜过长;
(4) clk用作时钟信号的信号名,如果设计中有多个时钟,则clk用作时钟信号的前缀;
(5)来自同一驱动源的信号在不同的子模块中使用相同的名称,这就要求在芯片的整体设计中要定义顶层子模块之间连接线的名称,端口和连接端口的信号尽量使用相同的名称;
(6)对于低电平信号,应该用下划线和小写字母B或N表示..请注意,在同一设计中应使用相同的小写字母来表示低电平有效;
(7) rst用作复位信号的信号名称,如果复位信号在低电平有效,建议使用RST _ N。
(8)描述多位总线时,使用一致的定义顺序,建议verilog使用bus_signal[x:0]。
(9)尽量遵循一些行业已经习惯的惯例。例如,*_r表示寄存器输出,*_a表示异步信号,*_pn表示多周期路径的第n个周期中使用的信号,*_nxt表示锁存前的信号,*_z表示三态信号等。
(10)源文件和批处理文件的开头应包含一个文件头。文件头的内容如下例所示:文件名、作者、模块实现功能概述和关键特性描述、文件创建和修改记录,包括修改时间、修改内容等。
(11)使用适当的注释来解释所有的流程、功能、端口定义、信号含义、变量含义或信号组、变量组等。注释要放在它注释的代码附近,要简洁中肯,只要足以说明设计意图,避免过于复杂;
(12)每行语句都是独立的。虽然VHDL和Verilog都允许一行写多条语句,但是每条语句当时都可以单独一行写,可以增加可读性和可维护性。同时,每行保持小于等于72个字符,都是为了提高代码的可读性;
(13)建议缩进,以提高连行和嵌套语句的可读性。压痕一般采用两个空网格。例如,如果Xi交通大学SOC设计中心2中的空网格太多,深度嵌套时网格长度会受到限制。同时,缩进避免了tab键的使用,可以避免不同机器TAB键设置的便携性和对代码的不同限制;
(14)在RTL源代码的设计中,Verilog和VHDL的关键字不能用于命名任何元素,包括端口、信号、变量、函数、任务和模块。
(15)声明模块的端口时,每行只声明一个端口,建议如下顺序:
Clk,rst,使能输入信号的其他控制信号、数据和地址信号。然后断言clk,rst,enalbes其他控制信号和数据信号;输出信号的幅度;
(16)在实例化模块时,使用与名称相关的显式映射,而不是与位置相关的映射,可以提高代码的可读性,方便调试接线错误;
(17)如果同样的代码需要重复多次,尽量使用函数,如果可能的话,对函数进行泛化,使其可以重用。注意,内部函数的定义通常是带注释的,这样可以提高代码的可读性;
(18)尽量使用循环语句和寄存器组,提高源代码的可读性,可以有效减少代码行数;
(19)为一些重要的总是语句块定义一个有意义的标签,对调试有帮助。请注意,标签名称不应与信号名称和变量名重复;
(20)代码编写中的数据类型只使用IEEE定义的标准类型。在VHDL语言中,设计人员可以定义新的类型和子类型,但这些都必须基于IEEE标准;
(21)不要在设计中直接使用数字。作为例外,您可以使用0和1。建议用参数定义代替直接数。同时,定义常数时,如果一个常数依赖于另一个常数,建议在定义常数时用一个表达式来表达这种关系;
(22)源代码中不要使用嵌入式dc_shell集成命令。这是因为其他合成工具不识别这些隐式命令,导致合成结果错误或不佳。即使使用了Design Compiler,当综合策略发生变化时,嵌入式综合命令也不像放在批量综合文件中那样容易维护。这个规则对综合命令有一个例外,就是编译开关的打开和关闭可以嵌入到代码中;
(23)避免在设计中实例化特定的门级电路。门级电路可读性差,难以理解和维护。如果使用特定工艺的门电路,设计会变得不便携。如果门电路必须实例化,我们建议使用独立于工艺库的门电路。比如SYNOPSYS公司提供的GTECH库包含高质量的常用门级电路;
(24)避免冗长的逻辑和子表达式;
(25)避免使用内部三态电路,建议使用多通道选择电路代替内部三态电路。
1.《vhdl 不管是VHDL还是Verilog,要写好都要遵守这25条代码通则》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《vhdl 不管是VHDL还是Verilog,要写好都要遵守这25条代码通则》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/994055.html