Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-1-11 19:14:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進好~
, G0 g- m/ ?" f" u/ {我是剛從學校進入這領域的新生,說不上是初學者- |4 B) u! }  j
因為若要設計一些簡單的project,這點我還堪用
# X8 a/ `3 {' _另外,小弟也用過兩大FPGA廠商的EDA相關的Tool : Xilinx ISE 、Quartus II 、ModelSim ...等0 {( g) w# [* [/ Q% K; E- \
4 d+ [+ C  d6 ?" E2 H% r
不過最近剛近公司,開始學著看程式卻發覺有一些寫法我不太懂。
0 F1 h+ E' W! `) y( _- z# O$ z& `  \1 E. c+ G是關於 `ifdef ... `else .. `endif
$ {/ m' D+ X4 G3 u" o3 X" e5 i$ q9 r$ M& i
下面舉某段code  請哪位有經驗的大大能幫我解釋一下
) V5 \8 H) a. X
/ L2 o5 X3 I6 W0 u  S$ e`ifdef ASYNC_RESET
! q3 z6 L8 H' X        always @(posedge clk or negedge rst)' c9 ?! W6 \% `4 ~5 S1 Q
`else
. B; V' L- |% c: [* e0 R        always @(posedge clk)
! J- O* A- b/ m& T% P+ Z% @2 n`endif8 o+ k1 K2 u0 g2 g1 c
        if(!rst)        state <= POR;
# i4 l! ~. U6 h( }. t        else9 u) ?- ^1 Q! _# R6 a* Z" Z5 k9 m! {
                    if(vbus)   state <= POR;
