Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-1-11 19:14:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進好~
1 }' Z2 L2 ^( b8 \( t我是剛從學校進入這領域的新生,說不上是初學者
; V! C7 C3 O* s% W因為若要設計一些簡單的project,這點我還堪用* U; d# J+ t9 A- z; B
另外,小弟也用過兩大FPGA廠商的EDA相關的Tool : Xilinx ISE 、Quartus II 、ModelSim ...等! f' j' s- w9 m

# }; c5 G) ^8 V6 w不過最近剛近公司,開始學著看程式卻發覺有一些寫法我不太懂。
2 ^# R9 x8 p' S" K' P# @是關於 `ifdef ... `else .. `endif* F3 D6 ^! F! j4 g0 t1 C

2 p& d. E  i+ W8 C, w5 s下面舉某段code  請哪位有經驗的大大能幫我解釋一下
7 j" \7 e; I- B& F- _
3 L. @3 G$ l% e1 f- Z9 A8 P* u`ifdef ASYNC_RESET' {0 W" k% b& t4 o4 z( e
        always @(posedge clk or negedge rst)
* T, I. v5 |, N# Y$ }# P1 D! a5 }6 W`else, l% L- y% b% J1 I7 i
        always @(posedge clk)6 E1 X. G) p  o+ b
`endif9 w& T" o* `8 h) d( p: o0 d
        if(!rst)        state <= POR;* O; O3 c, z. k: N, F0 I( g1 V
        else7 U8 |* }- {6 d8 h+ v$ v* I
                    if(vbus)   state <= POR;
6 \: B) n  i; i, e! F% M7 K/ ~        else          state <= next_state;; I" r" E5 u5 S2 b

0 C  q& v" n7 V7 d- s請各為大大賜教了!
) I: V" {( I6 C. A7 g9 A9 K+ f4 U8 {: U* O
我是在猜想說,若條件符合者 是以always@(posedge clk or negedge rst) 再接到 if ..else
  S$ n5 a3 G1 X# j# \6 k不過這條件判斷是以ASYNC_RESET為依據嗎?0 I, D# `, `# h$ K! q
但我在程式中找不到這個ASYNC_RESET的相關程式斷落..
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2007-1-11 19:29:36 | 只看該作者
這個`ifdef  `else  `endif 是用在整合不同外在條件的寫法3 v- I* I( a1 Y: K0 Z- t) f
7 k# z) }8 {0 j2 ^9 n
相對的 ASYNC_RESET 會用`define 來定義, 可能在別的verilog檔案內

評分

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

查看全部評分

3#
發表於 2007-1-17 00:19:47 | 只看該作者
`ifdef  `else  `endif的用法其實就如masonchung大講的一樣' ?$ o9 E) d+ _0 F$ z

2 j- K7 Z+ T" OASYNC_RESET: v) n' }1 y1 k: A" F, c, |6 x
可以用grep 來搜尋整個目錄$ t6 g# i5 d& N' r0 k
Ex: grep ASYNC_RESET *.v  或grep ASYNC_RESET *.*# B; B3 E: }) D( n3 r/ J- f
小弟都是這樣做的啦

評分

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

查看全部評分

4#
發表於 2007-1-17 10:03:21 | 只看該作者
以 ncverilog 為例
% i6 q+ X, P+ }" N0 m' [+ _
6 {1 _7 w* X7 @* R5 B4 S# X1 o. l  X( L* Tncverilog -f list_file +define+ASYNC_RESET
0 o" I# \/ P* ?  q9 S4 b5 E$ ]5 ]! L# q
那會定義在跟 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信號。也就是符合條件的是程式碼,不符合條件的當成是註解刪除。5 }/ {6 B" C( b; J. S: q( g
所以`ifdef  `else  `endif會改變轉譯時的文章樣子,對於開發除錯版本特別有用。
- v1 ~9 t, i. Q; x+ [# I2 v3 z
. a3 r8 }& e( ]/ v, ?+ \+ k[ 本帖最後由 walltsou 於 2007-1-19 10:12 AM 編輯 ]

評分

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

查看全部評分

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

回復 #3 sakho 的帖子

