Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 34138|回復: 14
打印 上一主題 下一主題

[問題求助] 關於Verilog語法一問?

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-1-11 19:14:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進好~' y4 @& g: ]9 E; g8 d" a
我是剛從學校進入這領域的新生,說不上是初學者/ R4 w& R' X+ U% A8 `! b* d" w
因為若要設計一些簡單的project,這點我還堪用, p5 `2 K8 q2 s
另外,小弟也用過兩大FPGA廠商的EDA相關的Tool : Xilinx ISE 、Quartus II 、ModelSim ...等
9 H* ]( z1 a, O- O1 _$ x
5 E; K0 ]: i% m* q' G1 R; i4 X不過最近剛近公司,開始學著看程式卻發覺有一些寫法我不太懂。6 {- Y1 p& t  @
是關於 `ifdef ... `else .. `endif
$ K  g; g) D0 {' V6 I7 z+ s  u9 W8 k9 P1 K
下面舉某段code  請哪位有經驗的大大能幫我解釋一下
. o6 w* `; T7 S1 s) F
: [, @0 \3 a" B5 h) q6 v8 P`ifdef ASYNC_RESET
: z( p) W6 `1 K        always @(posedge clk or negedge rst)
$ C) h6 i# Y7 F1 j0 r% A`else
7 I* ~0 I2 F2 g$ X        always @(posedge clk). J0 Z+ a6 D- F
`endif
; ?4 v( b; q, Q1 Q/ w& p7 A        if(!rst)        state <= POR;( a% a, w) Y  N6 M4 k
        else
9 S( t: q9 u0 W2 {) r" i                    if(vbus)   state <= POR;
0 z. _4 F  \4 r/ ]        else          state <= next_state;( B0 K7 a8 C: p/ N
; `+ D: _5 T" F0 j, U' M
請各為大大賜教了!: i" U# Q1 P, T2 c
0 Y9 ?1 [" j- L1 G
我是在猜想說,若條件符合者 是以always@(posedge clk or negedge rst) 再接到 if ..else
9 I4 f+ m3 b" w! u3 z' ~" @  Q% U不過這條件判斷是以ASYNC_RESET為依據嗎?
" \6 E( H+ W* @: M6 f. B& @9 U但我在程式中找不到這個ASYNC_RESET的相關程式斷落..
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2007-1-11 19:29:36 | 只看該作者
這個`ifdef  `else  `endif 是用在整合不同外在條件的寫法' H" x% X: v# L# t  j

0 {( T' W4 p! C( Q相對的 ASYNC_RESET 會用`define 來定義, 可能在別的verilog檔案內

評分

參與人數 1 +3 收起 理由
greatsky + 3 感謝啦!

查看全部評分

3#
發表於 2007-1-17 00:19:47 | 只看該作者
`ifdef  `else  `endif的用法其實就如masonchung大講的一樣- L2 K' Z7 }7 |, S& }2 s
- o# _/ V5 j/ M' Q( J% @* J4 x
ASYNC_RESET
- c( M4 p! ]9 q/ c  V9 v" I可以用grep 來搜尋整個目錄
1 z6 S! \' S/ J% {/ rEx: grep ASYNC_RESET *.v  或grep ASYNC_RESET *.*
& u6 t4 r' l8 j小弟都是這樣做的啦

評分

參與人數 1 +3 收起 理由
greatsky + 3 感謝啦!

查看全部評分

4#
發表於 2007-1-17 10:03:21 | 只看該作者
以 ncverilog 為例1 d+ h7 H/ G/ V' e' s
! K1 {* z+ z0 s8 k
ncverilog -f list_file +define+ASYNC_RESET
: j. {( r, F! c1 k
& F0 P" i( [( }) ?! e那會定義在跟 Test Bench 相關的檔案裡, 可以如同 sakho 所述般去做 search ...

評分

參與人數 1 +1 收起 理由
greatsky + 1 感謝啦!只剩這一點了感謝你的回覆

查看全部評分

5#
發表於 2007-1-19 09:23:52 | 只看該作者
我是從軟體轉來的。所以對`ifdef  `else  `endif的解釋稍有不同。它們比較像C語言的#define,也就是巨集。當程式在轉成RTL時,會經過前處理去掉不必要的註解,在此階段會先作文章處理。而`ifdef  `else  `endif則在此階段作用做文章取代的動作。以此例來說若之前的文章有定義ASYNC_RESET則轉譯時只會出現always @(posedge clk or negedge rst),另一行則被放棄。經過文章處理後的程式碼再進入RTL轉譯。若是沒有定義則以另一行取代,再進行轉譯,此時不使用negedge rst信號。也就是符合條件的是程式碼,不符合條件的當成是註解刪除。! T$ H+ ^8 o; \+ R" J7 W: q9 e
所以`ifdef  `else  `endif會改變轉譯時的文章樣子,對於開發除錯版本特別有用。
' n0 l; e2 s- _- ]! L1 o0 q' \$ z7 @- Q  ]' D
[ 本帖最後由 walltsou 於 2007-1-19 10:12 AM 編輯 ]

評分

參與人數 1 +3 收起 理由
greatsky + 3 感謝啦!

查看全部評分

6#
 樓主| 發表於 2007-1-22 15:30:27 | 只看該作者

回復 #3 sakho 的帖子

首先感謝masonchung 版大及 sakho大 及另外兩位先進的回覆, @" w3 z/ x9 ]+ N. D
我在看過回文後有找到定義檔  difines.v的檔案 + G1 b1 d( E3 [  c2 Q& W" {8 F
找的結果是 被mask掉的一行定義??+ f# b! i2 D6 P3 ~) u8 T+ U/ u% C; o

( e. K* Q2 [5 d/ k  F這結果讓我有點失望,因為在其他相關檔案中也不曾有這行的定義
4 j8 D/ W. b. {9 C1 X' ~( d但是這個`ifdef `else `end卻又一直的出現
! L* L9 `/ V4 t* Q0 s1 p! {以下是我在define找到的描述及定義程式片斷
5 m# L2 b3 W0 c+ q`ifdef TEST_IMPL  o) {% e; d: n
        // Do not modify this section
) ~6 f; m" |; _        // this is to run the test bench  m# F$ u$ _& ^% g5 P- D8 O
        `define UFC_HADR        17/ Z: S- A( M/ f4 g/ M+ Y
        `define RF_SEL        (!wb_addr_i[17])( }3 d3 u1 D: K) a
        `define MEM_SEL (wb_addr_i[17])
! ?6 |/ o6 v: r2 d        `define SSRAM_HADR 14
; O* E' G3 `$ d3 u3 P, T. t8 K* x        //`define ASYNC_RESET/ h/ y1 }: @6 ?9 K
`else5 T0 m- _! M; q( J$ Y3 n
        // Modify this section to suit your implementation
4 i. k8 R- o2 W& s3 d        `define UFC_HADR        120 I8 F, e. Y, m9 I# R( g# @
        // Address Decoding for Register File select
