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

FPGA设计之常用Verilog语法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-18 09:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
FPGA设计之常用Verilog语法
% j& f- j  C+ \( m5 u
; c& R- }% n, z  ?9 w9 O
常用Verilog语法包括模块的结构、数据类型及其常量及变量、运算符及表达式。) N" o; \8 \% T3 D3 R0 d0 t

, y; v! U5 }1 R* H) n7 l  W: N7 i- F& f7 Y
/ g  C$ c6 ?. C+ f, V# @/ m- ~
       1、Verilog的基本设计单元是模块(block)。一个模块是有两部分组成的 ,一部分描述接口,另一部分描述逻辑功能,及定义输入时如何影响输出的。下图为模块结构的组成。
: t: X( \6 @5 D
# g9 E  j4 I- E8 C& w6 D7 q+ S! S2 d% f. @& g
(1)Verilog结构位于module和endmodule声明语句之间,每个Verilog程序包括四个主要部分:端口定义、I/O说明、内部信号声明和功能定义。模块的端口表示的是模块的输入还是输出口,其格式如下:module  模块名(口1,口2,口3,口4,……);
% K/ B+ N2 _) S1 S- H! f, @3 x( j' i9 W( `2 d
(2)模块的内容包括I/O说明、内部信号声明和功能定义。" B/ Q) z3 P  O9 t" V4 j
2 ^2 Z" _( ^; u, T1 w+ l
I/O说明的格式,其中输入口:input[信号位宽-1:0] 端口名i;(共有i个输入端口),输出口:output[信号位宽-1:0] 端口名j;(共有j个输出口),输入/输出口:inout[信号位宽-1:0] 端口名k;(共有k个双向总线端口)。另外I/O说明也可以卸载端口声明语句里,其格式如下:module  module_name(input port1,input port2,...output port1,output port2...);
8 S$ G  f# h/ Q1 N9 j* r4 h1 l4 I+ Z2 x# m
; K& L# F) l* |
2 ]9 J. j5 z% g8 m7 z2 Y0 s) m
内部信号说明,在模块内用到的和与端口有关的wire和reg类型变量的声明。如:reg[width-1:0] R变量1,R变量2...;wire[width-1:0] W变量1,W变量2...;
6 c6 {# X/ p' E" k  v! B, I
5 A  ^& S( e$ y  S( D
+ Y6 X, f' I0 X3 y6 Q* x! s1 ]0 T) g1 E$ `. @' |" r
模块中最重要的部分是逻辑功能定义部分。有三种方法可在模块中产生逻辑。0 Z* k: d2 J8 e; k( \; [
2 C% J9 f8 g8 F$ F- G- R
1)用“assign”声明语句:assign a = b & c;方程式描述了一个有两个输入的与门。% j' y4 N$ e2 y2 L  ?# _% n
) ~, s4 p$ o* X( i6 v9 w# p, {
2)用实例元件,如:and #2 u1(q, a, b);表示在设计中用到一个跟与门(and)一样的名为u1的与门,其输入端为a,b,输出为q,输出延迟2个单位时间,实例元件的名字必须是唯一的,以免与其他调用与门(and)的实例混淆。
% ~. i. N, N( s( Q8 Q7 G* u
9 Y" A1 M, X# Q8 d" L& V( r+ T" d3)用“always”块,如:
7 i  B+ S  C8 d/ p( h% y; y+ D: d. _& e8 ?" {
always @(posedge clk or posedge clr)2 z3 c8 r; o" K$ [& Q/ B' d7 Z

7 c# s. `% y2 C  H  [2 wbegin/ h. W* j' d  D# j1 C' o$ w$ t

8 [+ D# ^5 ?1 n8 {2 s, Yif(clr) q<= 0;
4 D( T# y: W& I9 c* G
0 B$ E  O/ f  V# {; qelse if(en) q <= d;
& u% z# X4 S( K1 g4 H" C
* k* ]4 c) a( ^# J4 Yend4 V. n1 k% x. h. s! ]

1 g9 C# G/ j" h. ?2 a6 V采用“assign”语句是描述组合逻辑最常用的方法之一,而“always”块既可用于描述组合逻辑也可描述时序逻辑。8 c, q6 F0 {, u' |, i7 c& b
" I! Y5 D# a1 ]0 N

9 ?4 S4 A7 B! d) f3 P2 Y9 T* ]7 G- t* W0 ]( n

& X, q7 y; h5 a& N+ h' s* I" }2、数据类型及其常量及变量,Verilog HDL中总共有19种数据类型。数据类型是用来表示数字电路硬件中的数据储存和传送元素的,其中reg型、wire型、integer型和parameter型为四个最基本的数据类型。其他的类型有large型、medium型、scalared型、time型、small型、tri型、trio型、tril型、triand型、trior型、trireg型、vectored型、wand型和wor型。其中除了time型外都与基本逻辑单元建库有关,与设计系统没有很大的关系。
0 P' q  R$ o: j; i
' D% l- {! F3 M) ^1 V! b1 ?/ z) m7 \+ u+ w
: I. J2 Y) @/ V; Y1 q
(1)在程序运行过程中,其值不能被改变的量称为常量,包括数字和参数型(parameter)。
( W! E8 H* \7 V& c9 k. O8 D
2 M* X2 a3 w) u7 G9 t. D+ B(2)变量即在程序运行过程中其值可以改变的量,在Verilog HDL中变量的数据类型有很多种,其中只介绍wire型、reg型和memory型
  g* _5 o5 O4 j7 h3 U' T, _& V+ Q8 [6 o: Q6 Z$ W

0 w1 K6 C9 G2 E8 t$ S; E/ Q- _1 V1 g6 k7 {7 L( m/ k
3、运算符及表达式,按功能可分为算术运算符、赋值运算符、关系运算符、逻辑运算符、条件运算符、位运算符、移动运算符和拼接运算符等。按其操作数可分为单目运算符、双目运算符和三目运算符。. r9 i3 o: d* o1 r2 m5 K
5 z  t5 |2 i+ D1 M
# L; H! K- n& G6 u' b( x* N

6 m& X" m; E9 _4 u& H$ U( F% ~刚接触Verilog应注意以下几点:6 V+ @2 K5 [' w: f

2 r2 \5 r" `% x; i+ q1】在Verilog模块中所有过程块(initial块,always块)、连续赋值语句、实例引用都是并行的;
$ _1 K, \6 z0 O2 h- J0 s
6 n! U$ n) [4 i  P- `% Z2】它们表示的是一种通过变量名相互连接的关系;2 s! ^  j7 v3 K2 X3 S8 d6 K
0 X( `2 D0 U6 m: X1 R
3】在同一模块中这三者出险的先后顺序没有关系;6 a3 {% ?+ s/ _6 S

8 m7 t, B, j0 Z  J4】只有连续赋值语句assign和实例引用语句可以独立于过程块而存在于模块的功能定义部分。
, v  Z6 ^# g0 w' s8 ]3 {: d
3 b$ I) p9 m9 P5】被实例引用的模块,其端口可以通过不同名的连线或寄存器类型变量连接到别的模块相应的输出输入信号端。$ |/ [% l$ a0 l" \) n7 x. z
, M8 w4 s0 ~* r9 e
6】在“always”块内被赋值的每一个信号都必须定义成reg型。

- {* B) q; D6 [1 _8 @
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-29 05:44 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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