Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-1-11 19:14:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進好~1 y: m+ v* h6 K! ^6 t% y
我是剛從學校進入這領域的新生,說不上是初學者
5 n4 d+ k8 @$ A. F$ {因為若要設計一些簡單的project,這點我還堪用( Y$ {+ R, ~( N7 b! s
另外,小弟也用過兩大FPGA廠商的EDA相關的Tool : Xilinx ISE 、Quartus II 、ModelSim ...等
& k! ~! D- ~4 I* z' f2 w0 I% M) W( {0 b8 i& f
不過最近剛近公司,開始學著看程式卻發覺有一些寫法我不太懂。
( v' e' S1 _$ \- z( }+ w  C/ r6 _是關於 `ifdef ... `else .. `endif+ v8 |0 }+ e$ _; a: j  {

5 [7 u7 f! T) O! t' H8 b) U' W$ w& d下面舉某段code  請哪位有經驗的大大能幫我解釋一下
. K7 j9 D) T8 ?2 l2 _' P* a
- I& }! F; Q$ ^. {$ U. P3 P`ifdef ASYNC_RESET! S( d( z- O- L' _+ {) O
        always @(posedge clk or negedge rst)* U6 D- F; T. U  ^0 q0 o+ B' \0 t
`else
  I: `9 h) R, K        always @(posedge clk)$ t9 w; R' h- p5 B" ]2 q$ j4 F& Z$ |
`endif
4 q* u% Y- b, l( L7 I        if(!rst)        state <= POR;& N2 F0 M( R  }% ?. n% W
        else
1 H8 @9 H$ c1 V                    if(vbus)   state <= POR;
; E8 y  Y3 I& u3 \! n9 `3 V        else          state <= next_state;
1 M- s0 o9 H6 H! X8 {& S: e% Q. b) O, W3 R9 f
請各為大大賜教了!
4 O2 u- \  i) k8 j# T% Y0 D' l3 `
我是在猜想說,若條件符合者 是以always@(posedge clk or negedge rst) 再接到 if ..else
% Y$ r) n! k' J: T% q2 V, H$ }9 M- n5 H不過這條件判斷是以ASYNC_RESET為依據嗎?) D' `4 h; d9 ^3 k( k: Q8 O3 L* f
但我在程式中找不到這個ASYNC_RESET的相關程式斷落..
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2007-1-11 19:29:36 | 只看該作者
這個`ifdef  `else  `endif 是用在整合不同外在條件的寫法
) @% g: ?7 t4 Y7 d' c$ C* x7 Z
相對的 ASYNC_RESET 會用`define 來定義, 可能在別的verilog檔案內

評分

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

查看全部評分

3#
發表於 2007-1-17 00:19:47 | 只看該作者
`ifdef  `else  `endif的用法其實就如masonchung大講的一樣
, r" C% @+ [) ~, I  {: @& m+ h' }% m+ a, P& i2 F
ASYNC_RESET
5 f* E( E/ U# e: F( u2 f3 \可以用grep 來搜尋整個目錄
1 b4 D' \3 Y1 @. j- t/ O  KEx: grep ASYNC_RESET *.v  或grep ASYNC_RESET *.*
6 G  T' o* X' _( r9 e4 [小弟都是這樣做的啦

評分

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

查看全部評分

4#
發表於 2007-1-17 10:03:21 | 只看該作者
以 ncverilog 為例2 h( c! k( d6 L- y3 a0 Z* T
9 I3 F3 y1 Q; Q& L2 X
ncverilog -f list_file +define+ASYNC_RESET- p" @2 l  Z) l% f& p

6 p7 ^+ {% a; @那會定義在跟 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信號。也就是符合條件的是程式碼,不符合條件的當成是註解刪除。: @; W$ f, ]( t7 W# d$ `
所以`ifdef  `else  `endif會改變轉譯時的文章樣子,對於開發除錯版本特別有用。/ H3 T" `1 q8 T$ n& ^% Q  ]. u. s* j) [
9 `  m7 k* m* B; x" S* Z
[ 本帖最後由 walltsou 於 2007-1-19 10:12 AM 編輯 ]

評分

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

查看全部評分

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

回復 #3 sakho 的帖子

首先感謝masonchung 版大及 sakho大 及另外兩位先進的回覆
$ w9 Y9 R+ B. i! m我在看過回文後有找到定義檔  difines.v的檔案
; i' F1 h2 R- t找的結果是 被mask掉的一行定義??
; \* ^1 P0 r% M- o1 e$ P! H: K& X2 w$ y# z- i; e/ N
這結果讓我有點失望,因為在其他相關檔案中也不曾有這行的定義/ O1 Z  o# C+ `% d
但是這個`ifdef `else `end卻又一直的出現; |: F  m' H; _  F) w: J
以下是我在define找到的描述及定義程式片斷; h* C  W/ V# p3 q/ E- L3 W0 }3 D
`ifdef TEST_IMPL
" W  {" ~! w9 E        // Do not modify this section
8 w7 @2 r0 p* n( @        // this is to run the test bench
8 |! o& E1 v, ?1 u3 ^0 D        `define UFC_HADR        174 v, _: b- ^2 G/ k9 n
        `define RF_SEL        (!wb_addr_i[17]). ^: Y0 D- l& }" }, U
        `define MEM_SEL (wb_addr_i[17]). q3 n* ^# _+ u
        `define SSRAM_HADR 149 V: T* x/ J0 B& O) V1 T
        //`define ASYNC_RESET
* A: C2 |$ h; M. g`else7 D7 z5 f! j( Q, I- P& s, x
        // Modify this section to suit your implementation' s: g8 Y3 O6 |  G6 A: _$ }
        `define UFC_HADR        12$ o9 s1 p4 g% ~- j# i. U: h
        // Address Decoding for Register File select1 M3 t. a3 @1 \; U" F1 D/ i8 t- F
        `define RF_SEL        (!wb_addr_i[12]): `1 K3 ]% X( i7 p& k4 \& l
        // Address Decoding for Buffer Memory select* c: p$ I6 W3 @8 Z: }
        `define MEM_SEL        (wb_addr_i[12])
  q$ g9 c" _; V( x. w4 t' l        `define SSRAM_HADR        9
7 `. p* d; I! ?7 e$ N# g7 M7 Y        // The next statement determines if reset is async or sync.% P5 \$ D# Z) T! R
        // If the define is uncommented the reset will be ASYNC.
1 y$ R6 x; R  n$ t* w, k        //`define ASYNC_RESET
/ B! x' Y: F6 p7 u. s. y& n% T`endif
- b# s5 w) D; g在看過TEST_IMPL的定義也只是對特定的變數做定義,也沒有跟ASYNC_RESET. \/ n. ^# D: o3 I
有相關的定義..看到最後真被搞糊塗了..
# i6 x8 A3 v6 a# k5 j- t! G1 Q* h6 u3 I. R( @" W$ c5 _
另外我是在windows XP的UltraEdit 觀看程式的,好像沒辦法用grep尋找 ORz
7#
 樓主| 發表於 2007-1-22 15:40:58 | 只看該作者
在回文後再看過walltsou大的回文思考時,突然想到
9 b6 v' U' y3 m照walltsou大所說的3 c+ m: v' ]" p. n* A5 |
若 有 定義AYNC_RESET則執行 always@(posedge clk or negedge rst)8 W2 k& u4 p2 `2 ]0 {
若 否 則執行 always@(posedge clk)" `% i- i# R1 \( k8 C- K

1 Y0 I' u' [+ l  q所以再看到我前一封回文的 被mask程式 那也就是說這程式也只會執行 否的部份囉??
) u+ \6 q  n& H3 u0 H# X那這樣我又有個問題(不好意思問題好多 ^^")* t5 ^4 {3 Q7 N; W
若照這樣看來不就僅僅在posedge clk時有動作,那若有rst訊號來也不就都不會有動作?
8#
發表於 2007-1-22 21:17:21 | 只看該作者

回復 #7 greatsky 的帖子

你要先分清楚在這個Verilog code中,哪些東西是會被合成電路的,哪些不會被合成電路。`ifdef 與verilog 的if是不一樣層級的東西。討論Verilog的時候最好不要用『執行』這樣的字眼。所以,把你的例子用比較正確的字眼來說,應該是這樣7 T0 B/ y% V5 q$ i! l
4 H9 N5 M( Y- G' O$ N
若有定義ASYNC_RESET則合成器會使用always@(posedge clk or negedge rst)這一行來進行電路合成。反之,則使用always@(posedge clk)這一行來合成。我們可以看一下,如果有定義ASYNC_RESET的話,會被合成的verilog如下:/ h5 l- A: ^3 W2 d% m
always @(posedge clk or negedge rst)
/ x" |) c- l- y7 ^. xif(!rst)        
0 f! c& |( j# V  p  W( f    state <= POR;
  h- |4 B8 \8 x9 C+ u; kelse            
* K1 u) M0 o$ e' }5 H' y    if(vbus)   
" u% v# |4 V2 q% r/ X, @0 U        state <= POR;. R5 X  L% a! k4 X/ m$ s5 p
    else         
& D& M, \* e+ F% \. @        state <= next_state;; l; o2 A8 n2 P
& F/ e7 ?2 z% c! x6 D6 [9 n* h
這很明顯的就是一個非同步reset的電路。反之,如果沒有定義ASYNC_RESET,會被合成到的verilog code如下:
0 E6 V/ s# X$ E/ k1 y$ w6 A5 P5 @/ f4 t; @
always @(posedge clk)
" |6 |: U8 @7 H( v8 E- y2 Bif(!rst)        
; _$ o0 F9 a2 f0 L# B    state <= POR;
& Y. Y( o, H- celse            
. j9 [# p5 z1 h7 A    if(vbus)   ) |7 ^0 _' n) i+ B
        state <= POR;
  ~+ ^2 r/ r, _. q  k! n& x5 K  Q    else         
& V0 O, n) _, Q' k. Q& i        state <= next_state;
7 M# M: z$ b4 r0 r% F) K; r. L
/ R. o' ^: o; C2 e& t$ R這就是一個明顯的同步RESET電路。
" \+ }) E1 x- x1 p7 o  [8 ]9 X5 J3 e, ]% v4 w& O! H
透過不同的條件定義,就可以在不更動verilog code的前提下,合成出不同行為的電路。這是Verilog的一個很好用的功能。這個功能如果換到軟體程式語言,就是C語言裡面的前置處理器(preprocessor)的功用。
( _  @- U- O. e3 F& ?& i/ Y4 F7 ?" B* k
你會找不到ASYNC_RESET定義在哪裡是正常的。因為這類的東西通常就是由工具的命令列直接給定的。如果你的project目錄內有Makefile,通常也可以在那裡面找到是否有定義ASYNC_RESET。: O, ?: {1 q* T" v; m8 C  I
. g/ w9 g: }4 X$ L' E
最後你衍生出來的問題,其實才是重點,何時要用非同步reset,何時要用同步reset。下面這篇文章應該可以給你一個滿意的答案。) j, l- l- O; C7 q1 l4 j
http://www.sunburst-design.com/p ... UG2002SJ_Resets.pdf

評分

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

查看全部評分

9#
發表於 2007-1-22 21:29:18 | 只看該作者
給garywlee 按個好, 不過題目不是我發的找greatsky找感謝囉....9 h: H3 x6 u$ c; @% y% L" ?
8樓的算標準答案了, 不管是preprocessor還是synchronize / asynchronize reset都解釋的很清楚囉...' w8 @6 m7 P- u, i- ~% R7 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語法使用上的時機及電路在合成方式; s$ C' D5 v- Z# b
我會好好的研究同步與非同步的使用,謝謝
/ ~/ |$ s/ @" J2 n' n! g. s3 b, G: U/ E9 _
另外我會好好的寫code的,若自己沒看過其他人寫過的code還不太有所長進,自己寫的東西跟以前做專題那種Code Style沒兩樣 Orz2 @. V! D, O. R" s" ^1 d
也謝謝tommywgt的回覆,我再自行問您 FPGA內建LA的使用方式
12#
發表於 2007-1-23 11:41:53 | 只看該作者
OK...沒問題, 那個altera的很簡單, xilinx的我最近也會找時間弄看看...
13#
發表於 2011-5-19 15:19:28 | 只看該作者
回復 6# greatsky ' e0 @9 q; U+ ~$ L/ R8 R; I

  ?  ]# M% p  g1 G& p( z& H/ |& T( ]' p7 R1 |
    ASYNC_RESET 是 synopsys synthesizer 的識別字, 可以決定用 那種 d-FF 去合成線路!!!
14#
發表於 2011-9-14 10:05:10 | 只看該作者
回復 3# sakho 9 i9 F2 `. @. z) \- y$ p
) Y' _; J8 |7 A9 p/ u3 B% Z3 e
Thanks a lot!~!
15#
發表於 2011-9-14 10:06:18 | 只看該作者
~~~~~~~~~~~~~~~~~~& B  r. x' A  K& O: e
Thanks a lot
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-16 05:17 PM , Processed in 0.147019 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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