コンテンツにスキップ

SystemVerilog

Xuất xứ: フリー bách khoa sự điển 『ウィキペディア ( Wikipedia ) 』
SystemVerilog
パラダイム ハードウェア ghi lại ngôn ngữ( ハードウェア ghi lại ngôn ngữ はプログラミング ngôn ngữではない )
Lên sân khấu thời kỳ 2002 năm(2002)
Mới nhất リリース IEEE 1800-2017/2018 năm 2 nguyệt 21 ngày(6 năm trước )(2018-02-21)
Hình phó け Nhược いTĩnh hình phó け
Ảnh hưởng を chịu けた ngôn ngữ Verilog
拡 trương tử .sv
テンプレートを tỏ vẻ

SystemVerilogは,ハードウェア ghi lại ngôn ngữVerilogHDLを拡 trương した ngôn ngữ で, chủ に kiểm chứng に quan する cơ năng が拡 trương ・ thống hợp されている. 2002 năm にAccelleraに đối して Superlog ngôn ngữ を gửi phó したことで sinh まれた[1].Kiểm chứng cơ năng の bộ phận はシノプシスが cung cấp した OpenVera に cơ づいている. 2005 năm, SystemVerilog はIEEEStandard 1800-2005 として chuẩn hoá された[2].

Toàn thể cấu thành

[Biên tập]

SystemVerilog は Verilog-2005 の 拡 trương であり, cơ năng に thượng vị trao đổi となっている. Dưới では, Verilog-2001 から SystemVerilog で拡 trương した bộ phận について giải thích する. Verilog-2001 と の chung bộ phận はVerilogを tham chiếu.

Verilog HDLと cùng dạng, そ の cơ năng は,

  • Thiết kế cơ năng -Điện tử đường vềおよびシミュレータで lợi dụng khả năng
  • Kiểm chứng cơ năng - シミュレータで, テストやデバッグ khi に lợi dụng

に đại đừng できる.

Nói lý lẽ hợp thành

[Biên tập]

Verilog HDL cùng dạng, ど の cơ năng がHợp thànhKhả năng で, ど の cơ năng が không có khả năng かは thật trang thứ tự であり ngôn ngữ マターではない. Lệ えば Altera の Quartus II 11.0 では, xài chung thể はできないが, cấu tạo thể は nói lý lẽ hợp thành khả năng である[3].

Thiết kế cơ năng

[Biên tập]

ここでは, chủ に,Nói lý lẽ hợp thànhKhả năng である khả năng tính が cao いと tư われる vật を thuật べる ( trước thuật の ように thật trang thứ tự であり ngôn ngữ マターではないため ).

Tân たなデータ hình

[Biên tập]

Nhiều lần nguyên cật め込み xứng liệtにより, Verilog の "registers" と "memories" を thống hợp 拡 trương した:

reg[1:0][2:0]my_var[32];

Vốn dĩ の Verilog では変 vài tên の tả には một lần nguyên の tuyên ngôn しかできなかった. SystemVerilog は tùy ý の cật め込み thứ nguyên を chỉ định khả năng である. Cật め込み xứng liệt hình の 変 số には số nguyên số học thật thể を 1:1 でマップする. Thượng nhớ の lệ では,my_varの các yếu tố は6ビット の số nguyên を biểu す. Danh trước の phía bên phải にある thứ nguyên ( lệ では32 ) は cật め込み hình でない thứ nguyên である. Verilog-2001 と cùng dạng, cật め込み hình でない thứ nguyên は tùy ý の thứ nguyên の chỉ định が khả năng である.

Liệt cử データ hìnhにより, số trị thật thể に ý vị の ある danh trước をつけることが khả năng となった. Liệt cử hình で tuyên ngôn された変 số は, hắn の liệt cử hình とは cast なしで đại nhập できない. これはパラメータには đương てはまらない. Verilog-2005 で の liệt cử hình の thật trang に hợp わせたためである.

typedefenumreg[2:0]{
RED,GREEN,BLUE,CYAN,MAGENTA,YELLOW
}color_t;

color_tmy_color=GREEN;

こ の ように, thiết kế giả は cơ となる số học hình ( こ の trường hợpreg [2:0]) を chỉ định し, そ の trị に danh trước を phó ける. メタ trị X と Z を sử うこともでき, bất chính trạng thái を biểu す の に sử う.

Tân しい số nguyên hình:SystemVerilog ではbyte,shortint,int,longintという nhị trị thống hợp hình を định nghĩa しており, それぞれ8ビット/16ビット/32ビット/64ビットである.bitHình は không chừng trường の nhị trị hình であり,regと tựa たような động きをする. Nhị trị hình では reg では sử えるメタ trị X と Z が sử えない. こ の ため, シミュレーション の cao tốc hóa を chờ mong する. Verilog-2001 にもある integer と time はそ の まま bốn trị が sử える.

