找回密码
 注册
关于网站域名变更的通知
查看: 190|回复: 2
打印 上一主题 下一主题

Verilog HDL黄金参考指南(中文版)

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-14 10:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
Verilog 硬件描述语言(HDL)是描述电子电路行为和结构的一种语言,是一种 IEEE 标准(IEEE Std.1364-1995)。
2 W, Z$ @. h5 h4 h' Y4 Q! G* YVerilog用于模拟从随机和纯行为到门级和开关级的抽象范围等层次的数字电子电路功能,也用于从许多抽象(寄存器传输级)描述合并(即自动产生)门级描述。Verilog 一般用于支持高层次的设计(或基于语言的设计),其中电子设计在用自动合并工具进行详细设计前要通过高层次的完全抽象仿真来检验。Verilog也广泛应用于 IC 的门级检验,包括仿真、故障仿真和定时检验。+ Z. p; h# q) D2 \3 y
Verilog 最初是在 1984年由 Gateway Design Automation公司开发Verilog-XL仿真器的时候一起开发出来。1989年,cadence Design Systems公司并购 Gateway公司,同时拥有对Verilog 语言和 Verilog-XL 仿真器的权力。1990年,Cadence 将 Verilog 语言(不是Verilog-XL)放到公共领域。为了使 Verilog 语言通过IEEE 标准化过程,一个非赢利性组织 Open Verilog International(OVI)将它不断推进,结果在 1995 年 Verilog 成为一个IEEE 标准。此后,OVI仍继续不断维护和开发这种语言。
8 ]0 {* D$ m! ?0 H1 O- _
5 F" b" z$ v* a  w( t4 ]编译
  J  `" e7 @; _Verilog 源代码通常输入到计算机的一个或多个文本文件中。然后,这些文本文件被提交到Verilog 编译器或解释器,编译用于仿真或合并的数据文件。有时候仿真在编译后立即进行,不创建中间的数据文件。, l% |6 L- P, B$ [! R# `* q) v' h
