|
原帖由 monkeybad 於 2007-8-28 10:40 AM 發表
2 P2 B: d/ Q8 q% I% k5 m- g如題
* I5 }4 g4 R2 \' ]/ m小弟我目前在設計一個時鐘電路 需要一個記數器 不知道這個問題是不是屬於這個討論區 B9 B' i5 t5 c) B. ?3 L$ f
如果不是麻煩版主修改一下囉
! l1 p6 a$ M, |- _- F) d7 G5 g$ {& y' {6 P2 p/ u2 S9 e t
目前這個記數器要能數0-9 接著就進位 然後自己reset繼續從0開始 進位後訊號再繼續由一 ... ! l) H+ u+ v/ h
: W' h$ I6 \2 E5 n
大大您是要寫Verilog還是電路6 [. W; f0 L- \( C/ Y
; {, @/ n+ X, P6 ^6 e* U先PO個RTL Code參考看看4 U Z; e5 x* {; m
! @: {) \& w) w' k輸入:N clear load clk
4 c2 M; p; n, Q; `9 M( q* s輸出:count; h, R* q; a" R
6 ^ I& A& {5 G1 I
行為描述(依照優先順序)
9 Q6 b2 G- ?) y) ?7 \0 |1.如果clear為1,則輸出設為為0
+ }3 r4 W3 n( [& \4 S2.如果load為1,則輸出設為N
6 s. b" d* j5 l$ c6 {3.每個時脈輸出遞增一次(BCD)( c3 e( y% n1 H' s
& ]+ Z) u7 p' m. }4 j
; M+ E6 o# u0 F w# p% c, q4 V7 f1 `: X' n8 p3 O
程式碼:1 s2 T( n# D$ _! k, I! P
BCDcounter.v: J" N8 v# h& ?7 e8 w# z! N
6 ~: d. Q+ b' M9 y
module BCDcounter(clear,load,clk,N,count);
' c+ i ~, L1 D& { F1 Q, j( vinput clear,load,clk;1 g8 V3 M5 ?8 O5 U
input [3:0] N;: }; e7 ]; ]' [% C
output [3:0] count;6 ]0 J+ y% r; n& e+ n9 p4 C/ L0 |
reg [3:0] count=0;
% e) _( Y! w( G5 y' [( X F2 V D- |# v$ E% u4 ]
always @ (posedge clk) begin/ x/ u- }! V7 w, T) S# j0 Y
if(clear) //clear=1
( ^; l1 S8 W/ ~ E, D- \2 ]1 E count=0;
) L. g/ @; ?. z else if(!clear) begin //clear=0(共有0 1 X Z四種狀態)
. U: b$ H1 N( x, I if(load) begin, ]/ `0 K1 ?* x4 t( O/ g! L
if(N>9)7 C7 E, ?1 q C( g0 ~
count=0;
" F' k- y$ w$ x, D5 W else9 Q2 q' i( @ a8 X; X* _; { u
count=N;
}1 M d) E+ c3 T end
, ]% E2 _" |- Q' m5 K$ E else if(!load) begin
5 a5 {7 `: R9 W* Z- [' R count = count+1;7 v# m9 I# Z6 N( w* h
if(count>9)4 A) X! _6 l5 m7 `0 C2 k
count=0;) I/ L! g, `) K1 u8 K% ^, u
end; u& d& y3 q) F3 \& ]- k
end j, X8 `) b% W1 X# | G
end
4 d' h3 U: Z Tendmodule
G/ B- f/ a7 A# L* h
( \5 F: d+ i, x! Y; S( {bcdcounter_tb.v
5 \4 N) E5 ^; W) C
: i* H$ c d: A9 Umodule bcdcounter_tb;4 K# s8 c9 A9 N: U) \
reg clear,load,clk;% [. z4 I3 L: D- e; a* h+ g
reg [3:0] N; o4 C; |; [8 Q2 E
wire [3:0] count;- x1 p1 }9 K- _/ y2 X5 t
; e7 j. U% F3 B. M2 R
BCDcounter m1(clear,load,clk,N,count);6 `+ d7 f6 B1 j' Q* ^& M, C, a
) f! M- L- y4 }9 R5 Q
initial
- L! r9 G1 E4 y8 h6 Oclk=0;8 I4 t) t3 P9 q6 B" H5 r% B. L0 ^& p
- W9 O+ y& f& t K' yalways #2 clk=~clk;
+ @! H7 u j) P( Q1 Z: c
5 [( y; c/ s6 w/ ]3 o1 ^; xinitial
$ k" H3 J) L9 N* I! a#160 $finish;' ~3 \1 \' X5 A) u \5 J6 Y
! u5 `! S$ L* t- Y9 K* f0 Ainitial begin
% t+ x- D8 s& P$ M clear=1;
% a! f' `) _' a' n; ?$ O#4 clear=0; A+ K4 R- e, I
#90 clear=1;& ~7 J6 M4 a$ S/ P9 {
#3 clear=0;! h5 g7 b, n" Y# _; M
end+ J' p( Y! L- Q
+ e( T. U5 Q# kinitial begin; x& X# p! Z- B- _# f% `
N=6;load=0;
% I' ~' K$ h3 R3 \' Q#58 load=1;
7 E& E; W# S+ W% K+ g0 ~#2 load=0;- a2 [9 n$ `/ S) i' q5 h: Y$ x' T
#22 N=12;( x x h- a: B% x
#40 load=1;+ M/ ?1 F5 X8 j9 Q
#2 load=0;) S4 l6 s# Q- J4 H) D5 ]! D( g
end
x8 ^! O& h2 c/ ~+ X+ B: u
, P4 Q, H6 l/ I8 L( sendmodule |
評分
-
查看全部評分
|