Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-1-11 19:14:52 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
各位先進好~- U9 t. e% g2 g2 K' L+ n: @
我是剛從學校進入這領域的新生,說不上是初學者
% S6 D+ o& D- Q1 y因為若要設計一些簡單的project,這點我還堪用
) |" Y: Z0 ?8 u- Z& I7 z另外,小弟也用過兩大FPGA廠商的EDA相關的Tool : Xilinx ISE 、Quartus II 、ModelSim ...等
  S' f/ X' h+ ?9 n7 `6 H3 N) d
( M8 c3 v0 g( o7 T不過最近剛近公司,開始學著看程式卻發覺有一些寫法我不太懂。
2 y$ z0 J: x- B* S% O是關於 `ifdef ... `else .. `endif
, F8 J- W( _6 V' `' D' l# U. i
2 Z5 f$ e. s% I. s下面舉某段code  請哪位有經驗的大大能幫我解釋一下
1 G' [7 X# o  m, ^5 H; p
' P8 p+ a: E) w`ifdef ASYNC_RESET% Z4 P0 e' ^+ ?7 d1 k
        always @(posedge clk or negedge rst)
( \( d, H4 ^1 j$ Z5 {6 [. R`else% e1 p) |3 K3 K
        always @(posedge clk)3 S* d8 t! Y: s9 `1 `; n
`endif
  a* w+ m% }/ a0 f# H4 U        if(!rst)        state <= POR;' n1 ?4 ~" D+ ~9 K! E* e( V& d0 \
        else
" \5 B# p! W# O- E3 w# q' J! ?                    if(vbus)   state <= POR;
' \6 R' ?2 C" f0 B" Y5 ~2 t4 h$ a        else          state <= next_state;- m& e. ^6 H% b7 f4 U4 w

& j/ F6 `5 J5 q% m/ G3 n請各為大大賜教了!8 x+ a" M* B0 h8 O# H4 j) {5 W+ h
( z# v5 }8 v, K- u5 W
我是在猜想說,若條件符合者 是以always@(posedge clk or negedge rst) 再接到 if ..else' }6 |9 y3 p! T! }: ?4 ]
不過這條件判斷是以ASYNC_RESET為依據嗎?
$ Q* J2 P' b% m* Y0 g8 @2 S但我在程式中找不到這個ASYNC_RESET的相關程式斷落..
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
15#
發表於 2011-9-14 10:06:18 | 只看該作者
~~~~~~~~~~~~~~~~~~0 C) N+ i% q7 T6 M$ R, \
Thanks a lot
14#
發表於 2011-9-14 10:05:10 | 只看該作者
回復 3# sakho
- @( D8 p0 o+ c$ Y  ?) ~) Z1 l. ^9 h1 ?8 g  P2 A( @
Thanks a lot!~!
13#
發表於 2011-5-19 15:19:28 | 只看該作者
回復 6# greatsky % |( S! C: U# T! u
9 {8 I. }* E3 y+ a8 s2 B- }

' Y. A- z4 L, Z: V9 Y- J; c2 `. Z    ASYNC_RESET 是 synopsys synthesizer 的識別字, 可以決定用 那種 d-FF 去合成線路!!!
12#
發表於 2007-1-23 11:41:53 | 只看該作者
OK...沒問題, 那個altera的很簡單, xilinx的我最近也會找時間弄看看...
11#
 樓主| 發表於 2007-1-22 23:41:25 | 只看該作者
感謝 garywlee大  詳盡的解說,看過解說後我能夠有所瞭解`ifdef `else `end語法使用上的時機及電路在合成方式% ]- Z) G. L* x5 Z+ y- y) |+ Z( Z0 j
我會好好的研究同步與非同步的使用,謝謝
: Q( O; ^  t9 f; z' v" W
( `( o* y' o4 \, w+ |另外我會好好的寫code的,若自己沒看過其他人寫過的code還不太有所長進,自己寫的東西跟以前做專題那種Code Style沒兩樣 Orz5 y! y" F. N6 k3 I( D
也謝謝tommywgt的回覆,我再自行問您 FPGA內建LA的使用方式
10#
發表於 2007-1-22 21:33:55 | 只看該作者
對了...大家都知道modelsim很好用, 再提供你另一個你也許已經知道的東東, 那就是現在的fpga都內建LA了, altera的LA跟Xilinx的chipscope都好用, 你把compile完的結果download 下去FPGA可以用JTAG直接看結果哦, 用過的人都會不想再用真正的LA了...
9#
發表於 2007-1-22 21:29:18 | 只看該作者
給garywlee 按個好, 不過題目不是我發的找greatsky找感謝囉...." S! @, M+ L- r
8樓的算標準答案了, 不管是preprocessor還是synchronize / asynchronize reset都解釋的很清楚囉...
  H7 F2 \$ e. Z4 |, d! Q9 z& ~5 K& Agreatsky 加油啦! code多寫, simulation多run,就會愈來愈清楚了...

評分

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

查看全部評分

8#
發表於 2007-1-22 21:17:21 | 只看該作者

回復 #7 greatsky 的帖子

你要先分清楚在這個Verilog code中,哪些東西是會被合成電路的,哪些不會被合成電路。`ifdef 與verilog 的if是不一樣層級的東西。討論Verilog的時候最好不要用『執行』這樣的字眼。所以,把你的例子用比較正確的字眼來說,應該是這樣) E+ n& }4 f% [% N" C9 b2 h

0 U' r1 r" |3 L. i/ k若有定義ASYNC_RESET則合成器會使用always@(posedge clk or negedge rst)這一行來進行電路合成。反之,則使用always@(posedge clk)這一行來合成。我們可以看一下,如果有定義ASYNC_RESET的話,會被合成的verilog如下:
; g; q5 O4 \) H8 halways @(posedge clk or negedge rst)4 M7 p/ c% I2 v. j- {! p
if(!rst)        
6 @+ u5 n/ E$ _7 h    state <= POR;
/ W1 Y% l6 z, U4 helse            
, I: }3 L8 \5 n1 v    if(vbus)   
: e+ u0 `9 ?" _# r        state <= POR;0 ?0 `- E6 M) {
    else         
  u% I+ ?& A3 }/ A        state <= next_state;. m# y) \0 A) M2 g. ^% T
& V9 u' o  c: x# v
這很明顯的就是一個非同步reset的電路。反之,如果沒有定義ASYNC_RESET,會被合成到的verilog code如下:( r. a( }5 K2 k# d! a7 t" i
% ^1 S9 k2 U0 K- q! E
always @(posedge clk)
8 J8 x+ {1 O+ d0 G& O$ mif(!rst)        / R( U' \2 V1 ~: @
    state <= POR;
! t1 X1 @/ q0 L. c# F* ]else             6 f1 s( l& S( ~5 S. w
    if(vbus)   * k. d0 \6 |, [4 c& G
        state <= POR;; ]( ]) h" o" `; {$ n& Z+ W
    else          ) L, k" I  N3 O2 F+ m
        state <= next_state;
  @6 C' a: ?9 k# n8 ~5 U
! m6 G! |" X( W. p3 c/ L9 a這就是一個明顯的同步RESET電路。
* s% B: S6 U8 c; s
  ^2 K# t( N9 h) c, A; T透過不同的條件定義,就可以在不更動verilog code的前提下,合成出不同行為的電路。這是Verilog的一個很好用的功能。這個功能如果換到軟體程式語言,就是C語言裡面的前置處理器(preprocessor)的功用。) j7 p+ x0 M7 b

- T, V2 |0 X- t- Y" y- C' q你會找不到ASYNC_RESET定義在哪裡是正常的。因為這類的東西通常就是由工具的命令列直接給定的。如果你的project目錄內有Makefile,通常也可以在那裡面找到是否有定義ASYNC_RESET。
# X4 m) H9 i: J/ J
2 c1 Q  q0 p/ ^) P4 ?* d( t1 v最後你衍生出來的問題,其實才是重點,何時要用非同步reset,何時要用同步reset。下面這篇文章應該可以給你一個滿意的答案。8 J3 }: G1 [6 c& j7 H+ m5 X+ |
http://www.sunburst-design.com/p ... UG2002SJ_Resets.pdf

評分

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

查看全部評分

7#
 樓主| 發表於 2007-1-22 15:40:58 | 只看該作者
在回文後再看過walltsou大的回文思考時,突然想到3 S+ U( k2 w7 l! I! D& L
照walltsou大所說的
( \* X, R' b: ?, [8 x! ]# P9 b0 h/ D若 有 定義AYNC_RESET則執行 always@(posedge clk or negedge rst)
$ K  i5 O% r6 E  o( \5 \* Q; T% I若 否 則執行 always@(posedge clk): p# k# q, g! Z7 C1 C  s- l' {

. E: y. h8 M; T6 u* e( |所以再看到我前一封回文的 被mask程式 那也就是說這程式也只會執行 否的部份囉??) s0 U7 J( S4 D7 i6 A' K8 [
那這樣我又有個問題(不好意思問題好多 ^^")9 P  c8 x( x0 N- Z
若照這樣看來不就僅僅在posedge clk時有動作,那若有rst訊號來也不就都不會有動作?
6#
 樓主| 發表於 2007-1-22 15:30:27 | 只看該作者

回復 #3 sakho 的帖子

首先感謝masonchung 版大及 sakho大 及另外兩位先進的回覆5 [7 E& u& }. }6 g2 o
我在看過回文後有找到定義檔  difines.v的檔案 & A* F3 w1 T; K! F) l* W* c
找的結果是 被mask掉的一行定義??; d% s+ v6 ]2 s! D& @9 z
; U; L* g) r+ M% j& \* c
這結果讓我有點失望,因為在其他相關檔案中也不曾有這行的定義
5 x- r- o& e. s* x! X! g' \6 K2 A但是這個`ifdef `else `end卻又一直的出現* Y4 \3 q' E# h
以下是我在define找到的描述及定義程式片斷
# D* E0 K  X0 k1 p! \`ifdef TEST_IMPL2 A0 K# c, O2 K1 i5 k
        // Do not modify this section! S+ W# U0 [% o, u6 i6 t2 ]
        // this is to run the test bench
  M/ M4 \; d! b8 s; f, B. g        `define UFC_HADR        17
3 R8 P1 M; g. P, S3 R' M        `define RF_SEL        (!wb_addr_i[17])' _& t, H5 O, k- Z% k
        `define MEM_SEL (wb_addr_i[17])$ c  w7 S5 ]' `, x! b
        `define SSRAM_HADR 144 ~0 T2 q( x, m
        //`define ASYNC_RESET" X% G8 Y3 Q0 g
`else
& k0 E: G8 g5 c        // Modify this section to suit your implementation
7 C, ^" a8 K8 x, }$ Y/ `9 L        `define UFC_HADR        120 b) G- O9 O/ l; _- Q- S
        // Address Decoding for Register File select
5 ?2 A/ G* s* [) l4 A4 Z! G        `define RF_SEL        (!wb_addr_i[12])
9 ^& o. f: b$ |' o$ T* D% a# f7 V        // Address Decoding for Buffer Memory select% C3 J! C+ L( c) x. b1 d/ x
        `define MEM_SEL        (wb_addr_i[12])7 r7 ]9 m* |+ B( w" ]' o% s
        `define SSRAM_HADR        9
1 b; \5 }( M$ m) ^& o6 m. I  G; e        // The next statement determines if reset is async or sync.- J5 X8 M, L9 [& Y
        // If the define is uncommented the reset will be ASYNC.1 s) T+ l+ @4 w6 ~4 p. I1 S
        //`define ASYNC_RESET5 m$ [) Z1 H$ G! L0 i
`endif
- H! ~) B! A7 m, L! ]  R在看過TEST_IMPL的定義也只是對特定的變數做定義,也沒有跟ASYNC_RESET
/ y6 t( E, z9 z5 R' ?4 k有相關的定義..看到最後真被搞糊塗了..
. |1 m. o7 o7 N6 x% R1 q1 x- u' K! Y9 u: U9 l: k
另外我是在windows XP的UltraEdit 觀看程式的,好像沒辦法用grep尋找 ORz
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信號。也就是符合條件的是程式碼,不符合條件的當成是註解刪除。
4 [* k! B4 ~* O6 s* {所以`ifdef  `else  `endif會改變轉譯時的文章樣子,對於開發除錯版本特別有用。9 G: l$ s  A( O! C

' z# t6 V& L4 N3 ?7 f' |[ 本帖最後由 walltsou 於 2007-1-19 10:12 AM 編輯 ]

評分

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

查看全部評分

4#
發表於 2007-1-17 10:03:21 | 只看該作者
以 ncverilog 為例6 P$ H) @0 w/ J" Z

8 W+ i) Y3 a8 ]. U: `ncverilog -f list_file +define+ASYNC_RESET
) c% U# h$ K3 {3 s; F8 {" F
4 n9 O  r* D8 E6 P2 P6 W# ]+ h1 r那會定義在跟 Test Bench 相關的檔案裡, 可以如同 sakho 所述般去做 search ...

評分

參與人數 1 +1 收起 理由
greatsky + 1 感謝啦!只剩這一點了感謝你的回覆

查看全部評分

3#
發表於 2007-1-17 00:19:47 | 只看該作者
`ifdef  `else  `endif的用法其實就如masonchung大講的一樣
8 ^2 e$ o, m, W
, N* L( ?; z5 F9 P3 u8 EASYNC_RESET
' r9 C' O" c: [9 {- z可以用grep 來搜尋整個目錄
1 k" ]; p/ c4 H" WEx: grep ASYNC_RESET *.v  或grep ASYNC_RESET *.*; w* c9 |* S) K+ H5 f* r+ z
小弟都是這樣做的啦

評分

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

查看全部評分

2#
發表於 2007-1-11 19:29:36 | 只看該作者
這個`ifdef  `else  `endif 是用在整合不同外在條件的寫法1 _: {" D3 T) N0 F
$ m& S. q# l9 p9 ]. O; P6 [
相對的 ASYNC_RESET 會用`define 來定義, 可能在別的verilog檔案內

評分

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

查看全部評分

您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-3 06:51 PM , Processed in 0.118007 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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