模块结构4 M+ Y& `' u$ Q3 u( z$ Z/ b; H
module M (P1, P2, P3, P4);
9 T9 N8 b% C4 h1 }input P1, P2;
) \; e2 ~* W4 c0 L3 V8 p# ^( M. R* Goutput [7:0] P3;   I2 k$ m9 D, |- y$ @; i) U8 V
inout P4; $ G! t/ o+ n# q) \. {. n
reg [7:0] R1, M1[1:1024]; 9 U6 D$ k/ Y# M! o" {  s
wire W1, W2, W3, W4; 8 o$ }6 N  a$ k6 h& i" L; Y
parameter C1 = "This is a string";
7 y: e1 P, c5 E......4 v. a% A  O) b7 i+ m! p
2 R1 D% r6 b; g, I9 f( Q3 f1 H
编码标准/ {$ J; z+ t/ n! O, v
编码标准共有两类。 词汇编码标准负责控制文本格式、命名惯例和注释,这种标准增加程序的可读性并简化维护。合并编码标准控制Verilog 的结构样式,避免普通的合并缺陷并在设计流程的早期发现合并错误。
" M4 D  Q0 \% |; ?: m下面列出的编码标准需要根据所选的工具和个人喜好修改。
/ p5 J& n2 B/ R. A词汇编码标准
. {3 z( r1 n& x● 将每个Verilog源文件的内容限制到一个模块,不从文件分割模块。
& |$ L* I2 f0 n' k2 h5 L1 `; F● 源文件的名字应与文件内容有关(例如∶ ModuleName.v)
9 |* M4 n% M; C  m$ P● 每行只写一条声明或语句。
8 U' f) W. {2 m) l4 G$ r● 使用和例子一样的缩进。: J7 p" |  @/ f+ P
● 用户定义的名字要注意大小写一致(例如∶第一个字符是大写)。
! h, t5 M- e3 c, f+ }8 x●尽管局部名字(例如∶循环变量)可能很简洁,但用户定义的名字应当是有意义并包含信息的。- Y1 h2 B& V$ k
● 写注释来解释(不是复制)Verilog 代码。其中,注释接口特别重要(例如∶模块参数、端口、任务和函数变量)。
; O9 M4 V) G* n- o. \  p● 在任何可能的时候用参数或'定义宏,避免在声明和语句中直接嵌入文本数字和字符串。
% D% i* I% a- @( q* t/ A9 H, L
& G) T% N0 m6 [1 @% U6 ?* w合并编码标准
; C( ?: D, W, L. N● 将设计分割成小的功能块,并为每个块使用一个行为样式。除了设计的主要部分外,其他部分要避免门级描述。( h% n+ d1 ~3 s! b( s% U- b
● 有定义好的时钟策略,而且在 Verilog 明确执行该策略(例如∶单时钟、多相时钟、门时钟、多时钟域)。确保Verilog 的时钟和复位信号是清楚的(即∶不从组合逻辑或无意识的门产生)。有定义好(制造好)的测试策略,并适当地编码Verilog(例如∶所有触发器可复位、从外部管脚进行测试、无功能冗余)。
8 s/ P7 @; U% ]& V* a: x8 s8 z# k5 \● 所有Verilog 的 always 应遵守标准合并处理模板的其中一个(见 Always)。+ e# V2 w3 [: g- }, Y
●描述组合和锁存逻辑的 always 必须在 always 顶部的事件控制列表列出所有输入。' Q6 D3 ]$ u' z) B3 S" `" o" @* \
● 组合的 always 必须不能包含不完全赋值,即所有输入值的组合必须赋值给所有输出。0 g$ r3 T4 k, w! n4 \
● 描述组合和锁存逻辑的 always 必须不能包含反馈,即 always中被赋值为输出的寄存器不能作为always 的输入。: ~9 M; s  A  Y* `# U3 ^5 h3 o6 D
● 带时钟的 always 在事件控制列表中只能有时钟和异步控制输入(一般是复位或置位)。6 S8 A; U7 l- {$ V/ u* t, s
● 避免不必要的锁存器。这些多余的锁存器是由于无时钟 always的不完全赋值产生。$ l3 n5 H+ [6 d$ d4 j6 t* F
● 避免不必要的触发器。当用非阻塞赋值在带时钟的 always 内给寄存器赋值或者当寄存器在连续重复的带时钟 always 之间和时钟周期之间保持值不变时,触发器被合并。
8 W. Y  J4 U+ f9 P9 V● 所有内部状态寄存器必须可复位,这样寄存器传输极和门级描述在检验的时候可以复位到相同的已知状态(这不能应用到流水线寄存器或同步寄存器)。
  {. c! \# s) _  R● 对于有不能到达的状态的有限状态机器和其他时序电路(例如∶一个4位的十进制计数器有6个不可到达的状态),如果硬件在这些状态下可以被控制,那么所有2个可能的状态的行为必须在Verilog 中明确描述,包括不能到达的状态的行为。这就允许保留状态机器进行合并。
/ Q! x: q( A" b; G● 避免在赋值中使用延时,除非要求在寄存器传输级解决0延时时钟的时滞问题。
' ]1 V1 o" N! ]7 T# G6 Q7 k/ v& F● 不要使用 integer或 time 类型的寄存器,否则它们会分别合并到 32位总线和64位总线。" v( r& |* x+ t
● 请仔细检查使用动态索引的Verilog代码(即用可变的索引或地址作为位选择或存储器元素)、循环语句或算术运算符,因为这些代码要被合并成大量难以优化的门。
( i: q, u+ _5 Y
; `; [4 t& b4 [+ D/ E/ i; V2 e4 I
7 ^/ W' H; E- l, E. p- @" B

verilog黄金参考指南中文版.pdf

510.5 KB, 下载次数: 4, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2022-6-14 11:05 | 只看该作者
学习了。非常感谢。。。

该用户从未签到

3#
发表于 2022-6-14 13:59 | 只看该作者
学习了。非常感谢。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-6 21:02 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表