|
原帖由 monkeybad 於 2007-8-28 10:40 AM 發表 ![]()
2 n* g J. h- }" w/ H6 m如題
, L0 G% @; r# B3 ?2 D; ~小弟我目前在設計一個時鐘電路 需要一個記數器 不知道這個問題是不是屬於這個討論區* f6 o+ V) W6 e8 V) d$ j# R4 `
如果不是麻煩版主修改一下囉
) z4 G o' Z1 b1 l# F
$ J; _% b& W7 w) U1 C5 A- O目前這個記數器要能數0-9 接著就進位 然後自己reset繼續從0開始 進位後訊號再繼續由一 ... ! ]" f' l$ H3 P8 J% T- s1 B& m
- `4 H. j; p3 \$ g o- I |大大您是要寫Verilog還是電路
4 R5 g; \ e D/ j
# i6 _. e! k# I先PO個RTL Code參考看看
9 S4 @" O! R# P8 G' T$ `0 Q S: `/ R
輸入:N clear load clk, Q; U: |3 I$ |4 h
輸出:count
( _, ?' g+ _* B% o: q+ q# J' z/ s3 k6 e. U, d
行為描述(依照優先順序)- m5 s$ @. E4 P
1.如果clear為1,則輸出設為為0, [+ ^( M2 @2 n ]3 ?
2.如果load為1,則輸出設為N
3 T! `: b S' U1 Z Q* E+ L3.每個時脈輸出遞增一次(BCD)
* m# H8 ?% P, x7 h# v9 @: T( r0 M( M- G
![]()
3 [7 o$ k$ P* X+ P [7 x# j C/ D4 i/ `* p
程式碼:$ i3 E! z* L5 ~) _4 p0 T1 L7 ?: D" a
BCDcounter.v* v1 q3 e6 m2 ]# K$ c) y3 E
* [. X- @0 z$ w/ [5 y9 O* |0 x) vmodule BCDcounter(clear,load,clk,N,count);- I) E) p1 t" O6 g: k( C6 K
input clear,load,clk;
0 z9 d9 r: G8 \* i" R' Y5 }9 `' Ginput [3:0] N;
1 h6 j9 J( I# Ooutput [3:0] count;
. O% J" }# H. `) ]+ ]) @reg [3:0] count=0;% I- Y2 l. h) b0 C* _
( `" ^) z. l+ X/ B. g$ Qalways @ (posedge clk) begin
% Z A H! U# L; w4 V) R; | if(clear) //clear=1
' _/ c3 c0 q# y; Q8 D4 }& t" s count=0;- m2 A P4 K$ B! m
else if(!clear) begin //clear=0(共有0 1 X Z四種狀態)! @& U D0 g" a9 M F9 ?
if(load) begin
9 P( Z8 g; l+ a; P$ H8 x if(N>9)/ n8 \% J+ t* I: f0 m. C7 C
count=0;* M5 e q; C" _6 Y6 R/ ~
else
- b3 m' p, `% q% @3 y count=N;* u* _0 p/ N7 r; {, C# d: D. u
end
7 c6 {1 r8 p- n x1 F. U else if(!load) begin! U s2 \2 i% h; D8 p
count = count+1;
' m+ X9 `5 W0 `0 D; d% E" v; ?/ ~ if(count>9). ?( Z y, G" y! g3 B* w
count=0;
% \& z& ~; I( A, Z+ _' R9 } end
, A2 n! D |5 g6 _" D end
* D+ x6 Q4 A6 H& H% D* \% j5 Kend
4 {# ]" w1 c" B- Nendmodule
; U. `9 U7 E8 _5 m% D* Y- @' L7 G
7 w6 v- D& _/ X3 s, q( ?" r; Y6 X4 @bcdcounter_tb.v
0 _/ h$ ?& j) ^: R0 B# S# P: w
Z% B: p7 C" C8 Jmodule bcdcounter_tb;
0 Y- i# x% ^: p. v; X6 T- Z) zreg clear,load,clk;# S" J6 {. ?5 g* q. P3 f
reg [3:0] N; S# B; i% j' f: d
wire [3:0] count;
& |; k, I1 g1 _ V" v* ^6 }6 ^. }' f
BCDcounter m1(clear,load,clk,N,count);
8 @9 |0 q4 P6 t+ i" _8 V% Y0 n" e5 p) k0 Z s5 p2 X U( n; @+ g
initial0 K& _" M( \' w& l4 W$ O/ r
clk=0;
( W4 y N( e K
( U) ~8 h% G( Z- Ualways #2 clk=~clk;" a: y. z: F! N; a1 A/ t4 @
' E* Z( m8 q3 i+ r
initial7 t& p5 s5 v& i( b% _. ^, m* Q% s
#160 $finish;8 m) P) W. U$ }4 v6 h0 O
2 ~ [7 E; S) ?: g2 w" v6 C
initial begin! ?' Q) z! ?$ t# g& F
clear=1;" X# t7 S0 r4 @3 C0 a9 F; [. {/ m
#4 clear=0;
9 C4 A% |: W! ]# Y% p0 ?' o8 c#90 clear=1;
! c* b- S' Y, G4 F& `+ G" {$ }9 N#3 clear=0;
) O9 r/ J6 e4 }) e2 u! [end2 S8 d4 t" u$ P+ G, z
) ^8 x8 N+ T5 y' k' f/ y3 j
initial begin, `, s' ^/ O* z5 U( Y2 `
N=6;load=0;
3 ?& I) W8 L$ e: f c+ D#58 load=1;
1 Y: Q9 n, o" F& H0 d0 i#2 load=0;1 ] ~+ P; o+ S, u! h; `6 @
#22 N=12;
5 V' Q9 Z8 J% o2 C' `! L7 J#40 load=1;
2 Q: r* p: f& k9 [4 N) D#2 load=0;
$ J, F1 i* \) gend
7 y5 g' `: A. C* _3 q9 X& O4 T- Y! v
endmodule |
評分
-
查看全部評分
|