|
原帖由 monkeybad 於 2007-8-28 10:40 AM 發表
1 x, ?, U9 c8 M如題1 ~' Y: @4 j3 v6 e. d
小弟我目前在設計一個時鐘電路 需要一個記數器 不知道這個問題是不是屬於這個討論區& T. F5 u9 V& B' g$ j; A
如果不是麻煩版主修改一下囉
9 b& l) z; ]: k& k6 h- ]% J( D& Q& K2 F/ D8 D% {* e1 U" c- V, B
目前這個記數器要能數0-9 接著就進位 然後自己reset繼續從0開始 進位後訊號再繼續由一 ... / _# l( r" ~- C# N. B# l6 t0 B
5 v+ a0 i' S) Y1 ^7 c" u' p/ U( p
大大您是要寫Verilog還是電路; |, v, N. R5 s1 V3 K5 j) L! E
& M# n# I5 D/ f/ L5 L2 H先PO個RTL Code參考看看) q/ H" ^' d$ i# y
( F, k% E* f# V" I6 c1 P" D; Q7 R+ C; `輸入:N clear load clk
$ F9 [9 I9 c( W: R5 p# N- y% |' I輸出:count/ d- K+ k. n+ A4 C
7 n% I/ j5 ^/ C7 p行為描述(依照優先順序)2 b0 {5 q, v1 @& g) j' G! U
1.如果clear為1,則輸出設為為07 r# T" e- \9 J( f! {* I
2.如果load為1,則輸出設為N7 S2 b" U2 o* j" w
3.每個時脈輸出遞增一次(BCD)
& W3 C7 R7 t% R2 ?, m2 U+ f& U5 A, i
1 h0 O; u; J& n* \# L" L) U% A3 m3 a' C0 S5 y3 P
4 V) f8 O% [: ?程式碼:
( G# f j$ Z% hBCDcounter.v
$ e4 t+ J, a1 Y* d
' h) ]0 s1 O5 I: ]module BCDcounter(clear,load,clk,N,count);4 P, {3 r) j0 H6 {
input clear,load,clk;4 j$ H9 U& c" H
input [3:0] N;
, ]+ u8 }+ E8 B( P! {+ _output [3:0] count;
+ [8 f5 Q7 r- x \- p- c' Dreg [3:0] count=0;1 p- i; h8 J5 l+ V/ z$ I9 ?$ K
" \, S" Z* F1 ^! k8 A
always @ (posedge clk) begin
0 j0 W% }- N9 ^0 z: ?9 V* L) h3 F& b if(clear) //clear=1
8 i% H; Y0 h' c0 _ count=0;1 E0 x! @ Y; B1 b- P
else if(!clear) begin //clear=0(共有0 1 X Z四種狀態)
, d7 K( p5 t# p$ H. ~4 z" I6 B if(load) begin
" t! |+ l9 N# v# w; `. S if(N>9)
7 f2 P; a! B7 I5 N( `3 G count=0;# h8 `& W5 {1 Y( Y% v: @4 b
else3 ~/ n l. e; U
count=N;( f% n4 Z! D2 B; H4 c
end$ V" Q/ l/ f9 {
else if(!load) begin
. m8 f0 s' |. |8 |: X count = count+1;$ y8 w3 P$ I! }3 \9 W0 q+ R; t/ @
if(count>9)8 V0 ^% _3 C- l
count=0;
0 r6 j c! N$ J end O* i+ h" \ F1 g5 ]7 ^
end6 l8 i, k% Z% ~' n) X. r$ T0 a. |
end
5 P, e8 ?6 D$ Z, I7 Yendmodule6 Q( {! @* i: |& f# u6 _
8 D" R6 a! e- G: ?3 I3 ibcdcounter_tb.v
: W' @! \ O9 E# K3 p; H& F- b% j4 d
module bcdcounter_tb;8 V# f* h) e6 d% q
reg clear,load,clk;: Y, X' x7 x2 _7 w
reg [3:0] N;, p: l( I$ g0 p3 Q# ^1 }5 s3 N# \
wire [3:0] count;
- ^% u0 ^% L2 G( \# n6 r) u
: a' V* q4 f2 B9 |3 M X iBCDcounter m1(clear,load,clk,N,count);# c# @! @; F3 d' R' m
- V! D \: b; ?
initial: w, @, N1 z. A6 v; \
clk=0;6 k) j( C: M1 r4 F& d
$ ^1 d7 U5 G1 u' B
always #2 clk=~clk;3 G. u( s3 L4 |# S; g! p, o
% I% f' I7 G5 `: [& S: linitial) Y; b2 f4 Q0 t6 L$ y- Z
#160 $finish;& f& K, A, g8 i
8 i& |6 ~1 ~& t( H- qinitial begin
7 q3 S% }/ ]; O# F clear=1;
; [! }% ]5 T5 T; H#4 clear=0;
0 B- t9 K& _0 B. q* [1 e#90 clear=1; x* L) ]6 v& k# T6 W3 l6 d
#3 clear=0;
- ]9 u$ x. n4 H- jend
; n7 A" q" \. w. A/ A& q
, ~0 s" f& ~7 ?% H( C4 einitial begin
4 [: U9 P" y$ w+ {! l) V* P" H N=6;load=0;
2 v ]) z6 {% [2 k4 }) z#58 load=1;
" X, R8 i- |5 z* f3 m/ G, E#2 load=0;
9 \4 Y9 U- z" N: V/ J! s& [#22 N=12;
4 v. A, }; c+ [. K#40 load=1;3 C0 d& i: P. O4 e
#2 load=0;
. p T! i& t8 d b/ Qend! \0 Y) v9 o. [! f& P
6 ^7 a0 H( \: p1 M1 y, p. |
endmodule |
評分
-
查看全部評分
|