|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
关于verilog几条语法 & D8 Z, }5 G6 Y7 o6 N( L
" N5 \7 C" ~& Z
1.关于wire和reg类型的使用: Y- @) ` R) X" F. u: {
input的变量一定只能是wire。output的变量可以是wire也可以是reg。inoutput的变量只能是wire型,因为类型中含有input成分。* G7 x9 S' i$ n4 u' I4 k; [! [ C( X
所有变量不加说明默认定义为wire型。
6 ]! i/ |9 `4 E; m6 }在assign语句中使用wire类型。在always语句块中使用reg类型。# ^( C7 {8 S8 m: c
2.位拼接符 { }( D7 v9 I5 {! j2 j9 `: ~9 d4 h" s4 [
位拼接符使用:把某些倍号的某些位详细地列出来,中间用逗号分开,最后用大括号括起来表示一个整体信号。拼接时高位在前。: L- X0 w8 O+ N, s, I
eg: input [3:0] numberH;* {5 b7 e& J+ d P! {( Y
input [3:0] numberL;
F2 f$ R0 k g" ], f- P1 M2 j output wire [7:0] number;4 N" W) e3 b$ [0 ?
assign number = {numberH,numberL};
4 ^* `+ D$ ?( s; f* x) W1
" z5 l+ S0 G, r+ {2 q7 A2
7 g' t7 g' r3 u" s9 c' A+ }) m. L' m3
, w+ D+ t+ H4 U3 O E4 v; V0 d% \44 v" [4 F% ]+ |( Y6 e3 ?( q/ o
3.case endcase语句与if else语句
5 S& } }# M. h, x. q5 U* qif语句语法基本与c语言相同,也具有优先级。4 k' {4 M, z. |; B, t {
eg: if(flag == 0)
( J1 X: Y$ F/ K. K: i; k# y begin single = 3;end
& v5 F9 F1 ^/ B4 M+ ~1 f5 _ else if(flag == 1)
7 ^4 ^& b8 ?: E2 n* T1 `- e+ s begin single = 2;end
; X* N! Z4 r" Q4 w2 h6 }. L else if(flag == 2)! n# Y6 s! T9 z S K
begin single = 1;end# f) d1 p" Y) f' s$ I
else& X+ N! |1 K4 } I+ z9 C
begin single = 0;end```5 X) C1 d4 N* S
1
/ [# s# Z7 D: {7 a3 B9 q( h6 G2& p. Z3 }+ Z! E- k( X# r
3
$ E) U5 d9 x: J5 N48 L* ^) M O3 H$ P# O) i M
5. c \* d) |$ l) j- r& m+ R
6
8 |4 Z2 e) C: Z9 `$ D6 z5 N71 } B4 a2 s1 j7 ?8 D" n5 S5 ]# ^& r
8" P) \/ L% q/ M E1 H; X
case语句,不具有优先级: ]' \8 L3 T7 V' Q4 k% h) V
eg: case(flag)
2 a9 g& O$ s i; m) l 2'b0: single = 3;7 ?1 g& ?; Z" k4 ~
2'b1: single = 2;! Q5 J) X$ ~% z/ }' `, e
2'b2: single = 1;
; X; Y* I% y$ ^1 J& j default: single = 0;
7 T1 e+ u& {7 h. I endcase2 q/ X8 p1 E& t# W
1
. G* n+ k/ q; S* O9 `+ i2- B- R+ i3 [1 q1 ?
3, ?" v' R F, t$ w4 J0 L: C
4
9 X1 x% j( P& {2 X5
4 a% O& l# c% V% ^6
2 E3 Z# H6 z7 {if语句与case语句: 5 R# M8 V5 K; ?+ c
if占用资源相对较少,但执行时间较长。case语句与之相反。( b* S" q1 l% H$ S: s% {! x' S7 m0 F5 [
4.always语句块与assign语句
5 ?( ]' M( v. t3 a( W$ Falways语句块一般用在时序逻辑电路中,在组合逻辑中也有应用。
5 X, I! v; R$ u7 H' i$ \0 L O8 C( i/*敏感信号是需要检测的信号,当这些信号发生变化时,always语句块就会更新一次。对于时序逻辑而言,还需要有posedge,negedge,posedge or negedge修饰。*/
( S& D2 ?4 E, v$ p) }& R2 o! Q' n3 l3 Y5 F% E$ f6 y
语法: always@(敏感信号)
/ b4 S4 r$ W7 q/ H% c begin3 J/ D! T- t* t/ |+ A \1 y
语句体;
( J. m: | X" G" C; \ end 4 W" v" m& Q7 g4 h3 G4 [
14 K% V, o$ T& x4 N- e# R' j
2% s& K$ ]# L. Z/ q
3
9 }! g* c) \: i* g8 z: L4$ z, m) A0 y; T4 {" n9 Z" B
58 |8 L1 k* h. p
67 H, a0 K4 o9 m* y1 ~9 ~
always组合逻辑+ l% Z! b8 K# v3 T& E- U6 D9 i( U
在组合逻辑电路中,用阻塞赋值 =" \& m, [ y! B8 [& U
eg: always@(a,b,c,d,x)7 v# H. M7 t! s: p& }7 a, X
begin
+ Y3 ^0 o, U7 ~+ N/ i case(x)7 j" q! f, t u2 T4 b- W
2'b0: y = a;; Y/ u( d3 ^2 [
2'b1: y = b;; D( q( {8 z' v6 g' Y
2'b2: y = c;8 s8 g# l0 ]7 p# P
default: y = d;
( p! V4 _) D0 w: y6 N; g+ O# L endcase
9 c8 O; ]9 d! ]- u U# r. ^ end - r! O* H' |! W9 w7 o3 a# ^# q
11 @! d0 e5 x2 h& i+ a/ }0 Y4 T
2 \* E6 d1 f' M' [% b
3
, E& n i: c+ \% v0 N0 m4" ?- ]& Z; S/ }4 K+ j% z
5
4 _7 k# V' o t6 p( b% ]6
7 c3 D/ b' K# T7 M& n$ d7
; G; T% a0 l% t( G8
0 Q9 n5 S) ?5 K+ S0 u) j: ~8 N92 S- ~- G3 q2 q8 y
always时序逻辑 8 q- P* x A: @% a
在时序逻辑电路中,用非阻塞赋值 <=
# j0 d a4 s- Z: meg: always@(posedge clk or negedge res)& A$ `2 ^/ h1 t/ U2 c% f9 ]6 F
begin
, ~4 B# Q+ \: U if(clk)
/ q5 r7 G# {7 ?* j$ k- c" O y <= a;" P1 q% P* ^9 p' H4 ~
else if(res == 0)
( \: _1 Q P- t! \" R p' f" n y <= 0;2 ]7 C8 t2 M1 f6 M
else y <= y;( o6 R* b: E5 _
end
5 ]" U' B+ U2 l L1
0 _3 u; b- {- K$ E$ _+ P; U$ r2
( q7 l' c/ C: e6 M5 ` y3+ I0 p! W$ `! t; q! t" o0 x/ l1 x
4- z$ z2 H* }, I% h# t9 {" F
5/ D. W# O, [* [. p7 [3 H
6
& G. }* d; R% W+ L. W7 H/ M: \4 I0 W$ t7" P- H {- v+ d3 G/ t6 j2 ?% k
8
* a& |! W2 O; |# R! c* N* t5.assign 目标变量 = 驱动表达式8 _6 @! s+ f; s: F0 B" l$ [
eg: assign y = a & b;0 R) c( n! ~' t6 V
1% d6 u$ X& R" { j N7 ~( F, s6 z
6.多目运算符 ? :
$ X# w4 [; P9 L- |7 b- J5 R6 Aeg: Y = (a&b)?c:d;) @ e o2 Z/ N e/ l8 Y9 Q2 R! k
* {% W. D8 i9 G/*与c语言神似的运算符。若a&b为真,Y=c,否者 Y=d。*/ |
" ]* D0 x/ i( \1 F. [ |
|