首先感謝masonchung 版大及 sakho大 及另外兩位先進的回覆3 [0 p8 g  K. |; P8 [0 y
我在看過回文後有找到定義檔  difines.v的檔案
( Z& K: Z; ]) R4 _1 O" d找的結果是 被mask掉的一行定義??
5 K  V5 z$ }! u, q2 Q- ~  a9 M1 Q0 l. v- J# |
這結果讓我有點失望,因為在其他相關檔案中也不曾有這行的定義
& R2 ]5 e4 c% a9 l# R但是這個`ifdef `else `end卻又一直的出現# D) T9 t% q4 C/ |, S8 g" w
以下是我在define找到的描述及定義程式片斷0 K; t/ u1 s; z* X8 y
`ifdef TEST_IMPL
$ E! b# N8 r6 t$ w: w+ p        // Do not modify this section; c* W# O! f+ ]0 \% l
        // this is to run the test bench2 }1 ?2 m" `; u2 T
        `define UFC_HADR        17
( _' R; z$ ]1 F  n9 z        `define RF_SEL        (!wb_addr_i[17])/ m3 h* n8 @! o' _4 J
        `define MEM_SEL (wb_addr_i[17])
7 X9 _9 H" N' U3 R7 l0 V# \        `define SSRAM_HADR 14& ~5 [+ Q4 }/ \2 l) ^- ~
        //`define ASYNC_RESET