Di động số lẻ hình:real (64ビット)に thêm えて, shortreal (32ビット)を thêm vào.

Cấu tạo thểXài chung thểC ngôn ngữと cùng dạng の động きをする. SystemVerilog ではこれらにCật め込み hìnhThuộc tính を dẫn vào し, cật め込み hình xứng liệt の ビット liệt に cấu tạo thể や xài chung thể を 1:1 で đối ứng させることができる:

typedefstructpacked{
bit[10:0]expo;
bitsign;
bit[51:0]mant;
}FP;

FPzero=64'b0;

Unique/priority if/case

[Biên tập]

Nhập れ tử になったifcaseVăn において,uniqueThuộc tính を chỉ định することで tất ず1つ の phân kỳ ( case ) だけが thật hành されることを chỉ thị できる ( どれも thật hành できない trường hợp はエラーとなる ). つまり, các ケースは song hành して thật hành khả năng である.ifcaseVăn で のpriorityThuộc tính は điều kiện を lần lượt bình 価していくことを kỳ す. これまでアノテーションsynopsys full_case parallel_caseを sử って chỉ thị していたことを chính thức にキーワードとして chỉ thị できるようになった の である.

Tay 続き ブロック

[Biên tập]

Verilog のalwaysブロックに thêm え, SystemVerilog では thiết kế cấu tạo をより ý thức した tay 続きブロックを tân たに cung cấp している. これによってEDAツールはどういう động tác が cầu められている の かを chính xác に nắm chắc できるようになる.

always_combブロックは tổ hợp せ nói lý lẽ を sinh thành する. シミュレータはブロック nội の văn からセンシティビティ・リストを đề cử する:

always_combbegin
tmp=b*b-4*a*c;
no_root=(tmp<0);
end

always_ffブロックは trình tự nói lý lẽ ( FF đường về ) を đề cử する:

always_ff@(posedgeclk)
count<=count+1;

always_latchブロックはラッチを đề cử する. こ の trường hợp もセンシティビティ・リストはコードから đề cử できる:

always_latch
if(en)q<=d;

Kiểm chứng cơ năng

[Biên tập]

Dưới の kiểm chứng cơ năng はNói lý lẽ hợp thànhKhông có khả năng であることが nhiều いと tư われる. Mục đích としては,シミュレーターDùng に拡 trương khả năng で mềm mại なテストベンチ の sinh thành を chi viện するため の も の である.

Tân たなデータ hình

[Biên tập]

stringデータ hình は tùy ý trường の テキスト văn tự liệt を biểu す.

Thiết kế で sử われる tĩnh xứng liệt に thêm え, SystemVerilog は động xứng liệt, liền tưởng xứng liệt, キューを cung cấp する:

intda[];// động xứng liệt
intda[string];// văn tự liệt をインデックスとする liền tưởng xứng liệt
intda[$];// キュー

initialbegin
da=new[16];// 16 yếu tố を sinh thành
end

Động xứng liệt は phi cật め込み hình の xứng liệt の ように động くが, thượng で kỳ したように động に sinh thành されなければならない. こ の xứng liệt は tất yếu に ứng じてサイズを変 càng できる. Liền tưởng xứng liệt はユーザー chỉ định の キー の hình とデータ hình によるNhị phân thăm dò mộcの ようなも の である. キーによる ám mặc の trình tự phó けがあり, sách tra cứu thức trình tự で đọc み ra すことができる. キューはC++STLにあるdequeHình の cơ năng とほぼ ngang nhau の も の を cung cấp する. Yếu tố の thêm vào や trừ bỏ がキュー の lạng đoan から khả năng である. これら の データ hình は đại quy mô thiết kế で tất yếu となる phục tạp なデータ hình の sinh thành を khả năng とする.

クラス

[Biên tập]

SystemVerilog はオブジェクト chỉ hướng プログラミングモデルも cung cấp する.

SystemVerilog クラスは, 単 một インタフェースモデルである.Javainterfaceの ように số nhiều の インタフェースを sử dụng することはできない. SystemVerilog の クラスは hình をパラメータ hóa でき, C++ のテンプレートの ような cơ năng を cung cấp する. しかし, quan số テンプレートやテンプレート の đặc thù hóa は đối ứng していない.

ポリモーフィズムCơ năng はC++と tựa ている.virtualChỉ định で quan số を thư くことで, đẻ ra hình がそ の quan số の chế ngự を đoạt うことができる.

カプセル hóaとデータ ẩn tế はlocalおよびprotectedというキーワードで thật hiện され, tùy ý の アイテムに chỉ định して ẩn tế できる. デフォルトでは, toàn て の クラス thuộc tính が public である.