5 w8 e+ d9 T6 D        `define RF_SEL        (!wb_addr_i[12])! L0 O4 ]  P+ d, c, a# c- @2 L
        // Address Decoding for Buffer Memory select8 S# X+ g0 ^1 X  K/ b. }2 G
        `define MEM_SEL        (wb_addr_i[12])
% f' o) O+ [/ x, i1 S3 b4 }        `define SSRAM_HADR        9& u. F* H# Y: M. o5 b% a
        // The next statement determines if reset is async or sync.# A# E- w8 Z7 r, p/ |
        // If the define is uncommented the reset will be ASYNC.
# A' z1 E. V* a+ }/ E        //`define ASYNC_RESET
# G  E, i6 k7 b8 L`endif
8 v, a; D1 u/ N4 i在看過TEST_IMPL的定義也只是對特定的變數做定義,也沒有跟ASYNC_RESET& x/ @' F5 d+ T. S# ~8 U6 X8 I: o
有相關的定義..看到最後真被搞糊塗了.. ( W  U; X3 Q0 a9 W% O

3 v. L; w' `0 D2 H: s# I另外我是在windows XP的UltraEdit 觀看程式的,好像沒辦法用grep尋找 ORz
7#
 樓主| 發表於 2007-1-22 15:40:58 | 只看該作者
在回文後再看過walltsou大的回文思考時,突然想到- M( }8 K  o* U; t5 \
照walltsou大所說的
8 y0 T- D% ^/ j. r3 P! _* [若 有 定義AYNC_RESET則執行 always@(posedge clk or negedge rst)
3 g8 ?# L' ^8 J若 否 則執行 always@(posedge clk)
& ~- {0 P7 I' ^2 B' g* m3 ~
1 R4 W5 s5 r4 a/ Y( Y% U所以再看到我前一封回文的 被mask程式 那也就是說這程式也只會執行 否的部份囉??
9 z% m8 ?  N& W+ Z2 u那這樣我又有個問題(不好意思問題好多 ^^")
' R- B- b6 w% P4 t若照這樣看來不就僅僅在posedge clk時有動作,那若有rst訊號來也不就都不會有動作?
8#
發表於 2007-1-22 21:17:21 | 只看該作者

回復 #7 greatsky 的帖子

你要先分清楚在這個Verilog code中,哪些東西是會被合成電路的,哪些不會被合成電路。`ifdef 與verilog 的if是不一樣層級的東西。討論Verilog的時候最好不要用『執行』這樣的字眼。所以,把你的例子用比較正確的字眼來說,應該是這樣
( L( c; }7 ^/ V; _3 u! v% J1 P. v1 y1 ?2 u" |3 E" W' l5 y- y4 _& _
若有定義ASYNC_RESET則合成器會使用always@(posedge clk or negedge rst)這一行來進行電路合成。反之,則使用always@(posedge clk)這一行來合成。我們可以看一下,如果有定義ASYNC_RESET的話,會被合成的verilog如下:
' T% V2 u9 u0 }+ C2 \: I5 }always @(posedge clk or negedge rst)5 n. W0 r1 }+ R; U; n- w; C
if(!rst)        
, h& I3 f9 v1 `7 ]    state <= POR;
; T  B  Q. t/ Z- D) _3 Aelse            
$ t* @1 Z1 n$ o: n, |( I    if(vbus)   ' M$ }& q! [, \" C$ d- j3 g% l0 ~
        state <= POR;8 V/ b$ M1 N3 d
    else          ! l! h' K, s  H: j+ I7 H) r) R
        state <= next_state;$ s0 ?2 d. `) I: O- C5 J0 b
  b; X* p" d$ u
這很明顯的就是一個非同步reset的電路。反之,如果沒有定義ASYNC_RESET,會被合成到的verilog code如下:
1 a+ M4 C) j4 ^, Y) X! f8 }" G# H; w  [& {8 N  e0 D6 q+ t
always @(posedge clk)
5 `9 u. l& P0 F' S8 m3 `if(!rst)        
) I& ~8 y0 @- W2 ^1 ?    state <= POR;7 G; F& x: a( J1 i0 Y9 y: |- x
else             3 ]1 L7 _6 W& l. O/ q
    if(vbus)   " p/ J: w+ h4 h& ?4 m$ G
        state <= POR;
3 y/ h/ |7 L5 n% E3 R7 a    else          5 v" w1 e/ V! L. P$ w& C
        state <= next_state;
) v# x# f' I9 @, J. s
" J  j8 }0 X, c4 o這就是一個明顯的同步RESET電路。1 X- b- G7 ~  a  {4 z! ~

. A( S; z( A) G  t8 |透過不同的條件定義,就可以在不更動verilog code的前提下,合成出不同行為的電路。這是Verilog的一個很好用的功能。這個功能如果換到軟體程式語言,就是C語言裡面的前置處理器(preprocessor)的功用。) U, J7 K7 A* y* O6 i, Z, k
" t! d+ q' j4 M/ P
你會找不到ASYNC_RESET定義在哪裡是正常的。因為這類的東西通常就是由工具的命令列直接給定的。如果你的project目錄內有Makefile,通常也可以在那裡面找到是否有定義ASYNC_RESET。
7 s5 |9 w, T/ L# }6 R& m# u
5 }' ?, Y0 T) t% i; C) b最後你衍生出來的問題,其實才是重點,何時要用非同步reset,何時要用同步reset。下面這篇文章應該可以給你一個滿意的答案。
+ d/ a& n2 E; q- x4 Uhttp://www.sunburst-design.com/p ... UG2002SJ_Resets.pdf

評分

參與人數 1 +5 收起 理由
greatsky + 5 很受用!感謝你的指點

查看全部評分

9#
發表於 2007-1-22 21:29:18 | 只看該作者
給garywlee 按個好, 不過題目不是我發的找greatsky找感謝囉....
1 S: D. ^- D' V3 X( O7 F8樓的算標準答案了, 不管是preprocessor還是synchronize / asynchronize reset都解釋的很清楚囉...
( b1 Z+ h; C& O* d. ~0 Y& xgreatsky 加油啦! code多寫, simulation多run,就會愈來愈清楚了...

評分

參與人數 1 +5 收起 理由
greatsky + 5 很受用!感謝你的指點

查看全部評分

10#
發表於 2007-1-22 21:33:55 | 只看該作者
對了...大家都知道modelsim很好用, 再提供你另一個你也許已經知道的東東, 那就是現在的fpga都內建LA了, altera的LA跟Xilinx的chipscope都好用, 你把compile完的結果download 下去FPGA可以用JTAG直接看結果哦, 用過的人都會不想再用真正的LA了...
11#
 樓主| 發表於 2007-1-22 23:41:25 | 只看該作者
感謝 garywlee大  詳盡的解說,看過解說後我能夠有所瞭解`ifdef `else `end語法使用上的時機及電路在合成方式7 m! M& b3 z, J% |% U  G$ t( k
我會好好的研究同步與非同步的使用,謝謝/ s$ E% q  y8 `6 K

5 S$ f2 K# q0 t3 o/ C4 X. X另外我會好好的寫code的,若自己沒看過其他人寫過的code還不太有所長進,自己寫的東西跟以前做專題那種Code Style沒兩樣 Orz
) `% M" @& p/ k也謝謝tommywgt的回覆,我再自行問您 FPGA內建LA的使用方式
12#
發表於 2007-1-23 11:41:53 | 只看該作者
OK...沒問題, 那個altera的很簡單, xilinx的我最近也會找時間弄看看...
13#
發表於 2011-5-19 15:19:28 | 只看該作者
回復 6# greatsky
! P8 M6 g9 _% }. X1 Q
0 v( \5 L1 Z% m8 R
& J- H3 J/ Y) Y    ASYNC_RESET 是 synopsys synthesizer 的識別字, 可以決定用 那種 d-FF 去合成線路!!!
14#
發表於 2011-9-14 10:05:10 | 只看該作者
回復 3# sakho
" C8 i5 J) R6 t9 S5 T* s: @! _  J( d2 ~$ j3 U* X
Thanks a lot!~!
15#
發表於 2011-9-14 10:06:18 | 只看該作者
~~~~~~~~~~~~~~~~~~
7 [, Z: N. |* W0 J9 Z& `  Q+ LThanks a lot
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-4-20 08:04 AM , Processed in 0.118007 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表