Chip123 科技應用創新平台

標題: 想問有關task的語法? [打印本頁]

作者: greatsky    時間: 2007-4-4 11:09 AM
標題: 想問有關task的語法?
我想問一下有關task的語法
5 c) Y/ p  v- ]4 Q  A# v, ]我所知道的是,task 可以有零個或者多個宣告來使用) g. \3 u; m& b. }* O( H6 p+ @+ j
但若我只是想在程式中 例用task的方式添加到主程式,把子程式放置在另一個檔案中 + h1 Z! @+ F' X6 f  B5 U' ]
這樣的方式不知該如何使用?8 ~! D  [) H7 b4 U. B8 u2 Y
: A; H5 p- c2 G0 b- |) E7 Z
我目前是在撰寫用於simulation環境下的verilog code
; b6 t/ l; W  d) a% P那我添加的部份是很大一段的 force訊號.. 這些訊號很明顯就沒有額外需要宣告in / out 的部份5 V/ H+ S% ]: ^$ c/ v& h) j* }. P
那我該怎麼寫較好?
  a: Z" Q, E* B
* M6 L7 E1 T" \) j7 B* `7 M1 y引述一下 簡短的程式
3 j/ n9 S$ A. b       for(i = 0; .. .. ..) begin
  M# m5 E) m+ m. Y- F        ... ...
# K, `' M; M! j8 @( [/ t       transfer_bulk_OUT(address, endpt, exp_bytecount, 1, Status);
8 k/ t8 s1 N2 c& P# i       if (Status == MYNAK)
2 e" l8 m: J5 a* C          printstatus(Status, MYNAK);' f! q; F9 q" P$ J2 |0 o" T9 O
       else
: ^% X; c  t/ o2 c          check_udc_if_hshk(1'b1, 1'b1);1 X7 e2 K* \* [; \( L6 ^) Y
       #5000;/ a/ o. L3 ^9 K" G
    if(i == 1)  begin, k( L1 \# V& i. W( J$ y/ t+ j
        #140_000;7 g3 q* h3 D$ B- [# k9 ]1 b
     z_fix_tasks;                        <= 在此部份想要添加子程式進來  可以這樣添加嗎?
' N7 p9 g" }7 B9 T    end
2 d; k, X2 u3 i6 h- b) ?9 Tend
作者: masonchung    時間: 2007-4-18 11:47 PM
只要在initial 或 always的 block內 呼叫 TASK 即可以用吧
作者: greatsky    時間: 2007-4-20 05:29 PM
標題: 回復 #1 greatsky 的帖子
自己回覆一下好了!
/ T( E  P2 i& j+ w# K' V
9 ^/ D% f: z, w) l9 }我之前不解的地方是在 書本上所指的 task語法範例會包含輸入/輸出
. Z- z8 W1 u0 G4 g& [ex:
( z& s1 C  y. F# @  Z, dinput    clk,a,b,c;: @$ M% w# h4 Z1 U+ Q6 b! _
output  d_out;
+ [4 R4 G. J3 u6 Y
1 e; R2 v! V8 A( Breg      d;+ o# e" r( H$ X# H& [5 M
always (posedge clk) begin1 X3 P' H: R/ s
       temp_task(a,b,c);
9 _1 ^4 B; U+ u" C( ?: ^       d_out = ~c;6 P" I+ ]1 l, V0 v5 e: z" M
end# C- Y, N& J4 s. K1 u' A
" b+ C! W! G+ E
  task temp_task;  q' m- t1 _. H# m
     input  x,y;+ Q  f) \) R% k  t) S# z
     output  z;( B% _; {, U) m& b0 Z0 h- ?; y/ N
    4 E" V% p/ m7 {8 m% Y! ?4 d. C
     reg z;% Q% ?7 [% s; a, y- P, N
         z = x + y;4 l. y; h8 `# b: s) b% [- ~
  endtask
& H$ \1 z; H0 C
" c& N' V  Y7 I* T- r! f那我的情況,主要是只做單純的task 沒有in / out
8 d7 \- L7 Y% [所以直接在simulation中加入task's name(ex:temp_task)" `+ C% t' W1 W7 q
等到程式直接執行到該行就會進入到指定的task中,執行程式..
+ p- o$ N8 a! R# O& p4 D5 f2 L
5 Y7 a: [' k3 t3 @' r8 j, G% q, K這個應該是蠻基本的...以前沒用過,在發問時不確定是不是能這麼做,編譯時一直出現Error,害我以為這樣會不能執行..Orz
作者: stanlly9    時間: 2007-11-7 11:13 AM
ㄝ都,雖然年代久遠不過還是回答一下@@
- m! M- f. ?" Q* \, @$ {答案是可以的
6 \* O2 z4 l4 F( b6 l- ctask也可以不使用local variable
) Z) M* a, D8 y* ^$ g& x直接也可以對golbal variable進行更動
/ |. a* ]2 y  I" A6 j但是這個task的動作內容必須在同一個endmudule之內才可以。




歡迎光臨 Chip123 科技應用創新平台 (http://free.vireal.world/chip123_website/innoingbbs/) Powered by Discuz! X3.2