Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-1-11 19:14:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進好~
% ]: a( p3 Q2 t1 [) _. Z8 E  c我是剛從學校進入這領域的新生,說不上是初學者
8 y, m' _6 U, o9 `. _2 w) A$ R4 d因為若要設計一些簡單的project,這點我還堪用6 t5 K/ R2 f$ ?  h( ]
另外,小弟也用過兩大FPGA廠商的EDA相關的Tool : Xilinx ISE 、Quartus II 、ModelSim ...等
* l: d1 P; q2 W3 G, v/ a' E- C7 M6 A0 f' `$ u6 \
不過最近剛近公司,開始學著看程式卻發覺有一些寫法我不太懂。
# F+ n- X; z9 \" D: I$ e是關於 `ifdef ... `else .. `endif
) b/ }7 P! D4 ~! t& q0 m' O
! Z3 `4 r+ S2 L% w5 X# u; a下面舉某段code  請哪位有經驗的大大能幫我解釋一下
% H2 w7 u, d9 z1 g* z, @' Y5 _" ?' t9 a, T* h9 h4 e; t6 |7 K
`ifdef ASYNC_RESET0 g/ H8 ]' V( I2 N( p) r
        always @(posedge clk or negedge rst)  B( n9 W, B" ?/ f4 u7 |
`else0 ^: T) S7 D7 ^6 P0 W
        always @(posedge clk)' N: o' P- d' V5 _
`endif
9 b& J8 k3 r$ e) m        if(!rst)        state <= POR;
% ]' @7 P- d- ?0 o) z        else; ?5 X# X3 A8 F* U2 H2 h( w
                    if(vbus)   state <= POR;
2 a! f5 E; J2 L        else          state <= next_state;! Z$ p  G& C+ E  d2 ^) t6 P

