Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-1-11 19:14:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進好~7 ^/ Z$ o$ M/ h) _: f: R
我是剛從學校進入這領域的新生,說不上是初學者
& Q; M: e" ^8 ~5 v) w因為若要設計一些簡單的project,這點我還堪用
- D# w7 m" d( o另外,小弟也用過兩大FPGA廠商的EDA相關的Tool : Xilinx ISE 、Quartus II 、ModelSim ...等
4 Z' P, q; F5 a# ]
- J7 N4 ~; z6 |/ \) P不過最近剛近公司,開始學著看程式卻發覺有一些寫法我不太懂。
; J; y: `" [+ L- h是關於 `ifdef ... `else .. `endif1 x+ e7 r4 _: U! Z! d9 K7 W

- s$ y8 A5 B/ o# q7 s4 }  W  ?% _下面舉某段code  請哪位有經驗的大大能幫我解釋一下
5 N" \) F# k  o: u# ?' Y* B( u% k; d$ T/ |
`ifdef ASYNC_RESET+ y, u3 a1 d% D( B
        always @(posedge clk or negedge rst)
/ d6 P* ^( l- _8 @$ ]. d; @8 i`else
- B$ P  x. c4 Y" g7 k/ Y        always @(posedge clk)
$ Y- ~5 {4 p3 H% }& _`endif
* |/ C7 |7 Y4 g4 p  E' Y# a        if(!rst)        state <= POR;0 S# a5 \" B$ P. I) A& e& `
        else( O- z0 v2 E# K- U  S; l
                    if(vbus)   state <= POR;4 _, _! K% \8 q3 O2 p1 Q/ ~! ?
        else          state <= next_state;
2 }7 Y8 o# ~" h
: u- Q1 H) a7 ]( x- m% V請各為大大賜教了!
$ q- j: X0 m% J# @% B# ]5 {" k' n+ S3 }; M# ]
我是在猜想說,若條件符合者 是以always@(posedge clk or negedge rst) 再接到 if ..else  u" B; k1 n' c/ N2 M5 E
不過這條件判斷是以ASYNC_RESET為依據嗎?
" o/ U% [' U8 P# ^但我在程式中找不到這個ASYNC_RESET的相關程式斷落..
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2007-1-11 19:29:36 | 只看該作者
這個`ifdef  `else  `endif 是用在整合不同外在條件的寫法5 ~" O/ r; p" ]) k
- I7 r6 ^! O# ?4 c
相對的 ASYNC_RESET 會用`define 來定義, 可能在別的verilog檔案內

評分

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

查看全部評分

3#
發表於 2007-1-17 00:19:47 | 只看該作者
`ifdef  `else  `endif的用法其實就如masonchung大講的一樣
+ }3 k' E" J( w! V5 d9 Z" p. a3 U7 N" o
ASYNC_RESET
( j9 Y: a( D  e/ U3 c可以用grep 來搜尋整個目錄
: _" b2 ^  G& ^% tEx: grep ASYNC_RESET *.v  或grep ASYNC_RESET *.*" H7 L2 T0 ?, M; t+ U* }. ~5 C% T
小弟都是這樣做的啦

評分

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

查看全部評分

4#
發表於 2007-1-17 10:03:21 | 只看該作者
以 ncverilog 為例/ O- g4 I. I- c4 Z. b8 O

6 P( d( z4 C' G0 m" [. Uncverilog -f list_file +define+ASYNC_RESET. C/ x* ^  [6 y9 Q

% I9 c# A" c4 Z那會定義在跟 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信號。也就是符合條件的是程式碼,不符合條件的當成是註解刪除。
$ o( P- ^8 o1 s所以`ifdef  `else  `endif會改變轉譯時的文章樣子,對於開發除錯版本特別有用。
; @# j; N  n) F2 a! _* [. P5 M/ Y5 ]# ~/ c5 J6 c' _' I/ Z
[ 本帖最後由 walltsou 於 2007-1-19 10:12 AM 編輯 ]

評分

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

查看全部評分

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

回復 #3 sakho 的帖子

首先感謝masonchung 版大及 sakho大 及另外兩位先進的回覆
  G7 Z4 z* a; m7 S我在看過回文後有找到定義檔  difines.v的檔案 1 h2 {  o, g/ d# f5 m9 D9 N$ x
找的結果是 被mask掉的一行定義??. Y; p% ?" @+ w; j& l# a" Y3 j
- J% d8 ~: ]; [. h7 ^! ^. l0 P
這結果讓我有點失望,因為在其他相關檔案中也不曾有這行的定義* E! u) `7 U* X5 a, g) P
但是這個`ifdef `else `end卻又一直的出現5 v# x  i5 I9 [3 ~* O! V" A( P
以下是我在define找到的描述及定義程式片斷: K/ V4 ]% A# P7 y
`ifdef TEST_IMPL  q0 Y# C2 O( _- n( R7 A; Y+ q
        // Do not modify this section& H! z( k  n; q8 p
        // this is to run the test bench
+ N6 U/ b% k; R$ {+ E  b        `define UFC_HADR        174 I! Y) E9 \2 Y6 W9 _0 Q7 A  J
        `define RF_SEL        (!wb_addr_i[17])( T# q( V( N) K7 l+ t
        `define MEM_SEL (wb_addr_i[17])