SystemVerilog の クラス の インスタンスはnewキーワードで sinh thành する.function newでコンストラクタを định nghĩa できる. SystemVerilog はガベージコレクションもサポートしており, インスタンスを minh kỳ に giải phóng ・ đánh tan する cơ năng はない.

Lệ:

virtualclassMemory;
virtualfunctionbit[31:0]read(bit[31:0]addr);endfunction
virtualfunctionvoidwrite(bit[31:0]addr,bit[31:0]data);endfunction
endclass

classSRAM#(parameterAWIDTH=10)extendsMemory;
bit[31:0]mem[1<<AWIDTH];

virtualfunctionbit[31:0]read(bit[31:0]addr);
returnmem[addr];
endfunction

virtualfunctionvoidwrite(bit[31:0]addr,bit[31:0]data);
mem[addr]=data;
endfunction
endclass

Chế ước loạn số sinh thành

[Biên tập]

Số nguyên thật thể はクラス định nghĩa nội であれ, gì らか の スコープ nội の độc lập した変 số であれ, ある chế ước に cơ づいた loạn số を giả thiết khả năng である. これは kiểm chứng の ためにランダムなシナリオを sinh thành する tế に tiện lợi である.

クラス định nghĩa nội で, tân trang tửrandrandcを chỉ định することで変 số に loạn số を giả thiết する.randcは thuận liệt hình の loạn số を sinh thành する. つまり, cùng じ trị を sinh thành する trước に khả năng な phạm 囲 の toàn て の trị を một hồi り tất ず sinh thành する. Tân trang tử の ない変 số を loạn số hóa しない.

classeth_frame;
randbit[47:0]dest;
randbit[47:0]src;
randbit[15:0]type;
randbytepayload[];
bit[31:0]fcs;
randbit[31:0]fcs_corrupt;

constraintbasic{
payload.sizeinside{[46:1500]};
}

constraintgood_fr{
fcs_corrupt==0;
}
endclass

こ の lệ では,fcsというフィールドを loạn số hóa していない. Thật tế, これはCRCSinh thành の tính toán に quan するコードであり,fcs_corruptフィールドはFCSエラーを phát sinh する の に sử う. 2つ の chế ước により,イーサネットの フレーム の kiểm tra をしようとしていることがわかる. Chế ước は tuyển 択 に áp dụng khả năng で, thượng の lệ では壊れたフレームを sinh thành する の に chế ước tuyển 択 cơ năng を dùng いる. Chế ước には phục tạp なも の も chỉ định でき, 変 số gian の quan hệ や hàm ý や sào り phản しを chỉ định できる. SystemVerilog の chế ước giải đọc cơ năng は giải があれば tất ずそれを thấy つけることを cầu められるが, giải の thăm dò にかかる thời gian を bảo đảm しない.

Cho thấy

[Biên tập]

SystemVerilog はCho thấyGhi lại ngôn ngữ を nội bao しており,Property Specification Languageに tựa ている. Cho thấy は, các khi điểm で の thiết kế thượng の đặc tính を chiếu hợp する の に sử う.

SystemVerilog の cho thấy はsequence( シーケンス ) とproperty( thuộc tính ) から cấu thành される. Thuộc tính はシーケンス の thượng vị khái niệm であり, シーケンスは thuộc tính としても tráp うことが khả năng である. ただし, それが tất ずしも hữu ích というわけではない.

シーケンスには, khi tương tính toán tử を sử ったブーリアン の thức を chỉ định する. Nhất も単 thuần な khi tương tính toán tử##は liên kết を ý vị する:

sequenceS1;
@(posedgeclk)
req##1gnt;
endsequence

こ の シーケンスでは,gntTín hiệu がreqTín hiệu が High となった1クロック sau に High となることを cho thấy している. こ の ようにシーケンス hình の cho thấy は thường にクロックと đồng kỳ している.

これ bên ngoài にも dạng 々な khi tương tính toán tử がある. これらを sử うとコンポーネント gian の thiết kế thượng の phục tạp な quan hệ を biểu hiện することができる.

1つ の cho thấy は, あるシーケンスや thuộc tính の trạng thái を liền 続 に giám thị し, cho thấy に ghi lại したことに phản する động tác をするとエラーとなる. Thượng nhớ の シーケンスはreqが Low であった trường hợp に thất bại する.gntに続いてreqが High になるということを chính xác に biểu hiện するには thuộc tính cho thấy が tất yếu となる:

propertyreq_gnt;
@(posedgeclk)
req|=>gnt;
endproperty

assert_req_gnt:assertproperty(req_gnt)else$error("req not followed by gnt.");

