|
原帖由 monkeybad 於 2007-8-28 10:40 AM 發表
( v1 K% p# E2 [$ t# `如題, g; v; i" K# n* F y \9 Q& c# l
小弟我目前在設計一個時鐘電路 需要一個記數器 不知道這個問題是不是屬於這個討論區
' ?/ [; m6 q& ]! Q4 z( g8 `+ e! x如果不是麻煩版主修改一下囉0 n: ]$ A: w4 s N1 _& C9 t
% c( u( A: C7 a! C L: P
目前這個記數器要能數0-9 接著就進位 然後自己reset繼續從0開始 進位後訊號再繼續由一 ...
3 C0 ^! F! Q5 {! }
1 J. ]& G8 |, C3 i+ I6 r `( M4 x大大您是要寫Verilog還是電路, H: u' ^# B% Y" h8 U
W6 A# r& V$ X2 `
先PO個RTL Code參考看看- X* P- [5 X! ~% L
3 P) r+ A8 y* f
輸入:N clear load clk
6 q7 O5 U: }" j& Q+ k R9 R& E C輸出:count
4 e- x" |7 r$ {7 n- E2 X: X. k; N" b3 e5 z1 f' W$ ?6 c/ j Y
行為描述(依照優先順序)3 j5 P3 X& b0 v( z) ?# _
1.如果clear為1,則輸出設為為0
; G, A/ Q/ s1 ]: l$ ]2.如果load為1,則輸出設為N
1 a5 V' P0 O( m3.每個時脈輸出遞增一次(BCD)
. s* }7 P& T$ F% r# Q# C- z) I
# a- Q. e' s3 ]7 m9 l* N0 p- B3 ]* t N9 ^1 P" u& d) c$ V d' R) L8 L
% ^$ t- o; e* `
程式碼:
% c4 V* v* K1 f7 qBCDcounter.v
/ {6 h* |* K M# J
( M& }9 M: k3 i( t$ f! Z; ~module BCDcounter(clear,load,clk,N,count);
' Y+ W; n% [# j2 Yinput clear,load,clk; @+ z8 ?8 `: z. o: N$ h/ r- g6 f0 T: u
input [3:0] N;) c- w% }. F9 |' S9 [% T
output [3:0] count;
) J, @) R7 l$ \1 Z% Mreg [3:0] count=0;' a" X. h- x& Y) P% J. t `
! V1 ~ `/ {# malways @ (posedge clk) begin
4 c7 G+ x+ O( i& V" z if(clear) //clear=18 x! i6 U0 O: W/ L G% D5 |
count=0;+ z8 z, k: j; X8 b7 R
else if(!clear) begin //clear=0(共有0 1 X Z四種狀態)
& a' a6 A; H( j' ? if(load) begin
3 g- d* Q) F. V) b6 p; G+ F: ^ l if(N>9)/ T2 E7 l' F& }% I% k& B
count=0;: i, R! Z# o1 Y( s5 O. S
else
% \( h) Y& e V1 ?+ Q- {+ } count=N;5 t- d: s7 u$ I- |' q
end: H W Y8 x& U0 |/ ]! |
else if(!load) begin! E, w9 t" r) @
count = count+1;$ `* k W' O( v8 `+ ^- t1 ]$ R; K
if(count>9)6 B9 Q- F: {; `, A
count=0;
- v. L9 @& C) X5 l$ _+ A end3 z* D; u( p1 u! Y
end
: Q" M' T! S0 ?end9 S$ j6 b! j# w* M) {
endmodule
% d* l' c$ ^5 n* ^9 W' ~# t) ~1 c; K- a* |- ~3 A4 q' I
bcdcounter_tb.v
+ p1 L# J) Z: ^9 h8 f* g/ v& v5 j- m3 t9 X
module bcdcounter_tb;
* m; K( \& A8 }reg clear,load,clk;9 _; M7 |: f* s
reg [3:0] N;
U G# f$ H; `* E# rwire [3:0] count;
# ?8 ^0 `" g4 w* O' w J
* W7 i6 D( p3 V. O% m! F9 gBCDcounter m1(clear,load,clk,N,count);" E- }% P- X- E5 ~* C- B
* o, }( q* | V# R. K- v d- Zinitial
: ^8 P- d8 i0 R' k+ ]7 F4 E1 Hclk=0;
) H- i x0 R P7 i- Q9 t) K5 X$ `# g( a9 j: D8 ^1 L# ]
always #2 clk=~clk;
: P# D, c* O$ e& F% k E5 O8 Z% B$ K% c' l8 P
initial
( d; w9 j( ^4 `4 i#160 $finish;
\9 a* M! R0 E2 I- e/ _1 }* k3 |
8 a0 A- n/ |+ A. o4 ?# _8 n; iinitial begin1 z3 ]" K+ Q& ]* n8 U
clear=1;
: ?( j; G$ P# i" m( A; @#4 clear=0;8 n% y1 H* B& O0 u- u! \! F1 x
#90 clear=1;4 c# l5 e' I7 f- \2 `: y n% N
#3 clear=0;6 {# D2 {2 \1 z* E
end; a) E2 o1 G& G
5 h2 O& A O5 e4 f1 H% A4 p1 ?& r
initial begin
) Q% g0 l) o& e) a0 N N=6;load=0;
' {$ a" n7 a9 M#58 load=1;
; v! \% A1 N: C, x" H" U7 E1 q1 v#2 load=0;
- X( B9 i$ e2 Y+ F4 s#22 N=12;
- G0 {6 b8 g" H3 {+ w#40 load=1;
# P/ O* `8 ?; w: e#2 load=0;* |5 y b' p! c7 I1 L' @3 C+ U
end
) u+ x, P2 U6 v4 u2 J
* _% Q# ~# B$ s& O" dendmodule |
評分
-
查看全部評分
|