6 k+ ?+ x# ?$ @0 l4 b2 O# ?7 O請各為大大賜教了!
$ x6 m" s& K' h. |9 f: m! f
4 p3 \' O: `: P6 _- H; @+ T我是在猜想說,若條件符合者 是以always@(posedge clk or negedge rst) 再接到 if ..else* O! O9 }; |0 f! ~: F- a
不過這條件判斷是以ASYNC_RESET為依據嗎?; g% u, {& M7 H5 f
但我在程式中找不到這個ASYNC_RESET的相關程式斷落..
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2007-1-11 19:29:36 | 只看該作者
這個`ifdef  `else  `endif 是用在整合不同外在條件的寫法( o- o+ U$ m, [# N6 b2 m6 t

% i. B: s" Z3 G, C) L7 [1 y! o相對的 ASYNC_RESET 會用`define 來定義, 可能在別的verilog檔案內

評分

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

查看全部評分

3#
發表於 2007-1-17 00:19:47 | 只看該作者
`ifdef  `else  `endif的用法其實就如masonchung大講的一樣
7 N5 [" `! B) I( @1 R, Z/ g! f4 v6 V2 `
ASYNC_RESET
, t2 G( y5 ]& ~+ [4 U' s" X/ c3 G可以用grep 來搜尋整個目錄
; A' W1 T8 W5 i& D% E; wEx: grep ASYNC_RESET *.v  或grep ASYNC_RESET *.*
3 \: G: a. [! |! Q) U6 q" P7 S小弟都是這樣做的啦

評分

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

查看全部評分

4#
發表於 2007-1-17 10:03:21 | 只看該作者
以 ncverilog 為例: j. y+ i- L& e. H6 _  j

5 R6 ^5 L4 I4 t- D7 ~ncverilog -f list_file +define+ASYNC_RESET+ q$ I1 O( H9 Z! h/ l8 q) e& @

$ |. Z- k% Q' n. 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信號。也就是符合條件的是程式碼,不符合條件的當成是註解刪除。3 g: \4 h0 W8 P4 B" r5 s
所以`ifdef  `else  `endif會改變轉譯時的文章樣子,對於開發除錯版本特別有用。
9 x8 q5 I+ e8 X  R8 r% e- x  P+ m0 X# b+ ~5 G
[ 本帖最後由 walltsou 於 2007-1-19 10:12 AM 編輯 ]

評分

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

查看全部評分

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

回復 #3 sakho 的帖子

首先感謝masonchung 版大及 sakho大 及另外兩位先進的回覆
1 |( _7 f$ x9 Q  y/ y* X我在看過回文後有找到定義檔  difines.v的檔案 4 g0 d$ l5 h6 [& ~9 ~& v
找的結果是 被mask掉的一行定義??
3 Z9 x6 `, q, K+ g6 F1 s% X
. M! W# V9 m6 M這結果讓我有點失望,因為在其他相關檔案中也不曾有這行的定義- ^; r+ r* m$ |$ e
但是這個`ifdef `else `end卻又一直的出現
, w" G+ o- Q9 F" `% x以下是我在define找到的描述及定義程式片斷
# b" N. ]5 Y! B`ifdef TEST_IMPL
7 L$ K1 u3 {( M; \. e, \        // Do not modify this section3 q$ x7 V7 d2 {) N7 A1 Q
        // this is to run the test bench
5 \+ t  W! f7 e/ I        `define UFC_HADR        17
: I# L7 l7 M, @- J4 K9 X5 N5 R        `define RF_SEL        (!wb_addr_i[17]). Z0 N5 ~7 X7 F( q
        `define MEM_SEL (wb_addr_i[17])0 A0 k( K1 P( O0 ^
        `define SSRAM_HADR 14- j  l$ O  @. C4 D% d
        //`define ASYNC_RESET# x% j: D. M0 @' ]1 V# V1 k
`else. k) j# P# t' u, w& B# p
        // Modify this section to suit your implementation
' D9 Y2 G, ~  j  c2 f        `define UFC_HADR        12
. ?  j; @( w4 l, y        // Address Decoding for Register File select
6 u0 r7 S% N  G, a        `define RF_SEL        (!wb_addr_i[12])
2 t- l2 l) W8 M6 x" x2 g        // Address Decoding for Buffer Memory select5 W) [7 X# h9 A6 ~9 x1 U7 P
        `define MEM_SEL        (wb_addr_i[12])
* m4 I- S  @. X( ^) _8 n. j7 Q        `define SSRAM_HADR        9
0 x1 }# k& A  ?: x        // The next statement determines if reset is async or sync.
# t) C3 E" l5 x; a( M' }$ [        // If the define is uncommented the reset will be ASYNC.- _, g- h7 b( I1 V$ Q
        //`define ASYNC_RESET
% r5 e1 S2 P7 @0 s`endif
8 [4 {- J2 w$ e1 N& Q( o在看過TEST_IMPL的定義也只是對特定的變數做定義,也沒有跟ASYNC_RESET
8 L7 N! X- G; U- \/ A有相關的定義..看到最後真被搞糊塗了..
0 @+ a3 K) N6 H8 s6 z) V+ ?# d
* x: b6 U: p& v" g另外我是在windows XP的UltraEdit 觀看程式的,好像沒辦法用grep尋找 ORz
7#
 樓主| 發表於 2007-1-22 15:40:58 | 只看該作者
在回文後再看過walltsou大的回文思考時,突然想到
4 T8 D) ?# D. |) S5 L# ?照walltsou大所說的
! {) ~( _+ p( C: K9 h3 s若 有 定義AYNC_RESET則執行 always@(posedge clk or negedge rst)
- `) I5 e6 D# i$ S若 否 則執行 always@(posedge clk)
- L: }4 ?5 I" k4 a# z
4 h; K  H- M& \8 ?3 O* Z所以再看到我前一封回文的 被mask程式 那也就是說這程式也只會執行 否的部份囉??
; M) {6 V+ J- H! |那這樣我又有個問題(不好意思問題好多 ^^")
8 h/ ^* v& O& D+ l3 `5 p若照這樣看來不就僅僅在posedge clk時有動作,那若有rst訊號來也不就都不會有動作?
8#
發表於 2007-1-22 21:17:21 | 只看該作者

回復 #7 greatsky 的帖子

你要先分清楚在這個Verilog code中,哪些東西是會被合成電路的,哪些不會被合成電路。`ifdef 與verilog 的if是不一樣層級的東西。討論Verilog的時候最好不要用『執行』這樣的字眼。所以,把你的例子用比較正確的字眼來說,應該是這樣1 U( x- |4 @! E3 K4 k
; d" A  z4 z5 d
若有定義ASYNC_RESET則合成器會使用always@(posedge clk or negedge rst)這一行來進行電路合成。反之,則使用always@(posedge clk)這一行來合成。我們可以看一下,如果有定義ASYNC_RESET的話,會被合成的verilog如下:
+ p( h0 ~6 u6 t$ o7 N3 u; w$ Palways @(posedge clk or negedge rst)
# Q( G/ D+ X1 m) bif(!rst)          A7 J# @' [# S9 ?
    state <= POR;0 y+ L  q5 ?: I- w* x+ g  g1 |
else            
0 r8 m, D. w2 [; n    if(vbus)   
9 U( c: R7 x% o6 I# r; r        state <= POR;: T; U% S5 i* I) d5 h
    else          1 I3 F9 v4 W4 a
        state <= next_state;
  d2 F: \' s7 ?$ V6 {9 Z
. U9 N8 L+ h' A2 y( g這很明顯的就是一個非同步reset的電路。反之,如果沒有定義ASYNC_RESET,會被合成到的verilog code如下:, S0 N7 S8 D+ L( @% u

6 R3 n" F. i3 Falways @(posedge clk)
& E- c" y- V" b( M% g/ Z- J* k0 Jif(!rst)        ; j7 ~) G* @- x+ f& c  ~
    state <= POR;5 `2 }/ P+ u6 c* f% ?2 H
else             & D& d8 n$ h. n, x) N
    if(vbus)   
0 ^5 U, v2 L( I: Y        state <= POR;) w3 g- Y6 w' Q
    else          9 ^# }% |. q* p* ]0 W* R
        state <= next_state;0 ?9 `) Q7 Q  e4 d. i2 P8 \

8 A, v( u0 U  `1 C) P# m這就是一個明顯的同步RESET電路。& C/ L; u# W! d8 Y
) M; ?' x6 y- m0 S, V
透過不同的條件定義,就可以在不更動verilog code的前提下,合成出不同行為的電路。這是Verilog的一個很好用的功能。這個功能如果換到軟體程式語言,就是C語言裡面的前置處理器(preprocessor)的功用。
# p1 q; f# x! h) q- b8 ^/ |' c6 c# l& `% r6 S3 Y
你會找不到ASYNC_RESET定義在哪裡是正常的。因為這類的東西通常就是由工具的命令列直接給定的。如果你的project目錄內有Makefile,通常也可以在那裡面找到是否有定義ASYNC_RESET。
$ X. H' T2 D/ a2 P" @3 v# {3 l% ]* S- O" m* I/ S/ |
最後你衍生出來的問題,其實才是重點,何時要用非同步reset,何時要用同步reset。下面這篇文章應該可以給你一個滿意的答案。
7 d4 J* r* t5 e# {! L# fhttp://www.sunburst-design.com/p ... UG2002SJ_Resets.pdf

評分

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

查看全部評分

9#
發表於 2007-1-22 21:29:18 | 只看該作者
給garywlee 按個好, 不過題目不是我發的找greatsky找感謝囉....' H$ Y9 m; d' h: j. @! n1 C0 f- R
8樓的算標準答案了, 不管是preprocessor還是synchronize / asynchronize reset都解釋的很清楚囉..." h/ E# i) l+ ~3 `  J
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語法使用上的時機及電路在合成方式7 l" H) r8 \4 J9 ~* ?1 ], T
我會好好的研究同步與非同步的使用,謝謝
0 o* [& y# E) c) d: d% c+ B7 Z" t( ~: h% ?
另外我會好好的寫code的,若自己沒看過其他人寫過的code還不太有所長進,自己寫的東西跟以前做專題那種Code Style沒兩樣 Orz
* z" B4 ~7 A9 p# F也謝謝tommywgt的回覆,我再自行問您 FPGA內建LA的使用方式
12#
發表於 2007-1-23 11:41:53 | 只看該作者
OK...沒問題, 那個altera的很簡單, xilinx的我最近也會找時間弄看看...
13#
發表於 2011-5-19 15:19:28 | 只看該作者
回復 6# greatsky
7 a) f" G* k& U# ^0 @
. \. U8 _$ ^# ^1 o4 r
! Y% ?0 K3 q5 \' {7 c, Q& ^* L    ASYNC_RESET 是 synopsys synthesizer 的識別字, 可以決定用 那種 d-FF 去合成線路!!!
14#
發表於 2011-9-14 10:05:10 | 只看該作者
回復 3# sakho
  [) @5 |7 j9 A6 v3 c1 N
; C$ a9 i( N4 |; i% g+ yThanks a lot!~!
15#
發表於 2011-9-14 10:06:18 | 只看該作者
~~~~~~~~~~~~~~~~~~
0 w3 P1 N( ~* q8 Q9 V! gThanks a lot
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-27 01:34 AM , Processed in 0.195011 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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