Chip123 科技應用創新平台

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

作者: greatsky    時間: 2007-4-4 11:09 AM
標題: 想問有關task的語法?
我想問一下有關task的語法. X. s) j6 t6 x* i% L" p
我所知道的是,task 可以有零個或者多個宣告來使用: y- G+ ~# M/ ]% R4 P  n9 e
但若我只是想在程式中 例用task的方式添加到主程式,把子程式放置在另一個檔案中 * G4 s; {2 l$ e, B8 W. ]  n
這樣的方式不知該如何使用?
, w* K. y) y; E5 H  j8 Z( ]( v4 f6 a0 Z% Q( t% b& R" d$ u
我目前是在撰寫用於simulation環境下的verilog code- ?9 f6 D% P% ]# F' M* O. ?& J
那我添加的部份是很大一段的 force訊號.. 這些訊號很明顯就沒有額外需要宣告in / out 的部份  S7 n6 W6 G7 i( ?$ D# |) V
那我該怎麼寫較好?
7 e  s& A2 L( `# L; x, `
# ?* }. L# Q' y, e5 ^( {$ Q引述一下 簡短的程式
) e( D" T6 ]% f3 L; C       for(i = 0; .. .. ..) begin. _/ f. D" C5 n8 t/ b7 R& o' Z0 n
        ... ...
  J. o- C3 T* b8 V! {       transfer_bulk_OUT(address, endpt, exp_bytecount, 1, Status);# G) o! s& ?9 p" E
       if (Status == MYNAK)
! W- t) t7 ?% y          printstatus(Status, MYNAK);6 f8 h  k5 I7 N
       else
8 I, z8 w  L5 O4 f* i" w+ r          check_udc_if_hshk(1'b1, 1'b1);
# b5 M- l. r8 m' @- o1 q       #5000;
$ C' G- C2 ?/ t; f    if(i == 1)  begin
" P/ u& y% g) s+ m        #140_000;
* i3 M% q) {, b$ g  S     z_fix_tasks;                        <= 在此部份想要添加子程式進來  可以這樣添加嗎?5 W& b% a# Y8 k- ~0 z
    end9 d* T" j. x2 r
end
作者: masonchung    時間: 2007-4-18 11:47 PM
只要在initial 或 always的 block內 呼叫 TASK 即可以用吧
作者: greatsky    時間: 2007-4-20 05:29 PM
標題: 回復 #1 greatsky 的帖子
自己回覆一下好了!- d/ m9 k2 [5 D2 F: h

1 T; x& X  h0 ~  j" \我之前不解的地方是在 書本上所指的 task語法範例會包含輸入/輸出
' B5 m0 r* O+ C) I2 yex: , {% `* ]. R6 r, G# {% T
input    clk,a,b,c;; Z4 z* A1 Y; J& y8 w' q5 Z
output  d_out;
$ D/ @2 [0 n7 X4 W5 D8 u2 T7 v4 C, P: J% J" }/ c
reg      d;
# ^* n2 |6 k- ?( e% falways (posedge clk) begin
/ p4 m. A9 P. n1 o6 `" G       temp_task(a,b,c);6 ~/ @: k* m7 L
       d_out = ~c;
2 U" m- c  [6 p) f  o% l; X1 c# W+ kend# Q* ?7 }& K4 L( x/ u- l# r3 ?4 ?

( i2 x8 a1 g* q& j3 q# G1 W& G. ]  task temp_task;
1 w& h/ h& I9 x) c1 g     input  x,y;
+ y8 x2 u) Z+ r- B9 y2 d     output  z;) Q- H' e" I1 K2 H0 [9 x
   
7 h+ o( n8 w& R$ L- w     reg z;+ ^5 b% }7 O% c6 @. }! F
         z = x + y;! w! ?5 `/ d4 [" S. [; D" p9 S
  endtask
& R' W: \3 V- j. Q1 F
' P" a, u: ~: y2 l5 Y7 n5 J# j1 k那我的情況,主要是只做單純的task 沒有in / out
9 R+ }( j% ]" z8 `  K所以直接在simulation中加入task's name(ex:temp_task). S3 M( r4 f; b
等到程式直接執行到該行就會進入到指定的task中,執行程式..) a9 e/ c. l* O% o- \0 D. a. S4 F
9 l, S4 m$ n8 l: o- B9 L
這個應該是蠻基本的...以前沒用過,在發問時不確定是不是能這麼做,編譯時一直出現Error,害我以為這樣會不能執行..Orz
作者: stanlly9    時間: 2007-11-7 11:13 AM
ㄝ都,雖然年代久遠不過還是回答一下@@
7 z( M- M/ L! o* L' G9 H# ]9 u5 m答案是可以的
3 C" @, F, _( A' O: t4 S1 ~+ ptask也可以不使用local variable
% C6 G) N' w9 Y直接也可以對golbal variable進行更動) w* y& f/ a2 h- |$ |) O6 I$ t
但是這個task的動作內容必須在同一個endmudule之內才可以。




歡迎光臨 Chip123 科技應用創新平台 (http://www.chip123.com/) Powered by Discuz! X3.2