|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Verilog语言中几种不同的触发器描述方式
( R$ E1 c/ O" e& i1 A
) K$ Q% L" d% O8 ~$ YVerilog中几种不同的触发器描述,Verilog中有几种不同的方式描触发器,有些是可综合的,有些是不可综合的用于testbench中。% J0 M. N* t& j+ a$ G; a
第一种描述方式是最为常见的,可支持综合
) J- {9 A( K4 f) S, i: X/ C- dmodule d_ff_rtl(clk,reset,di,q);0 p2 o& m: J% A7 ^& v; v$ Y
input clk;
, d3 ~! c+ U0 N1 [. J% Q+ Q4 o+ D input reset;
# }; D" p/ g% G5 B: m9 _" D input di;+ U8 h( Q4 @* h5 }' |- E$ M& X) h
output reg q;
1 c/ w) C# b ^3 x
: J2 w) a B7 |" C w always@(posedge clk or negedge reset)
- s& h. C5 A6 ^! J. G, B/ K if(!reset)
U, _9 S' i4 F* q; {; W3 I$ V q <= 1'b0;
! N/ O6 i7 \' X else
! T. q* t8 C1 o$ i( l, k q <= di;
- Z6 T/ E V6 D9 U! P7 c# P; oendmodule ; V+ R2 f3 ~/ r2 _0 {
第二种描述方式使用wait语句实现,这种描述方式不支持综合% m; X( j' m; y, C1 w9 k' R" S
module d_ff_behav1(clk,rstn,qi,qo);
/ ]0 c# j) H6 A/ a: e" u6 U7 k input clk;/ {* u% D# O- e7 {5 E) o7 Q& t
input rstn;
1 C& X% q, I$ v; G input qi;! Z; j H$ N; y0 L
output reg qo;. t( ^. @( b Q8 x; g$ t) \5 {$ T6 M
4 m8 g! s/ j; b- `2 T- N7 D4 h& j9 f
always begin
3 `5 f# M+ E, z wait(!rstn);
/ O6 E& m- {' _ R$ d qo <= 1'b0;
: B* F/ _( s' {5 w- @" V wait(rstn);
# k: q* Y" g3 v8 I end+ ~8 z0 r1 L0 ^
7 a' K$ b; W- @
always@(posedge clk or negedge rstn)2 }) A( r/ c! Y T
if(rstn)& D& g" j. \6 q- \- u/ k: |
qo <= qi;4 C: |" `/ o2 h, ^# B7 \) Y C& `8 T# j
endmodule " K) J- }! ?& e+ N
第三种描述方式使用assign和deassign语句实现,- |3 R U7 Y3 N( M7 O9 W3 v$ A
module d_ff_behav2(clk,rstn,di,qo);* ~. q3 H+ E$ z: c) g
input clk;# K- R. P: h- M
input rstn;
a, M8 c8 X8 T0 ?7 n input di;8 K; d) E( ?; C# K5 X3 m
output qo;, g) B$ a3 L U; c8 E
+ U8 L5 M& g2 n5 @+ r- M reg qo;" W' z" E6 p$ w
4 d! M1 F6 C$ {' t always@(rstn)begin 8 y8 }9 O& g. w% _# e* ?! ^
if(~rstn)- L7 Y: a4 v; {2 I9 c7 J" m
assign qo = 1'b0;
2 N, q" C' f% U( M else 4 u! F( p; l& K/ p0 P+ J
deassign qo;
$ M3 f! V1 S0 L4 F2 Y# ]' t end : y% y1 b2 J. `/ ]; G; R6 t6 U6 q
& Q0 r7 z, X7 l: a always@(posedge clk)begin + r& M2 @4 H# t9 b% E
qo <= di;
$ _2 N* j0 Y5 n$ H/ ~4 ] end ; s5 T1 Q5 P" u
endmodule
' `/ d4 t# F5 U' Atestbench内容如下:2 f) V2 v+ Y! V E$ d4 u
module d_ff_behav_tb;
6 w4 I5 s9 y' s# ^+ L: R# I3 L% S reg clk;
2 [% o9 n- {9 D. c2 W' _ reg rstn;- W- n5 e8 ~* c! X' Y8 @6 w
reg qi;) P! y" e+ n/ |/ D+ n# m
wire qo;
4 A' Y: |$ Z r5 _" M0 N- h O) h. G
d_ff_behav2 ut(clk,rstn,qi,qo);$ \# O9 P2 N. U
7 n: X% I6 z4 {) [* v3 B initial clk = 0;
, h, E+ f) V4 e; _" p4 V# I7 J2 g, } always #5 clk = ~clk;
. y- c5 c7 o2 h9 H4 I$ w7 [3 J/ c$ L2 c; c* d
initial begin
5 K5 l; s9 M9 s rstn = 1'b1;; ]7 M2 I% E& o
qi = 1'b0;2 L; Y8 A! N6 j# f) u& Y0 W
#5 rstn = 1'b0;! j: l; o6 p: p4 w( A+ q
#1 rstn = 1'b1;
1 ?& }2 d0 e; C #4 qi = 1'b1;" f7 W* B8 @- Q* O
#10 qi = 1'b0;# R9 h; ]% w9 R, \# L/ z" }: N
: Q( T. r5 @: E8 G1 o
end6 c7 ]- Q; F- L0 a, Q4 ~3 H
endmodule2 t/ n$ E2 g/ e2 y/ {) O# c
$ k3 _; V: m6 `
|
|