Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-1-11 19:14:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進好~
* P9 m0 h8 z0 t) v我是剛從學校進入這領域的新生,說不上是初學者
5 X3 B* q2 R0 e1 U& ?因為若要設計一些簡單的project,這點我還堪用
2 P4 p; \- N* P" D" f另外,小弟也用過兩大FPGA廠商的EDA相關的Tool : Xilinx ISE 、Quartus II 、ModelSim ...等
/ X& `$ y% Z; t& t8 b( x$ D  y: C5 `% l4 J, w6 x) ]
不過最近剛近公司,開始學著看程式卻發覺有一些寫法我不太懂。: @( D0 C% x" ^8 E) K
是關於 `ifdef ... `else .. `endif
3 S+ H. ^- s. H- ~( `2 m0 x* Q
; e/ R. @8 \$ A5 N下面舉某段code  請哪位有經驗的大大能幫我解釋一下) c) y8 o) f2 o# }& v7 P

- S0 d/ ]0 l3 `7 @: ?0 C2 B% e' E`ifdef ASYNC_RESET
0 I# W* ^9 S9 v/ x- d, T) \1 F/ ^# j        always @(posedge clk or negedge rst)' X; A5 T- A$ G" H" g. k
`else6 G" R7 h8 w& R# e
        always @(posedge clk)
  k5 V9 {$ K9 b3 g$ [`endif
: ?! M8 b2 t- Z        if(!rst)        state <= POR;
: l* t$ Z; I7 l/ S7 o. N        else- Z4 T" X; x1 K' y, [
                    if(vbus)   state <= POR;
* s1 G1 w& f' ?: k  a        else          state <= next_state;/ S  j; n- Y4 Y9 `# E1 e  p

% E; n+ o9 |# |# ^+ ?" P7 z請各為大大賜教了!
! a) P3 H# T, ?2 y  }" J3 I
9 q* \  h* `# m6 E2 R# y我是在猜想說,若條件符合者 是以always@(posedge clk or negedge rst) 再接到 if ..else
4 j7 X6 q. B! i; d不過這條件判斷是以ASYNC_RESET為依據嗎?
, V* }+ D6 i% a但我在程式中找不到這個ASYNC_RESET的相關程式斷落..
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2007-1-11 19:29:36 | 只看該作者
這個`ifdef  `else  `endif 是用在整合不同外在條件的寫法/ m8 w: J/ k) }

) Y  _  n! l. |8 y2 x; ]. p1 |' e相對的 ASYNC_RESET 會用`define 來定義, 可能在別的verilog檔案內

評分

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

查看全部評分

