13
Bài viết này nhằm hướng dẫn các bạn viết một testbench đơn giản, đồng thời nêu một cấu trúc cơ bản của testbench để các bạn có thể tham khảo. Chú ý, cấu trúc testbench đưa ra không phải là chuẩn (standard) mà chỉ là một đề xuất để các bạn có thể tham khảo và thực hiện. Việc xây dựng một môi trường kiểm tra và tạo ra các testbench cũng là một công việc cần nhiều sáng tạo không kém người thiết kế. Mình cũng rất mong bạn nào có kinh nghiệm chuyên sâu cùng trao đổi chia sẻ để mọi người có thể cùng học hỏi. Phần lớn testbench chứa các thành phần cơ bản sau: Một DUT (Device/Design Under Test) chính là thành phần mà testbench sẽ phải kiểm tra hay chính là thiết kế mà bạn cần kiểm tra. Một tập các kích thích ngõ vào của DUT (DUT Stimulus) Một bộ giám sát để bắt hoặc phân tích ngõ ra của DUT Các kết nối ngõ vào và ngõ ra của DUT với testbench

Cách Viết File Testbench

  • Upload
    roc

  • View
    103

  • Download
    5

Embed Size (px)

DESCRIPTION

Cách viết testbench

Citation preview

Bi vit ny nhm hng dn cc bn vit mt testbench n gin, ng thi nu mt cu trc c bn ca testbench cc bn c th tham kho. Ch , cu trc testbench a ra khng phi l chun (standard) m ch l mt xut cc bn c th tham kho v thc hin. Vic xy dng mt mi trng kim tra v to ra cc testbench cng l mt cng vic cn nhiu sng to khng km ngi thit k. Mnh cng rt mong bn no c kinh nghim chuyn su cng trao i chia s mi ngi c th cng hc hi. Phn ln testbench cha cc thnh phn c bn sau: Mt DUT (Device/Design Under Test) chnh l thnh phn m testbench s phi kim tra hay chnh l thit k m bn cn kim tra. Mt tp cc kch thch ng vo ca DUT (DUT Stimulus) Mt b gim st bt hoc phn tch ng ra ca DUT Cc kt ni ng vo v ng ra ca DUT vi testbench

Cu trc c bn ca ca mt testbench Verilog c th cha cc thnh phn thng gp sau: 1. The timescale directive: Ch dn v t l thi gian m phng timescale 2. Preprocessor Directives: nh ngha cc ch dn tin x l 3. Include Statements: Cc thnh phn c bao gm 4. Parameter definitions: nh ngha cc tham s s dng ni b trong file testbench 5. DUT Input regs: Khai bo kiu reg cho cc ng vo ca DUT (Bt buc) 6. DUT Output wires: Khai bo kiu wire cho cc ng ra ca DUT (Bt buc) 7. DUT Instantiation: Gi DUT (Bt buc) 8. Initial Conditions: To cc iu kin, gi tr khi ng ban u khi bt u m phng 9. Generating Test Vectors: To cc vector test hay cc gi tr kch thch ng vo ca DUT (Bt buc) 10. Debug output: Gim st v debug ng ra ca DUT 11. Self checking: T ng phn tch, so snh v nh gi kt qu kim tra theo mt hoc nhiu tiu ch m testbench t ra. Mnh xin minh ha c th tng thnh phn trn qua mt v d c th. V d ny bn gp trong bi vit v Hiu c bn v cch thc hin kim tra/m phng (Verification/Simulation) mt thit k. Thit k cn c kim tra l mt b m ln 4 bit nh sau:

y chnh l DUT kim tra thit k ny mnh vit mt testbench n gin bao gm 11 thnh phn lit k trn y minh ha. Cc bn ch n cc comment trong file testbench bit on code no thuc v thnh phn no.

Sau y mnh xin gii thch tng thnh phn trong testbench ny. 1. The timescale directive Ch dn v t l thi gian M (verilog):

c t u ca mt file module nh ngha n v thi gian m phng v chnh xc ca thi gian. S u chnh l gi tr ca mt n v thi gian. Tt c cc gi tr thi gian s dng trong testbench s c hiu theo n v ny. S sau chnh l chnh xc c trnh m phng hiu v gi li. Gi tr ny quy nh s ch s l v thi gian sau du phy thp phn s c gi li sau khi gi tr khai bo nhn vi n v thi gian. Vi khai bo timescale trn chng ta xt cc v d sau: #9 a=1b1; //Trnh m phng s ch 9 ns trc khi gn a bng 1 #9.01 a=1b1; //Trnh m phng s ch 9.01 ns #9.001 a=1b1; //Trnh m phng s ch 9 ns v chnh xc ch xc nh n 10 ps tr ln cn s l y ch l 1 ps Mt v d khc, nu khai bo timescale l 10 ns/1 ps #9 a=1b1; //Trnh m phng s ch 90 ns trc khi gn a bng 1 #9.01 a=1b1; //Trnh m phng s ch 90.1 ns #9.001 a=1b1; //Trnh m phng s ch 90.01 ns #9.0001 a=1b1; //Trnh m phng s ch 90.001 ns2. Preprocessor Directives: nh ngha cc ch dn tin x l

