The class parameter of Env and VSqr and VSeq have to be same

Because, Vsqr and Vseq have reference pointer of Env.
If each parameter are not same, compile error occurs.
2016-11-25 : Work-Product-Verification : コメント : 0 : トラックバック : 0
Pagetop

検証にオールペア法を使おう

元々実機評価で試行回数に制約がある中で、できるだけ少ない回数で効果的な確認を行えるということで使われています。

ありがたいことに、Pict / Pict Master という無償ツールがあります。

参照:
http://s.ameblo.jp/pictmaster/entry-10104315679.html
2016-09-28 : Work-Product-Verification : コメント : 0 : トラックバック : 0
Pagetop

uvm_component と uvm_object を把握しておこう

component がインスタンス、object がデータの基本クラスになります。

各 phase で run_phase に関してはブレークダウンした各 phase が定義されています。

run_phase のみ task で時間の概念があります。

reference:
https://www.vmmcentral.org/uvm_vmm_ik/files3/base/uvm_component-svh.html
https://www.vmmcentral.org/uvm_vmm_ik/files3/base/uvm_object-svh.html
http://cluelogic.com/2014/08/uvm-tutorial-for-candy-lovers-phasing/
https://www.vmmcentral.org/uvm_vmm_ik/files3/seq/uvm_sequence_base-svh.html
2016-09-02 : Work-Product-Verification : コメント : 0 : トラックバック : 0
Pagetop

Grasp basic for UVM Register Layer Classes

uvm_reg_block have instance of uvm_reg(s) and uvm_reg_map.
uvm_reg have instance of uvm_reg_field.

uvm_reg_block have create_reg function and create_reg_map function.
some reg_map are selected by set_default_map function.
reg_map have set_sequencer() to connect between sequencer and adapter.

use following method for write.
- get_reg_by_offset()
- write()
- predict()

use following method for read.
- get_reg_by_offset()
- read()
or
- mirror(.check(UVM_CHECK)) and get()
2016-09-01 : Work-Product-Verification : コメント : 0 : トラックバック : 0
Pagetop

Let's grasp UVM macro

UVM frequently use macro are as follows.


class name is registered by `uvm_component/object_utils or `uvm_component/object_param_utils.
class name ::type_id::create("instance name", this) is used for class contract.

uvm_config_db #() ::set(this, path, instance, value) is used for instance parameter setting.

p_sequencer is decided by `uvm_declare_p_sequencer
$cast(pointer definition, target instance) is used for pointer making.

sequence is passed from virtual sequence to virtual sequencer by `uvm_do_on_with
another class function is called by `uvm_do_callbacks

using virtual sequence is changed in each test scenario.

virtual means "Bundle".


2016-08-18 : Work-Product-Verification : コメント : 0 : トラックバック : 0
Pagetop

Let's grasp UVM basic structure

UVM basic structure is as follows.


user_test_case instantiating user_test and user_virtual_sequence

user_test instantiating virtual_sequencer <- test
virtual_sequencer instantiating pointer1 of env
test instantiating env
env instantiating agent
agent instantiating sequencer and driver and monitor
sequencer and driver using sequence_item

user_virtual_sequence <- virtual_sequence
virtual_sequence instantiating pointer2 of pointer1 and sequence
sequence using sequence_item and having body() and objection


user_test is test environment instance.
user_virtual_sequence is test case scenario.

Most important function, sequencer and driver connection is defined in basic class.
User use reference of sequencer and pass sequence to sequencer in user virturl sequence.
2016-08-04 : Work-Product-Verification : コメント : 0 : トラックバック : 0
Pagetop

SystemVerilog で複数インスタンスに個別のパラメータ設定をする場合は parameter array と defparam を使おう

Loop generate constructs の外であらかじめ parameter array に固定文字列を用意しておくのがポイントです。


parameter string P_HOGE [SIZE-1:0] = {"hoge0.txt", "hoge1.txt"};
for (genvar i = 0; i < SIZE; i++) begin : pa
defparam topology[i].HOGE_NAME = P_HOGE[i];
end


reference:
http://stackoverflow.com/questions/23507629/parameter-array-in-verilog
2016-08-02 : Work-Product-Verification : コメント : 0 : トラックバック : 0
Pagetop

SystemVerilog で複数インスタンスは Loop generate constructs を使おう

genvar を変数で使います。
インスタンスは topology[0].u_m となり、ラベル名の配列で1階層下げられます。
ほぼモジュール扱いになりますので、for の中は何でも書けます。


for (genvar i = 0; i < SIZE; i++) begin : topology
m u_m();
end


reference:
http://jz5.jp/2013/11/19/verilog-systemverilog-loop-generate/
2016-08-02 : Work-Product-Verification : コメント : 0 : トラックバック : 0
Pagetop

リマップ無しで実行プログラムを切り替えよう

通常デフォルトの vector table は address 0 ですが、例えばCortexM3では、VTOR(0xE000ED08) レジスタでそれを変える事ができます。

- 通常の切り替え

// Update stack pointer from remapped code vector table.
movs r0, #0
ldr r1, [r0]
mov sp, r1
// Load remapped reset handler and jump to the remapped code.
ldr r0, [r0, #4]
bx r0


- VTORを使った切り替え

// Set the vector table address to user code address.
ldr r0, =USER_CODE_ADDRESS
ldr r1, =0xe000ed08
str r0, [r1]
// Update stack pointer from user code vector table.
ldr r1, [r0]
mov sp, r1
// Load user code reset handler and jump to the user code.
ldr r0, [r0, #4]
bx r0


参照:
http://markdingst.blogspot.jp/2012/06/make-own-bootloader-for-arm-cortex-m3.html
2016-07-29 : Work-Product-Verification : コメント : 0 : トラックバック : 0
Pagetop
« 前のページ  ホーム  次のページ »

プロフィール

zive

Author:zive
大阪在住、男

ブログ検索

月別アーカイブ

FC2カウンター