& M) s4 l, ~- _, L- X) o`else
! F$ d) ~6 ^; r4 i        // Modify this section to suit your implementation
# @# I% D+ \* s8 g        `define UFC_HADR        12
7 {: p. k, `0 @7 M1 ^1 k+ [( s" N2 d        // Address Decoding for Register File select
- L* X. n' |6 o- b( K        `define RF_SEL        (!wb_addr_i[12])
/ e3 G; k4 B# h& @- ^% g  b        // Address Decoding for Buffer Memory select
+ l1 V/ u$ L" J! J8 k; c        `define MEM_SEL        (wb_addr_i[12])  p: }% ?. g4 q  ^+ Q, \' m
        `define SSRAM_HADR        9
4 ~& Y2 L: Z, j  k' [0 I1 k8 T! `        // The next statement determines if reset is async or sync.
3 E5 j  B4 m# z+ I) b) o2 E) \        // If the define is uncommented the reset will be ASYNC.
! C# p% W& q: _' C7 r        //`define ASYNC_RESET4 H# q; h0 L. f* [; b
`endif
  S5 P$ o( z' e( n% E! ]在看過TEST_IMPL的定義也只是對特定的變數做定義,也沒有跟ASYNC_RESET3 C4 b: R# k, g3 c3 V( u* b; t& a
有相關的定義..看到最後真被搞糊塗了..
5 @3 W. Q( j5 O/ E1 n. _8 C! y3 b* z9 X# S$ G& O- y
另外我是在windows XP的UltraEdit 觀看程式的,好像沒辦法用grep尋找 ORz
7#
 樓主| 發表於 2007-1-22 15:40:58 | 只看該作者
在回文後再看過walltsou大的回文思考時,突然想到
8 u: _) g. u' d) U( J. s照walltsou大所說的+ \* y( S/ c% c8 a) f
若 有 定義AYNC_RESET則執行 always@(posedge clk or negedge rst)
, P0 g; A1 R: x若 否 則執行 always@(posedge clk)
' Z0 A4 _) t+ w  f) N
# S# V8 p% u% Y% V所以再看到我前一封回文的 被mask程式 那也就是說這程式也只會執行 否的部份囉??* E& c* j6 x. s: m5 n6 \
那這樣我又有個問題(不好意思問題好多 ^^")
) Q2 t1 Z) f: ^' j- D' V/ ~+ n若照這樣看來不就僅僅在posedge clk時有動作,那若有rst訊號來也不就都不會有動作?
8#
發表於 2007-1-22 21:17:21 | 只看該作者

回復 #7 greatsky 的帖子

你要先分清楚在這個Verilog code中,哪些東西是會被合成電路的,哪些不會被合成電路。`ifdef 與verilog 的if是不一樣層級的東西。討論Verilog的時候最好不要用『執行』這樣的字眼。所以,把你的例子用比較正確的字眼來說,應該是這樣7 s0 o. c5 ?1 p4 ~

& f. p# ^8 A$ L6 f* |若有定義ASYNC_RESET則合成器會使用always@(posedge clk or negedge rst)這一行來進行電路合成。反之,則使用always@(posedge clk)這一行來合成。我們可以看一下,如果有定義ASYNC_RESET的話,會被合成的verilog如下:7 N" e/ z) `) @, c
always @(posedge clk or negedge rst)6 e9 _1 F; _- a# T* \  x
if(!rst)        ! I. h- q+ ]( z3 e; z/ W9 i* y
    state <= POR;, V3 C2 T8 w# A/ T7 e
else             + Q- [. V# E3 Y4 {2 y0 \
    if(vbus)   9 [  [/ }( {, r3 J. z
        state <= POR;1 \' @( g" ]( C! y- _, X
    else         
( r6 _- q6 `: }0 Y5 B; G2 L        state <= next_state;
5 [- x6 c! l/ v+ s6 [
" q" f2 P0 j/ j這很明顯的就是一個非同步reset的電路。反之,如果沒有定義ASYNC_RESET,會被合成到的verilog code如下:
. t* F* F! U) _( k. w# j+ o- Q+ `/ W$ D6 n% }; _
always @(posedge clk)
, m- H, ?, o/ d- h' o: m% uif(!rst)        . d3 P- {* s, }: z2 J" o' m
    state <= POR;
; F2 ?7 Q5 V. lelse             * ]! U7 c& S! @' ]2 G: [
    if(vbus)   # C* d( X3 w8 g' q
        state <= POR;
* S1 I  |$ @& `) `9 g  b" z0 I    else         
5 t4 s# o! H. }0 J' [2 u        state <= next_state;1 U: k7 Z8 A0 z4 ]- _

4 i! o% Z; E% e& t8 M( U這就是一個明顯的同步RESET電路。' p1 A* W4 `- T' a' w. ^) f

! x/ n' K+ M  t( L! T$ q透過不同的條件定義,就可以在不更動verilog code的前提下,合成出不同行為的電路。這是Verilog的一個很好用的功能。這個功能如果換到軟體程式語言,就是C語言裡面的前置處理器(preprocessor)的功用。
# B+ Q! k; P: R$ M3 O( D# ~( g
你會找不到ASYNC_RESET定義在哪裡是正常的。因為這類的東西通常就是由工具的命令列直接給定的。如果你的project目錄內有Makefile,通常也可以在那裡面找到是否有定義ASYNC_RESET。7 f9 J" K# x- }, ~
6 o8 A5 t6 r( k7 B* M& O2 Z: L
最後你衍生出來的問題,其實才是重點,何時要用非同步reset,何時要用同步reset。下面這篇文章應該可以給你一個滿意的答案。: g+ X/ A' Z' G7 @1 k, A
http://www.sunburst-design.com/p ... UG2002SJ_Resets.pdf

評分

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

查看全部評分

9#
發表於 2007-1-22 21:29:18 | 只看該作者
給garywlee 按個好, 不過題目不是我發的找greatsky找感謝囉....2 L* R7 ^) s0 w$ v7 N* q! s3 l
8樓的算標準答案了, 不管是preprocessor還是synchronize / asynchronize reset都解釋的很清楚囉...
! w1 I( L# |# ~0 X9 Rgreatsky 加油啦! 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語法使用上的時機及電路在合成方式
. Q5 o- E, M0 m$ }- H1 g* S我會好好的研究同步與非同步的使用,謝謝9 u, Q+ n- o. c4 T
& k. x8 ?/ u/ e  u9 R4 `
另外我會好好的寫code的,若自己沒看過其他人寫過的code還不太有所長進,自己寫的東西跟以前做專題那種Code Style沒兩樣 Orz
  ^$ k2 Z+ W1 j" Y6 C也謝謝tommywgt的回覆,我再自行問您 FPGA內建LA的使用方式
12#
發表於 2007-1-23 11:41:53 | 只看該作者
OK...沒問題, 那個altera的很簡單, xilinx的我最近也會找時間弄看看...
13#
發表於 2011-5-19 15:19:28 | 只看該作者
回復 6# greatsky ' i( ?- H1 ^: {1 u/ o+ G% c
$ n9 V( J+ n- l: A) L4 J
9 w; x$ F0 T6 e% @
    ASYNC_RESET 是 synopsys synthesizer 的識別字, 可以決定用 那種 d-FF 去合成線路!!!
14#
發表於 2011-9-14 10:05:10 | 只看該作者
回復 3# sakho
, b: B7 r( G+ x- m
7 c) f4 _6 ?' e, X( QThanks a lot!~!
15#
發表於 2011-9-14 10:06:18 | 只看該作者
~~~~~~~~~~~~~~~~~~; E2 [' T/ q. N; ?0 ^  m
Thanks a lot
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-27 01:44 AM , Processed in 0.191011 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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