Chnh l cc define c khai bo u file testbench v sau timescale. Nh trong testbench v d, ch no s dng bin DELAY s c thay bng gi tr thp phn 10.3. Include Statements: Cc thnh phn c bao gm

Pht biu gi (include) thnh phn file lin quan s dng cc thng s trong file ny cng ging nh trong ngn ng C. File c gi s tr thnh mt phn ca file hin ti. File c gi thng l file cha cc thng s s c s dng chung cho nhiu file khc, thng c hiu l cc hng s ton cc (global constant). Theo nh testbench v d th file c include l file counter_define.h. File ny ch mt thng s l

4. Parameter definitions: nh ngha cc tham s s dng ni b trong file testbench

Tng t define, cc tham s parameter nhm khai bo cc bin thay th cho cc gi tr s c s dng nhiu trong module d dng hiu chnh li khi cn. Thng thng cc gi tr ny l Chu k clock (clock cycle) Thi gian kt thc m phng (finish time) Cc t iu khin hay cc lnh (control word or command) rng ng d liu, ng a ch (data/address width) Nh testbench v d, ch no s dng ENDTIME s c thay th bng gi tr thp phn 400. C th dng sau:

tng t nh vit #400 v c hiu l to tr 400 ns (da trn timescale khai bo) Vy s khc nhau gia khai bo parameter v define (hay nh ngha cc ch dn tin x l - Preprocessor Directives) l g? Vi Preprocessor Directives nh ngha cc ch dn tin x l th Khai bo trc (ngoi) module Thng l bin ton cc (global) C th nh ngha li thng qua dng lnh ca trnh bin dch hay trnh m phng. V d nh trong testbech minh ha, DELAY c nh ngha l 10. Sau khi compile file testbench bng ModelSim, gi tr ny vn c th thay i c sau mi ln chy m phng m khng cn sa file testbench thng qua dng lnh sau

Dng lnh ny yu cu ModelSim compile li file tb_counter.v vi gi tr DELAY c gn bng s thp phn 50.

Vi parameter Khai bo trong module Thng dng cho bin cc b (local) Khng th thay i li thng qua dng lnh ca trnh bin dch hay m phng. Ngha l, mun thay i, bn phi sa gi tr trong file testbench

5. DUT Input regs: Khai bo kiu reg cho cc ng vo ca DUT Cc bin ng vo ca DUT v cc bin c s dng gn gi tr li tn hiu ni chung phi c khai bo kiu reg. V d nh trong testbench minh ha Cc ng vo ca DUT c khai bo l:

6. DUT Output wires: Khai bo kiu wire cho cc ng ra ca DUT Cc bin ng ra ca DUT c khai bo kiu wire. V d nh trong testbench minh ha

7. DUT Instantiation: Gi DUT Khi gi DUT, th t port (th t tn hiu) ca DUT c gi khng quan trng m cc port ch c nhn bit da trn tn (port name). Nhng, cc bn nn s dng cch gi r rng sau

8. Initial Conditions: To cc iu kin, gi tr khi ng ban u khi bt u m phng To iu kin u hay gi tr u cho cc tn hiu hoc trng thi m phng

9. Generating Test Vectors: To cc vector test hay cc gi tr kch thch ng vo ca DUT Li cc tn hiu hay nhm tn hiu theo nhng gi tr v iu kin mong mun thc hin ng mc ch test. li cc tn hiu th chng ta c th li ring, c lp tng tn hiu nh trong testbench v d

hoc chng ta c th gom cc tn hiu li thnh mt vector, sau li vector ny theo nhng gi tr mong mun. V d, hai tn hiu rst_n v enable trong testbench v d c gom li nh sau

10. Debug output: Gim st v debug ng ra ca DUT Ngoi vic m trc tip ca s waveform ca cc trnh m phng xem dng sng ng ra th trong testbench chng ta c th s dng (hay s dng) hai lnh $display, $monitor v $time gi st testbench chy v gi tr ca cc tn hiu. V dinitial begin $display("----------------------------------------------"); $display("----------- SIMULATION RESULT ----------------"); $display("----------------------------------------------"); `ifdef FULL_SIGNAL $monitor ("TIME = %d, clk = %b, rst_n = %b, enable = %b, count = %d,counter_full = %b",$time, clk, rst_n, enable, count, counter_full); `else $monitor("TIME = %d, clk = %b, rst_n = %b, enable = %b, count = %d",$time, clk, rst_n, enable, count); `endif End

Trong : "$time" s tr v gi tr nguyn 64-bit ca thi gian hin ti c tnh theo timescale. "$display" in ra mt chui no ch mt ln duy nht mi khi lnh c gi. "$ monitor" in ra cc chui hay gi tr c khai bo mi khi c s thay i ca mt trong cc tn hiu c lit k trong danh sch hm $monitor. Nh v d trn l clk, rst_n, enable, count v c hoc khng c counter_full (tn hiu ny c hoc khng ph thuc vo define ca bin FULL_SIGNAL).11. Self checking: T ng phn tch, so snh v nh gi kt qu kim tra theo mt hoc nhiu tiu ch m testbench t ra.

Cui cng, sau y l kt qu khi chy testbench m phng trn phn mm ModelSim (quan st ti ca s transcript)