SV
参考:IEEE Std 1800-2017 (Revision of IEEE Std 1800-2012)
shall : 必須、should : 推奨、may : 許容、can : 可能
構文定義中の書式
太字:予約語、演算子、区切り文字
| (縦棒) : 複数から選択
[ ] (角括弧) : 省略可能項目
{ } (中括弧) : 0回以上の繰り返し
https://insights.sigasi.com/tech/systemverilog.ebnf/
Source text ( Library source text )
library_text
library_description
library_declaration
include_statement
file_path_spec
Source text ( SystemVerilog source text )
source text
description
module_nonansi_header (non-ansi)
module_ansi_header => こちら
module_declaration => こちら
module_keyword
interface_declaration
interface_nonansi_header
interface_ansi_header
program_declaration
program_nonansi_header
program_ansi_header
checker_declaration
class_declaration
interface_class_type
interface_class_declaration
interface_class_item
interface_class_method
package_declaration
timeunits_declaration
Module parameters and ports
parameter_port_list => こちら
parameter_port_declaration => こちら
list_of_ports (non-ansi)
list_of_port_declarations => こちら
port_declaration
port (non-ansi)
port_expression
port_reference
port_direction => こちら
net_port_header => こちら
variable_port_header => こちら
interface_port_header => こちら
ansi_port_declaration => こちら
Module items
Configuration source text
configuration_declaration
design_statement
config_rule_statement
default_clause
inst_clause
inst_name
cell_clause
liblist_clause
use_clause
Interface items
interface_or_generate_item
extern_tf_declaration
interface_item
non_port_interface_item
Program items
program_item
non_port_program_item
program_generate_item
Checker items
checker_port_list
checker_port_item
checker_port_direction
checker_or_generate_item
checker_or_generate_item_declaration
checker_generate_item
Class items
class_item
class_property
class_method
class_constructor_prototype
class_constraint
class_item_qualifier
property_qaulifier
random_qaulifier
method_prototype
class_constructor_declaration
Constraints
constraint_declaration
constraint_block
constraint_block_item
solve_before_list
constraint_primary
constraint_expression
uniqueness_constraint
constraint_set
dist_list
dist_item
dist_weight
constraint_prototype
constraint_prototype_qaulifier
extern_constraint_declaration
identifier_list
Package items
package_item
package_or_generate_item_declaration => こちら
anonymous_program
anonymous_program_item
Declarations
Declaration types
Module parameter declarations
Port declarations
inout declaration
input_declaration
output_declaration
interface_port_declaration
ref_declaration
Type declarations
Declaration data types
Net and variable types
casting_type
data_type => こちら
data_type_or_implicit => こちら
implicit_data_type
enum_base_type => こちら
enum_name_declaration => こちら
class_scope
class_type
integer_type
integer_atom_type
integer_vector_type
non_integer_type
net_type => こちら
net_port_type => こちら
variable_port_type => こちら
var_data_type
siging
simple_type
struct_union_member => こちら
data_type_or_void => こちら
struct_union => こちら
type_reference
Strengths
drive_strength
strength0
strength1
charge_strength
Delays
delay3
delay2
delay_value
Declaration lists
list_of_defparam_assignments
list_of_genvar_identifiers
list_of_interface_identifiers
list_of_net_decl_assignments => こちら
list_of_param_assignments
list_of_port_identifiers
list_of_udp_port_identifiers
list_of_specparam_assignments
list_of_tf_variable_identifiers
list_of_type_assignments
list_of_variable_decl_assignments => こちら
list_of_variable_identifiers
list_of_variable_port_identifiers
Declaration assignments
Declaration ranges
unpacked_dimension
packed_dimension
associative_dimension
variable_dimension => こちら
queue_dimension
unsized_dimension
Function declarations
function_data_type_or_implicit
function_declaration
function_body_declaration
function_prototype
dpi_import_export
dpi_spec_string
dpi_function_import_property
dpi_task_import_property
dpi_function_proto
dpi_task_proto
Task declarations
task_declaration
task_body_declaration
tf_item_declaration
tf_port_list
tf_port_item
tf_port_direction
tf_port_declaration
task_prototype
Block item declarations
block_item_declaration
overload_declaration
overload_operator
overload_proto_formals
Interface declarations
modport_declaration
modport_item
modport_ports_declaration
modport_clocking_declaration
modport_simple_port_declaration
modport_simple_port
modport_tf_ports_declaration
modport_tf_port
import_export
Assertion declarations
concurrent_assertion_item
concurrent_assertion_statement
assert_property_statement
assume_property_statement
cover_property_statement
expect_property_statement
cover_sequence_statement
restrict_property_statement
property_instance
property_list_of_arguments
property_actual_arg
assertion_item_declaration
property_declaration
property_port_list
property_port_item
property_lvar_port_direction
property_formal_type
property_spec
property_expr
property_case_item
sequence_declaration
sequence_port_list
sequence_port_item
sequence_lvar_port_direction
sequence_formal_type
sequence_expr
cycle_delay_range
sequence_method_call
sequence_match_item
sequence_instance
sequence_list_of_arguments
sequence_actual_arg
boolean_abbrev
sequence_abbrev
consecutive_repetition
non_consecutive_repetition
goto_repetition
const_or_range_expression
cycle_delay_const_range_expression
expression_or_dist
assertion_variable_declaration
let_declaration
let_identifier
let_port_list
let_port_item
let_formal_type
let_expression
let_list_of_arguments
let_actual_arg
Covergroup declrations => こちら
covergroup_declaration
coverage_spec_or_option
coverage_option
coverage_spec
coverage_event
block_event_expression
hierarchical_btf_identifier
cover_point
bins_or_empty
bins_or_options
bins_keyword
trans_list
trans_set
trans_range_list
trans_item
repeat_range
cover_cross
list_of_corss_items
cross_item
cross_body
cross_body_item
bins_selection_or_option
bins_selection
select_expression
select_codition
bins_expression
covergroup_range_list
covergroup_value_range
with_covergroup_expression
set_covergroup_expression
integer_covergroup_expression
cross_set_expression
covergroup_expression
Primitive instances
Primitive instantiaion and instances (省略)
Primitive strengths (省略)
Primitive terminals (省略)
Primitive gate and switch types (省略)
Instantiations
Instantiation
Module instantiation
module_instantiation => こちら
parameter_value_assignment => こちら
list_of_parameter_assignments => こちら
odered_parameter_assignment => こちら
named_parameter_assignment => こちら
hierachical_instance => こちら
name_of_instance => こちら
list_of_port_connections => こちら
ordered_port_connection => こちら
named_port_connection => こちら
Interface instantiation
interface_instantiation
Program instantiation
program_instantiation
Checker instantiation
checker_instantiation
list_of_checker_port_connection
ordered_checker_port_connection
named_checker_port_connection
Generated instantiation
generate_region
loop_generate_construct
genvar_initialization
genvar_iteration
conditional_generate_construct
if_generate_construct
case_geneate_construct
case_generate_item
generate_block
generate_item
UDP declaration and instantiation (省略)
Continuous assignment and net alias statements
Procedual blocks and asignments
initial_construct
always_construct
always_keyword
final_construct
blocking_assginment
operator_assignment
assignment_operator
nonblocking_assignment
procedual_continuous_assignment
variable_assignment => こちら
Parallel and sequential blocks
action_block
seq_block
par_block
join_keyword
Statements
statement_or_null
statement
statement_item
function_statement
function_statement_or_null
variable_identifiler_list
Timing control statement
procedual_timing_control_statement
delay_or_event_control
delay_control
event_control
event_expression
procedual_timing_control
jump_statement
wait_statement
event_trigger
disable_statement
Conditional statements
coditional_statement
unique_priority
cond_predictable
expression_or_cond_pattern
cond_patter
Case statements
case_statement
case_keyword
case_expression
case_item
case_pattern_list
case_inside_item
case_item_expression
randcase_statement
randcase_item
open_range_list
open_value_range
Patterns
pattern
assignment_pattern
structure_pattern_key
array_pattern_key
assignment_pattern_key
assignment_pattern_expression
assignment_pattern_expression_list
constant_assignment_pattern_expression
assignment_pattern_net_lvalue
assignment_pattern_variable_lvalue
Loop statements
loop_statement
for_initialization
for_variable_declaration
for_step
for_step_assignment
loop_variables
Subroutine_call_statements
subroutine_call_statement
Assertion statements
assertion_item
deferred_immediate_assertion
procedural_assertion_statement
immediate_assertion_statement
simple_immediate_assertion_statement
simple_immediate_assert_statement
simple_immediate_assume_statement
simple_immediate_cover_statement
deferred_immediate_assertion_statement
deffered_immediate_assert_statement
deferred_immediate_assume_statement
deferredimmediate_cover_statement
Clocking block
clocking_declaration
clocking_event
clocking_item
default_skew
clocking_direction
list_of_clocking_decl_assign
clocking_decl_assign
clocking_skew
clocking_drive
cycle_delay
clockvar
clockvar_expression
Randsequence
randsequence_statement
production
rs_rule
rs_prduction_list
weight_specification
rs_code_block
rs_prod
prduction_item
rs_if_else
rs_reqpeat
rs_case
rs_case_item
Specify section (省略)
Expressions
Concatenations
concatenation
constant_concatenation
constant_mutiple_concatenation
constant_multiple_concatenation
module_path_concatenation
module_path_multiple_cocnatenation
streaming_concatenation
stream_operator
slice_size
stream_concatenation
stream_expression
array_range_expression
empty_queu
Subroutine calls
constant_function_call
tf_call
system_tf_call
subroutine_call
function_subroutine_call
list_of_arguments
method_call
method_call_body
bjuild_in_method_call
array_manipulation_call
randomize_call
method_call_root
array_nethod_name
Expressions
inc_or_dec_expression
conditional_expression
constant_expression
constant_mintypmax_expression
constant_param_expression
param_expression
constant_range_expression
constant_part_select_range
constant_range
constant_indexed_range
expression
tagged_union_expression
inside_expression
value_range
mintypmax_expression
module_path_conditional_expression
module_path_expression
mldule_path_mintypmax_expression
part_select_range
indexed_range
genvar_expression
Primaries
constant_primary
module_path_primary
primary
class_qualifier
range_expression
primary_literal
time_literal
time_unit
implicit_class_handle
bit_select
select
nonrange_select
constant_bit_select
constant_select
constant__cast
constant_let_expression
cast
Expression left-side values
net_lvalue
variable_lvalue
nonrange_variable_lvalue
Operators
unary_operator
binary_operator
inc_or_dec_operator
unary_module_path_operator
binary_module_path_operator
Numbrs
number
integral_number
decimal_number
binary_number
octal_number
hex_number
sign
size
non_zero_unsigned_number
real_number
fixed_point_number
exp
unsigned_number
binary_value
octal_value
hex_value
decimal_base
binary_base
octal_base
hex_base
non_zero_decimal_digit
decimal_digit
binary_digit
octal_digit
hex_digit
x_digit
z_digit
unbased_unsized_literal
Strings
string_literal
General
Attributes (省略)
Comments (省略)
Identifiers (省略)
Whaite space(省略)
- $fsdbDumpfile("aaaa.fsdb");
- $fsdbDumpvars(0, top);
- @event
- {N{a}}: aをN個並べる
- $test$plusargs("ARG")
- if ( $value$plusargs("HOGE=%d",a) )
SystemVerilog
void' (<func>)
返り値を使わない関数の呼び出し
$random, $urandom
---------------------------------------------------------------------------------------------------
- PLI
VPLI (Verilog Procedual Interface
http://www.ece.umd.edu/class/enee359a/verilog.tutorial.pdf
$cast()
cb = callback
--------------------------------
repeat(n) wait( ); #100; => wait()をn回
---------------------------------
ask
automatic (virtualと同様。ローカル変数は共用されない)
fork .. join_any/join_none で同一 task が目的になるとき?
static
virtual (クラス内のtaskのみ使用可能)
super.new(); は new() の最初に呼ばないといけない
-
task の中身 <= initial, 別の task から呼べる
task の定義は concurrent 内に書く
即時アサーション
event e;
トリガをモニタするタスク
@(posedge t) #100 ->e;
アサーションを実行するタスク
@(e) assert(org == dest);
event
e.triggered
-