|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Verilog语言中几种不同的触发器描述方式 , R5 l& B( }# F5 G! V, [- T8 D
! g1 w, }, k' {0 v1 k
Verilog中几种不同的触发器描述,Verilog中有几种不同的方式描触发器,有些是可综合的,有些是不可综合的用于testbench中。& E9 r- x2 `5 v2 _' [
第一种描述方式是最为常见的,可支持综合7 B$ @& F! h$ r' v
module d_ff_rtl(clk,reset,di,q);" L9 y2 u; _' h
input clk;9 e1 O/ j0 I" W, m' N3 D
input reset;# X3 g! o2 O0 k, _0 O
input di;/ i( Y) L7 A' u6 @
output reg q;/ E" Y: S8 [) l& O$ K4 V
$ j8 i! I- ?* {; `. [ always@(posedge clk or negedge reset)- X& B2 [: o- D0 G- L0 @+ R/ q
if(!reset)
1 U& ~7 @+ ]2 m/ y q <= 1'b0;
2 A8 C3 Z! C, d: m else
; I" u1 |3 i3 X# s q <= di;4 w) [4 t0 `" L3 W! r2 q5 j& X
endmodule
7 T6 Y O- m. W8 J' a% p3 _) _第二种描述方式使用wait语句实现,这种描述方式不支持综合
5 a6 K+ s, ~5 j5 }4 y' ]! e$ x0 K }1 amodule d_ff_behav1(clk,rstn,qi,qo);
' T' G% ^7 ]* ?, w8 J9 O/ A) u6 O input clk;
7 m$ U# k: y5 t( L# X; c: z input rstn;
7 ]4 u: k2 m# `4 g. S input qi;
8 O2 m, i) V4 f1 C/ E9 Y output reg qo;
" I5 H1 y* {) ~% H5 U. d Z
. g& `. P7 q+ a" Z: l always begin ; f3 W4 ^0 }9 b! f( h6 D# P
wait(!rstn);
8 `* v1 R$ G- N& C6 b0 d: H qo <= 1'b0;& p3 s9 K$ x$ J t+ F4 _
wait(rstn);- h4 Q: [% K: T8 d
end
E5 T) U* ~( x% k& c8 [( s0 O3 y% t: L
always@(posedge clk or negedge rstn)* F! g; X1 W1 w5 R1 T" T
if(rstn)
* s$ q+ s2 q0 Y. Q qo <= qi;
3 l: I0 s5 b8 Z9 b: o( gendmodule
7 f; O6 W: m4 L4 ]第三种描述方式使用assign和deassign语句实现,1 `* L* x) V7 U0 P
module d_ff_behav2(clk,rstn,di,qo);: m* D- M8 H% f( X0 A7 v
input clk;
" ?( [1 k G1 |7 g' ^8 Z input rstn;
6 B& t. @* f0 R* H c/ m; Z input di;
3 w6 f; C' V B8 ~/ \# A; _! ^3 y output qo;
0 A2 h5 z" b8 [5 x* O: P' |1 R, e. p5 u! |
reg qo;7 T n( _ F/ K- D
( f" l& D0 u, x! k( u6 x always@(rstn)begin
7 Z: e& V7 G/ J' o$ { if(~rstn)
( j# U0 R9 ^, E8 k- f# z; ]% j assign qo = 1'b0;1 P2 { K% D0 p+ c: N
else
( s; |9 I; m# y! ~1 Q deassign qo;, @# ~0 U6 j6 i. L( [# ~# D8 {
end
( k5 V7 a0 K; I% Q+ Z7 [
& }* C! o6 _' A6 K* u always@(posedge clk)begin 0 J- m5 x/ q3 G Z$ v- W. a' b
qo <= di;8 s; H6 _2 U+ F( Q- I$ o( f
end
% H7 ]+ J' g3 q# }8 @- eendmodule: L3 }3 T: h! M5 F# \
testbench内容如下:
1 A. {) M% M9 a0 f* p$ kmodule d_ff_behav_tb;
0 H* R6 u5 k8 U reg clk;$ d$ r9 D4 R! {! j4 B
reg rstn;
; X4 ]) a) w" y0 Z! s reg qi;7 V0 X6 [* e0 ^
wire qo;
, k4 q0 z" s% O, V6 P z# l7 k% m- d( a) U5 d
d_ff_behav2 ut(clk,rstn,qi,qo);
" l, F) y [+ D7 p
# b: Y3 e t# p5 _ initial clk = 0;
% T" f6 k4 f+ q) ^' c5 i. E0 ~ always #5 clk = ~clk;
1 N7 B7 Q/ b. ~2 I8 `! y$ z. O' h+ `! W: Q8 J- ?2 P
initial begin
& P# L( ^, n# t; r; l5 k( | rstn = 1'b1;
% k* a+ C$ K0 o4 M% S qi = 1'b0;. l1 ^2 M, _# u3 D1 D4 H2 l: `
#5 rstn = 1'b0;
' a' V; j0 j) V$ @ #1 rstn = 1'b1; 0 i; `# x) m; _# L; [9 \# }
#4 qi = 1'b1;
L% d0 h$ P3 x. w7 I$ ` #10 qi = 1'b0;
2 q! C6 {' G, y) b+ s1 s6 e/ g; r' G- F- }9 R
end! ?4 `" c" H, y% |
endmodule5 h" A; o8 }& d3 F$ `+ }: ~
! e7 H: p6 W# f7 X
|
|