|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Verilog语言中几种不同的触发器描述方式
! x S5 [% d1 K" i8 k* c
# F/ @) x/ M, W! t/ _Verilog中几种不同的触发器描述,Verilog中有几种不同的方式描触发器,有些是可综合的,有些是不可综合的用于testbench中。2 F: k0 d% d' u. x" y
第一种描述方式是最为常见的,可支持综合+ d- K: ?9 s% M" X' g1 L
module d_ff_rtl(clk,reset,di,q);6 a# V7 h" a) X6 I8 j9 N4 `) W% ~
input clk;
1 A, c! r F0 V& [3 e& A- {2 c input reset;9 r! s% p5 G5 H O. A* H; g: t5 o
input di;
6 u- B0 A" q5 u output reg q;
- `' ~) o: n% {6 j% k) r7 i7 |+ [2 t
always@(posedge clk or negedge reset)
* k" X/ y/ }) `$ C+ h if(!reset)# [0 l) U- S0 `- Y
q <= 1'b0;
6 f$ W! s; Y6 a8 x- U else
6 T( o; [' ?3 i% h. v3 Q q <= di;
. o3 U4 L" h" Nendmodule , ]7 l8 K% }: T4 J: M$ |! w
第二种描述方式使用wait语句实现,这种描述方式不支持综合
; C$ T. `8 E( Xmodule d_ff_behav1(clk,rstn,qi,qo);
$ I8 _/ M x1 v! t3 y4 I# C) q J# X input clk;
. `- l" a; c, ` input rstn;6 B4 R" G, L: O
input qi;, b/ I8 z! `4 c5 z; S
output reg qo;( u8 `4 q ~" J; F1 G: r
# U) ?* `2 r, @( N8 f6 j0 o
always begin , R `: Z4 u. } m
wait(!rstn);* `" R5 n, | _& L- H1 N7 Q
qo <= 1'b0;
4 a- h, L+ l7 v3 \- c wait(rstn);2 v7 Q* @% l0 z8 u8 C: y! L: E: l
end
O" {: {! p- w! Z( c1 t/ p, y2 c( A4 S2 Z/ e C' E5 P
always@(posedge clk or negedge rstn)
& p3 I. l! [& U; f if(rstn)$ U! k" v. \* d! k( B
qo <= qi;
( U0 G5 |( E$ x8 Z. }" F4 Gendmodule # N. S4 y7 Z! ~; J" [
第三种描述方式使用assign和deassign语句实现,6 }0 t9 L% i/ f2 H5 L+ k' Q
module d_ff_behav2(clk,rstn,di,qo); c. K0 `" S( P
input clk;8 {. B: Z+ [0 y. ]$ X
input rstn;
6 s$ h4 n9 I5 r, v- K. i4 l input di;" b6 b/ ~! @. @9 X
output qo;
H- W& s* M; c# T6 _; ^: m1 Y. f$ @- X8 o
reg qo;
' k" l6 ?! C) f8 K2 T/ _% O: F! a3 E& v- x+ l
always@(rstn)begin $ o! p, ?3 n X3 O2 X
if(~rstn)
4 e; I9 q4 _4 W! r( Z' c3 O" z. ~ assign qo = 1'b0;
2 J1 r: V8 T+ I: H else
\5 K' K& @+ b5 N0 t$ O deassign qo;
5 m4 d7 C) `! w7 U$ Y end d2 [+ g/ l8 \! T/ B$ i# x
% S- Y" B& Q y) _) ^ always@(posedge clk)begin
& ^6 |- D* d9 r+ ]3 E" i4 O qo <= di;
1 ?9 q+ x! x" v end
( |7 n/ N- d) @2 N1 w& pendmodule, w) Y0 x8 m; W* c0 W
testbench内容如下:
( h' |* F! P8 y0 [' Vmodule d_ff_behav_tb;
/ O( M4 J1 W$ l2 q2 M, A( u( K reg clk;
" n( o" t( y% W0 v }" C( B* J reg rstn;
( @; r! X9 Z# k+ S* z. a r reg qi;/ G: o m/ j8 z' y
wire qo;
6 h3 A7 J7 o1 J& P6 s
- A) }# l4 U2 A! W d_ff_behav2 ut(clk,rstn,qi,qo);
" t1 i" i, H( G3 v" K
3 _' [3 T3 B0 B# ^ initial clk = 0;
) {& K. d: @% P always #5 clk = ~clk;/ Y; ^% }. Y" g1 r
' G. D3 u* v' k! h/ ~% |, ] initial begin . n* v& ~- c0 Q; V" u& r c B& }
rstn = 1'b1;; f" Q M* X0 h
qi = 1'b0;: p. M6 t/ J; _' M# e; f8 F
#5 rstn = 1'b0;
0 I$ b; E: E5 [4 ]( b$ b5 Q8 G #1 rstn = 1'b1;
. \1 `, s6 i3 ]' u6 `5 J+ q# g #4 qi = 1'b1;
/ |* y5 K' a, a" u #10 qi = 1'b0;
0 Q- s2 u! @: o7 ?' c( T' X/ D) n6 c' F0 W
end: y) ?" h0 Y7 ^ M* I: I: \0 H
endmodule1 m& Q+ H/ M! A# v) c1 U
$ D" R) N O5 b v8 F4 V7 K |
|