; Y3 P9 v) |$ ?  b' ]7 O- o6 Y# v+ p7 E        `define SSRAM_HADR 14& h0 I6 k. M% c9 @; \- [( T3 v
        //`define ASYNC_RESET
& {- R% g  ~/ l`else
* z/ @) \7 T3 ?: f0 q8 N+ z        // Modify this section to suit your implementation& O* h5 T: e9 c, s3 K  M3 {) s4 u9 Z
        `define UFC_HADR        120 T+ {0 C9 E6 P% d8 [5 T& H# v' V* T
        // Address Decoding for Register File select
: H) |7 f5 b4 ]3 {( N- s        `define RF_SEL        (!wb_addr_i[12])6 S/ Q9 u* e. F, [+ \% M
        // Address Decoding for Buffer Memory select
8 \3 I$ s& b" y. r) Y7 s& v        `define MEM_SEL        (wb_addr_i[12])
1 f  i) o- g& v9 K* h7 Q        `define SSRAM_HADR        9
8 d; N8 R4 F- ]" {+ x3 t        // The next statement determines if reset is async or sync.
  h! h' ]4 e7 l2 X+ N( \: v        // If the define is uncommented the reset will be ASYNC.
- O; g! i) D$ q% ~" b; j        //`define ASYNC_RESET
# V! s, G$ m/ o8 {0 }" J, x- x0 \5 H`endif
2 a2 O9 D. }: E3 T. @在看過TEST_IMPL的定義也只是對特定的變數做定義,也沒有跟ASYNC_RESET$ I6 E8 Q5 r$ s
有相關的定義..看到最後真被搞糊塗了.. 7 J0 D0 L/ ?! _/ S
/ Z6 f5 N" k( |0 P
另外我是在windows XP的UltraEdit 觀看程式的,好像沒辦法用grep尋找 ORz
7#
 樓主| 發表於 2007-1-22 15:40:58 | 只看該作者
在回文後再看過walltsou大的回文思考時,突然想到6 {! ^: w+ A* Q$ G2 \" t# o! E: c
照walltsou大所說的
* \4 {2 J/ i: ~- f9 U" z若 有 定義AYNC_RESET則執行 always@(posedge clk or negedge rst)
+ q6 Y( O* X* k: J# a! q若 否 則執行 always@(posedge clk): C0 ?, r6 Q% {$ _4 D1 @

- I& p) _" H6 \& q9 E4 F7 [( b所以再看到我前一封回文的 被mask程式 那也就是說這程式也只會執行 否的部份囉??
' F  R) I. G1 ]$ q3 X: u% V那這樣我又有個問題(不好意思問題好多 ^^")
. A: H. Z3 e% L5 H$ K若照這樣看來不就僅僅在posedge clk時有動作,那若有rst訊號來也不就都不會有動作?
8#
發表於 2007-1-22 21:17:21 | 只看該作者

回復 #7 greatsky 的帖子

你要先分清楚在這個Verilog code中,哪些東西是會被合成電路的,哪些不會被合成電路。`ifdef 與verilog 的if是不一樣層級的東西。討論Verilog的時候最好不要用『執行』這樣的字眼。所以,把你的例子用比較正確的字眼來說,應該是這樣
; c! ~- b! |( K6 b& w1 Y/ W8 L* t) l: D* O0 `: Y& s% m% f/ p
若有定義ASYNC_RESET則合成器會使用always@(posedge clk or negedge rst)這一行來進行電路合成。反之,則使用always@(posedge clk)這一行來合成。我們可以看一下,如果有定義ASYNC_RESET的話,會被合成的verilog如下:
" [! `1 u7 s9 ^always @(posedge clk or negedge rst)6 Y8 V! _. n$ \# y) r
if(!rst)        
0 y' z! o1 v3 ~    state <= POR;
) {( y: D" L0 C8 m. N( Belse             4 N) [% Z1 }/ c( x9 _) x7 z& z
    if(vbus)   
  X8 B3 U% ^! K5 C4 [        state <= POR;* c) q0 ^0 W+ c' @! V5 l! a
    else         
/ d" e5 _% B! l        state <= next_state;
0 ], f0 w4 T- J' J4 B) F- N2 a/ _% Z& R
這很明顯的就是一個非同步reset的電路。反之,如果沒有定義ASYNC_RESET,會被合成到的verilog code如下:. A6 F9 n8 K5 L" K. U+ E

' ^) W5 R$ o' e8 ~# S+ Xalways @(posedge clk)
& ]; g7 l- w' G( F) ]if(!rst)        6 D$ S' B1 T1 G6 F
    state <= POR;
8 e* K; M' o( D: d$ Eelse            
$ ?. U1 |4 l6 a1 [' D. d    if(vbus)   
6 U4 g' @; \" R5 |* F        state <= POR;
) l0 q/ H0 |" r5 B+ F5 |    else         
; D" |! K3 ?5 J        state <= next_state;
" Q4 T( d# Q9 t" A+ j$ c" w. G+ @1 z; [+ V
這就是一個明顯的同步RESET電路。7 {- N! X; o5 [: S2 Q: n

/ m7 a: M; y! x; D4 k* A* z$ I% t  ^8 G3 D透過不同的條件定義,就可以在不更動verilog code的前提下,合成出不同行為的電路。這是Verilog的一個很好用的功能。這個功能如果換到軟體程式語言,就是C語言裡面的前置處理器(preprocessor)的功用。5 a% D5 j1 r8 Y. ^/ M
- S" G5 b- w* p$ d8 {+ b$ h
你會找不到ASYNC_RESET定義在哪裡是正常的。因為這類的東西通常就是由工具的命令列直接給定的。如果你的project目錄內有Makefile,通常也可以在那裡面找到是否有定義ASYNC_RESET。
! f* C2 Y/ l/ \/ l2 e. N7 T! f; R% _; M# }' a
最後你衍生出來的問題,其實才是重點,何時要用非同步reset,何時要用同步reset。下面這篇文章應該可以給你一個滿意的答案。
$ u! x% ^1 ~, |2 B0 F, Yhttp://www.sunburst-design.com/p ... UG2002SJ_Resets.pdf

評分

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

查看全部評分

9#
發表於 2007-1-22 21:29:18 | 只看該作者
給garywlee 按個好, 不過題目不是我發的找greatsky找感謝囉....
, v  B4 o' U: s( t0 V3 ]  l8樓的算標準答案了, 不管是preprocessor還是synchronize / asynchronize reset都解釋的很清楚囉...
  K: m* Y  M3 O8 y: T4 mgreatsky 加油啦! 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語法使用上的時機及電路在合成方式! M' b9 K. I  q
我會好好的研究同步與非同步的使用,謝謝
2 x6 A# j/ }8 \* V+ `
) Z' u+ v! D1 a, Q另外我會好好的寫code的,若自己沒看過其他人寫過的code還不太有所長進,自己寫的東西跟以前做專題那種Code Style沒兩樣 Orz
; K! }5 g; _2 {" Z5 c也謝謝tommywgt的回覆,我再自行問您 FPGA內建LA的使用方式
12#
發表於 2007-1-23 11:41:53 | 只看該作者
OK...沒問題, 那個altera的很簡單, xilinx的我最近也會找時間弄看看...
13#
發表於 2011-5-19 15:19:28 | 只看該作者
回復 6# greatsky
( O3 m2 p, ~+ {! ]2 z0 l
" e9 I2 ?$ [9 k) q% n5 N8 R; I: I/ W3 m, i
    ASYNC_RESET 是 synopsys synthesizer 的識別字, 可以決定用 那種 d-FF 去合成線路!!!
14#
發表於 2011-9-14 10:05:10 | 只看該作者
回復 3# sakho
9 y. X7 _, L# \8 K% x1 F  h" {- `. ?  D: u
Thanks a lot!~!
15#
發表於 2011-9-14 10:06:18 | 只看該作者
~~~~~~~~~~~~~~~~~~- P' D: E9 J% C) h. O1 A6 \2 I) a
Thanks a lot
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-9 01:04 PM , Processed in 0.171600 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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