爱游戏-BPO行业整合方案提供者
专业化、科技化、国际化;高标准、广覆盖、全流程
了解更多VHDL周详,Verilog简练,但要写好都要遵照这25条公例 时候:2024-12-19 20:27:27 手机看文章
扫描二维码随时随地手机看文章
当前最风行的硬件设计说话有两种,即 VHDL 与 Verilog HDL,二者各有好坏,也各有相当多的拥戴者。VHDL 说话由美国军方所推出,最早经由过程国际机电工程师学会(IEEE)的尺度,在北美和欧洲利用很是遍及。而 Verilog HDL 说话则由 Gateway 公司提出,这家公司展转被Cadence所购并,并获得Synopsys的撑持。在获得这两年夜 EDA 公司的撑持后,也随后经由过程了 IEEE 尺度,在美国、日本和中国中国台湾地域利用很是遍及。
我们把这两种说话具体比力下:1.整体布局
点评:二者布局根基类似,并行语句的种类也近似;VHDL说话需要进行年夜量申明,法式凡是比力长;Verilog HDL凡是不进行申明,或只进行很是简短的申明,法式比力简短。
2.数据对象和类型
VHDL 常量 旌旗灯号 变量 9种预界说类型 各类用户界说类型可描写各类分歧的量 必需进行类型申明运算时必需斟酌类型的一致性和合用性
Verilog HDL 常量: 数目,参量变量:收集型 寄放器型类型种类少运算时所受的束缚少
3.运算符号运算首要分为3类 : 算术运算 逻辑运算 关系运算 算术运算 VHDL中有10种 但良多都不克不及进行综合,只能用在行动描写
Verilog HDL中只有可以或许综合的5种 逻辑运算 VHDL中 有经常使用的6种,均用字符情势表达 Verilog HDL中有3类共14种,
分为一般逻辑运算,位逻辑运算,缩减逻辑运算 关系运算 VHDL中有6种 Verilog HDL中有2类共8种,对照增添了全等和不全等(用在对不定态比力)。
除以上3类运算外,VHDL中还毗连运算,Verilog HDL中还毗连运算、移位运算和前提运算。点评:VHDL的运算划分比力抽象,顺应面较广 Verilog HDL的运算划分比力具体,对逻辑代数反应更注意一些。
4.语句两种说话的语句都分为并行语句温柔序语句,并行语句在主法式中利用,挨次语句只能在子布局中利用;
并行语句都分为3种情势:
5.子布局function function 'defineprocedure task
6.附加布局librarypackage 'include 7.典型法式对照:8位4选1MUX
8位加法器8位二进制加法计数器序列旌旗灯号产生器:kser 预先设计模块:8选1MUX:MUX8节制输入a[2..0] 数据输入d[7..0] 数据输出y3位2进制加法计数器:COUNTER3时钟输入 clk 状况输出q[2..0]设计要求:依照时钟节奏,由y端口轮回挨次输出“11110101”序列旌旗灯号
初学者常常头疼在选哪一种入门适合。其实,随意选一种便可。最要害的是要养成杰出的代码编写气概,在知足功能和机能方针的条件下,加强代码的可读性、可移植性。
杰出代码编写气概的公例归纳综合以下:(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)利用恰当的注释来注释所有的always 历程、函数、端口界说、旌旗灯号寄义、变量寄义或旌旗灯号组、变量组的意义等。注释应当放在它所注释的代码四周,要求简明简要,只要足够申明设计意图便可,避免过在复杂;
(12)每行语句自力成行。虽然VHDL 和Verilog 都答应一行可以写多个语句,那时每一个语句自力成行可以增添可读性和可保护性。同时连结每行小在或等在72 个字符,如许做都是为了提高代码得可读性;
(13)建议采取缩进提高续行和嵌套语句得可读性。缩进一般采取两个空格,如西安交通年夜学SOC 设计中间2 假如空格太多则在深层嵌套时限制行长。同时缩进避免利用TAB 键,如许可以免分歧机械TAB 键得设置分歧限制代码得可移植能力;
(14)在RTL 源码的设计中任何元素包罗端口、旌旗灯号、变量、函数、使命、模块等的定名都不克不及取Verilog 和VHDL 说话的要害字;
(15)在进行模块的端口声名时,每行只声名一个端口,并建议采取以下挨次:
输入旌旗灯号的clk、rst、enables other control signals、data and address signals。然后再声名输出旌旗灯号的clk、rst、enalbes other control signals、data signals;
(16)在例化模块时,利用名字相干的显式映照而不要采取位置相干的映照,如许可以提高代码的可读性和便利debug 连线毛病;
(17)假如统一段代码需要反复屡次,尽量利用函数,假如有可能,可以将函数通用化,以使得它可以复用。留意,内部函数的界说一般要添加注释,如许可以提高代码的可读性;
(18)尽量利用轮回语句和寄放器组来提高源代码的可读性,如许可以有用地削减代码行数;
(19)对一些主要的always 语句块界说一个成心义的标号,如许有助在调试。留意标号名不要与旌旗灯号名、变量名反复;
(20)代码编写时的数据类型只利用IEEE 界说的尺度类型,在VHDL 说话中,设计者可以界说新的类型和子类型,可是所有这些都必需基在IEEE 的尺度;
(21)在设计中不要直接利用数字,作为破例,可使用0 和1。建议采取参数界说取代直接的数字。同时,在界说常量时,假如一个常量依靠在另外一个常量,建议在界说该常量时用表达式暗示出这类关系;
(22)不要在源代码中利用嵌入式的dc_shell 综合号令。这是由于其他的综合东西其实不认得这些隐含号令,从而致使毛病的或较差的综合成果。即便利用Design Compiler,当综合策略改变时,嵌入式的综合号令也不如放到批处置综合文件中易在保护。这个法则有一个破例的综合号令,即编译开关的打开和封闭可以嵌入到代码中;
(23)在设计中避免实例化具体的门级电路。门级电路可读性差,且难在理解和保护,假如利用特定工艺的门电路,设计将变得不成移植。假如必需实例化门电路,我们建议采取自力在工艺库的门电路,如SYNOPSYS 公司供给的GTECH 库包括了高质量的经常使用的门级电路;
(24)避免冗杂的逻辑和子表达式;
(25)避免采取内部三态电路,建议用多路选择电路取代内部三态电路。
欲知详情,请下载word文档 下载文档