3#
發表於 2007-1-17 00:19:47 | 只看該作者
`ifdef  `else  `endif的用法其實就如masonchung大講的一樣0 I/ p- ^2 R0 {/ b
& q: W1 ]' t) \0 W; t  Y+ t# D
ASYNC_RESET
  ~8 _  G* L" H/ s可以用grep 來搜尋整個目錄
4 D$ t. q, c; n9 l# c) DEx: grep ASYNC_RESET *.v  或grep ASYNC_RESET *.*" I' g. S; Q' Y+ Y7 B
小弟都是這樣做的啦

評分

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

查看全部評分

4#
發表於 2007-1-17 10:03:21 | 只看該作者
以 ncverilog 為例
/ z- ^  k. y: b9 d" W) l, k+ x( P
ncverilog -f list_file +define+ASYNC_RESET$ H* `7 {* a9 i* d; j+ T4 c
  _2 X7 k4 ?4 R$ u. i
那會定義在跟 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信號。也就是符合條件的是程式碼,不符合條件的當成是註解刪除。
: |3 u1 a$ b4 l7 n: B+ B6 D. B所以`ifdef  `else  `endif會改變轉譯時的文章樣子,對於開發除錯版本特別有用。
: Y6 X: a1 @  e" f' O" o* O( Z% x
' [) j5 q, X$ k$ |- s1 V[ 本帖最後由 walltsou 於 2007-1-19 10:12 AM 編輯 ]

評分

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

查看全部評分

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

回復 #3 sakho 的帖子

首先感謝masonchung 版大及 sakho大 及另外兩位先進的回覆
9 \9 b* G5 i# q& w' O' q我在看過回文後有找到定義檔  difines.v的檔案 ( }8 `, O1 C$ |! r
找的結果是 被mask掉的一行定義??
+ ~( r- `$ w4 V  ~: n4 ?4 u8 R. u( _! J& G, A! S' l
這結果讓我有點失望,因為在其他相關檔案中也不曾有這行的定義3 L# g& F# b' b/ \- q% @  s
但是這個`ifdef `else `end卻又一直的出現3 h: M" K% A8 ]$ o7 H
以下是我在define找到的描述及定義程式片斷' ~( K- w& m9 t, a, m+ p% d
`ifdef TEST_IMPL
9 Y6 p  [8 y( O: |% C, {1 z        // Do not modify this section
' i& ?  z! t2 h8 @* }* F( d4 e% p. x6 B        // this is to run the test bench
$ Z. ~3 }, ~, _7 y        `define UFC_HADR        17- X- \* T) S8 Y# ?$ Z
        `define RF_SEL        (!wb_addr_i[17]). U3 P1 Z8 u& U8 z  D
        `define MEM_SEL (wb_addr_i[17])
! ?/ u7 E8 c" L6 a/ l+ @2 C$ Y% |7 E        `define SSRAM_HADR 14' w- X$ D. v2 O
        //`define ASYNC_RESET
& e$ {* X  o" a5 G`else8 |: @* n: H3 A9 V0 S+ t( q
        // Modify this section to suit your implementation  Z5 P1 c) [# m+ c3 A
        `define UFC_HADR        125 A) o: L% s9 l; E, n  L
        // Address Decoding for Register File select3 K6 A5 ~: a) c; P/ l& E, `3 z: s' ?
        `define RF_SEL        (!wb_addr_i[12]), |" v& V" f1 h9 Q# J0 x! W5 M  g" z
        // Address Decoding for Buffer Memory select# Q, N8 W/ I3 d2 ^2 N6 q3 w
        `define MEM_SEL        (wb_addr_i[12])
4 T9 n$ h% w, a( B2 I6 @3 l        `define SSRAM_HADR        93 h: i3 c; M; s4 z0 c
        // The next statement determines if reset is async or sync.% I# _. F! ?* _! w" A
        // If the define is uncommented the reset will be ASYNC.+ j, Y! ^1 F# c* Q8 r
        //`define ASYNC_RESET
: P& f3 z# e2 m3 C: h/ |: c`endif$ Q# X5 c  ?" `+ g, _3 f: T
在看過TEST_IMPL的定義也只是對特定的變數做定義,也沒有跟ASYNC_RESET
9 a0 H9 _$ Y* {有相關的定義..看到最後真被搞糊塗了.. # F2 f/ j+ W( _! I+ |

) i7 p: q7 u( N4 o9 _' ^另外我是在windows XP的UltraEdit 觀看程式的,好像沒辦法用grep尋找 ORz
7#
 樓主| 發表於 2007-1-22 15:40:58 | 只看該作者
在回文後再看過walltsou大的回文思考時,突然想到
1 Q5 z4 W& Q; \9 v0 S照walltsou大所說的
' m& d" ?1 b7 }3 k( {: R若 有 定義AYNC_RESET則執行 always@(posedge clk or negedge rst); a5 g9 p% k& g$ x# K% s/ E
若 否 則執行 always@(posedge clk)
5 y0 i+ G! q4 N+ Z& n3 G+ ^2 c- ?# h! w: S
所以再看到我前一封回文的 被mask程式 那也就是說這程式也只會執行 否的部份囉??( R# P+ b* x: Y* J
那這樣我又有個問題(不好意思問題好多 ^^")
& y: E0 A: v/ k  r* Q( ~若照這樣看來不就僅僅在posedge clk時有動作,那若有rst訊號來也不就都不會有動作?
8#
發表於 2007-1-22 21:17:21 | 只看該作者

回復 #7 greatsky 的帖子

你要先分清楚在這個Verilog code中,哪些東西是會被合成電路的,哪些不會被合成電路。`ifdef 與verilog 的if是不一樣層級的東西。討論Verilog的時候最好不要用『執行』這樣的字眼。所以,把你的例子用比較正確的字眼來說,應該是這樣
) |/ n4 K  S, i* O! w
. e% K0 |- m0 R& c/ G6 F: e若有定義ASYNC_RESET則合成器會使用always@(posedge clk or negedge rst)這一行來進行電路合成。反之,則使用always@(posedge clk)這一行來合成。我們可以看一下,如果有定義ASYNC_RESET的話,會被合成的verilog如下:8 ~. f& z7 }* I( u' u* M" F
always @(posedge clk or negedge rst)* b0 |, ~" q( s, v! M5 ]5 |
if(!rst)        + S4 W6 n+ o: L7 J# E9 w
    state <= POR;
; `/ q2 _! H1 v- b. H2 ?# t- telse             & z- l! e% y, j! V7 Q
    if(vbus)   
$ l  K3 p2 |0 D/ s7 x2 n, x" x        state <= POR;% I' l2 F( F4 o# ]) r* o
    else          + [: B3 }$ k' N
        state <= next_state;- C6 T5 T* ]& h

- _2 K. A! K, O8 w4 q這很明顯的就是一個非同步reset的電路。反之,如果沒有定義ASYNC_RESET,會被合成到的verilog code如下:2 D0 i* l0 k, Y. s4 V
# i& I; Y+ k- K2 D: [+ }/ y( [
always @(posedge clk)) O/ `  G$ v* c, H2 ^2 c( M
if(!rst)        
; {" i2 B0 n, C1 v    state <= POR;6 v8 d) F6 p! H6 {0 P# ~
else            
8 ?4 N+ P2 h6 X" Z' l- C    if(vbus)   * _5 E4 }( P- p; W2 A8 b  x
        state <= POR;
+ r9 k# |$ |% j0 s    else          & I, h9 j' _. [5 W( O9 J% u# D# ?3 S
        state <= next_state;
( I) F5 c! b* ^6 n0 _2 w
4 t9 A. q" }9 f$ N這就是一個明顯的同步RESET電路。* @1 {& z! W+ s$ U; x

2 S8 m9 k2 k2 ^$ b8 P, }; _/ Q9 d透過不同的條件定義,就可以在不更動verilog code的前提下,合成出不同行為的電路。這是Verilog的一個很好用的功能。這個功能如果換到軟體程式語言,就是C語言裡面的前置處理器(preprocessor)的功用。' [/ Q+ i5 |5 d, [: F2 m

) v$ J1 Y' j: ]( M你會找不到ASYNC_RESET定義在哪裡是正常的。因為這類的東西通常就是由工具的命令列直接給定的。如果你的project目錄內有Makefile,通常也可以在那裡面找到是否有定義ASYNC_RESET。! V# j0 h( d* T' I1 y1 y( R9 ^

4 K8 t% o$ h# U. O- y4 H; p  h4 r最後你衍生出來的問題,其實才是重點,何時要用非同步reset,何時要用同步reset。下面這篇文章應該可以給你一個滿意的答案。
5 r7 `- m+ `2 khttp://www.sunburst-design.com/p ... UG2002SJ_Resets.pdf

評分

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

查看全部評分

9#
發表於 2007-1-22 21:29:18 | 只看該作者
給garywlee 按個好, 不過題目不是我發的找greatsky找感謝囉....! Y) ~  T0 A: _2 k
8樓的算標準答案了, 不管是preprocessor還是synchronize / asynchronize reset都解釋的很清楚囉...5 g8 q9 ^0 c; C* F5 }. r) q+ d
greatsky 加油啦! 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語法使用上的時機及電路在合成方式
1 p/ z: S8 M9 l3 [我會好好的研究同步與非同步的使用,謝謝
' m7 w4 n0 ]0 F0 S9 q/ t$ f' T  s; ~+ f  l+ ~
另外我會好好的寫code的,若自己沒看過其他人寫過的code還不太有所長進,自己寫的東西跟以前做專題那種Code Style沒兩樣 Orz/ W2 f; s- L0 G" h3 @
也謝謝tommywgt的回覆,我再自行問您 FPGA內建LA的使用方式
12#
發表於 2007-1-23 11:41:53 | 只看該作者
OK...沒問題, 那個altera的很簡單, xilinx的我最近也會找時間弄看看...
13#
發表於 2011-5-19 15:19:28 | 只看該作者
回復 6# greatsky
1 J" ?& p4 s: _7 |) j
" k" h9 l0 ?5 b* j7 J
# w* R* {  b' _6 r5 p' o- ^7 ~. K& |& e$ ]    ASYNC_RESET 是 synopsys synthesizer 的識別字, 可以決定用 那種 d-FF 去合成線路!!!
14#
發表於 2011-9-14 10:05:10 | 只看該作者
回復 3# sakho
, |* [- |- ~/ E* \/ s6 B& D; k: N6 J6 C) c
Thanks a lot!~!
15#
發表於 2011-9-14 10:06:18 | 只看該作者
~~~~~~~~~~~~~~~~~~8 Q9 o, G. c5 d6 ?* Q
Thanks a lot
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-9 07:08 AM , Processed in 0.187200 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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