こ の lệ ではHàm ýTính toán tử|=>を sử っている. Hàm ý の tả biên はantecedent( đi trước hạng mục công việc ) と hô ばれ, hữu biên はconsequent( kết quả hạng mục công việc ) と hô ぶ. Hàm ý の bình 価は, まず đi trước hạng mục công việc を sào り phản し bình 価することから bắt đầu する. Đi trước hạng mục công việc が thành công すると, kết quả hạng mục công việc を bình 価する. Cho thấy toàn thể として thành công するかどうかは kết quả hạng mục công việc の bình 価 kết quả に sống nhờ vào nhau する. こ の lệ では kết quả hạng mục công việc はreqが High になるまで bình 価せず,gntがそ の 1クロック sau にHighにならない trường hợp にこ の thuộc tính cho thấy に thất bại する.

Cho thấy の ほかに, SystemVerilog は thuộc tính の “仮 định; assumptions” と “カバレッジ; coverage” に đối ứng している. 仮 định とは, hình thức nói lý lẽ chứng minh ツールで tất ず thật となる điều kiện を ghi lại するも の である. Cho thấy は thật であることが chứng minh されなければならない thuộc tính を chỉ định する. シミュレーションでは, cho thấy と仮 định は song hành して kiểm tra する. Thuộc tính の カバレッジは, cho thấy が chính xác に thiết kế を giám thị しているかどうかを kiểm chứng するため の も の である.

カバレッジ

[Biên tập]

ハードウェア kiểm bảng tường trình ngữ におけるカバレッジとは, シミュレーション nội の イベントをサンプリングして thống kê tình báo を thâu tập することを chỉ します. カバレッジを lợi dụng して bình 価 đối tượng デバイス(DUT)が chính しく cơ năng しているかどうかをある trình độ chính xác に phán định できる. これは,ソフトウェアテストでコードが thật hành された cắt hợp の chừng mực であるコード lưới suất( code coverage ) とは dị なる khái niệm であることに chú ý されたい. Cơ năng カバレッジでは, tất yếu とする thiết kế thượng の ngung 々まで kiểm chứng していることを bảo đảm する.

SystemVerilog の カバレッジグループは quan liền する変 số の trị のSố độ phân bốの データベースを sinh thành する. クロスカバレッジを định nghĩa することもでき, số nhiều の 変 số の trị の tổ hợp せ (Thẳng tích tập hợp) の số độ phân bố を sinh thành する.

サンプリングイベントはサンプルを áp dụng するタイミングを chế ngự する. サンプリングイベントは Verilog の イベントでもよいし, ブロック の xuất nhập り khẩu でも, カバレッジグループ のsampleメソッド hô び ra しでもよい. ただし, ý vị があるデータだけをサンプル áp dụng するよう chú ý しなければならない.

Lệ:

classeth_frame;
covergroupcov;
coverpointdest{
binsbcast[1]={48'hFFFFFFFFFFFF};
binsucast[1]=default;
}
coverpointtype{
binslength[16]={[0:1535]];
binstyped[16]={[1536:32767]};
binsother[1]=default;
}
psize:coverpointpayload.size{
binssize[]={46,[47:63],64,[65:511],[512:1023],[1024:1499],1500};
}

sz_x_t:crosstype,psize;
endgroup
endclass

こ の lệ では, kiểm chứng giả はブロードキャスト の フレームとユニキャスト の フレームに chú mục し, đặc に size/type フィールドとペイロードサイズに chú mục している. ペイロードサイズ の coverpoint には chú mục している giới hạn trị đàn を phản ánh していて, lớn nhất フレームと nhỏ nhất フレームを hàm んでいる.

Đồng kỳ

[Biên tập]

Phục tạp なテスト hoàn cảnh では, lại lợi dụng khả năng な kiểm chứng コンポーネント đàn が lẫn nhau に thông tín しながら động tác する. SystemVerilog は thông tín と đồng kỳ の ため の 2つ の プリミティブを dụng ý している.mailboxmutexである. mutex は đếm hết hìnhセマフォの ようなも の である. mailbox はFIFOの một loại である. mailbox は hình をパラメータ hóa でき, chỉ định された hình の み thông すようにできる. これら の オブジェクトはtransactionsの クラスインスタンスであり, kiểm chứng コンポーネントが thật hành する cơ bản thao tác đàn ( lệ えば, フレームを truyền tin するなど ) である.

Tham khảo văn hiến

[Biên tập]
  1. ^Rich, D. “The evolution of SystemVerilog” IEEE Design and Test of Computers, July/August 2003
  2. ^IEEE approves SystemVerilog, revision of Verilog
  3. ^Quartus II Support for SystemVerilog

Phần ngoài リンク

[Biên tập]