$ S$ l- ^% C( I! h- w7 m6 N( H# G        else          state <= next_state;
" [6 q4 w5 T* v4 u9 H  a2 Q+ a3 a' D$ C
請各為大大賜教了!3 n) v/ P" ~( q1 \
& ?! l4 k4 U$ b
我是在猜想說,若條件符合者 是以always@(posedge clk or negedge rst) 再接到 if ..else9 }9 h9 T+ {: _/ V. ~3 @: a1 ~
不過這條件判斷是以ASYNC_RESET為依據嗎?5 X/ j7 a3 l4 B+ l: U$ y; v
但我在程式中找不到這個ASYNC_RESET的相關程式斷落..
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2007-1-11 19:29:36 | 只看該作者
這個`ifdef  `else  `endif 是用在整合不同外在條件的寫法
" \& W0 E) y( L: ^+ o( h
0 l1 F% d8 {& e5 `- B5 G+ K9 I相對的 ASYNC_RESET 會用`define 來定義, 可能在別的verilog檔案內

評分

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

查看全部評分

3#
發表於 2007-1-17 00:19:47 | 只看該作者
`ifdef  `else  `endif的用法其實就如masonchung大講的一樣* [# t) W! y- f% N  B. P* S
  \" z: N* Q- {7 Z! V$ y
ASYNC_RESET
$ \* N+ s; e( ]" w可以用grep 來搜尋整個目錄
, ]( a7 t( z% x% `Ex: grep ASYNC_RESET *.v  或grep ASYNC_RESET *.*
2 {5 |' X$ v1 O0 b小弟都是這樣做的啦

評分

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

查看全部評分

4#
發表於 2007-1-17 10:03:21 | 只看該作者
以 ncverilog 為例
# n# U7 m. A* J$ H/ L0 l( \+ v( n6 }- Y5 K+ |: C% Y/ p+ l# ?% Z/ o
ncverilog -f list_file +define+ASYNC_RESET
0 u2 m: B1 r+ i3 a2 @$ w2 C& R" R6 K/ M5 w4 u9 j4 j
那會定義在跟 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信號。也就是符合條件的是程式碼,不符合條件的當成是註解刪除。* s' \4 B+ Y) @! e- k- x+ J
所以`ifdef  `else  `endif會改變轉譯時的文章樣子,對於開發除錯版本特別有用。
% S  [- |; A+ O2 J/ w, t5 E2 |" \+ h' m2 D  r& X! P
[ 本帖最後由 walltsou 於 2007-1-19 10:12 AM 編輯 ]

評分

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

查看全部評分

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

回復 #3 sakho 的帖子

首先感謝masonchung 版大及 sakho大 及另外兩位先進的回覆
' M) N* |/ p1 W' x! {; a我在看過回文後有找到定義檔  difines.v的檔案 7 w# j' t3 U. X$ P+ V
找的結果是 被mask掉的一行定義??5 v! L  U+ ?! }, P6 `/ g% b5 Z) l

1 ~4 j- U6 B8 K& f這結果讓我有點失望,因為在其他相關檔案中也不曾有這行的定義3 f' n) O' C: t2 h, }3 s
但是這個`ifdef `else `end卻又一直的出現
( |1 l, S& O$ ~, ^以下是我在define找到的描述及定義程式片斷
* ~  {  r/ P5 r0 o/ e: E`ifdef TEST_IMPL7 A# k) B+ s( b5 f' p
        // Do not modify this section
% p  |+ y" W2 `        // this is to run the test bench
: I& q) |9 Z! c; x; R, v  c        `define UFC_HADR        17
) w3 |" |+ A4 r        `define RF_SEL        (!wb_addr_i[17]), H& y/ _  c% Q$ U
        `define MEM_SEL (wb_addr_i[17])
' K7 s' }1 _8 e! t1 C- N5 S        `define SSRAM_HADR 149 |0 N* P6 m% g4 j* Z1 A' ^2 `
        //`define ASYNC_RESET
& `. p- X1 ~8 V6 o8 j1 E`else  f7 b4 h4 f" g4 ^1 }3 D( R" B! }
        // Modify this section to suit your implementation
" A$ l( c+ t* y% y: q        `define UFC_HADR        126 s) Q0 V8 w/ I' g/ u" X) E
        // Address Decoding for Register File select
3 }  S; d: Q5 D& O% i5 L& s- T2 `3 k        `define RF_SEL        (!wb_addr_i[12])4 [# N+ k2 x7 R$ T  W( i. M
        // Address Decoding for Buffer Memory select; F& M) b" C5 g5 i3 x, u
        `define MEM_SEL        (wb_addr_i[12])4 N( b9 u" j' }! G  g
        `define SSRAM_HADR        9
7 L" V- R0 q5 O3 L% r, @7 T        // The next statement determines if reset is async or sync.8 _' \# |( S* ]* j9 Y
        // If the define is uncommented the reset will be ASYNC.
5 f7 F5 f+ y  [( o+ L8 R' |! X        //`define ASYNC_RESET4 E" h% m7 _: u$ |
`endif- I( b3 b% ~  U5 E: p# J0 J
在看過TEST_IMPL的定義也只是對特定的變數做定義,也沒有跟ASYNC_RESET7 @, s1 l7 c4 s9 G2 E* @+ i3 E) C" {: }
有相關的定義..看到最後真被搞糊塗了.. , N- @9 ]$ ~2 x+ r( o1 `2 I
5 O& p: x  X; u* {& b
另外我是在windows XP的UltraEdit 觀看程式的,好像沒辦法用grep尋找 ORz
7#
 樓主| 發表於 2007-1-22 15:40:58 | 只看該作者
在回文後再看過walltsou大的回文思考時,突然想到
2 A& M  E1 x* Y+ Z7 t照walltsou大所說的) U" K% r% Q8 q: u( I5 `% F8 j
若 有 定義AYNC_RESET則執行 always@(posedge clk or negedge rst)
" a4 F, O# R4 \若 否 則執行 always@(posedge clk)1 k8 P4 |: q% V8 ^- o

, q# G0 U4 T7 U% [& \# [5 D% Z% h所以再看到我前一封回文的 被mask程式 那也就是說這程式也只會執行 否的部份囉??; B% e( ?- r/ g! U
那這樣我又有個問題(不好意思問題好多 ^^")
! @* l# ~& h; B* w若照這樣看來不就僅僅在posedge clk時有動作,那若有rst訊號來也不就都不會有動作?
8#
發表於 2007-1-22 21:17:21 | 只看該作者

回復 #7 greatsky 的帖子

你要先分清楚在這個Verilog code中,哪些東西是會被合成電路的,哪些不會被合成電路。`ifdef 與verilog 的if是不一樣層級的東西。討論Verilog的時候最好不要用『執行』這樣的字眼。所以,把你的例子用比較正確的字眼來說,應該是這樣
8 {& b+ P9 C' `( s
1 N2 I; [0 a  [" W5 D& V若有定義ASYNC_RESET則合成器會使用always@(posedge clk or negedge rst)這一行來進行電路合成。反之,則使用always@(posedge clk)這一行來合成。我們可以看一下,如果有定義ASYNC_RESET的話,會被合成的verilog如下:. Y; @4 }  D1 R5 L
always @(posedge clk or negedge rst)# ^1 R, z! `' d0 ~" ~1 G
if(!rst)        - ~0 Z0 L# c2 H0 b% P9 m+ n
    state <= POR;
; C4 _9 H0 [" A! `% Y4 selse             / h9 l# R8 o  W# ?9 P
    if(vbus)   3 F+ {. {& D. ]& A( \  ?
        state <= POR;
) {5 ?$ C  V# o: T5 a: l9 Y    else          $ _( O+ P  D8 z. y' e
        state <= next_state;( L* ^$ A5 r& O  D
$ O" g( |7 J3 o4 ]
這很明顯的就是一個非同步reset的電路。反之,如果沒有定義ASYNC_RESET,會被合成到的verilog code如下:- q' L) j$ d% \) g

& h, K* P3 o. Z+ B: _, n7 ?$ lalways @(posedge clk)
; t2 a! w6 |; _if(!rst)        : {1 _0 H& l0 [
    state <= POR;
1 m2 y! j$ d6 b% welse             + |/ x3 T' Q1 f3 O1 z
    if(vbus)   
( w& u! @, ~+ }% ?- y5 l/ Y# u        state <= POR;9 C' c/ }: l7 A
    else         
$ b3 r& t; Q, b' X, C& z3 t        state <= next_state;) d2 ?$ U$ J* A! q. w' j6 B

  Z0 ~2 d  S' f  H1 Q這就是一個明顯的同步RESET電路。
, k1 s4 V; Y4 q
* U' I, h$ `$ @/ K- `  O" {透過不同的條件定義,就可以在不更動verilog code的前提下,合成出不同行為的電路。這是Verilog的一個很好用的功能。這個功能如果換到軟體程式語言,就是C語言裡面的前置處理器(preprocessor)的功用。
4 W3 u  Q# Z/ p9 O, T- K8 l# P! I
你會找不到ASYNC_RESET定義在哪裡是正常的。因為這類的東西通常就是由工具的命令列直接給定的。如果你的project目錄內有Makefile,通常也可以在那裡面找到是否有定義ASYNC_RESET。; q- `8 Y! e9 p" v" l

/ n5 L: ^1 _5 c, G: }最後你衍生出來的問題,其實才是重點,何時要用非同步reset,何時要用同步reset。下面這篇文章應該可以給你一個滿意的答案。
+ K) c3 E. x& p5 \& p9 shttp://www.sunburst-design.com/p ... UG2002SJ_Resets.pdf

評分

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

查看全部評分

9#
發表於 2007-1-22 21:29:18 | 只看該作者
給garywlee 按個好, 不過題目不是我發的找greatsky找感謝囉....
, W9 j/ }8 ?5 \$ q. _( A+ T+ }2 u- R8樓的算標準答案了, 不管是preprocessor還是synchronize / asynchronize reset都解釋的很清楚囉...- S. T2 c# C3 b3 M
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語法使用上的時機及電路在合成方式
+ x' h  l( D' W: b我會好好的研究同步與非同步的使用,謝謝  H/ u9 I& S6 a: I4 }

- s$ W7 E/ W* Y: m8 e另外我會好好的寫code的,若自己沒看過其他人寫過的code還不太有所長進,自己寫的東西跟以前做專題那種Code Style沒兩樣 Orz
- `3 r1 Q. o4 R$ O( b" j+ B! x也謝謝tommywgt的回覆,我再自行問您 FPGA內建LA的使用方式
12#
發表於 2007-1-23 11:41:53 | 只看該作者
OK...沒問題, 那個altera的很簡單, xilinx的我最近也會找時間弄看看...
13#
發表於 2011-5-19 15:19:28 | 只看該作者
回復 6# greatsky
& e6 g' a( d: t$ a
' G* p) t2 l9 K4 L, B; [/ U; S- i9 y+ Q! T9 z: f& T/ X( t
    ASYNC_RESET 是 synopsys synthesizer 的識別字, 可以決定用 那種 d-FF 去合成線路!!!
14#
發表於 2011-9-14 10:05:10 | 只看該作者
回復 3# sakho - g( U& w# \1 ~" t* ~4 k9 _

* x4 X6 }& p5 F$ l9 P+ L  wThanks a lot!~!
15#
發表於 2011-9-14 10:06:18 | 只看該作者
~~~~~~~~~~~~~~~~~~# N, a" E$ R0 T; {
Thanks a lot
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-18 05:02 AM , Processed in 0.123516 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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