|
原帖由 monkeybad 於 2007-8-28 10:40 AM 發表 # g8 r& [) ]# L6 W: O% t. ^' u0 T% M
如題0 |" a5 Y- G$ k4 V8 R; V$ ?9 _+ Z& ^
小弟我目前在設計一個時鐘電路 需要一個記數器 不知道這個問題是不是屬於這個討論區, O6 z* {1 }& Z( K% A" u
如果不是麻煩版主修改一下囉
3 H, Y; L& u2 t9 X3 I( E
5 B" Q' }' Q7 u; L. s+ m目前這個記數器要能數0-9 接著就進位 然後自己reset繼續從0開始 進位後訊號再繼續由一 ...
( _6 c3 J, B h. m- @
, I2 B+ B3 ^' I, o( L8 S. F+ Y0 f( j大大您是要寫Verilog還是電路# {) P( E/ }: m
! W0 v" f9 L# g$ X+ e3 v
先PO個RTL Code參考看看
5 Q+ X* F9 W6 S0 V* f
" I' I# Q5 d/ X輸入:N clear load clk5 s: ^: W$ z" ^2 q
輸出:count
; x7 [( l8 e6 s& E
0 o7 a9 O9 j U行為描述(依照優先順序)
6 Y. M0 W5 }4 w5 f# ]1.如果clear為1,則輸出設為為0' z! F6 A9 l) J) z" g
2.如果load為1,則輸出設為N
6 o, t) V' Y+ b- Y- y( u3.每個時脈輸出遞增一次(BCD)
( p9 b$ J% }. C2 z$ L- T5 }
' q# X% b4 ]9 h% b6 A. X
4 G g( j/ Q" l: o. T2 \, L) p) I/ O4 C! Y! w
程式碼:
; c% S0 O0 ?$ P$ C" P3 h! PBCDcounter.v
" M/ `* g# R% M# `7 g& D
# J* r- R0 b/ B+ Z/ q# w1 ymodule BCDcounter(clear,load,clk,N,count);% Z. \3 o7 C* j) R5 x
input clear,load,clk;
( P! j: M" _* t0 ~$ cinput [3:0] N;
- B `8 z/ d* r, Q5 h g3 f8 doutput [3:0] count;5 b) d5 K' n1 b2 ]
reg [3:0] count=0;
9 H7 R4 Q4 U% c; e( ^, K+ H0 a
( n+ v/ o1 b) falways @ (posedge clk) begin6 j1 c/ x; M0 |
if(clear) //clear=1
4 U: N' j( I9 ?( ^9 e& t4 R' u count=0;
+ b6 P/ E- y }) U) w6 Q else if(!clear) begin //clear=0(共有0 1 X Z四種狀態)% f3 v- W( v5 R1 q# \ @7 F
if(load) begin
& \! A7 S: H" d7 q2 \ if(N>9)! H8 ?7 U9 A5 Y7 W3 `$ e
count=0;0 d4 c: Z4 B8 R$ @' G
else/ T+ |) r; C6 N2 z! W% o
count=N;3 ^" G" W1 | W$ A( `5 a/ i- V! Z' H2 {
end4 Z4 {. G* h; \. c0 O$ |, Z
else if(!load) begin
$ K! n& J' j% Y9 ] F count = count+1;8 v" y( O4 `6 K) a- I( Q
if(count>9)8 A0 o* { }3 `3 F
count=0;
; S- k( }/ q6 e end( U. c( u) n6 @% g' M* [
end; `2 w% r& N! v& M
end
3 w9 V: W& G% ^3 eendmodule: i0 U. ~1 \. D" u' R: W+ [
u" x0 w. U7 J: rbcdcounter_tb.v" G# O' t. t% P% q, O
! a+ X- q! p: O$ k: `
module bcdcounter_tb;4 h8 J2 F3 l7 N. B8 o* E
reg clear,load,clk;' a( M4 p2 n2 T7 a c2 b; M
reg [3:0] N;
& v' E8 S$ u- W" d, n/ |' S( U: xwire [3:0] count;
6 R) h& O4 ?) H8 Y0 i& y _+ O/ N+ F
BCDcounter m1(clear,load,clk,N,count);
4 W7 D/ b8 t4 M: G
0 Z. Y, h& a- ]9 ^initial( o2 @5 U7 B5 k
clk=0;8 Z; @' t/ b, l* u
}" m ?1 }4 V( f% K/ ^/ ralways #2 clk=~clk;
1 Q4 b4 Z: _7 T8 H5 ^. c" e) p7 t+ r3 W3 T B( a: p
initial
5 s! G. f: z4 ~0 U- P( g# N b#160 $finish;
2 n) L- D3 B8 l1 w3 v/ ] I5 o1 O
& j4 T4 u0 B( u* `# |) p9 zinitial begin G" V7 o; D' `+ T( x! Q. H/ {
clear=1;# V, d% B+ f7 Z
#4 clear=0;
4 b4 A) v6 Y q/ N9 ?* }: \! X& ~#90 clear=1;, z, _* p; d7 D# z/ N
#3 clear=0;. J* b8 a& K9 q$ P7 G/ @
end+ p! k, P1 [' l; O: D: P
8 Y6 x; v9 b0 z4 V0 u9 O
initial begin9 T6 B% p) l- ~* l1 j2 T1 ~: P
N=6;load=0;. Y7 h$ g2 {1 H% N5 i) x
#58 load=1;
4 r4 P8 @) ^7 s+ \#2 load=0;- g1 o+ z, I& g! J! H' j/ ]
#22 N=12;
; b% }. l3 e5 w# t2 p#40 load=1;
* A& y- I& F& R- Y% v1 `#2 load=0;3 y, W9 [; g2 Q1 r6 z' M l
end( a; G& o& B6 f) I
9 s" e( D& X. `5 {' a7 Hendmodule |
評分
-
查看全部評分
|