Chip123 科技應用創新平台

標題: verilog 跑馬燈問題 [打印本頁]

作者: lucky    時間: 2012-7-19 01:42 PM
標題: verilog 跑馬燈問題
請問各位大大:我跑以下程式 出現了錯誤 它說 near "always": syntax error , unexpected always , expecting ' : ' or ' ,  ' 我那裡有語法有錯,請大大為我解答謝謝!
2 G5 Q. A7 J2 N4 }( ?* e( v1 P$ ^7 e: n1 E0 {1 S1 Y6 l, W
module led_shift(clk,led);
' M2 i5 q% T) l) [" X% _
7 U8 k: G5 n. O- O/ Einput clk;
7 V0 U! f/ U" P  l# E1 P
7 l' _5 z8 n2 L% D6 @% Uinput reset;
" l% G' f5 _6 O/ M" o! m3 ]% s* W
9 o3 f0 m' z) ]+ E8 v7 coutput [7:0]led;
8 T& ^6 r5 v: _6 W( `6 }+ z
9 N$ P+ e. s9 [1 w! E' areg [3:0]rdd;
/ O* W6 R$ k3 P- W6 V" \& h# _5 e5 J( @: J
reg [7:0]led;
( m% Y  Y9 n* ~2 A3 z/ }! |- t
, o1 R. r' b2 k1 m" ^7 V3 b5 [reg [2:0]cont
% e5 O* {/ p/ K4 {
4 @3 W( ~! d9 u3 Ealways@(posedge reset)9 K+ e6 @" r2 r* d! q' z
- Z0 K0 o$ Z) L1 l
begin' c# D8 Y$ t' v
   cont=0;
! n3 \  S) M$ {( l0 j0 vend
, _" e5 R( f' \* g! r3 W  t7 l+ ?0 r
8 L% e. R' q- S! e# x$ nalways@(posedge clk), x& j, F/ C& i4 c6 ~# x* Y
( Q+ D5 T+ d6 k# ^
begin1 A7 y! |6 ~7 V, m# @+ Z9 `2 K* @* R4 p
& F- ^1 {  Q. m5 r" e
case(cont)
# x: O, z! ^- c2 P! L. G! r! x* }, P- S- `2 v. h5 u  y
2'b000:begin
( `: l- U/ T, b! |2 `5 a% R; \: h  led=8'b00000001;
; z7 N% k4 r  P/ J  end6 ]/ g. w7 U0 x( W4 H( U% n
2'b001:begin
4 Z! Q! O/ R7 r. d) [; D. T  led=8'b00000010;
- R' B2 r- V/ r' d8 H; U3 J$ [  end
8 j4 h9 d7 C6 S$ c9 L1 [% \5 C2'b010:begin ; u. e4 V5 _2 T3 n4 x- [7 j; g
  led=8'b00000100;
% o8 W0 H9 G+ V, ~/ _; |  end( C; s8 n- D: }
2'b011:begin  B$ X5 f9 I: Y3 r* l
  led=8'b00001000;
5 f, C$ d9 q- \& P* L  end
8 s1 Y# O. i) \2 q2'b100:begin
5 m+ w2 K5 a' f9 T. p1 O  led=8'b00010000;
1 P6 W( v$ u! u/ Z! l  w  end4 q. b  l* e# y
2'b101:begin
* a: r+ f; |' N- I0 j  led=8'b00100000;
( ]" i) I2 S1 p; m4 N! n3 b5 R  end
; Q6 A) \# `8 `$ [2'b110:begin
0 y* W* M0 b5 m: M+ k  led=8'b01000000;$ ]7 @* i- ~  n$ j: Y3 v
  end
) v1 ?  t( ^% O. W  E" T2'b111:begin
/ j: L5 I! c) x. y/ R9 Z  led=8'b10000000;
& F: W; _; c4 {! w! z4 F5 O% x  end
- |/ u2 P# |5 s) |; l. w3 V! s  k9 a7 [
  endcase  6 l  F& q3 F0 k9 X, f

8 G' \% t: D" v, r- \5 s. V8 d! {  if(cont!=7)
4 V1 S6 ^" o8 z5 E     begin
, v: n" Y* z3 p! c      cont=cont+1;- d0 {" R5 o  m" D4 y) E$ P  x
     end' m( ]' ?9 j/ U: n" P6 Q
    else* @2 m) g) f, E# T& A) c
     begin8 T' n0 `. I$ C1 O8 {
      cont=0;
8 l! T" C/ P; L. {8 h' C9 n     end. `& B) y* p4 R( Q
end8 t$ }8 Q* N7 v. ?+ }
endmodule
作者: card_4_girt    時間: 2012-7-26 10:57 PM
本帖最後由 card_4_girt 於 2012-7-26 11:24 PM 編輯
" ]* X/ M+ M+ g4 Y( s
9 d4 o% }: [1 f) X4 F5 ^# Y# clucky大,感覺您的程式有些錯誤,在此我更正一下,您參考看看
; w% E! p) R& y: l首先關於您提到的Syntax錯誤,應該是您忘記把reg [2:0] cont後面加上";"所致
4 f3 V) O, K5 @+ M! e: i1 _那個錯誤的意思是在always區塊附近少了分號 (對不同行或不同類型輸出入之分界)或逗號(對相同類型的輸出入分界)
7 y" V/ s( [5 @  L7 m% c9 z0 B! ^3 x
3 D5 f! k( D& X# ?, l, g5 ^) umodule led_shift(clk,reset,led);//reset應該要加入input當會比較好,比較合理
" h+ K4 K2 l. s9 r3 i3 ~; ainput clk;
) Y0 a' u: r+ x" N$ vinput reset;5 U) B, ~& d+ W) I
output [7:0] led;* I" Y7 a4 F( l1 D1 C# J" s
reg [3:0] rdd; //rdd如果沒用到就不用設
' q3 v: H( a+ ^4 ?! }/ N* K3 V& m2 xreg [7:0] led;
) _. a& O7 H: ^reg [2:0] cont; //記得要加分號
9 u6 u  T( J' T4 v" falways@(posedge clk) //同步計數程序宣告( I8 l7 o; e. S/ ?9 a' w
  begin
0 W9 f( I# [, P5 C' V5 A8 R      if (reset) cont = 0;2 u2 I+ ~9 H2 P5 ]- S
      else cont = cont + 1;
$ O$ ?& S! ?$ P1 y- U( ~- Z  end
% A) P1 l3 M. P# K& ~7 M8 s% w  6 h1 `& U2 m5 [8 E- Q( N
always@(posedge clk)
+ D/ P7 w/ m; ^8 g# M6 G* J  begin. A1 _  y& |" J+ `& V- q
      case(cont)* H$ d# J5 f8 Q9 w$ g1 c& \8 c
      3'b000 : led = 8'b00000001; //cont為3 bit register,不是2 bit,後面的也應一併更改
# u8 n& ]4 {+ t6 ]1 |      3'b001 : led = 8'b00000010;
# e, M! C; L. |& d6 ^+ ~7 |. p4 F) y      3'b010 : led = 8'b00000100;
0 S5 M( L  U# a      3'b011 : led = 8'b00001000;
2 s' m: l1 E5 ?+ B$ Z. e4 i/ X      3'b100 : led = 8'b00010000;
9 e1 o8 {! S' P6 r; @      3'b101 : led = 8'b00100000;
0 W. X1 t3 C1 f      3'b110 : led = 8'b01000000;4 o% v( X% y8 g4 ]2 c. Z
      3'b111 : led = 8'b10000000;
4 t' z) ~/ H6 ~& ^- L$ q      default : led = 8'b00000000; //設default避免出現無法預期的值,使用case最好要有,以防萬一
% u# V/ w( |4 }+ J0 M      endcase
) A7 m5 z% C, g3 D6 F  end
. B: l* q- @  k
0 B) q! ?+ R4 l3 Gendmodule. ?: I1 Y$ l1 ^7 N: J
1 G7 W* a9 p' L. z4 a4 Y; f) z
順便附上電路與模擬檔案' X7 W, Q$ q2 j# O! h
電路檔(led_shift.v)與模擬檔(test_led_shift.v):
: ]! z5 T, w7 {2 R' O" Q9 ^[attach]17025[/attach]6 a* L. L: J* l$ [& r3 p
模擬結果:' u4 K9 u! F9 a" x, G
(這裡reset = 1超過1個clock週期[也可不要超過1個clock週期],所以在2週期後才開始計數,reset = 0之後便每過一個clock週期就上數一次)
) a! `: H. m, l  ~[attach]17024[/attach]
作者: lucky    時間: 2012-7-27 09:34 AM
回復 2# card_4_girt
. W: J  t2 D' K0 {% k0 P
5 Z" M6 a* @! a% U# A" j* f大大真的非常謝謝你的解答,我已解決,1 r4 c" D. w/ [. V  a! {

5 A8 P& R+ D9 h# c$ o. a0 R7 A不過請問大大,不知你有無用過vericomm 這套軟體,因為我用xilinx ise 合成之後再用vericomm 把程式嵌入FPGA 但它出現我的輸出沒有定義,可是我在Xilinx 中的Assign
( V& X6 E5 m0 @  e2 h- G) @) Y! L+ |! _; O' [5 t
Package pin 早把FPGA的接腳編號打上去了,可是在vericomm還是說我的led 沒有定義!這是為什麼?
# u7 h, O4 t/ q" @. @. i/ w" |7 Q6 y) F
其中FPGA有它FPGA 的LED接腳,我把它打上去對應我程式的LED,但卻還是說LED沒定義。- W8 W, v  \% H
1 G+ Q7 i  m4 v4 b1 h0 v
) Q0 S7 Z; R( w) p4 }
不知大大有無MSN可否給我讓跟您請教?
作者: lucky    時間: 2012-7-27 11:16 AM
回復 2# card_4_girt
5 ~2 `! _2 G3 \% V4 f: ~' T+ y  l/ w6 L* m
大大,我還有第二個問題,0 k2 Z( Z% Y4 u) _
5 L  Q# W$ p  h4 g- U) t# x
我的程式在Xilinx ise 執行 在implement Design 中的Place &Route 項目,出現警告,它說明如下
8 G/ o" W8 b1 ?( l& g5 vWARNINGhysDesignRules:367 - The signal <clk_IBUF> is incomplete. The signal  \, q- m$ j- T: S/ j6 p: r
WARNINGhysDesignRules:367 - The signal <reset_IBUF> is incomplete. The signal/ `! F/ q. m! B) u7 Y; G3 P, J
這些是怎麼回事能請大大幫我解答嗎? 謝謝您
作者: card_4_girt    時間: 2012-7-27 11:24 AM
回復 3# lucky
/ ~; l1 m2 p# h2 i: B7 K3 a2 H8 F& T$ P9 A0 G- _' t. l
抱歉我還沒用過這套軟體
: [5 ^) h) W4 g" f( _沒辦法幫你什麼忙
+ j  V/ S7 P4 V; G( K% d你這種問題我還是第一次碰到1 m1 `9 D5 a5 d' ]+ R) s+ v
照理說沒宣告型別或輸出入埠才會有這樣的問題
作者: lucky    時間: 2012-7-27 11:26 AM
回復 5# card_4_girt # w" r# J# v7 M- p& B" H5 r2 S

5 j) C* V- ]( n( p" W大大:沒關係,真的很感謝了,非常謝謝您。
作者: card_4_girt    時間: 2012-7-27 11:46 AM
本帖最後由 card_4_girt 於 2012-7-27 12:16 PM 編輯
- F/ Z2 ]8 \( ?# M  F) P: l$ s
% V  Z" G6 K1 j  ^回復 4# lucky 2 D5 V' g; q$ h1 D# ?

" C8 g) S4 S/ X% \' A你的這個問題edaboard或Xilinx討論版有人提過8 }$ V9 s$ q: F" ~
似乎是有些port出現loading的問題; ]! G- q: q+ W" F
1 {" Z& x7 m- M' N. T
: O$ v; S9 m. y. ~0 t7 j
可以參考:% M7 X* Z  k0 R' F
http://forums.xilinx.com/t5/Spar ... question/td-p/44794 (沒有用到或合成時被刪除)3 V) [$ f* L* m, A" O
http://forums.xilinx.com/t5/Spar ... 01-clock/m-p/157910 (增加clock的delay time,讓週期變長)* v8 X& X7 _$ y; ?$ M0 G& L
http://forums.xilinx.com/t5/Hier ... s-design/m-p/202469 (每個always block用不同的clock signal來trigger)4 J. J, V( |1 E
) T- s" _* c9 S2 A. E& ]+ @
http://www.edaboard.com/thread64628.html
作者: lucky    時間: 2012-8-21 09:26 AM
回復 7# card_4_girt [/b" y+ y8 Z" K0 R* r
8 C: J2 r" T( I
大大謝謝您的幫忙,問題已解決,感謝
作者: wet0830    時間: 2012-10-1 04:38 PM
我需要多一點的教學 非常感恩




歡迎光臨 Chip123 科技應用創新平台 (http://free.vireal.world/chip123_website/innoingbbs/) Powered by Discuz! X3.2