forked from libre-chip/fayalite
Compare commits
8 commits
run-rocq-t
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| cf3e6cfc6b | |||
| ea183eac87 | |||
| 26224abe1c | |||
| 2266315944 | |||
| 7e9d7739fb | |||
| 7516ec3c24 | |||
| 8e4eeef723 | |||
| 402f457c68 |
92 changed files with 9668 additions and 615 deletions
|
|
@ -257,5 +257,6 @@ no_op_fold!(syn::Token![let]);
|
||||||
no_op_fold!(syn::Token![mut]);
|
no_op_fold!(syn::Token![mut]);
|
||||||
no_op_fold!(syn::Token![static]);
|
no_op_fold!(syn::Token![static]);
|
||||||
no_op_fold!(syn::Token![struct]);
|
no_op_fold!(syn::Token![struct]);
|
||||||
|
no_op_fold!(syn::Token![type]);
|
||||||
no_op_fold!(syn::Token![where]);
|
no_op_fold!(syn::Token![where]);
|
||||||
no_op_fold!(usize);
|
no_op_fold!(usize);
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,9 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
Errors, HdlAttr, PairsIterExt,
|
Errors, HdlAttr, PairsIterExt,
|
||||||
hdl_type_common::{
|
hdl_type_common::{
|
||||||
ItemOptions, MakeHdlTypeExpr, MaybeParsed, ParsedField, ParsedFieldsNamed, ParsedGenerics,
|
CustomDebugOptions, CustomDebugTrait, ItemOptions, MakeHdlTypeExpr, MaybeParsed,
|
||||||
SplitForImpl, TypesParser, WrappedInConst, common_derives, get_target,
|
ParsedField, ParsedFieldsNamed, ParsedGenerics, SplitForImpl, TypesParser, WrappedInConst,
|
||||||
|
common_derives, create_struct_debug_impl, get_target,
|
||||||
},
|
},
|
||||||
kw,
|
kw,
|
||||||
};
|
};
|
||||||
|
|
@ -30,6 +31,7 @@ pub(crate) struct ParsedBundle {
|
||||||
pub(crate) fields: MaybeParsed<ParsedFieldsNamed, FieldsNamed>,
|
pub(crate) fields: MaybeParsed<ParsedFieldsNamed, FieldsNamed>,
|
||||||
pub(crate) field_flips: Vec<Option<HdlAttr<kw::flip, kw::hdl>>>,
|
pub(crate) field_flips: Vec<Option<HdlAttr<kw::flip, kw::hdl>>>,
|
||||||
pub(crate) mask_type_ident: Ident,
|
pub(crate) mask_type_ident: Ident,
|
||||||
|
pub(crate) mask_type_name: String,
|
||||||
pub(crate) mask_type_match_variant_ident: Ident,
|
pub(crate) mask_type_match_variant_ident: Ident,
|
||||||
pub(crate) mask_type_sim_value_ident: Ident,
|
pub(crate) mask_type_sim_value_ident: Ident,
|
||||||
pub(crate) match_variant_ident: Ident,
|
pub(crate) match_variant_ident: Ident,
|
||||||
|
|
@ -88,6 +90,8 @@ impl ParsedBundle {
|
||||||
no_runtime_generics: _,
|
no_runtime_generics: _,
|
||||||
cmp_eq: _,
|
cmp_eq: _,
|
||||||
ref get,
|
ref get,
|
||||||
|
custom_debug: _,
|
||||||
|
custom_sim_display: _,
|
||||||
} = options.body;
|
} = options.body;
|
||||||
if let Some((get, ..)) = get {
|
if let Some((get, ..)) = get {
|
||||||
errors.error(get, "#[hdl(get(...))] is not allowed on structs");
|
errors.error(get, "#[hdl(get(...))] is not allowed on structs");
|
||||||
|
|
@ -131,6 +135,7 @@ impl ParsedBundle {
|
||||||
fields,
|
fields,
|
||||||
field_flips,
|
field_flips,
|
||||||
mask_type_ident: format_ident!("__{}__MaskType", ident),
|
mask_type_ident: format_ident!("__{}__MaskType", ident),
|
||||||
|
mask_type_name: format!("MaskType<{}>", ident),
|
||||||
mask_type_match_variant_ident: format_ident!("__{}__MaskType__MatchVariant", ident),
|
mask_type_match_variant_ident: format_ident!("__{}__MaskType__MatchVariant", ident),
|
||||||
mask_type_sim_value_ident: format_ident!("__{}__MaskType__SimValue", ident),
|
mask_type_sim_value_ident: format_ident!("__{}__MaskType__SimValue", ident),
|
||||||
match_variant_ident: format_ident!("__{}__MatchVariant", ident),
|
match_variant_ident: format_ident!("__{}__MatchVariant", ident),
|
||||||
|
|
@ -448,6 +453,7 @@ impl ToTokens for ParsedBundle {
|
||||||
fields,
|
fields,
|
||||||
field_flips,
|
field_flips,
|
||||||
mask_type_ident,
|
mask_type_ident,
|
||||||
|
mask_type_name,
|
||||||
mask_type_match_variant_ident,
|
mask_type_match_variant_ident,
|
||||||
mask_type_sim_value_ident,
|
mask_type_sim_value_ident,
|
||||||
match_variant_ident,
|
match_variant_ident,
|
||||||
|
|
@ -464,11 +470,20 @@ impl ToTokens for ParsedBundle {
|
||||||
no_runtime_generics,
|
no_runtime_generics,
|
||||||
cmp_eq,
|
cmp_eq,
|
||||||
get: _,
|
get: _,
|
||||||
|
custom_debug: _,
|
||||||
|
custom_sim_display,
|
||||||
} = &options.body;
|
} = &options.body;
|
||||||
|
let CustomDebugOptions {
|
||||||
|
type_: custom_debug_type,
|
||||||
|
sim: custom_debug_sim,
|
||||||
|
mask_type: custom_debug_mask_type,
|
||||||
|
mask_sim: custom_debug_mask_sim,
|
||||||
|
} = options.body.custom_debug();
|
||||||
let target = get_target(target, ident);
|
let target = get_target(target, ident);
|
||||||
|
let struct_name = ident.to_string();
|
||||||
let mut item_attrs = attrs.clone();
|
let mut item_attrs = attrs.clone();
|
||||||
item_attrs.push(common_derives(span));
|
item_attrs.push(common_derives(span, false));
|
||||||
ItemStruct {
|
let type_struct = ItemStruct {
|
||||||
attrs: item_attrs,
|
attrs: item_attrs,
|
||||||
vis: vis.clone(),
|
vis: vis.clone(),
|
||||||
struct_token: *struct_token,
|
struct_token: *struct_token,
|
||||||
|
|
@ -476,8 +491,8 @@ impl ToTokens for ParsedBundle {
|
||||||
generics: generics.into(),
|
generics: generics.into(),
|
||||||
fields: Fields::Named(fields.clone().into()),
|
fields: Fields::Named(fields.clone().into()),
|
||||||
semi_token: None,
|
semi_token: None,
|
||||||
}
|
};
|
||||||
.to_tokens(tokens);
|
type_struct.to_tokens(tokens);
|
||||||
let (impl_generics, type_generics, where_clause) = generics.split_for_impl();
|
let (impl_generics, type_generics, where_clause) = generics.split_for_impl();
|
||||||
if let (MaybeParsed::Parsed(generics), MaybeParsed::Parsed(fields), None) =
|
if let (MaybeParsed::Parsed(generics), MaybeParsed::Parsed(fields), None) =
|
||||||
(generics, fields, no_runtime_generics)
|
(generics, fields, no_runtime_generics)
|
||||||
|
|
@ -503,6 +518,9 @@ impl ToTokens for ParsedBundle {
|
||||||
}
|
}
|
||||||
let mut wrapped_in_const = WrappedInConst::new(tokens, span);
|
let mut wrapped_in_const = WrappedInConst::new(tokens, span);
|
||||||
let tokens = wrapped_in_const.inner();
|
let tokens = wrapped_in_const.inner();
|
||||||
|
if custom_debug_type.is_none() {
|
||||||
|
create_struct_debug_impl(&type_struct, &struct_name, None).to_tokens(tokens);
|
||||||
|
}
|
||||||
let builder = Builder {
|
let builder = Builder {
|
||||||
vis: vis.clone(),
|
vis: vis.clone(),
|
||||||
struct_token: *struct_token,
|
struct_token: *struct_token,
|
||||||
|
|
@ -530,9 +548,9 @@ impl ToTokens for ParsedBundle {
|
||||||
mask_type_builder.to_tokens(tokens);
|
mask_type_builder.to_tokens(tokens);
|
||||||
let unfilled_mask_type_builder_ty =
|
let unfilled_mask_type_builder_ty =
|
||||||
mask_type_builder.builder_struct_ty(|_| BuilderFieldState::Unfilled);
|
mask_type_builder.builder_struct_ty(|_| BuilderFieldState::Unfilled);
|
||||||
ItemStruct {
|
let mask_type_struct = ItemStruct {
|
||||||
attrs: vec![
|
attrs: vec![
|
||||||
common_derives(span),
|
common_derives(span, false),
|
||||||
parse_quote_spanned! {span=>
|
parse_quote_spanned! {span=>
|
||||||
#[allow(non_camel_case_types, dead_code)]
|
#[allow(non_camel_case_types, dead_code)]
|
||||||
},
|
},
|
||||||
|
|
@ -543,17 +561,20 @@ impl ToTokens for ParsedBundle {
|
||||||
generics: generics.into(),
|
generics: generics.into(),
|
||||||
fields: Fields::Named(mask_type_fields.clone()),
|
fields: Fields::Named(mask_type_fields.clone()),
|
||||||
semi_token: None,
|
semi_token: None,
|
||||||
|
};
|
||||||
|
mask_type_struct.to_tokens(tokens);
|
||||||
|
if custom_debug_mask_type.is_none() {
|
||||||
|
create_struct_debug_impl(&mask_type_struct, mask_type_name, None).to_tokens(tokens);
|
||||||
}
|
}
|
||||||
.to_tokens(tokens);
|
|
||||||
let mut mask_type_match_variant_fields = mask_type_fields.clone();
|
let mut mask_type_match_variant_fields = mask_type_fields.clone();
|
||||||
for Field { ty, .. } in &mut mask_type_match_variant_fields.named {
|
for Field { ty, .. } in &mut mask_type_match_variant_fields.named {
|
||||||
*ty = parse_quote_spanned! {span=>
|
*ty = parse_quote_spanned! {span=>
|
||||||
::fayalite::expr::Expr<#ty>
|
::fayalite::expr::Expr<#ty>
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
ItemStruct {
|
let mask_type_match_variant_struct = ItemStruct {
|
||||||
attrs: vec![
|
attrs: vec![
|
||||||
common_derives(span),
|
common_derives(span, false),
|
||||||
parse_quote_spanned! {span=>
|
parse_quote_spanned! {span=>
|
||||||
#[allow(non_camel_case_types, dead_code)]
|
#[allow(non_camel_case_types, dead_code)]
|
||||||
},
|
},
|
||||||
|
|
@ -564,17 +585,19 @@ impl ToTokens for ParsedBundle {
|
||||||
generics: generics.into(),
|
generics: generics.into(),
|
||||||
fields: Fields::Named(mask_type_match_variant_fields),
|
fields: Fields::Named(mask_type_match_variant_fields),
|
||||||
semi_token: None,
|
semi_token: None,
|
||||||
}
|
};
|
||||||
.to_tokens(tokens);
|
mask_type_match_variant_struct.to_tokens(tokens);
|
||||||
|
create_struct_debug_impl(&mask_type_match_variant_struct, mask_type_name, None)
|
||||||
|
.to_tokens(tokens);
|
||||||
let mut match_variant_fields = FieldsNamed::from(fields.clone());
|
let mut match_variant_fields = FieldsNamed::from(fields.clone());
|
||||||
for Field { ty, .. } in &mut match_variant_fields.named {
|
for Field { ty, .. } in &mut match_variant_fields.named {
|
||||||
*ty = parse_quote_spanned! {span=>
|
*ty = parse_quote_spanned! {span=>
|
||||||
::fayalite::expr::Expr<#ty>
|
::fayalite::expr::Expr<#ty>
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
ItemStruct {
|
let match_variant_struct = ItemStruct {
|
||||||
attrs: vec![
|
attrs: vec![
|
||||||
common_derives(span),
|
common_derives(span, false),
|
||||||
parse_quote_spanned! {span=>
|
parse_quote_spanned! {span=>
|
||||||
#[allow(non_camel_case_types, dead_code)]
|
#[allow(non_camel_case_types, dead_code)]
|
||||||
},
|
},
|
||||||
|
|
@ -585,19 +608,19 @@ impl ToTokens for ParsedBundle {
|
||||||
generics: generics.into(),
|
generics: generics.into(),
|
||||||
fields: Fields::Named(match_variant_fields),
|
fields: Fields::Named(match_variant_fields),
|
||||||
semi_token: None,
|
semi_token: None,
|
||||||
}
|
};
|
||||||
.to_tokens(tokens);
|
match_variant_struct.to_tokens(tokens);
|
||||||
|
create_struct_debug_impl(&match_variant_struct, &struct_name, None).to_tokens(tokens);
|
||||||
let mut mask_type_sim_value_fields = mask_type_fields;
|
let mut mask_type_sim_value_fields = mask_type_fields;
|
||||||
for Field { ty, .. } in &mut mask_type_sim_value_fields.named {
|
for Field { ty, .. } in &mut mask_type_sim_value_fields.named {
|
||||||
*ty = parse_quote_spanned! {span=>
|
*ty = parse_quote_spanned! {span=>
|
||||||
::fayalite::sim::value::SimValue<#ty>
|
::fayalite::sim::value::SimValue<#ty>
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
ItemStruct {
|
let mask_type_sim_value_struct = ItemStruct {
|
||||||
attrs: vec![
|
attrs: vec![
|
||||||
parse_quote_spanned! {span=>
|
parse_quote_spanned! {span=>
|
||||||
#[::fayalite::__std::prelude::v1::derive(
|
#[::fayalite::__std::prelude::v1::derive(
|
||||||
::fayalite::__std::fmt::Debug,
|
|
||||||
::fayalite::__std::clone::Clone,
|
::fayalite::__std::clone::Clone,
|
||||||
)]
|
)]
|
||||||
},
|
},
|
||||||
|
|
@ -611,19 +634,34 @@ impl ToTokens for ParsedBundle {
|
||||||
generics: generics.into(),
|
generics: generics.into(),
|
||||||
fields: Fields::Named(mask_type_sim_value_fields),
|
fields: Fields::Named(mask_type_sim_value_fields),
|
||||||
semi_token: None,
|
semi_token: None,
|
||||||
|
};
|
||||||
|
mask_type_sim_value_struct.to_tokens(tokens);
|
||||||
|
if custom_debug_mask_sim.is_none() {
|
||||||
|
create_struct_debug_impl(
|
||||||
|
&mask_type_struct,
|
||||||
|
mask_type_name,
|
||||||
|
Some(CustomDebugTrait {
|
||||||
|
trait_path: &parse_quote_spanned! {span=>
|
||||||
|
::fayalite::ty::SimValueDebug
|
||||||
|
},
|
||||||
|
fn_name: &format_ident!("sim_value_debug", span = span),
|
||||||
|
this_arg: &parse_quote_spanned! {span=>
|
||||||
|
value: &<Self as ::fayalite::ty::Type>::SimValue
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.to_tokens(tokens);
|
||||||
}
|
}
|
||||||
.to_tokens(tokens);
|
|
||||||
let mut sim_value_fields = FieldsNamed::from(fields.clone());
|
let mut sim_value_fields = FieldsNamed::from(fields.clone());
|
||||||
for Field { ty, .. } in &mut sim_value_fields.named {
|
for Field { ty, .. } in &mut sim_value_fields.named {
|
||||||
*ty = parse_quote_spanned! {span=>
|
*ty = parse_quote_spanned! {span=>
|
||||||
::fayalite::sim::value::SimValue<#ty>
|
::fayalite::sim::value::SimValue<#ty>
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
ItemStruct {
|
let sim_value_struct = ItemStruct {
|
||||||
attrs: vec![
|
attrs: vec![
|
||||||
parse_quote_spanned! {span=>
|
parse_quote_spanned! {span=>
|
||||||
#[::fayalite::__std::prelude::v1::derive(
|
#[::fayalite::__std::prelude::v1::derive(
|
||||||
::fayalite::__std::fmt::Debug,
|
|
||||||
::fayalite::__std::clone::Clone,
|
::fayalite::__std::clone::Clone,
|
||||||
)]
|
)]
|
||||||
},
|
},
|
||||||
|
|
@ -637,8 +675,36 @@ impl ToTokens for ParsedBundle {
|
||||||
generics: generics.into(),
|
generics: generics.into(),
|
||||||
fields: Fields::Named(sim_value_fields),
|
fields: Fields::Named(sim_value_fields),
|
||||||
semi_token: None,
|
semi_token: None,
|
||||||
|
};
|
||||||
|
sim_value_struct.to_tokens(tokens);
|
||||||
|
if custom_debug_sim.is_none() {
|
||||||
|
create_struct_debug_impl(
|
||||||
|
&type_struct,
|
||||||
|
&struct_name,
|
||||||
|
Some(CustomDebugTrait {
|
||||||
|
trait_path: &parse_quote_spanned! {span=>
|
||||||
|
::fayalite::ty::SimValueDebug
|
||||||
|
},
|
||||||
|
fn_name: &format_ident!("sim_value_debug", span = span),
|
||||||
|
this_arg: &parse_quote_spanned! {span=>
|
||||||
|
value: &<Self as ::fayalite::ty::Type>::SimValue
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.to_tokens(tokens);
|
||||||
|
}
|
||||||
|
if custom_sim_display.is_some() {
|
||||||
|
quote_spanned! {span=>
|
||||||
|
#[automatically_derived]
|
||||||
|
impl #impl_generics ::fayalite::__std::fmt::Display for #sim_value_ident #type_generics
|
||||||
|
#where_clause
|
||||||
|
{
|
||||||
|
fn fmt(&self, f: &mut ::fayalite::__std::fmt::Formatter<'_>) -> ::fayalite::__std::fmt::Result {
|
||||||
|
<#target #type_generics as ::fayalite::ty::SimValueDisplay>::sim_value_display(self, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.to_tokens(tokens);
|
||||||
}
|
}
|
||||||
.to_tokens(tokens);
|
|
||||||
let this_token = Ident::new("__this", span);
|
let this_token = Ident::new("__this", span);
|
||||||
let fields_token = Ident::new("__fields", span);
|
let fields_token = Ident::new("__fields", span);
|
||||||
let self_token = Token;
|
let self_token = Token;
|
||||||
|
|
@ -820,6 +886,14 @@ impl ToTokens for ParsedBundle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
|
impl #impl_generics ::fayalite::__std::fmt::Debug for #mask_type_sim_value_ident #type_generics
|
||||||
|
#where_clause
|
||||||
|
{
|
||||||
|
fn fmt(&self, f: &mut ::fayalite::__std::fmt::Formatter<'_>) -> ::fayalite::__std::fmt::Result {
|
||||||
|
<#mask_type_ident #type_generics as ::fayalite::ty::SimValueDebug>::sim_value_debug(self, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[automatically_derived]
|
||||||
impl #impl_generics ::fayalite::expr::ValueType for #mask_type_sim_value_ident #type_generics
|
impl #impl_generics ::fayalite::expr::ValueType for #mask_type_sim_value_ident #type_generics
|
||||||
#where_clause
|
#where_clause
|
||||||
{
|
{
|
||||||
|
|
@ -980,6 +1054,14 @@ impl ToTokens for ParsedBundle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
|
impl #impl_generics ::fayalite::__std::fmt::Debug for #sim_value_ident #type_generics
|
||||||
|
#where_clause
|
||||||
|
{
|
||||||
|
fn fmt(&self, f: &mut ::fayalite::__std::fmt::Formatter<'_>) -> ::fayalite::__std::fmt::Result {
|
||||||
|
<#target #type_generics as ::fayalite::ty::SimValueDebug>::sim_value_debug(self, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[automatically_derived]
|
||||||
impl #impl_generics ::fayalite::expr::ValueType for #sim_value_ident #type_generics
|
impl #impl_generics ::fayalite::expr::ValueType for #sim_value_ident #type_generics
|
||||||
#where_clause
|
#where_clause
|
||||||
{
|
{
|
||||||
|
|
@ -1141,7 +1223,7 @@ impl ToTokens for ParsedBundle {
|
||||||
valueless_eq_body = quote_spanned! {span=>
|
valueless_eq_body = quote_spanned! {span=>
|
||||||
let __lhs = ::fayalite::expr::ValueType::ty(&__lhs);
|
let __lhs = ::fayalite::expr::ValueType::ty(&__lhs);
|
||||||
let __rhs = ::fayalite::expr::ValueType::ty(&__rhs);
|
let __rhs = ::fayalite::expr::ValueType::ty(&__rhs);
|
||||||
#(#fields_valueless_eq)|*
|
#(#fields_valueless_eq)&*
|
||||||
};
|
};
|
||||||
valueless_ne_body = quote_spanned! {span=>
|
valueless_ne_body = quote_spanned! {span=>
|
||||||
let __lhs = ::fayalite::expr::ValueType::ty(&__lhs);
|
let __lhs = ::fayalite::expr::ValueType::ty(&__lhs);
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,9 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
Errors, HdlAttr, PairsIterExt,
|
Errors, HdlAttr, PairsIterExt,
|
||||||
hdl_type_common::{
|
hdl_type_common::{
|
||||||
ItemOptions, MakeHdlTypeExpr, MaybeParsed, ParsedGenerics, ParsedType, SplitForImpl,
|
CustomDebugOptions, ItemOptions, MakeHdlTypeExpr, MaybeParsed, ParsedGenerics, ParsedType,
|
||||||
TypesParser, WrappedInConst, common_derives, get_target,
|
SplitForImpl, TypesParser, WrappedInConst, common_derives, create_struct_debug_impl,
|
||||||
|
get_target,
|
||||||
},
|
},
|
||||||
kw,
|
kw,
|
||||||
};
|
};
|
||||||
|
|
@ -158,15 +159,32 @@ impl ParsedEnum {
|
||||||
custom_bounds,
|
custom_bounds,
|
||||||
no_static: _,
|
no_static: _,
|
||||||
no_runtime_generics: _,
|
no_runtime_generics: _,
|
||||||
cmp_eq,
|
cmp_eq: _,
|
||||||
ref get,
|
ref get,
|
||||||
|
custom_debug: _,
|
||||||
|
custom_sim_display: _,
|
||||||
} = options.body;
|
} = options.body;
|
||||||
if let Some((cmp_eq,)) = cmp_eq {
|
|
||||||
errors.error(cmp_eq, "#[hdl(cmp_eq)] is not yet implemented for enums");
|
|
||||||
}
|
|
||||||
if let Some((get, ..)) = get {
|
if let Some((get, ..)) = get {
|
||||||
errors.error(get, "#[hdl(get(...))] is not allowed on enums");
|
errors.error(get, "#[hdl(get(...))] is not allowed on enums");
|
||||||
}
|
}
|
||||||
|
let CustomDebugOptions {
|
||||||
|
type_: _,
|
||||||
|
sim: _,
|
||||||
|
mask_type,
|
||||||
|
mask_sim,
|
||||||
|
} = options.body.custom_debug();
|
||||||
|
if let Some((mask_type,)) = mask_type {
|
||||||
|
errors.error(
|
||||||
|
mask_type,
|
||||||
|
"#[hdl(custom_debug(mask_type)] is not allowed on enums",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if let Some((mask_sim,)) = mask_sim {
|
||||||
|
errors.error(
|
||||||
|
mask_sim,
|
||||||
|
"#[hdl(custom_debug(mask_sim)] is not allowed on enums",
|
||||||
|
);
|
||||||
|
}
|
||||||
attrs.retain(|attr| {
|
attrs.retain(|attr| {
|
||||||
if attr.path().is_ident("repr") {
|
if attr.path().is_ident("repr") {
|
||||||
errors.error(attr, "#[repr] is not supported on #[hdl] enums");
|
errors.error(attr, "#[repr] is not supported on #[hdl] enums");
|
||||||
|
|
@ -228,12 +246,21 @@ impl ToTokens for ParsedEnum {
|
||||||
custom_bounds: _,
|
custom_bounds: _,
|
||||||
no_static,
|
no_static,
|
||||||
no_runtime_generics,
|
no_runtime_generics,
|
||||||
cmp_eq: _, // TODO: implement cmp_eq for enums
|
cmp_eq,
|
||||||
get: _,
|
get: _,
|
||||||
|
custom_debug: _,
|
||||||
|
custom_sim_display,
|
||||||
} = &options.body;
|
} = &options.body;
|
||||||
|
let CustomDebugOptions {
|
||||||
|
type_: custom_debug_type,
|
||||||
|
sim: custom_debug_sim,
|
||||||
|
mask_type: _,
|
||||||
|
mask_sim: _,
|
||||||
|
} = options.body.custom_debug();
|
||||||
let target = get_target(target, ident);
|
let target = get_target(target, ident);
|
||||||
|
let enum_name = ident.to_string();
|
||||||
let mut struct_attrs = attrs.clone();
|
let mut struct_attrs = attrs.clone();
|
||||||
struct_attrs.push(common_derives(span));
|
struct_attrs.push(common_derives(span, false));
|
||||||
struct_attrs.push(parse_quote_spanned! {span=>
|
struct_attrs.push(parse_quote_spanned! {span=>
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
});
|
});
|
||||||
|
|
@ -273,7 +300,7 @@ impl ToTokens for ParsedEnum {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
));
|
));
|
||||||
ItemStruct {
|
let type_struct = ItemStruct {
|
||||||
attrs: struct_attrs,
|
attrs: struct_attrs,
|
||||||
vis: vis.clone(),
|
vis: vis.clone(),
|
||||||
struct_token: Token,
|
struct_token: Token,
|
||||||
|
|
@ -288,8 +315,8 @@ impl ToTokens for ParsedEnum {
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
semi_token: None,
|
semi_token: None,
|
||||||
}
|
};
|
||||||
.to_tokens(tokens);
|
type_struct.to_tokens(tokens);
|
||||||
let (impl_generics, type_generics, where_clause) = generics.split_for_impl();
|
let (impl_generics, type_generics, where_clause) = generics.split_for_impl();
|
||||||
if let (MaybeParsed::Parsed(generics), None) = (generics, no_runtime_generics) {
|
if let (MaybeParsed::Parsed(generics), None) = (generics, no_runtime_generics) {
|
||||||
generics.make_runtime_generics(tokens, vis, ident, &target, |context| {
|
generics.make_runtime_generics(tokens, vis, ident, &target, |context| {
|
||||||
|
|
@ -373,6 +400,9 @@ impl ToTokens for ParsedEnum {
|
||||||
}
|
}
|
||||||
.to_tokens(tokens);
|
.to_tokens(tokens);
|
||||||
}
|
}
|
||||||
|
if custom_debug_type.is_none() {
|
||||||
|
create_struct_debug_impl(&type_struct, &enum_name, None).to_tokens(tokens);
|
||||||
|
}
|
||||||
let mut enum_attrs = attrs.clone();
|
let mut enum_attrs = attrs.clone();
|
||||||
enum_attrs.push(parse_quote_spanned! {span=>
|
enum_attrs.push(parse_quote_spanned! {span=>
|
||||||
#[allow(dead_code, non_camel_case_types)]
|
#[allow(dead_code, non_camel_case_types)]
|
||||||
|
|
@ -453,7 +483,6 @@ impl ToTokens for ParsedEnum {
|
||||||
let mut enum_attrs = attrs.clone();
|
let mut enum_attrs = attrs.clone();
|
||||||
enum_attrs.push(parse_quote_spanned! {span=>
|
enum_attrs.push(parse_quote_spanned! {span=>
|
||||||
#[::fayalite::__std::prelude::v1::derive(
|
#[::fayalite::__std::prelude::v1::derive(
|
||||||
::fayalite::__std::fmt::Debug,
|
|
||||||
::fayalite::__std::clone::Clone,
|
::fayalite::__std::clone::Clone,
|
||||||
)]
|
)]
|
||||||
});
|
});
|
||||||
|
|
@ -838,6 +867,240 @@ impl ToTokens for ParsedEnum {
|
||||||
},
|
},
|
||||||
)),
|
)),
|
||||||
);
|
);
|
||||||
|
if custom_debug_sim.is_none() {
|
||||||
|
let debug_match_arms = Vec::from_iter(
|
||||||
|
variants
|
||||||
|
.iter()
|
||||||
|
.map(
|
||||||
|
|ParsedVariant {
|
||||||
|
attrs: _,
|
||||||
|
options: _,
|
||||||
|
ident,
|
||||||
|
field,
|
||||||
|
}| {
|
||||||
|
let variant_name = ident.to_string();
|
||||||
|
if let Some(_) = field {
|
||||||
|
quote_spanned! {span=>
|
||||||
|
#sim_value_ident::#ident(field, _) => {
|
||||||
|
f.debug_tuple(#variant_name).field(field).finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
quote_spanned! {span=>
|
||||||
|
#sim_value_ident::#ident(_) => {
|
||||||
|
f.write_str(#variant_name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.chain(sim_value_unknown_variant_name.as_ref().map(
|
||||||
|
|sim_value_unknown_variant_name| {
|
||||||
|
let sim_value_unknown_variant_name_str =
|
||||||
|
sim_value_unknown_variant_name.to_string();
|
||||||
|
quote_spanned! {span=>
|
||||||
|
#sim_value_ident::#sim_value_unknown_variant_name(_) => {
|
||||||
|
f.write_str(#sim_value_unknown_variant_name_str)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
quote_spanned! {span=>
|
||||||
|
#[automatically_derived]
|
||||||
|
impl #impl_generics ::fayalite::ty::SimValueDebug for #target #type_generics
|
||||||
|
#where_clause
|
||||||
|
{
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as ::fayalite::ty::Type>::SimValue,
|
||||||
|
f: &mut ::fayalite::__std::fmt::Formatter<'_>,
|
||||||
|
) -> ::fayalite::__std::fmt::Result {
|
||||||
|
match value {
|
||||||
|
#(#debug_match_arms)*
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.to_tokens(tokens);
|
||||||
|
}
|
||||||
|
if custom_sim_display.is_some() {
|
||||||
|
quote_spanned! {span=>
|
||||||
|
#[automatically_derived]
|
||||||
|
impl #impl_generics ::fayalite::__std::fmt::Display for #sim_value_ident #type_generics
|
||||||
|
#where_clause
|
||||||
|
{
|
||||||
|
fn fmt(&self, f: &mut ::fayalite::__std::fmt::Formatter<'_>) -> ::fayalite::__std::fmt::Result {
|
||||||
|
<#target #type_generics as ::fayalite::ty::SimValueDisplay>::sim_value_display(self, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.to_tokens(tokens);
|
||||||
|
}
|
||||||
|
if let Some((cmp_eq,)) = cmp_eq {
|
||||||
|
let mut cmp_eq_where_clause =
|
||||||
|
Generics::from(generics)
|
||||||
|
.where_clause
|
||||||
|
.unwrap_or_else(|| syn::WhereClause {
|
||||||
|
where_token: Token,
|
||||||
|
predicates: Punctuated::new(),
|
||||||
|
});
|
||||||
|
let mut variants_value_eq = vec![];
|
||||||
|
let mut variants_expr_eq = vec![];
|
||||||
|
let mut fields_valueless_eq = vec![];
|
||||||
|
for (
|
||||||
|
variant_index,
|
||||||
|
ParsedVariant {
|
||||||
|
attrs: _,
|
||||||
|
options: variant_options,
|
||||||
|
ident: variant_ident,
|
||||||
|
field,
|
||||||
|
},
|
||||||
|
) in variants.iter().enumerate()
|
||||||
|
{
|
||||||
|
let VariantOptions {} = variant_options.body;
|
||||||
|
if let Some(ParsedVariantField {
|
||||||
|
paren_token: _,
|
||||||
|
attrs: _,
|
||||||
|
options: field_options,
|
||||||
|
ty: field_ty,
|
||||||
|
comma_token: _,
|
||||||
|
}) = field
|
||||||
|
{
|
||||||
|
let FieldOptions {} = field_options.body;
|
||||||
|
cmp_eq_where_clause
|
||||||
|
.predicates
|
||||||
|
.push(parse_quote_spanned! {cmp_eq.span=>
|
||||||
|
#field_ty: ::fayalite::expr::HdlPartialEqImpl<#field_ty>
|
||||||
|
});
|
||||||
|
variants_value_eq.push(quote_spanned! {span=>
|
||||||
|
(#sim_value_ident::#variant_ident(__lhs_field, _), #sim_value_ident::#variant_ident(__rhs_field, _)) => {
|
||||||
|
::fayalite::expr::HdlPartialEqImpl::cmp_value_eq(
|
||||||
|
__lhs.#variant_ident,
|
||||||
|
::fayalite::__std::borrow::Cow::Borrowed(__lhs_field),
|
||||||
|
__rhs.#variant_ident,
|
||||||
|
::fayalite::__std::borrow::Cow::Borrowed(__rhs_field),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
variants_expr_eq.push(quote_spanned! {span=>
|
||||||
|
{
|
||||||
|
let (#match_variant_ident::#variant_ident(__lhs), __scope) =
|
||||||
|
::fayalite::ty::MatchVariantAndInactiveScope::match_activate_scope(
|
||||||
|
::fayalite::__std::iter::Iterator::next(&mut __lhs_match_variant_iter)
|
||||||
|
.expect("known to have enough variants"),
|
||||||
|
)
|
||||||
|
else {
|
||||||
|
::fayalite::__std::unreachable!();
|
||||||
|
};
|
||||||
|
let (#match_variant_ident::#variant_ident(__rhs), __scope) =
|
||||||
|
::fayalite::ty::MatchVariantAndInactiveScope::match_activate_scope(
|
||||||
|
::fayalite::__std::iter::Iterator::nth(
|
||||||
|
&mut ::fayalite::module::match_(__rhs),
|
||||||
|
#variant_index,
|
||||||
|
)
|
||||||
|
.expect("known to have variant"),
|
||||||
|
)
|
||||||
|
else {
|
||||||
|
::fayalite::__std::unreachable!();
|
||||||
|
};
|
||||||
|
::fayalite::module::connect(__retval, ::fayalite::expr::HdlPartialEqImpl::cmp_expr_eq(__lhs, __rhs));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
fields_valueless_eq.push(quote_spanned! {span=>
|
||||||
|
::fayalite::expr::HdlPartialEqImpl::cmp_valueless_eq(
|
||||||
|
::fayalite::expr::Valueless::new(__lhs.#variant_ident),
|
||||||
|
::fayalite::expr::Valueless::new(__rhs.#variant_ident),
|
||||||
|
)
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
variants_value_eq.push(quote_spanned! {span=>
|
||||||
|
(#sim_value_ident::#variant_ident(_), #sim_value_ident::#variant_ident(_)) => true,
|
||||||
|
});
|
||||||
|
variants_expr_eq.push(quote_spanned! {span=>
|
||||||
|
{
|
||||||
|
let (#match_variant_ident::#variant_ident, __scope) =
|
||||||
|
::fayalite::ty::MatchVariantAndInactiveScope::match_activate_scope(
|
||||||
|
::fayalite::__std::iter::Iterator::next(&mut __lhs_match_variant_iter)
|
||||||
|
.expect("known to have enough variants"),
|
||||||
|
)
|
||||||
|
else {
|
||||||
|
::fayalite::__std::unreachable!();
|
||||||
|
};
|
||||||
|
let (#match_variant_ident::#variant_ident, __scope) =
|
||||||
|
::fayalite::ty::MatchVariantAndInactiveScope::match_activate_scope(
|
||||||
|
::fayalite::__std::iter::Iterator::nth(
|
||||||
|
&mut ::fayalite::module::match_(__rhs),
|
||||||
|
#variant_index,
|
||||||
|
)
|
||||||
|
.expect("known to have variant"),
|
||||||
|
)
|
||||||
|
else {
|
||||||
|
::fayalite::__std::unreachable!();
|
||||||
|
};
|
||||||
|
::fayalite::module::connect(__retval, true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let Some(sim_value_unknown_variant_name) = &sim_value_unknown_variant_name {
|
||||||
|
variants_value_eq.push(quote_spanned! {span=>
|
||||||
|
(#sim_value_ident::#sim_value_unknown_variant_name(__lhs_unknown), #sim_value_ident::#sim_value_unknown_variant_name(__rhs_unknown)) => {
|
||||||
|
__lhs_unknown == __rhs_unknown
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
let valueless_eq_body = if fields_valueless_eq.is_empty() {
|
||||||
|
quote_spanned! {span=>
|
||||||
|
::fayalite::expr::Valueless::new(::fayalite::int::Bool)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
quote_spanned! {span=>
|
||||||
|
let __lhs = ::fayalite::expr::ValueType::ty(&__lhs);
|
||||||
|
let __rhs = ::fayalite::expr::ValueType::ty(&__rhs);
|
||||||
|
#(#fields_valueless_eq)&*
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let cmp_expr_eq_wire_name = format!("{ident}_cmp_eq");
|
||||||
|
quote_spanned! {span=>
|
||||||
|
#[automatically_derived]
|
||||||
|
impl #impl_generics ::fayalite::expr::HdlPartialEqImpl<Self> for #target #type_generics
|
||||||
|
#cmp_eq_where_clause
|
||||||
|
{
|
||||||
|
#[track_caller]
|
||||||
|
fn cmp_value_eq(
|
||||||
|
__lhs: Self,
|
||||||
|
__lhs_value: ::fayalite::__std::borrow::Cow<'_, <Self as ::fayalite::ty::Type>::SimValue>,
|
||||||
|
__rhs: Self,
|
||||||
|
__rhs_value: ::fayalite::__std::borrow::Cow<'_, <Self as ::fayalite::ty::Type>::SimValue>,
|
||||||
|
) -> ::fayalite::__std::primitive::bool {
|
||||||
|
match (&*__lhs_value, &*__rhs_value) {
|
||||||
|
#(#variants_value_eq)*
|
||||||
|
_ => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[track_caller]
|
||||||
|
fn cmp_expr_eq(
|
||||||
|
__lhs: ::fayalite::expr::Expr<Self>,
|
||||||
|
__rhs: ::fayalite::expr::Expr<Self>,
|
||||||
|
) -> ::fayalite::expr::Expr<::fayalite::int::Bool> {
|
||||||
|
let __retval = ::fayalite::module::wire(::fayalite::module::ImplicitName(#cmp_expr_eq_wire_name), ::fayalite::int::Bool);
|
||||||
|
::fayalite::module::connect(__retval, false);
|
||||||
|
let mut __lhs_match_variant_iter = ::fayalite::module::match_(__lhs);
|
||||||
|
#(#variants_expr_eq)*
|
||||||
|
__retval
|
||||||
|
}
|
||||||
|
|
||||||
|
#[track_caller]
|
||||||
|
fn cmp_valueless_eq(
|
||||||
|
__lhs: ::fayalite::expr::Valueless<Self>,
|
||||||
|
__rhs: ::fayalite::expr::Valueless<Self>,
|
||||||
|
) -> ::fayalite::expr::Valueless<::fayalite::int::Bool> {
|
||||||
|
#valueless_eq_body
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.to_tokens(tokens);
|
||||||
|
}
|
||||||
let variants_len = variants.len();
|
let variants_len = variants.len();
|
||||||
quote_spanned! {span=>
|
quote_spanned! {span=>
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
|
|
@ -934,6 +1197,14 @@ impl ToTokens for ParsedEnum {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
|
impl #impl_generics ::fayalite::__std::fmt::Debug for #sim_value_ident #type_generics
|
||||||
|
#where_clause
|
||||||
|
{
|
||||||
|
fn fmt(&self, f: &mut ::fayalite::__std::fmt::Formatter<'_>) -> ::fayalite::__std::fmt::Result {
|
||||||
|
<#target #type_generics as ::fayalite::ty::SimValueDebug>::sim_value_debug(self, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[automatically_derived]
|
||||||
impl #impl_generics ::fayalite::sim::value::ToSimValueWithType<#target #type_generics>
|
impl #impl_generics ::fayalite::sim::value::ToSimValueWithType<#target #type_generics>
|
||||||
for #sim_value_ident #type_generics
|
for #sim_value_ident #type_generics
|
||||||
#where_clause
|
#where_clause
|
||||||
|
|
|
||||||
|
|
@ -215,6 +215,8 @@ impl ParsedTypeAlias {
|
||||||
no_runtime_generics,
|
no_runtime_generics,
|
||||||
cmp_eq,
|
cmp_eq,
|
||||||
get: _,
|
get: _,
|
||||||
|
ref custom_debug,
|
||||||
|
custom_sim_display,
|
||||||
} = options.body;
|
} = options.body;
|
||||||
if let Some((no_static,)) = no_static {
|
if let Some((no_static,)) = no_static {
|
||||||
errors.error(no_static, "no_static is not valid on type aliases");
|
errors.error(no_static, "no_static is not valid on type aliases");
|
||||||
|
|
@ -234,6 +236,15 @@ impl ParsedTypeAlias {
|
||||||
if let Some((cmp_eq,)) = cmp_eq {
|
if let Some((cmp_eq,)) = cmp_eq {
|
||||||
errors.error(cmp_eq, "cmp_eq is not valid on type aliases");
|
errors.error(cmp_eq, "cmp_eq is not valid on type aliases");
|
||||||
}
|
}
|
||||||
|
if let Some((custom_debug, _, _)) = custom_debug {
|
||||||
|
errors.error(custom_debug, "custom_debug is not valid on type aliases");
|
||||||
|
}
|
||||||
|
if let Some((custom_sim_display,)) = custom_sim_display {
|
||||||
|
errors.error(
|
||||||
|
custom_sim_display,
|
||||||
|
"custom_sim_display is not valid on type aliases",
|
||||||
|
);
|
||||||
|
}
|
||||||
if let Some((custom_bounds,)) = custom_bounds {
|
if let Some((custom_bounds,)) = custom_bounds {
|
||||||
errors.error(
|
errors.error(
|
||||||
custom_bounds,
|
custom_bounds,
|
||||||
|
|
@ -287,6 +298,8 @@ impl ParsedTypeAlias {
|
||||||
no_runtime_generics: _,
|
no_runtime_generics: _,
|
||||||
cmp_eq,
|
cmp_eq,
|
||||||
ref mut get,
|
ref mut get,
|
||||||
|
ref custom_debug,
|
||||||
|
custom_sim_display,
|
||||||
} = options.body;
|
} = options.body;
|
||||||
if let Some(get) = get.take() {
|
if let Some(get) = get.take() {
|
||||||
return Self::parse_phantom_const_accessor(
|
return Self::parse_phantom_const_accessor(
|
||||||
|
|
@ -311,6 +324,15 @@ impl ParsedTypeAlias {
|
||||||
if let Some((cmp_eq,)) = cmp_eq {
|
if let Some((cmp_eq,)) = cmp_eq {
|
||||||
errors.error(cmp_eq, "cmp_eq is not valid on type aliases");
|
errors.error(cmp_eq, "cmp_eq is not valid on type aliases");
|
||||||
}
|
}
|
||||||
|
if let Some((custom_debug, _, _)) = custom_debug {
|
||||||
|
errors.error(custom_debug, "custom_debug is not valid on type aliases");
|
||||||
|
}
|
||||||
|
if let Some((custom_sim_display,)) = custom_sim_display {
|
||||||
|
errors.error(
|
||||||
|
custom_sim_display,
|
||||||
|
"custom_sim_display is not valid on type aliases",
|
||||||
|
);
|
||||||
|
}
|
||||||
let generics = if custom_bounds.is_some() {
|
let generics = if custom_bounds.is_some() {
|
||||||
MaybeParsed::Unrecognized(generics)
|
MaybeParsed::Unrecognized(generics)
|
||||||
} else if let Some(generics) = errors.ok(ParsedGenerics::parse(&mut generics)) {
|
} else if let Some(generics) = errors.ok(ParsedGenerics::parse(&mut generics)) {
|
||||||
|
|
@ -356,6 +378,8 @@ impl ToTokens for ParsedTypeAlias {
|
||||||
no_runtime_generics,
|
no_runtime_generics,
|
||||||
cmp_eq: _,
|
cmp_eq: _,
|
||||||
get: _,
|
get: _,
|
||||||
|
custom_debug: _,
|
||||||
|
custom_sim_display: _,
|
||||||
} = &options.body;
|
} = &options.body;
|
||||||
let target = get_target(target, ident);
|
let target = get_target(target, ident);
|
||||||
let mut type_attrs = attrs.clone();
|
let mut type_attrs = attrs.clone();
|
||||||
|
|
@ -402,6 +426,8 @@ impl ToTokens for ParsedTypeAlias {
|
||||||
no_runtime_generics: _,
|
no_runtime_generics: _,
|
||||||
cmp_eq: _,
|
cmp_eq: _,
|
||||||
get: _,
|
get: _,
|
||||||
|
custom_debug: _,
|
||||||
|
custom_sim_display: _,
|
||||||
} = &options.body;
|
} = &options.body;
|
||||||
let span = ident.span();
|
let span = ident.span();
|
||||||
let mut type_attrs = attrs.clone();
|
let mut type_attrs = attrs.clone();
|
||||||
|
|
@ -427,7 +453,7 @@ impl ToTokens for ParsedTypeAlias {
|
||||||
format_ident!("__{}__GenericsAccumulation", ident);
|
format_ident!("__{}__GenericsAccumulation", ident);
|
||||||
ItemStruct {
|
ItemStruct {
|
||||||
attrs: vec![
|
attrs: vec![
|
||||||
common_derives(span),
|
common_derives(span, true),
|
||||||
parse_quote_spanned! {span=>
|
parse_quote_spanned! {span=>
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,10 @@ use std::{collections::HashMap, fmt, mem};
|
||||||
use syn::{
|
use syn::{
|
||||||
AngleBracketedGenericArguments, Attribute, Block, ConstParam, Expr, ExprBlock, ExprGroup,
|
AngleBracketedGenericArguments, Attribute, Block, ConstParam, Expr, ExprBlock, ExprGroup,
|
||||||
ExprIndex, ExprParen, ExprPath, ExprTuple, Field, FieldMutability, Fields, FieldsNamed,
|
ExprIndex, ExprParen, ExprPath, ExprTuple, Field, FieldMutability, Fields, FieldsNamed,
|
||||||
FieldsUnnamed, GenericArgument, GenericParam, Generics, Ident, ImplGenerics, Index, ItemStruct,
|
FieldsUnnamed, FnArg, GenericArgument, GenericParam, Generics, Ident, ImplGenerics, Index,
|
||||||
Path, PathArguments, PathSegment, PredicateType, QSelf, Stmt, Token, TraitBound, Turbofish,
|
ItemStruct, Path, PathArguments, PathSegment, PredicateType, QSelf, Stmt, Token, TraitBound,
|
||||||
Type, TypeGenerics, TypeGroup, TypeParam, TypeParamBound, TypeParen, TypePath, TypeTuple,
|
Turbofish, Type, TypeGenerics, TypeGroup, TypeParam, TypeParamBound, TypeParen, TypePath,
|
||||||
Visibility, WhereClause, WherePredicate,
|
TypeTuple, Visibility, WhereClause, WherePredicate,
|
||||||
parse::{Parse, ParseStream},
|
parse::{Parse, ParseStream},
|
||||||
parse_quote, parse_quote_spanned,
|
parse_quote, parse_quote_spanned,
|
||||||
punctuated::{Pair, Punctuated},
|
punctuated::{Pair, Punctuated},
|
||||||
|
|
@ -18,6 +18,17 @@ use syn::{
|
||||||
token::{Brace, Bracket, Paren},
|
token::{Brace, Bracket, Paren},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
crate::options! {
|
||||||
|
#[options = CustomDebugOptions]
|
||||||
|
#[no_ident_fragment]
|
||||||
|
pub(crate) enum CustomDebugOption {
|
||||||
|
Type(type_),
|
||||||
|
Sim(sim),
|
||||||
|
MaskType(mask_type),
|
||||||
|
MaskSim(mask_sim),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
crate::options! {
|
crate::options! {
|
||||||
#[options = ItemOptions]
|
#[options = ItemOptions]
|
||||||
pub(crate) enum ItemOption {
|
pub(crate) enum ItemOption {
|
||||||
|
|
@ -28,6 +39,8 @@ crate::options! {
|
||||||
NoRuntimeGenerics(no_runtime_generics),
|
NoRuntimeGenerics(no_runtime_generics),
|
||||||
CmpEq(cmp_eq),
|
CmpEq(cmp_eq),
|
||||||
Get(get, Expr),
|
Get(get, Expr),
|
||||||
|
CustomDebug(custom_debug, CustomDebugOptions),
|
||||||
|
CustomSimDisplay(custom_sim_display),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -41,8 +54,36 @@ impl ItemOptions {
|
||||||
{
|
{
|
||||||
self.no_static = Some((kw::no_static(custom_bounds.span),));
|
self.no_static = Some((kw::no_static(custom_bounds.span),));
|
||||||
}
|
}
|
||||||
|
if let Some((kw, _, custom_debug)) = &mut self.custom_debug {
|
||||||
|
if let CustomDebugOptions {
|
||||||
|
type_: None,
|
||||||
|
sim: None,
|
||||||
|
mask_type: None,
|
||||||
|
mask_sim: None,
|
||||||
|
} = custom_debug
|
||||||
|
{
|
||||||
|
*custom_debug = CustomDebugOptions {
|
||||||
|
type_: Some((kw::type_(kw.span),)),
|
||||||
|
sim: Some((kw::sim(kw.span),)),
|
||||||
|
mask_type: None,
|
||||||
|
mask_sim: None,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
pub(crate) fn custom_debug(&self) -> &CustomDebugOptions {
|
||||||
|
self.custom_debug.as_ref().map(|v| &v.2).unwrap_or(
|
||||||
|
const {
|
||||||
|
&CustomDebugOptions {
|
||||||
|
type_: None,
|
||||||
|
sim: None,
|
||||||
|
mask_type: None,
|
||||||
|
mask_sim: None,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) struct WrappedInConst<'a> {
|
pub(crate) struct WrappedInConst<'a> {
|
||||||
|
|
@ -84,10 +125,17 @@ pub(crate) fn get_target(target: &Option<(kw::target, Paren, Path)>, item_ident:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn common_derives(span: Span) -> Attribute {
|
pub(crate) fn common_derives(span: Span, include_debug: bool) -> Attribute {
|
||||||
|
let debug = include_debug
|
||||||
|
.then(|| {
|
||||||
|
quote_spanned! {span=>
|
||||||
|
::fayalite::__std::fmt::Debug
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.into_iter();
|
||||||
parse_quote_spanned! {span=>
|
parse_quote_spanned! {span=>
|
||||||
#[::fayalite::__std::prelude::v1::derive(
|
#[::fayalite::__std::prelude::v1::derive(
|
||||||
::fayalite::__std::fmt::Debug,
|
#(#debug,)*
|
||||||
::fayalite::__std::cmp::Eq,
|
::fayalite::__std::cmp::Eq,
|
||||||
::fayalite::__std::cmp::PartialEq,
|
::fayalite::__std::cmp::PartialEq,
|
||||||
::fayalite::__std::hash::Hash,
|
::fayalite::__std::hash::Hash,
|
||||||
|
|
@ -2975,7 +3023,7 @@ impl ParsedGenerics {
|
||||||
let span = ident.span();
|
let span = ident.span();
|
||||||
ItemStruct {
|
ItemStruct {
|
||||||
attrs: vec![
|
attrs: vec![
|
||||||
common_derives(span),
|
common_derives(span, true),
|
||||||
parse_quote_spanned! {span=>
|
parse_quote_spanned! {span=>
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
},
|
},
|
||||||
|
|
@ -4733,3 +4781,109 @@ impl ParsedVisibility {
|
||||||
.map(|ord| if ord.is_lt() { self } else { other })
|
.map(|ord| if ord.is_lt() { self } else { other })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) struct CustomDebugTrait<'a> {
|
||||||
|
pub(crate) trait_path: &'a Path,
|
||||||
|
pub(crate) fn_name: &'a Ident,
|
||||||
|
pub(crate) this_arg: &'a FnArg,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[must_use]
|
||||||
|
pub(crate) fn create_struct_debug_impl(
|
||||||
|
item_struct: &ItemStruct,
|
||||||
|
debug_struct_name: &str,
|
||||||
|
custom_debug_trait: Option<CustomDebugTrait<'_>>,
|
||||||
|
) -> TokenStream {
|
||||||
|
let ident = &item_struct.ident;
|
||||||
|
let span = ident.span();
|
||||||
|
let (impl_generics, type_generics, where_clause) = item_struct.generics.split_for_impl();
|
||||||
|
let trait_path;
|
||||||
|
let fn_name;
|
||||||
|
let this_arg;
|
||||||
|
let CustomDebugTrait {
|
||||||
|
trait_path,
|
||||||
|
fn_name,
|
||||||
|
this_arg,
|
||||||
|
} = match custom_debug_trait {
|
||||||
|
Some(v) => v,
|
||||||
|
None => {
|
||||||
|
trait_path = parse_quote_spanned! {span=>
|
||||||
|
::fayalite::__std::fmt::Debug
|
||||||
|
};
|
||||||
|
fn_name = parse_quote_spanned! {span=>
|
||||||
|
fmt
|
||||||
|
};
|
||||||
|
this_arg = parse_quote_spanned! {span=>
|
||||||
|
&self
|
||||||
|
};
|
||||||
|
CustomDebugTrait {
|
||||||
|
trait_path: &trait_path,
|
||||||
|
fn_name: &fn_name,
|
||||||
|
this_arg: &this_arg,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let this_arg_name = match this_arg {
|
||||||
|
FnArg::Receiver(this_arg) => this_arg.self_token.to_token_stream(),
|
||||||
|
FnArg::Typed(this_arg) => match &*this_arg.pat {
|
||||||
|
syn::Pat::Ident(pat_ident) => pat_ident.ident.to_token_stream(),
|
||||||
|
_ => unreachable!(),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
match &item_struct.fields {
|
||||||
|
Fields::Named(fields) => {
|
||||||
|
let field_idents = fields
|
||||||
|
.named
|
||||||
|
.iter()
|
||||||
|
.map(|v| v.ident.as_ref().expect("known to have field name"));
|
||||||
|
let field_names = field_idents.clone().map(|v| v.to_string());
|
||||||
|
quote_spanned! {span=>
|
||||||
|
#[automatically_derived]
|
||||||
|
impl #impl_generics #trait_path for #ident #type_generics
|
||||||
|
#where_clause
|
||||||
|
{
|
||||||
|
fn #fn_name(#this_arg, f: &mut ::fayalite::__std::fmt::Formatter<'_>) -> ::fayalite::__std::fmt::Result {
|
||||||
|
let _ = #this_arg_name;
|
||||||
|
f.debug_struct(#debug_struct_name)
|
||||||
|
#(.field(#field_names, &#this_arg_name.#field_idents))*
|
||||||
|
.finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Fields::Unnamed(fields) => {
|
||||||
|
let field_members = fields
|
||||||
|
.unnamed
|
||||||
|
.iter()
|
||||||
|
.enumerate()
|
||||||
|
.map(|(index, _)| syn::Index {
|
||||||
|
index: index as _,
|
||||||
|
span,
|
||||||
|
});
|
||||||
|
quote_spanned! {span=>
|
||||||
|
#[automatically_derived]
|
||||||
|
impl #impl_generics #trait_path for #ident #type_generics
|
||||||
|
#where_clause
|
||||||
|
{
|
||||||
|
fn #fn_name(#this_arg, f: &mut ::fayalite::__std::fmt::Formatter<'_>) -> ::fayalite::__std::fmt::Result {
|
||||||
|
let _ = #this_arg_name;
|
||||||
|
f.debug_tuple(#debug_struct_name)
|
||||||
|
#(.field(&#this_arg_name.#field_members))*
|
||||||
|
.finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Fields::Unit => quote_spanned! {ident.span()=>
|
||||||
|
#[automatically_derived]
|
||||||
|
impl #impl_generics #trait_path for #ident #type_generics
|
||||||
|
#where_clause
|
||||||
|
{
|
||||||
|
fn #fn_name(#this_arg, f: &mut ::fayalite::__std::fmt::Formatter<'_>) -> ::fayalite::__std::fmt::Result {
|
||||||
|
let _ = #this_arg_name;
|
||||||
|
f.write_str(#debug_struct_name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ pub(crate) trait CustomToken:
|
||||||
|
|
||||||
mod kw {
|
mod kw {
|
||||||
pub(crate) use syn::token::Extern as extern_;
|
pub(crate) use syn::token::Extern as extern_;
|
||||||
|
pub(crate) use syn::token::Type as type_;
|
||||||
|
|
||||||
macro_rules! custom_keyword {
|
macro_rules! custom_keyword {
|
||||||
($kw:ident) => {
|
($kw:ident) => {
|
||||||
|
|
@ -75,6 +76,8 @@ mod kw {
|
||||||
custom_keyword!(cmp_eq);
|
custom_keyword!(cmp_eq);
|
||||||
custom_keyword!(connect_inexact);
|
custom_keyword!(connect_inexact);
|
||||||
custom_keyword!(custom_bounds);
|
custom_keyword!(custom_bounds);
|
||||||
|
custom_keyword!(custom_debug);
|
||||||
|
custom_keyword!(custom_sim_display);
|
||||||
custom_keyword!(flip);
|
custom_keyword!(flip);
|
||||||
custom_keyword!(get);
|
custom_keyword!(get);
|
||||||
custom_keyword!(hdl);
|
custom_keyword!(hdl);
|
||||||
|
|
@ -83,6 +86,8 @@ mod kw {
|
||||||
custom_keyword!(input);
|
custom_keyword!(input);
|
||||||
custom_keyword!(instance);
|
custom_keyword!(instance);
|
||||||
custom_keyword!(m);
|
custom_keyword!(m);
|
||||||
|
custom_keyword!(mask_sim);
|
||||||
|
custom_keyword!(mask_type);
|
||||||
custom_keyword!(memory);
|
custom_keyword!(memory);
|
||||||
custom_keyword!(memory_array);
|
custom_keyword!(memory_array);
|
||||||
custom_keyword!(memory_with_init);
|
custom_keyword!(memory_with_init);
|
||||||
|
|
|
||||||
|
|
@ -1096,11 +1096,9 @@ impl Visitor<'_> {
|
||||||
let (#(#bindings,)*) = {
|
let (#(#bindings,)*) = {
|
||||||
type __MatchTy<T> = <T as ::fayalite::ty::Type>::SimValue;
|
type __MatchTy<T> = <T as ::fayalite::ty::Type>::SimValue;
|
||||||
let __match_value = #expr;
|
let __match_value = #expr;
|
||||||
let __match_value = {
|
// use method syntax to deduce what type to convert to
|
||||||
use ::fayalite::sim::value::match_sim_value::*;
|
let __match_value = ::fayalite::sim::value::match_sim_value::MatchSimValueHelper::new(__match_value)
|
||||||
// use method syntax to deduce the correct trait to call
|
.__fayalite_match_sim_value();
|
||||||
::fayalite::sim::value::match_sim_value::MatchSimValueHelper::new(__match_value).__fayalite_match_sim_value()
|
|
||||||
};
|
|
||||||
#let_token #pat #eq_token __match_value #semi_token
|
#let_token #pat #eq_token __match_value #semi_token
|
||||||
(#(#bindings_idents,)*)
|
(#(#bindings_idents,)*)
|
||||||
};
|
};
|
||||||
|
|
@ -1172,11 +1170,9 @@ impl Visitor<'_> {
|
||||||
{
|
{
|
||||||
type __MatchTy<T> = <T as ::fayalite::ty::Type>::SimValue;
|
type __MatchTy<T> = <T as ::fayalite::ty::Type>::SimValue;
|
||||||
let __match_value = #expr;
|
let __match_value = #expr;
|
||||||
let __match_value = {
|
// use method syntax to deduce what type to convert to
|
||||||
use ::fayalite::sim::value::match_sim_value::*;
|
let __match_value = ::fayalite::sim::value::match_sim_value::MatchSimValueHelper::new(__match_value)
|
||||||
// use method syntax to deduce the correct trait to call
|
.__fayalite_match_sim_value();
|
||||||
::fayalite::sim::value::match_sim_value::MatchSimValueHelper::new(__match_value).__fayalite_match_sim_value()
|
|
||||||
};
|
|
||||||
#match_token __match_value {
|
#match_token __match_value {
|
||||||
#(#arms)*
|
#(#arms)*
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,23 @@
|
||||||
//! }
|
//! }
|
||||||
//!
|
//!
|
||||||
//! #[hdl]
|
//! #[hdl]
|
||||||
//! fn destructure_to_sim_value<'a, T: Type>(v: impl ToSimValue<Type = MyStruct<T>>) {
|
//! fn destructure_inner<T: Type>(v: <MyStruct<T> as Type>::SimValue) {
|
||||||
|
//! #[hdl(sim)]
|
||||||
|
//! let MyStruct::<T> {
|
||||||
|
//! a,
|
||||||
|
//! mut b,
|
||||||
|
//! c,
|
||||||
|
//! } = v;
|
||||||
|
//!
|
||||||
|
//! // that gives these types:
|
||||||
|
//! let _: SimValue<UInt<8>> = a;
|
||||||
|
//! let _: SimValue<Bool> = b;
|
||||||
|
//! let _: SimValue<T> = c;
|
||||||
|
//! *b = false; // can modify b since mut was used
|
||||||
|
//! }
|
||||||
|
//!
|
||||||
|
//! #[hdl]
|
||||||
|
//! fn destructure_inner_ref<'a, T: Type>(v: &'a <MyStruct<T> as Type>::SimValue) {
|
||||||
//! #[hdl(sim)]
|
//! #[hdl(sim)]
|
||||||
//! let MyStruct::<T> {
|
//! let MyStruct::<T> {
|
||||||
//! a,
|
//! a,
|
||||||
|
|
@ -104,8 +120,25 @@
|
||||||
//! } = v;
|
//! } = v;
|
||||||
//!
|
//!
|
||||||
//! // that gives these types:
|
//! // that gives these types:
|
||||||
//! let _: SimValue<UInt<8>> = a;
|
//! let _: &'a SimValue<UInt<8>> = a;
|
||||||
//! let _: SimValue<Bool> = b;
|
//! let _: &'a SimValue<Bool> = b;
|
||||||
//! let _: SimValue<T> = c;
|
//! let _: &'a SimValue<T> = c;
|
||||||
|
//! }
|
||||||
|
//!
|
||||||
|
//! #[hdl]
|
||||||
|
//! fn destructure_inner_mut<'a, T: Type>(v: &'a mut <MyStruct<T> as Type>::SimValue) {
|
||||||
|
//! #[hdl(sim)]
|
||||||
|
//! let MyStruct::<T> {
|
||||||
|
//! a,
|
||||||
|
//! b,
|
||||||
|
//! c,
|
||||||
|
//! } = v;
|
||||||
|
//!
|
||||||
|
//! **b = true; // you can modify v by modifying b which borrows from it
|
||||||
|
//!
|
||||||
|
//! // that gives these types:
|
||||||
|
//! let _: &'a mut SimValue<UInt<8>> = a;
|
||||||
|
//! let _: &'a mut SimValue<Bool> = b;
|
||||||
|
//! let _: &'a mut SimValue<T> = c;
|
||||||
//! }
|
//! }
|
||||||
//! ```
|
//! ```
|
||||||
|
|
|
||||||
|
|
@ -72,15 +72,47 @@
|
||||||
//! }
|
//! }
|
||||||
//!
|
//!
|
||||||
//! #[hdl]
|
//! #[hdl]
|
||||||
//! fn match_to_sim_value<'a, T: Type>(v: impl ToSimValue<Type = MyEnum<T>>) {
|
//! fn match_inner_move<T: Type>(v: <MyEnum<T> as Type>::SimValue) -> String {
|
||||||
//! #[hdl(sim)]
|
//! #[hdl(sim)]
|
||||||
//! match v {
|
//! match v {
|
||||||
//! MyEnum::<T>::A => println!("got A"),
|
//! MyEnum::<T>::A => String::from("got A"),
|
||||||
//! MyEnum::<T>::B(b) => {
|
//! MyEnum::<T>::B(mut b) => {
|
||||||
//! let _: SimValue<Bool> = b; // b has this type
|
//! let _: SimValue<Bool> = b; // b has this type
|
||||||
//! println!("got B({b})");
|
//! let text = format!("got B({b})");
|
||||||
|
//! *b = true; // can modify b since mut was used
|
||||||
|
//! text
|
||||||
//! }
|
//! }
|
||||||
//! _ => println!("something else"),
|
//! _ => String::from("something else"),
|
||||||
|
//! }
|
||||||
|
//! }
|
||||||
|
//!
|
||||||
|
//! #[hdl]
|
||||||
|
//! fn match_inner_ref<'a, T: Type>(v: &'a <MyEnum<T> as Type>::SimValue) -> u32 {
|
||||||
|
//! #[hdl(sim)]
|
||||||
|
//! match v {
|
||||||
|
//! MyEnum::<T>::A => 1,
|
||||||
|
//! MyEnum::<T>::B(b) => {
|
||||||
|
//! let _: &'a SimValue<Bool> = b; // b has this type
|
||||||
|
//! println!("got B({b})");
|
||||||
|
//! 5
|
||||||
|
//! }
|
||||||
|
//! _ => 42,
|
||||||
|
//! }
|
||||||
|
//! }
|
||||||
|
//!
|
||||||
|
//! #[hdl]
|
||||||
|
//! fn match_inner_mut<'a, T: Type>(v: &'a mut <MyEnum<T> as Type>::SimValue) -> Option<&'a mut SimValue<T>> {
|
||||||
|
//! #[hdl(sim)]
|
||||||
|
//! match v {
|
||||||
|
//! MyEnum::<T>::A => None,
|
||||||
|
//! MyEnum::<T>::B(b) => {
|
||||||
|
//! println!("got B({b})");
|
||||||
|
//! **b = true; // you can modify v by modifying b which borrows from it
|
||||||
|
//! let _: &'a mut SimValue<Bool> = b; // b has this type
|
||||||
|
//! None
|
||||||
|
//! }
|
||||||
|
//! MyEnum::<T>::C(v) => Some(v), // you can return matched values
|
||||||
|
//! _ => None, // HDL enums can have invalid discriminants, so we need this extra match arm
|
||||||
//! }
|
//! }
|
||||||
//! }
|
//! }
|
||||||
//! ```
|
//! ```
|
||||||
|
|
|
||||||
|
|
@ -13,13 +13,13 @@ use crate::{
|
||||||
source_location::SourceLocation,
|
source_location::SourceLocation,
|
||||||
ty::{
|
ty::{
|
||||||
CanonicalType, MatchVariantWithoutScope, OpaqueSimValueSlice, OpaqueSimValueWriter,
|
CanonicalType, MatchVariantWithoutScope, OpaqueSimValueSlice, OpaqueSimValueWriter,
|
||||||
OpaqueSimValueWritten, StaticType, Type, TypeProperties, TypeWithDeref,
|
OpaqueSimValueWritten, SimValueDebug, StaticType, Type, TypeProperties, TypeWithDeref,
|
||||||
serde_impls::SerdeCanonicalType,
|
serde_impls::SerdeCanonicalType,
|
||||||
},
|
},
|
||||||
util::ConstUsize,
|
util::ConstUsize,
|
||||||
};
|
};
|
||||||
use serde::{Deserialize, Deserializer, Serialize, Serializer, de::Error};
|
use serde::{Deserialize, Deserializer, Serialize, Serializer, de::Error};
|
||||||
use std::{borrow::Cow, iter::FusedIterator, ops::Index};
|
use std::{borrow::Cow, fmt, iter::FusedIterator, ops::Index};
|
||||||
|
|
||||||
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
|
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
|
||||||
pub struct ArrayType<T: Type = CanonicalType, Len: Size = DynSize> {
|
pub struct ArrayType<T: Type = CanonicalType, Len: Size = DynSize> {
|
||||||
|
|
@ -28,8 +28,8 @@ pub struct ArrayType<T: Type = CanonicalType, Len: Size = DynSize> {
|
||||||
type_properties: TypeProperties,
|
type_properties: TypeProperties,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Type, Len: Size> std::fmt::Debug for ArrayType<T, Len> {
|
impl<T: Type, Len: Size> fmt::Debug for ArrayType<T, Len> {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
write!(f, "Array<{:?}, {}>", self.element, self.len())
|
write!(f, "Array<{:?}, {}>", self.element, self.len())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -182,6 +182,15 @@ impl<T: Type + Visit<State>, Len: Size, State: Visitor + ?Sized> Visit<State>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T: Type, Len: Size> SimValueDebug for ArrayType<T, Len> {
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<T: Type, Len: Size> Type for ArrayType<T, Len> {
|
impl<T: Type, Len: Size> Type for ArrayType<T, Len> {
|
||||||
type BaseType = Array;
|
type BaseType = Array;
|
||||||
type MaskType = ArrayType<T::MaskType, Len>;
|
type MaskType = ArrayType<T::MaskType, Len>;
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@ use crate::{
|
||||||
source_location::SourceLocation,
|
source_location::SourceLocation,
|
||||||
ty::{
|
ty::{
|
||||||
CanonicalType, MatchVariantWithoutScope, OpaqueSimValue, OpaqueSimValueSize,
|
CanonicalType, MatchVariantWithoutScope, OpaqueSimValue, OpaqueSimValueSize,
|
||||||
OpaqueSimValueSlice, OpaqueSimValueWriter, OpaqueSimValueWritten, StaticType, Type,
|
OpaqueSimValueSlice, OpaqueSimValueWriter, OpaqueSimValueWritten, SimValueDebug,
|
||||||
TypeProperties, TypeWithDeref, impl_match_variant_as_self,
|
StaticType, Type, TypeProperties, TypeWithDeref, impl_match_variant_as_self,
|
||||||
},
|
},
|
||||||
util::HashMap,
|
util::HashMap,
|
||||||
};
|
};
|
||||||
|
|
@ -271,6 +271,15 @@ impl Type for Bundle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl SimValueDebug for Bundle {
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub trait BundleType: Type<BaseType = Bundle> {
|
pub trait BundleType: Type<BaseType = Bundle> {
|
||||||
type Builder: Default;
|
type Builder: Default;
|
||||||
fn fields(&self) -> Interned<[BundleField]>;
|
fn fields(&self) -> Interned<[BundleField]>;
|
||||||
|
|
@ -471,6 +480,14 @@ macro_rules! impl_tuples {
|
||||||
#[var($var)]
|
#[var($var)]
|
||||||
})*]
|
})*]
|
||||||
}
|
}
|
||||||
|
impl<$($T: Type,)*> SimValueDebug for ($($T,)*) {
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
impl<$($T: Type,)*> Type for ($($T,)*) {
|
impl<$($T: Type,)*> Type for ($($T,)*) {
|
||||||
type BaseType = Bundle;
|
type BaseType = Bundle;
|
||||||
type MaskType = ($($T::MaskType,)*);
|
type MaskType = ($($T::MaskType,)*);
|
||||||
|
|
@ -773,6 +790,15 @@ impl_tuples! {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T: ?Sized + Send + Sync + 'static> SimValueDebug for PhantomData<T> {
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<T: ?Sized + Send + Sync + 'static> Type for PhantomData<T> {
|
impl<T: ?Sized + Send + Sync + 'static> Type for PhantomData<T> {
|
||||||
type BaseType = Bundle;
|
type BaseType = Bundle;
|
||||||
type MaskType = ();
|
type MaskType = ();
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||||
// See Notices.txt for copyright information
|
// See Notices.txt for copyright information
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
expr::{Expr, ValueType},
|
expr::{Expr, ValueType},
|
||||||
hdl,
|
hdl,
|
||||||
|
|
@ -9,10 +10,12 @@ use crate::{
|
||||||
source_location::SourceLocation,
|
source_location::SourceLocation,
|
||||||
ty::{
|
ty::{
|
||||||
CanonicalType, OpaqueSimValueSize, OpaqueSimValueSlice, OpaqueSimValueWriter,
|
CanonicalType, OpaqueSimValueSize, OpaqueSimValueSlice, OpaqueSimValueWriter,
|
||||||
OpaqueSimValueWritten, StaticType, Type, TypeProperties, impl_match_variant_as_self,
|
OpaqueSimValueWritten, SimValueDebug, StaticType, Type, TypeProperties,
|
||||||
|
impl_match_variant_as_self,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use bitvec::{bits, order::Lsb0};
|
use bitvec::{bits, order::Lsb0};
|
||||||
|
use std::fmt;
|
||||||
|
|
||||||
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, Default)]
|
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, Default)]
|
||||||
pub struct Clock;
|
pub struct Clock;
|
||||||
|
|
@ -69,6 +72,15 @@ impl Type for Clock {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl SimValueDebug for Clock {
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Clock {
|
impl Clock {
|
||||||
pub fn type_properties(self) -> TypeProperties {
|
pub fn type_properties(self) -> TypeProperties {
|
||||||
Self::TYPE_PROPERTIES
|
Self::TYPE_PROPERTIES
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
// See Notices.txt for copyright information
|
// See Notices.txt for copyright information
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
expr::{Expr, HdlPartialEq, HdlPartialEqImpl, ToExpr, ValueType, ops::VariantAccess},
|
expr::{Expr, ToExpr, ValueType, ops::VariantAccess},
|
||||||
hdl,
|
hdl,
|
||||||
int::{Bool, UIntValue},
|
int::{Bool, UIntValue},
|
||||||
intern::{Intern, Interned},
|
intern::{Intern, Interned},
|
||||||
|
|
@ -10,18 +10,18 @@ use crate::{
|
||||||
EnumMatchVariantAndInactiveScopeImpl, EnumMatchVariantsIterImpl, Scope, connect,
|
EnumMatchVariantAndInactiveScopeImpl, EnumMatchVariantsIterImpl, Scope, connect,
|
||||||
enum_match_variants_helper, incomplete_wire, wire,
|
enum_match_variants_helper, incomplete_wire, wire,
|
||||||
},
|
},
|
||||||
sim::value::SimValue,
|
sim::value::{SimValue, ToSimValue, ToSimValueWithType},
|
||||||
source_location::SourceLocation,
|
source_location::SourceLocation,
|
||||||
ty::{
|
ty::{
|
||||||
CanonicalType, MatchVariantAndInactiveScope, OpaqueSimValue, OpaqueSimValueSize,
|
CanonicalType, MatchVariantAndInactiveScope, OpaqueSimValue, OpaqueSimValueSize,
|
||||||
OpaqueSimValueSlice, OpaqueSimValueWriter, OpaqueSimValueWritten, StaticType, Type,
|
OpaqueSimValueSlice, OpaqueSimValueWriter, OpaqueSimValueWritten, SimValueDebug,
|
||||||
TypeProperties,
|
StaticType, Type, TypeProperties,
|
||||||
},
|
},
|
||||||
util::HashMap,
|
util::HashMap,
|
||||||
};
|
};
|
||||||
use bitvec::{order::Lsb0, slice::BitSlice, view::BitView};
|
use bitvec::{order::Lsb0, slice::BitSlice, view::BitView};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::{borrow::Cow, convert::Infallible, fmt, iter::FusedIterator, sync::Arc};
|
use std::{convert::Infallible, fmt, iter::FusedIterator, sync::Arc};
|
||||||
|
|
||||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug, Serialize, Deserialize)]
|
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug, Serialize, Deserialize)]
|
||||||
pub struct EnumVariant {
|
pub struct EnumVariant {
|
||||||
|
|
@ -410,6 +410,15 @@ impl Type for Enum {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl SimValueDebug for Enum {
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, PartialEq, Eq, Hash, Debug, Default)]
|
#[derive(Clone, PartialEq, Eq, Hash, Debug, Default)]
|
||||||
pub struct EnumPaddingSimValue {
|
pub struct EnumPaddingSimValue {
|
||||||
bits: Option<UIntValue>,
|
bits: Option<UIntValue>,
|
||||||
|
|
@ -723,95 +732,12 @@ pub fn enum_type_to_sim_builder<T: EnumType>(v: T) -> T::SimBuilder {
|
||||||
v.into()
|
v.into()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[hdl]
|
#[hdl(cmp_eq)]
|
||||||
pub enum HdlOption<T: Type> {
|
pub enum HdlOption<T: Type> {
|
||||||
HdlNone,
|
HdlNone,
|
||||||
HdlSome(T),
|
HdlSome(T),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Lhs: Type + HdlPartialEqImpl<Rhs>, Rhs: Type> HdlPartialEqImpl<HdlOption<Rhs>>
|
|
||||||
for HdlOption<Lhs>
|
|
||||||
{
|
|
||||||
fn cmp_value_eq(
|
|
||||||
lhs: Self,
|
|
||||||
lhs_value: Cow<'_, Self::SimValue>,
|
|
||||||
rhs: HdlOption<Rhs>,
|
|
||||||
rhs_value: Cow<'_, <HdlOption<Rhs> as Type>::SimValue>,
|
|
||||||
) -> bool {
|
|
||||||
type SimValueMatch<T> = <T as Type>::SimValue;
|
|
||||||
match (&*lhs_value, &*rhs_value) {
|
|
||||||
(SimValueMatch::<Self>::HdlNone(_), SimValueMatch::<HdlOption<Rhs>>::HdlNone(_)) => {
|
|
||||||
true
|
|
||||||
}
|
|
||||||
(SimValueMatch::<Self>::HdlSome(..), SimValueMatch::<HdlOption<Rhs>>::HdlNone(_))
|
|
||||||
| (SimValueMatch::<Self>::HdlNone(_), SimValueMatch::<HdlOption<Rhs>>::HdlSome(..)) => {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
(
|
|
||||||
SimValueMatch::<Self>::HdlSome(l, _),
|
|
||||||
SimValueMatch::<HdlOption<Rhs>>::HdlSome(r, _),
|
|
||||||
) => HdlPartialEqImpl::cmp_value_eq(
|
|
||||||
lhs.HdlSome,
|
|
||||||
Cow::Borrowed(&**l),
|
|
||||||
rhs.HdlSome,
|
|
||||||
Cow::Borrowed(&**r),
|
|
||||||
),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[hdl]
|
|
||||||
fn cmp_expr_eq(lhs: Expr<Self>, rhs: Expr<HdlOption<Rhs>>) -> Expr<Bool> {
|
|
||||||
#[hdl]
|
|
||||||
let cmp_eq = wire();
|
|
||||||
#[hdl]
|
|
||||||
match lhs {
|
|
||||||
HdlSome(lhs) =>
|
|
||||||
{
|
|
||||||
#[hdl]
|
|
||||||
match rhs {
|
|
||||||
HdlSome(rhs) => connect(cmp_eq, lhs.cmp_eq(rhs)),
|
|
||||||
HdlNone => connect(cmp_eq, false),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
HdlNone =>
|
|
||||||
{
|
|
||||||
#[hdl]
|
|
||||||
match rhs {
|
|
||||||
HdlSome(_) => connect(cmp_eq, false),
|
|
||||||
HdlNone => connect(cmp_eq, true),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cmp_eq
|
|
||||||
}
|
|
||||||
|
|
||||||
#[hdl]
|
|
||||||
fn cmp_expr_ne(lhs: Expr<Self>, rhs: Expr<HdlOption<Rhs>>) -> Expr<Bool> {
|
|
||||||
#[hdl]
|
|
||||||
let cmp_ne = wire();
|
|
||||||
#[hdl]
|
|
||||||
match lhs {
|
|
||||||
HdlSome(lhs) =>
|
|
||||||
{
|
|
||||||
#[hdl]
|
|
||||||
match rhs {
|
|
||||||
HdlSome(rhs) => connect(cmp_ne, lhs.cmp_ne(rhs)),
|
|
||||||
HdlNone => connect(cmp_ne, true),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
HdlNone =>
|
|
||||||
{
|
|
||||||
#[hdl]
|
|
||||||
match rhs {
|
|
||||||
HdlSome(_) => connect(cmp_ne, true),
|
|
||||||
HdlNone => connect(cmp_ne, false),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cmp_ne
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn HdlNone<T: StaticType>() -> Expr<HdlOption<T>> {
|
pub fn HdlNone<T: StaticType>() -> Expr<HdlOption<T>> {
|
||||||
HdlOption[T::TYPE].HdlNone()
|
HdlOption[T::TYPE].HdlNone()
|
||||||
|
|
@ -823,6 +749,123 @@ pub fn HdlSome<T: Type>(value: impl ToExpr<Type = T>) -> Expr<HdlOption<T>> {
|
||||||
HdlOption[value.ty()].HdlSome(value)
|
HdlOption[value.ty()].HdlSome(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T: Type> From<SimValue<HdlOption<T>>> for Option<SimValue<T>> {
|
||||||
|
#[hdl]
|
||||||
|
fn from(value: SimValue<HdlOption<T>>) -> Self {
|
||||||
|
#[hdl(sim)]
|
||||||
|
match value {
|
||||||
|
HdlSome(v) => Some(v),
|
||||||
|
HdlNone => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, T: Type> From<&'a SimValue<HdlOption<T>>> for Option<&'a SimValue<T>> {
|
||||||
|
#[hdl]
|
||||||
|
fn from(value: &'a SimValue<HdlOption<T>>) -> Self {
|
||||||
|
#[hdl(sim)]
|
||||||
|
match value {
|
||||||
|
HdlSome(v) => Some(v),
|
||||||
|
HdlNone => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, T: Type> From<&'a mut SimValue<HdlOption<T>>> for Option<&'a mut SimValue<T>> {
|
||||||
|
#[hdl]
|
||||||
|
fn from(value: &'a mut SimValue<HdlOption<T>>) -> Self {
|
||||||
|
#[hdl(sim)]
|
||||||
|
match value {
|
||||||
|
HdlSome(v) => Some(v),
|
||||||
|
HdlNone => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: ValueType<Type: StaticType<MaskType: StaticType>>> ValueType for Option<T> {
|
||||||
|
type Type = HdlOption<T::Type>;
|
||||||
|
type ValueCategory = T::ValueCategory;
|
||||||
|
|
||||||
|
fn ty(&self) -> Self::Type {
|
||||||
|
StaticType::TYPE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type, V: ToSimValueWithType<T>> ToSimValueWithType<HdlOption<T>> for Option<V> {
|
||||||
|
#[hdl]
|
||||||
|
fn to_sim_value_with_type(&self, ty: HdlOption<T>) -> SimValue<HdlOption<T>> {
|
||||||
|
match self {
|
||||||
|
Some(v) =>
|
||||||
|
{
|
||||||
|
#[hdl(sim)]
|
||||||
|
ty.HdlSome(v)
|
||||||
|
}
|
||||||
|
None =>
|
||||||
|
{
|
||||||
|
#[hdl(sim)]
|
||||||
|
ty.HdlNone()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[hdl]
|
||||||
|
fn into_sim_value_with_type(self, ty: HdlOption<T>) -> SimValue<HdlOption<T>> {
|
||||||
|
match self {
|
||||||
|
Some(v) =>
|
||||||
|
{
|
||||||
|
#[hdl(sim)]
|
||||||
|
ty.HdlSome(v)
|
||||||
|
}
|
||||||
|
None =>
|
||||||
|
{
|
||||||
|
#[hdl(sim)]
|
||||||
|
ty.HdlNone()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: ToSimValue<Type: StaticType<MaskType: StaticType>>> ToSimValue for Option<T> {
|
||||||
|
#[hdl]
|
||||||
|
fn to_sim_value(&self) -> SimValue<Self::Type> {
|
||||||
|
match self {
|
||||||
|
Some(v) =>
|
||||||
|
{
|
||||||
|
#[hdl(sim)]
|
||||||
|
HdlSome(v)
|
||||||
|
}
|
||||||
|
None =>
|
||||||
|
{
|
||||||
|
#[hdl(sim)]
|
||||||
|
HdlNone()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[hdl]
|
||||||
|
fn into_sim_value(self) -> SimValue<Self::Type> {
|
||||||
|
match self {
|
||||||
|
Some(v) =>
|
||||||
|
{
|
||||||
|
#[hdl(sim)]
|
||||||
|
HdlSome(v)
|
||||||
|
}
|
||||||
|
None =>
|
||||||
|
{
|
||||||
|
#[hdl(sim)]
|
||||||
|
HdlNone()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: ToExpr<Type: StaticType<MaskType: StaticType>>> ToExpr for Option<T> {
|
||||||
|
fn to_expr(&self) -> Expr<Self::Type> {
|
||||||
|
match self {
|
||||||
|
Some(v) => HdlSome(v),
|
||||||
|
None => HdlNone(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<T: Type> HdlOption<T> {
|
impl<T: Type> HdlOption<T> {
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
pub fn try_map<R: Type, E>(
|
pub fn try_map<R: Type, E>(
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ use crate::{
|
||||||
reg::Reg,
|
reg::Reg,
|
||||||
reset::{AsyncReset, Reset, ResetType, ResetTypeDispatch, SyncReset},
|
reset::{AsyncReset, Reset, ResetType, ResetTypeDispatch, SyncReset},
|
||||||
sim::value::{SimValue, ToSimValue, ToSimValueWithType},
|
sim::value::{SimValue, ToSimValue, ToSimValueWithType},
|
||||||
ty::{CanonicalType, OpaqueSimValue, StaticType, Type, TypeWithDeref},
|
ty::{CanonicalType, OpaqueSimValue, StaticType, TraceAsString, Type, TypeWithDeref},
|
||||||
util::{ConstBool, ConstUsize},
|
util::{ConstBool, ConstUsize},
|
||||||
wire::Wire,
|
wire::Wire,
|
||||||
};
|
};
|
||||||
|
|
@ -218,6 +218,8 @@ expr_enum! {
|
||||||
SliceSInt(ops::SliceSInt),
|
SliceSInt(ops::SliceSInt),
|
||||||
CastToBits(ops::CastToBits),
|
CastToBits(ops::CastToBits),
|
||||||
CastBitsTo(ops::CastBitsTo),
|
CastBitsTo(ops::CastBitsTo),
|
||||||
|
ToTraceAsString(ops::ToTraceAsString),
|
||||||
|
TraceAsStringAsInner(ops::TraceAsStringAsInner),
|
||||||
ModuleIO(ModuleIO<CanonicalType>),
|
ModuleIO(ModuleIO<CanonicalType>),
|
||||||
Instance(Instance<Bundle>),
|
Instance(Instance<Bundle>),
|
||||||
Wire(Wire<CanonicalType>),
|
Wire(Wire<CanonicalType>),
|
||||||
|
|
@ -389,6 +391,35 @@ impl<T: Type> Expr<T> {
|
||||||
__flow: this.__flow,
|
__flow: this.__flow,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#[track_caller]
|
||||||
|
pub fn as_trace_as_string(this: Self, ty: TraceAsString<T>) -> Expr<TraceAsString<T>> {
|
||||||
|
assert_eq!(this.ty(), ty.inner_ty());
|
||||||
|
ops::ToTraceAsString::new(Expr::canonical(this), ty).to_expr()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Expr<CanonicalType> {
|
||||||
|
pub fn unwrap_transparent_types(mut this: Self) -> Expr<CanonicalType> {
|
||||||
|
loop {
|
||||||
|
match this.ty() {
|
||||||
|
CanonicalType::UInt(_)
|
||||||
|
| CanonicalType::SInt(_)
|
||||||
|
| CanonicalType::Bool(_)
|
||||||
|
| CanonicalType::Array(_)
|
||||||
|
| CanonicalType::Enum(_)
|
||||||
|
| CanonicalType::Bundle(_)
|
||||||
|
| CanonicalType::AsyncReset(_)
|
||||||
|
| CanonicalType::SyncReset(_)
|
||||||
|
| CanonicalType::Reset(_)
|
||||||
|
| CanonicalType::Clock(_)
|
||||||
|
| CanonicalType::PhantomConst(_)
|
||||||
|
| CanonicalType::DynSimOnly(_) => return this,
|
||||||
|
CanonicalType::TraceAsString(_) => {
|
||||||
|
this = *Expr::<TraceAsString>::from_canonical(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Type> ToLiteralBits for Expr<T> {
|
impl<T: Type> ToLiteralBits for Expr<T> {
|
||||||
|
|
@ -1692,3 +1723,188 @@ impl<'a, T: Type> ToSimValueInner<'a> for &'a SimValue<T> {
|
||||||
Cow::Borrowed(&**this)
|
Cow::Borrowed(&**this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub trait ToTraceAsString: ValueType {
|
||||||
|
type Output: ValueType<Type = TraceAsString<Self::Type>, ValueCategory = Self::ValueCategory>;
|
||||||
|
fn to_trace_as_string_with_ty(&self, ty: TraceAsString<Self::Type>) -> Self::Output;
|
||||||
|
fn into_trace_as_string_with_ty(self, ty: TraceAsString<Self::Type>) -> Self::Output
|
||||||
|
where
|
||||||
|
Self: Sized;
|
||||||
|
fn to_trace_as_string(&self) -> Self::Output;
|
||||||
|
fn into_trace_as_string(self) -> Self::Output
|
||||||
|
where
|
||||||
|
Self: Sized;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<
|
||||||
|
T: ?Sized
|
||||||
|
+ ValueType
|
||||||
|
+ ToTraceAsStringImpl<<Self as ValueType>::Type, <Self as ValueType>::ValueCategory>,
|
||||||
|
> ToTraceAsString for T
|
||||||
|
{
|
||||||
|
type Output = T::ImplOutput;
|
||||||
|
fn to_trace_as_string_with_ty(&self, ty: TraceAsString<Self::Type>) -> Self::Output {
|
||||||
|
Self::to_trace_as_string_with_ty_impl(self, ty)
|
||||||
|
}
|
||||||
|
fn into_trace_as_string_with_ty(self, ty: TraceAsString<Self::Type>) -> Self::Output
|
||||||
|
where
|
||||||
|
Self: Sized,
|
||||||
|
{
|
||||||
|
Self::into_trace_as_string_with_ty_impl(self, ty)
|
||||||
|
}
|
||||||
|
fn to_trace_as_string(&self) -> Self::Output {
|
||||||
|
Self::to_trace_as_string_impl(self)
|
||||||
|
}
|
||||||
|
fn into_trace_as_string(self) -> Self::Output
|
||||||
|
where
|
||||||
|
Self: Sized,
|
||||||
|
{
|
||||||
|
Self::into_trace_as_string_impl(self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait ToTraceAsStringImpl<Ty: Type, C: value_category::ValueCategory> {
|
||||||
|
type ImplOutput: ValueType<Type = TraceAsString<Ty>, ValueCategory = C>;
|
||||||
|
fn to_trace_as_string_impl(this: &Self) -> Self::ImplOutput;
|
||||||
|
fn into_trace_as_string_impl(this: Self) -> Self::ImplOutput
|
||||||
|
where
|
||||||
|
Self: Sized;
|
||||||
|
fn to_trace_as_string_with_ty_impl(this: &Self, ty: TraceAsString<Ty>) -> Self::ImplOutput;
|
||||||
|
fn into_trace_as_string_with_ty_impl(this: Self, ty: TraceAsString<Ty>) -> Self::ImplOutput
|
||||||
|
where
|
||||||
|
Self: Sized;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: ?Sized + crate::sim::value::ToSimValue>
|
||||||
|
ToTraceAsStringImpl<T::Type, value_category::ValueCategoryValue> for T
|
||||||
|
{
|
||||||
|
type ImplOutput = crate::ty::TraceAsStringSimValue<T::Type>;
|
||||||
|
|
||||||
|
fn to_trace_as_string_impl(this: &Self) -> Self::ImplOutput {
|
||||||
|
crate::ty::TraceAsStringSimValue::new(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn into_trace_as_string_impl(this: Self) -> Self::ImplOutput
|
||||||
|
where
|
||||||
|
Self: Sized,
|
||||||
|
{
|
||||||
|
crate::ty::TraceAsStringSimValue::new(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn to_trace_as_string_with_ty_impl(
|
||||||
|
this: &Self,
|
||||||
|
ty: TraceAsString<T::Type>,
|
||||||
|
) -> Self::ImplOutput {
|
||||||
|
crate::ty::TraceAsStringSimValue::new_with_ty(this, ty)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn into_trace_as_string_with_ty_impl(this: Self, ty: TraceAsString<T::Type>) -> Self::ImplOutput
|
||||||
|
where
|
||||||
|
Self: Sized,
|
||||||
|
{
|
||||||
|
crate::ty::TraceAsStringSimValue::new_with_ty(this, ty)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: ?Sized + crate::sim::value::ToSimValue>
|
||||||
|
ToTraceAsStringImpl<T::Type, value_category::ValueCategorySimValue> for T
|
||||||
|
{
|
||||||
|
type ImplOutput = SimValue<TraceAsString<T::Type>>;
|
||||||
|
|
||||||
|
fn to_trace_as_string_impl(this: &Self) -> Self::ImplOutput {
|
||||||
|
crate::ty::TraceAsStringSimValue::new(this).into_sim_value()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn into_trace_as_string_impl(this: Self) -> Self::ImplOutput
|
||||||
|
where
|
||||||
|
Self: Sized,
|
||||||
|
{
|
||||||
|
crate::ty::TraceAsStringSimValue::new(this).into_sim_value()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn to_trace_as_string_with_ty_impl(
|
||||||
|
this: &Self,
|
||||||
|
ty: TraceAsString<T::Type>,
|
||||||
|
) -> Self::ImplOutput {
|
||||||
|
crate::ty::TraceAsStringSimValue::new_with_ty(this, ty).into_sim_value()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn into_trace_as_string_with_ty_impl(this: Self, ty: TraceAsString<T::Type>) -> Self::ImplOutput
|
||||||
|
where
|
||||||
|
Self: Sized,
|
||||||
|
{
|
||||||
|
crate::ty::TraceAsStringSimValue::new_with_ty(this, ty).into_sim_value()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: ?Sized + ToExpr> ToTraceAsStringImpl<T::Type, value_category::ValueCategoryExpr> for T {
|
||||||
|
type ImplOutput = Expr<TraceAsString<T::Type>>;
|
||||||
|
|
||||||
|
fn to_trace_as_string_impl(this: &Self) -> Self::ImplOutput {
|
||||||
|
let this = this.to_expr();
|
||||||
|
ops::ToTraceAsString::new(Expr::canonical(this), TraceAsString::new(this.ty())).to_expr()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn into_trace_as_string_impl(this: Self) -> Self::ImplOutput
|
||||||
|
where
|
||||||
|
Self: Sized,
|
||||||
|
{
|
||||||
|
let this = this.to_expr();
|
||||||
|
ops::ToTraceAsString::new(Expr::canonical(this), TraceAsString::new(this.ty())).to_expr()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn to_trace_as_string_with_ty_impl(
|
||||||
|
this: &Self,
|
||||||
|
ty: TraceAsString<T::Type>,
|
||||||
|
) -> Self::ImplOutput {
|
||||||
|
let this = this.to_expr();
|
||||||
|
ops::ToTraceAsString::new(
|
||||||
|
Expr::canonical(this),
|
||||||
|
ty.with_new_inner_ty(this.ty().intern_sized()),
|
||||||
|
)
|
||||||
|
.to_expr()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn into_trace_as_string_with_ty_impl(this: Self, ty: TraceAsString<T::Type>) -> Self::ImplOutput
|
||||||
|
where
|
||||||
|
Self: Sized,
|
||||||
|
{
|
||||||
|
let this = this.to_expr();
|
||||||
|
ops::ToTraceAsString::new(
|
||||||
|
Expr::canonical(this),
|
||||||
|
ty.with_new_inner_ty(this.ty().intern_sized()),
|
||||||
|
)
|
||||||
|
.to_expr()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: ?Sized + ValueType> ToTraceAsStringImpl<T::Type, value_category::ValueCategoryValueless>
|
||||||
|
for T
|
||||||
|
{
|
||||||
|
type ImplOutput = Valueless<TraceAsString<T::Type>>;
|
||||||
|
|
||||||
|
fn to_trace_as_string_impl(this: &Self) -> Self::ImplOutput {
|
||||||
|
Valueless::new(TraceAsString::new(this.ty()))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn into_trace_as_string_impl(this: Self) -> Self::ImplOutput
|
||||||
|
where
|
||||||
|
Self: Sized,
|
||||||
|
{
|
||||||
|
Valueless::new(TraceAsString::new(this.ty()))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn to_trace_as_string_with_ty_impl(
|
||||||
|
this: &Self,
|
||||||
|
ty: TraceAsString<T::Type>,
|
||||||
|
) -> Self::ImplOutput {
|
||||||
|
Valueless::new(ty.with_new_inner_ty(this.ty().intern_sized()))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn into_trace_as_string_with_ty_impl(this: Self, ty: TraceAsString<T::Type>) -> Self::ImplOutput
|
||||||
|
where
|
||||||
|
Self: Sized,
|
||||||
|
{
|
||||||
|
Valueless::new(ty.with_new_inner_ty(this.ty().intern_sized()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,8 @@ use crate::{
|
||||||
ToExpr, ToLiteralBits, ToSimValueInner, ToValueless, ValueType, Valueless,
|
ToExpr, ToLiteralBits, ToSimValueInner, ToValueless, ValueType, Valueless,
|
||||||
target::{
|
target::{
|
||||||
GetTarget, Target, TargetPathArrayElement, TargetPathBundleField,
|
GetTarget, Target, TargetPathArrayElement, TargetPathBundleField,
|
||||||
TargetPathDynArrayElement, TargetPathElement,
|
TargetPathDynArrayElement, TargetPathElement, TargetPathToTraceAsString,
|
||||||
|
TargetPathTraceAsStringInner,
|
||||||
},
|
},
|
||||||
value_category::ValueCategoryExpr,
|
value_category::ValueCategoryExpr,
|
||||||
},
|
},
|
||||||
|
|
@ -27,7 +28,7 @@ use crate::{
|
||||||
ToSyncReset,
|
ToSyncReset,
|
||||||
},
|
},
|
||||||
sim::value::{SimValue, ToSimValue},
|
sim::value::{SimValue, ToSimValue},
|
||||||
ty::{CanonicalType, StaticType, Type},
|
ty::{CanonicalType, StaticType, TraceAsString, Type},
|
||||||
util::ConstUsize,
|
util::ConstUsize,
|
||||||
};
|
};
|
||||||
use bitvec::{order::Lsb0, slice::BitSlice, vec::BitVec, view::BitView};
|
use bitvec::{order::Lsb0, slice::BitSlice, vec::BitVec, view::BitView};
|
||||||
|
|
@ -44,6 +45,9 @@ use std::{
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test_ops_impls;
|
||||||
|
|
||||||
macro_rules! make_impls {
|
macro_rules! make_impls {
|
||||||
(
|
(
|
||||||
$([$($args:tt)*])?
|
$([$($args:tt)*])?
|
||||||
|
|
@ -583,9 +587,6 @@ macro_rules! make_impls {
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub(crate) use make_impls;
|
pub(crate) use make_impls;
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod test_ops_impls;
|
|
||||||
|
|
||||||
macro_rules! impl_simple_binary_op_trait {
|
macro_rules! impl_simple_binary_op_trait {
|
||||||
(
|
(
|
||||||
[$($LLifetimes:tt)*][$($LBounds:tt)*] ($($L:tt)*),
|
[$($LLifetimes:tt)*][$($LBounds:tt)*] ($($L:tt)*),
|
||||||
|
|
@ -4694,3 +4695,189 @@ impl<This: ExprFromIterator<A>, A> FromIterator<A> for Expr<This> {
|
||||||
This::expr_from_iter(iter)
|
This::expr_from_iter(iter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
|
||||||
|
pub struct ToTraceAsString<T: Type = CanonicalType> {
|
||||||
|
inner: Expr<CanonicalType>,
|
||||||
|
ty: TraceAsString<T>,
|
||||||
|
literal_bits: Result<Interned<BitSlice>, NotALiteralExpr>,
|
||||||
|
target: Option<Interned<Target>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type> fmt::Debug for ToTraceAsString<T> {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
let Self {
|
||||||
|
inner,
|
||||||
|
ty: _,
|
||||||
|
literal_bits: _,
|
||||||
|
target: _,
|
||||||
|
} = self;
|
||||||
|
f.debug_struct("ToTraceAsString")
|
||||||
|
.field("inner", inner)
|
||||||
|
.finish_non_exhaustive()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type> ToTraceAsString<T> {
|
||||||
|
pub fn new(inner: Expr<CanonicalType>, ty: TraceAsString<T>) -> Self {
|
||||||
|
assert_eq!(inner.ty(), ty.inner_ty().canonical());
|
||||||
|
let literal_bits = inner.to_literal_bits();
|
||||||
|
let target = inner.target().map(|base| {
|
||||||
|
Intern::intern_sized(
|
||||||
|
base.join(TargetPathElement::intern_sized(
|
||||||
|
TargetPathToTraceAsString {
|
||||||
|
ty: ty.canonical_trace_as_string(),
|
||||||
|
}
|
||||||
|
.into(),
|
||||||
|
))
|
||||||
|
.canonicalized(),
|
||||||
|
)
|
||||||
|
});
|
||||||
|
Self {
|
||||||
|
inner,
|
||||||
|
ty,
|
||||||
|
literal_bits,
|
||||||
|
target,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn inner(self) -> Expr<CanonicalType> {
|
||||||
|
self.inner
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type> GetTarget for ToTraceAsString<T> {
|
||||||
|
fn target(&self) -> Option<Interned<Target>> {
|
||||||
|
self.target
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type> ToLiteralBits for ToTraceAsString<T> {
|
||||||
|
fn to_literal_bits(&self) -> Result<Interned<BitSlice>, NotALiteralExpr> {
|
||||||
|
self.literal_bits
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type> ValueType for ToTraceAsString<T> {
|
||||||
|
type Type = TraceAsString<T>;
|
||||||
|
type ValueCategory = ValueCategoryExpr;
|
||||||
|
|
||||||
|
fn ty(&self) -> Self::Type {
|
||||||
|
self.ty
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type> ToExpr for ToTraceAsString<T> {
|
||||||
|
fn to_expr(&self) -> Expr<Self::Type> {
|
||||||
|
Expr {
|
||||||
|
__enum: ExprEnum::ToTraceAsString(ToTraceAsString {
|
||||||
|
inner: self.inner,
|
||||||
|
ty: self.ty.canonical_trace_as_string(),
|
||||||
|
literal_bits: self.literal_bits,
|
||||||
|
target: self.target,
|
||||||
|
})
|
||||||
|
.intern(),
|
||||||
|
__ty: self.ty,
|
||||||
|
__flow: Expr::flow(self.inner),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
|
||||||
|
pub struct TraceAsStringAsInner<T: Type = CanonicalType> {
|
||||||
|
arg: Expr<TraceAsString<CanonicalType>>,
|
||||||
|
ty: T,
|
||||||
|
literal_bits: Result<Interned<BitSlice>, NotALiteralExpr>,
|
||||||
|
target: Option<Interned<Target>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type> fmt::Debug for TraceAsStringAsInner<T> {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
let Self {
|
||||||
|
arg,
|
||||||
|
ty: _,
|
||||||
|
literal_bits: _,
|
||||||
|
target: _,
|
||||||
|
} = self;
|
||||||
|
f.debug_struct("TraceAsStringAsInner")
|
||||||
|
.field("arg", arg)
|
||||||
|
.finish_non_exhaustive()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type> TraceAsStringAsInner<T> {
|
||||||
|
pub fn from_arg_and_ty(arg: Expr<TraceAsString<CanonicalType>>, ty: T) -> Self {
|
||||||
|
assert_eq!(arg.ty().inner_ty(), ty.canonical());
|
||||||
|
let literal_bits = arg.to_literal_bits();
|
||||||
|
let target = arg.target().map(|base| {
|
||||||
|
Intern::intern_sized(
|
||||||
|
base.join(TargetPathElement::intern_sized(
|
||||||
|
TargetPathTraceAsStringInner {}.into(),
|
||||||
|
))
|
||||||
|
.canonicalized(),
|
||||||
|
)
|
||||||
|
});
|
||||||
|
Self {
|
||||||
|
arg,
|
||||||
|
ty,
|
||||||
|
literal_bits,
|
||||||
|
target,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn new(arg: Expr<TraceAsString<T>>) -> Self {
|
||||||
|
Self::from_arg_and_ty(
|
||||||
|
Expr {
|
||||||
|
__enum: arg.__enum,
|
||||||
|
__ty: arg.__ty.canonical_trace_as_string(),
|
||||||
|
__flow: arg.__flow,
|
||||||
|
},
|
||||||
|
arg.ty().inner_ty(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
pub fn arg(self) -> Expr<TraceAsString<CanonicalType>> {
|
||||||
|
self.arg
|
||||||
|
}
|
||||||
|
pub fn arg_typed(self) -> Expr<TraceAsString<T>> {
|
||||||
|
Expr {
|
||||||
|
__enum: self.arg.__enum,
|
||||||
|
__ty: TraceAsString::from_canonical_trace_as_string(self.arg.__ty),
|
||||||
|
__flow: self.arg.__flow,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type> GetTarget for TraceAsStringAsInner<T> {
|
||||||
|
fn target(&self) -> Option<Interned<Target>> {
|
||||||
|
self.target
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type> ToLiteralBits for TraceAsStringAsInner<T> {
|
||||||
|
fn to_literal_bits(&self) -> Result<Interned<BitSlice>, NotALiteralExpr> {
|
||||||
|
self.literal_bits
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type> ValueType for TraceAsStringAsInner<T> {
|
||||||
|
type Type = T;
|
||||||
|
type ValueCategory = ValueCategoryExpr;
|
||||||
|
|
||||||
|
fn ty(&self) -> Self::Type {
|
||||||
|
self.ty
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type> ToExpr for TraceAsStringAsInner<T> {
|
||||||
|
fn to_expr(&self) -> Expr<Self::Type> {
|
||||||
|
Expr {
|
||||||
|
__enum: ExprEnum::TraceAsStringAsInner(TraceAsStringAsInner {
|
||||||
|
arg: self.arg,
|
||||||
|
ty: self.ty.canonical(),
|
||||||
|
literal_bits: self.literal_bits,
|
||||||
|
target: self.target,
|
||||||
|
})
|
||||||
|
.intern(),
|
||||||
|
__ty: self.ty,
|
||||||
|
__flow: Expr::flow(self.arg),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ use crate::{
|
||||||
reg::Reg,
|
reg::Reg,
|
||||||
reset::{AsyncReset, Reset, ResetType, ResetTypeDispatch, SyncReset},
|
reset::{AsyncReset, Reset, ResetType, ResetTypeDispatch, SyncReset},
|
||||||
source_location::SourceLocation,
|
source_location::SourceLocation,
|
||||||
ty::{CanonicalType, Type},
|
ty::{CanonicalType, TraceAsString, Type},
|
||||||
wire::Wire,
|
wire::Wire,
|
||||||
};
|
};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
@ -46,11 +46,33 @@ impl fmt::Display for TargetPathDynArrayElement {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
|
||||||
|
pub struct TargetPathTraceAsStringInner {}
|
||||||
|
|
||||||
|
impl fmt::Display for TargetPathTraceAsStringInner {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
write!(f, ".<inner>")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
|
||||||
|
pub struct TargetPathToTraceAsString {
|
||||||
|
pub ty: TraceAsString<CanonicalType>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for TargetPathToTraceAsString {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
write!(f, ".to_trace_as_string(...)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
|
||||||
pub enum TargetPathElement {
|
pub enum TargetPathElement {
|
||||||
BundleField(TargetPathBundleField),
|
BundleField(TargetPathBundleField),
|
||||||
ArrayElement(TargetPathArrayElement),
|
ArrayElement(TargetPathArrayElement),
|
||||||
DynArrayElement(TargetPathDynArrayElement),
|
DynArrayElement(TargetPathDynArrayElement),
|
||||||
|
TraceAsStringInner(TargetPathTraceAsStringInner),
|
||||||
|
ToTraceAsString(TargetPathToTraceAsString),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<TargetPathBundleField> for TargetPathElement {
|
impl From<TargetPathBundleField> for TargetPathElement {
|
||||||
|
|
@ -71,12 +93,26 @@ impl From<TargetPathDynArrayElement> for TargetPathElement {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<TargetPathTraceAsStringInner> for TargetPathElement {
|
||||||
|
fn from(value: TargetPathTraceAsStringInner) -> Self {
|
||||||
|
Self::TraceAsStringInner(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<TargetPathToTraceAsString> for TargetPathElement {
|
||||||
|
fn from(value: TargetPathToTraceAsString) -> Self {
|
||||||
|
Self::ToTraceAsString(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl fmt::Display for TargetPathElement {
|
impl fmt::Display for TargetPathElement {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
Self::BundleField(v) => v.fmt(f),
|
Self::BundleField(v) => v.fmt(f),
|
||||||
Self::ArrayElement(v) => v.fmt(f),
|
Self::ArrayElement(v) => v.fmt(f),
|
||||||
Self::DynArrayElement(v) => v.fmt(f),
|
Self::DynArrayElement(v) => v.fmt(f),
|
||||||
|
Self::TraceAsStringInner(v) => v.fmt(f),
|
||||||
|
Self::ToTraceAsString(v) => v.fmt(f),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -100,6 +136,15 @@ impl TargetPathElement {
|
||||||
let parent_ty = Array::<CanonicalType>::from_canonical(parent.canonical_ty());
|
let parent_ty = Array::<CanonicalType>::from_canonical(parent.canonical_ty());
|
||||||
parent_ty.element()
|
parent_ty.element()
|
||||||
}
|
}
|
||||||
|
Self::TraceAsStringInner(_) => {
|
||||||
|
let parent_ty =
|
||||||
|
TraceAsString::<CanonicalType>::from_canonical(parent.canonical_ty());
|
||||||
|
parent_ty.inner_ty()
|
||||||
|
}
|
||||||
|
&Self::ToTraceAsString(TargetPathToTraceAsString { ty }) => {
|
||||||
|
assert_eq!(parent.canonical_ty(), ty.inner_ty());
|
||||||
|
ty.canonical()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn flow(&self, parent: Interned<Target>) -> Flow {
|
pub fn flow(&self, parent: Interned<Target>) -> Flow {
|
||||||
|
|
@ -111,13 +156,18 @@ impl TargetPathElement {
|
||||||
.expect("field name is known to be a valid field of parent type");
|
.expect("field name is known to be a valid field of parent type");
|
||||||
parent.flow().flip_if(field.flipped)
|
parent.flow().flip_if(field.flipped)
|
||||||
}
|
}
|
||||||
Self::ArrayElement(_) => parent.flow(),
|
Self::ArrayElement(_)
|
||||||
Self::DynArrayElement(_) => parent.flow(),
|
| Self::DynArrayElement(_)
|
||||||
|
| Self::TraceAsStringInner(_)
|
||||||
|
| Self::ToTraceAsString(_) => parent.flow(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn is_static(&self) -> bool {
|
pub fn is_static(&self) -> bool {
|
||||||
match self {
|
match self {
|
||||||
Self::BundleField(_) | Self::ArrayElement(_) => true,
|
Self::BundleField(_)
|
||||||
|
| Self::ArrayElement(_)
|
||||||
|
| Self::TraceAsStringInner(_)
|
||||||
|
| Self::ToTraceAsString(_) => true,
|
||||||
Self::DynArrayElement(_) => false,
|
Self::DynArrayElement(_) => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -314,6 +364,7 @@ pub struct TargetChild {
|
||||||
path_element: Interned<TargetPathElement>,
|
path_element: Interned<TargetPathElement>,
|
||||||
canonical_ty: CanonicalType,
|
canonical_ty: CanonicalType,
|
||||||
flow: Flow,
|
flow: Flow,
|
||||||
|
canonicalized_if_different: Option<Interned<Target>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Debug for TargetChild {
|
impl fmt::Debug for TargetChild {
|
||||||
|
|
@ -323,6 +374,7 @@ impl fmt::Debug for TargetChild {
|
||||||
path_element,
|
path_element,
|
||||||
canonical_ty: _,
|
canonical_ty: _,
|
||||||
flow: _,
|
flow: _,
|
||||||
|
canonicalized_if_different: _,
|
||||||
} = self;
|
} = self;
|
||||||
parent.fmt(f)?;
|
parent.fmt(f)?;
|
||||||
fmt::Display::fmt(path_element, f)
|
fmt::Display::fmt(path_element, f)
|
||||||
|
|
@ -336,6 +388,7 @@ impl fmt::Display for TargetChild {
|
||||||
path_element,
|
path_element,
|
||||||
canonical_ty: _,
|
canonical_ty: _,
|
||||||
flow: _,
|
flow: _,
|
||||||
|
canonicalized_if_different: _,
|
||||||
} = self;
|
} = self;
|
||||||
parent.fmt(f)?;
|
parent.fmt(f)?;
|
||||||
path_element.fmt(f)
|
path_element.fmt(f)
|
||||||
|
|
@ -343,14 +396,69 @@ impl fmt::Display for TargetChild {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TargetChild {
|
impl TargetChild {
|
||||||
pub fn new(parent: Interned<Target>, path_element: Interned<TargetPathElement>) -> Self {
|
fn new_helper(
|
||||||
|
parent: Interned<Target>,
|
||||||
|
path_element: Interned<TargetPathElement>,
|
||||||
|
canonicalized_if_different: Option<Interned<Target>>,
|
||||||
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
parent,
|
parent,
|
||||||
path_element,
|
path_element,
|
||||||
canonical_ty: path_element.canonical_ty(parent),
|
canonical_ty: path_element.canonical_ty(parent),
|
||||||
flow: path_element.flow(parent),
|
flow: path_element.flow(parent),
|
||||||
|
canonicalized_if_different,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fn make_canonicalized_if_different(
|
||||||
|
parent: Interned<Target>,
|
||||||
|
path_element: Interned<TargetPathElement>,
|
||||||
|
) -> Option<Interned<Target>> {
|
||||||
|
use TargetPathElement::*;
|
||||||
|
match *path_element {
|
||||||
|
BundleField(_) => {}
|
||||||
|
ArrayElement(_) => {}
|
||||||
|
DynArrayElement(_) => {}
|
||||||
|
TraceAsStringInner(_) => {
|
||||||
|
if let Some(child) = parent.canonicalized().child() {
|
||||||
|
match *child.path_element() {
|
||||||
|
BundleField(_)
|
||||||
|
| ArrayElement(_)
|
||||||
|
| DynArrayElement(_)
|
||||||
|
| TraceAsStringInner(_) => {}
|
||||||
|
ToTraceAsString(_) => return Some(child.parent()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ToTraceAsString(TargetPathToTraceAsString { ty }) => {
|
||||||
|
if let Some(child) = parent.canonicalized().child() {
|
||||||
|
match *child.path_element() {
|
||||||
|
BundleField(_) | ArrayElement(_) | DynArrayElement(_)
|
||||||
|
| ToTraceAsString(_) => {}
|
||||||
|
TraceAsStringInner(_) => {
|
||||||
|
if ty.canonical() == child.parent().canonical_ty() {
|
||||||
|
return Some(child.parent());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Some(
|
||||||
|
Target::Child(Self::new_helper(
|
||||||
|
parent.canonicalized_if_different()?,
|
||||||
|
path_element,
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
.intern_sized(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
pub fn new(parent: Interned<Target>, path_element: Interned<TargetPathElement>) -> Self {
|
||||||
|
Self::new_helper(
|
||||||
|
parent,
|
||||||
|
path_element,
|
||||||
|
Self::make_canonicalized_if_different(parent, path_element),
|
||||||
|
)
|
||||||
|
}
|
||||||
pub fn parent(self) -> Interned<Target> {
|
pub fn parent(self) -> Interned<Target> {
|
||||||
self.parent
|
self.parent
|
||||||
}
|
}
|
||||||
|
|
@ -363,6 +471,19 @@ impl TargetChild {
|
||||||
pub fn flow(self) -> Flow {
|
pub fn flow(self) -> Flow {
|
||||||
self.flow
|
self.flow
|
||||||
}
|
}
|
||||||
|
pub fn is_canonicalized(self) -> bool {
|
||||||
|
self.canonicalized_if_different.is_none()
|
||||||
|
}
|
||||||
|
pub fn canonicalized_if_different(self) -> Option<Interned<Target>> {
|
||||||
|
self.canonicalized_if_different
|
||||||
|
}
|
||||||
|
#[must_use]
|
||||||
|
pub fn canonicalized(self) -> Target {
|
||||||
|
match self.canonicalized_if_different {
|
||||||
|
Some(v) => *v,
|
||||||
|
None => Target::Child(self),
|
||||||
|
}
|
||||||
|
}
|
||||||
pub fn bundle_field(self) -> Option<BundleField> {
|
pub fn bundle_field(self) -> Option<BundleField> {
|
||||||
if let TargetPathElement::BundleField(TargetPathBundleField { name }) = *self.path_element {
|
if let TargetPathElement::BundleField(TargetPathBundleField { name }) = *self.path_element {
|
||||||
let parent_ty = Bundle::from_canonical(self.parent.canonical_ty());
|
let parent_ty = Bundle::from_canonical(self.parent.canonical_ty());
|
||||||
|
|
@ -443,6 +564,82 @@ impl Target {
|
||||||
Target::Child(v) => v.canonical_ty(),
|
Target::Child(v) => v.canonical_ty(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pub fn is_canonicalized(self) -> bool {
|
||||||
|
match self {
|
||||||
|
Self::Base(_) => true,
|
||||||
|
Self::Child(child) => child.is_canonicalized(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn canonicalized_if_different(self) -> Option<Interned<Self>> {
|
||||||
|
match self {
|
||||||
|
Self::Base(_) => None,
|
||||||
|
Self::Child(child) => child.canonicalized_if_different(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[must_use]
|
||||||
|
pub fn canonicalized(self) -> Target {
|
||||||
|
match self.canonicalized_if_different() {
|
||||||
|
Some(v) => *v,
|
||||||
|
None => self,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[must_use]
|
||||||
|
pub fn canonicalized_interned(this: Interned<Target>) -> Interned<Target> {
|
||||||
|
this.canonicalized_if_different().unwrap_or(this)
|
||||||
|
}
|
||||||
|
#[must_use]
|
||||||
|
pub fn unwrap_transparent_types(mut self) -> Target {
|
||||||
|
loop {
|
||||||
|
self = self.canonicalized();
|
||||||
|
match self.canonical_ty() {
|
||||||
|
CanonicalType::UInt(_)
|
||||||
|
| CanonicalType::SInt(_)
|
||||||
|
| CanonicalType::Bool(_)
|
||||||
|
| CanonicalType::Array(_)
|
||||||
|
| CanonicalType::Enum(_)
|
||||||
|
| CanonicalType::Bundle(_)
|
||||||
|
| CanonicalType::AsyncReset(_)
|
||||||
|
| CanonicalType::SyncReset(_)
|
||||||
|
| CanonicalType::Reset(_)
|
||||||
|
| CanonicalType::Clock(_)
|
||||||
|
| CanonicalType::PhantomConst(_)
|
||||||
|
| CanonicalType::DynSimOnly(_) => return self,
|
||||||
|
CanonicalType::TraceAsString(_) => {
|
||||||
|
if let Self::Child(child) = self
|
||||||
|
&& let TargetPathElement::ToTraceAsString(_) = *child.path_element()
|
||||||
|
{
|
||||||
|
self = *child.parent();
|
||||||
|
} else {
|
||||||
|
self = self.join(TargetPathElement::intern_sized(
|
||||||
|
TargetPathTraceAsStringInner {}.into(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[must_use]
|
||||||
|
pub fn unwrap_transparent_types_interned(this: Interned<Target>) -> Interned<Target> {
|
||||||
|
let retval = this.unwrap_transparent_types();
|
||||||
|
if retval != *this {
|
||||||
|
retval.intern_sized()
|
||||||
|
} else {
|
||||||
|
this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[must_use]
|
||||||
|
pub fn without_trailing_transparent_path_elements(mut self) -> Target {
|
||||||
|
use TargetPathElement::*;
|
||||||
|
loop {
|
||||||
|
match self {
|
||||||
|
Self::Base(_) => return self,
|
||||||
|
Self::Child(child) => match *child.path_element() {
|
||||||
|
BundleField(_) | ArrayElement(_) | DynArrayElement(_) => return self,
|
||||||
|
TraceAsStringInner(_) | ToTraceAsString(_) => self = *child.parent(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for Target {
|
impl fmt::Display for Target {
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ use crate::{
|
||||||
ops::{self, VariantAccess},
|
ops::{self, VariantAccess},
|
||||||
target::{
|
target::{
|
||||||
Target, TargetBase, TargetPathArrayElement, TargetPathBundleField, TargetPathElement,
|
Target, TargetBase, TargetPathArrayElement, TargetPathBundleField, TargetPathElement,
|
||||||
|
TargetPathTraceAsStringInner,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
formal::FormalKind,
|
formal::FormalKind,
|
||||||
|
|
@ -471,7 +472,7 @@ impl TypeState {
|
||||||
Ok(self.enum_def(ty)?.1.variants.borrow_mut().get(name))
|
Ok(self.enum_def(ty)?.1.variants.borrow_mut().get(name))
|
||||||
}
|
}
|
||||||
fn ty<T: Type>(&self, ty: T) -> Result<String, FirrtlError> {
|
fn ty<T: Type>(&self, ty: T) -> Result<String, FirrtlError> {
|
||||||
Ok(match ty.canonical() {
|
Ok(match ty.canonical().unwrap_transparent_types() {
|
||||||
CanonicalType::Bundle(ty) => self.bundle_ty(ty)?.to_string(),
|
CanonicalType::Bundle(ty) => self.bundle_ty(ty)?.to_string(),
|
||||||
CanonicalType::Enum(ty) => self.enum_ty(ty)?.to_string(),
|
CanonicalType::Enum(ty) => self.enum_ty(ty)?.to_string(),
|
||||||
CanonicalType::Array(ty) => {
|
CanonicalType::Array(ty) => {
|
||||||
|
|
@ -490,6 +491,7 @@ impl TypeState {
|
||||||
CanonicalType::DynSimOnly(_) => {
|
CanonicalType::DynSimOnly(_) => {
|
||||||
return Err(FirrtlError::SimOnlyValuesAreNotPermitted);
|
return Err(FirrtlError::SimOnlyValuesAreNotPermitted);
|
||||||
}
|
}
|
||||||
|
CanonicalType::TraceAsString(_) => unreachable!("handled by unwrap_transparent_types"),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1191,7 +1193,7 @@ impl<'a> Exporter<'a> {
|
||||||
definitions: &RcDefinitions,
|
definitions: &RcDefinitions,
|
||||||
extra_indent: Indent<'_>,
|
extra_indent: Indent<'_>,
|
||||||
) -> Result<String> {
|
) -> Result<String> {
|
||||||
match ty {
|
match ty.unwrap_transparent_types() {
|
||||||
CanonicalType::Bundle(ty) => {
|
CanonicalType::Bundle(ty) => {
|
||||||
self.expr_cast_bundle_to_bits(value_str, ty, definitions, extra_indent)
|
self.expr_cast_bundle_to_bits(value_str, ty, definitions, extra_indent)
|
||||||
}
|
}
|
||||||
|
|
@ -1210,6 +1212,7 @@ impl<'a> Exporter<'a> {
|
||||||
| CanonicalType::Reset(_) => Ok(format!("asUInt({value_str})")),
|
| CanonicalType::Reset(_) => Ok(format!("asUInt({value_str})")),
|
||||||
CanonicalType::PhantomConst(_) => Ok("UInt<0>(0)".into()),
|
CanonicalType::PhantomConst(_) => Ok("UInt<0>(0)".into()),
|
||||||
CanonicalType::DynSimOnly(_) => Err(FirrtlError::SimOnlyValuesAreNotPermitted.into()),
|
CanonicalType::DynSimOnly(_) => Err(FirrtlError::SimOnlyValuesAreNotPermitted.into()),
|
||||||
|
CanonicalType::TraceAsString(_) => unreachable!("handled by unwrap_transparent_types"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn expr_cast_bits_to_bundle(
|
fn expr_cast_bits_to_bundle(
|
||||||
|
|
@ -1407,7 +1410,7 @@ impl<'a> Exporter<'a> {
|
||||||
definitions: &RcDefinitions,
|
definitions: &RcDefinitions,
|
||||||
extra_indent: Indent<'_>,
|
extra_indent: Indent<'_>,
|
||||||
) -> Result<String> {
|
) -> Result<String> {
|
||||||
match ty {
|
match ty.unwrap_transparent_types() {
|
||||||
CanonicalType::Bundle(ty) => {
|
CanonicalType::Bundle(ty) => {
|
||||||
self.expr_cast_bits_to_bundle(value_str, ty, definitions, extra_indent)
|
self.expr_cast_bits_to_bundle(value_str, ty, definitions, extra_indent)
|
||||||
}
|
}
|
||||||
|
|
@ -1431,6 +1434,7 @@ impl<'a> Exporter<'a> {
|
||||||
return Ok(retval.to_string());
|
return Ok(retval.to_string());
|
||||||
}
|
}
|
||||||
CanonicalType::DynSimOnly(_) => Err(FirrtlError::SimOnlyValuesAreNotPermitted.into()),
|
CanonicalType::DynSimOnly(_) => Err(FirrtlError::SimOnlyValuesAreNotPermitted.into()),
|
||||||
|
CanonicalType::TraceAsString(_) => unreachable!("handled by unwrap_transparent_types"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn expr_unary<T: Type>(
|
fn expr_unary<T: Type>(
|
||||||
|
|
@ -1798,6 +1802,10 @@ impl<'a> Exporter<'a> {
|
||||||
write!(out, "[{index}]").unwrap();
|
write!(out, "[{index}]").unwrap();
|
||||||
Ok(out)
|
Ok(out)
|
||||||
}
|
}
|
||||||
|
ExprEnum::ToTraceAsString(expr) => self.expr(expr.inner(), definitions, const_ty),
|
||||||
|
ExprEnum::TraceAsStringAsInner(expr) => {
|
||||||
|
self.expr(Expr::canonical(expr.arg()), definitions, const_ty)
|
||||||
|
}
|
||||||
ExprEnum::ModuleIO(expr) => Ok(self.module.ns.get(expr.name_id()).to_string()),
|
ExprEnum::ModuleIO(expr) => Ok(self.module.ns.get(expr.name_id()).to_string()),
|
||||||
ExprEnum::Instance(expr) => {
|
ExprEnum::Instance(expr) => {
|
||||||
assert!(!const_ty, "not a constant");
|
assert!(!const_ty, "not a constant");
|
||||||
|
|
@ -1957,6 +1965,10 @@ impl<'a> Exporter<'a> {
|
||||||
.segments
|
.segments
|
||||||
.push(AnnotationTargetRefSegment::Index { index }),
|
.push(AnnotationTargetRefSegment::Index { index }),
|
||||||
TargetPathElement::DynArrayElement(_) => unreachable!(),
|
TargetPathElement::DynArrayElement(_) => unreachable!(),
|
||||||
|
TargetPathElement::ToTraceAsString(_)
|
||||||
|
| TargetPathElement::TraceAsStringInner(_) => {
|
||||||
|
// ignored
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ok(retval)
|
Ok(retval)
|
||||||
}
|
}
|
||||||
|
|
@ -3211,6 +3223,8 @@ impl ScalarizeTreeNode {
|
||||||
TargetPathElement::DynArrayElement(_) => {
|
TargetPathElement::DynArrayElement(_) => {
|
||||||
unreachable!("annotations are only on static targets");
|
unreachable!("annotations are only on static targets");
|
||||||
}
|
}
|
||||||
|
TargetPathElement::ToTraceAsString(_)
|
||||||
|
| TargetPathElement::TraceAsStringInner(_) => parent,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3337,6 +3351,13 @@ impl ScalarizeTreeBuilder {
|
||||||
CanonicalType::DynSimOnly(_) => {
|
CanonicalType::DynSimOnly(_) => {
|
||||||
return Err(ScalarizedModuleABIError::SimOnlyValuesAreNotPermitted);
|
return Err(ScalarizedModuleABIError::SimOnlyValuesAreNotPermitted);
|
||||||
}
|
}
|
||||||
|
CanonicalType::TraceAsString(_) => self.build(
|
||||||
|
target
|
||||||
|
.join(TargetPathElement::intern_sized(
|
||||||
|
TargetPathTraceAsStringInner {}.into(),
|
||||||
|
))
|
||||||
|
.intern_sized(),
|
||||||
|
)?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ use crate::{
|
||||||
source_location::SourceLocation,
|
source_location::SourceLocation,
|
||||||
ty::{
|
ty::{
|
||||||
CanonicalType, FillInDefaultedGenerics, OpaqueSimValueSize, OpaqueSimValueSlice,
|
CanonicalType, FillInDefaultedGenerics, OpaqueSimValueSize, OpaqueSimValueSlice,
|
||||||
OpaqueSimValueWriter, OpaqueSimValueWritten, StaticType, Type, TypeProperties,
|
OpaqueSimValueWriter, OpaqueSimValueWritten, SimValueDebug, SimValueDisplay, StaticType,
|
||||||
impl_match_variant_as_self,
|
Type, TypeProperties, impl_match_variant_as_self,
|
||||||
},
|
},
|
||||||
util::{ConstBool, ConstUsize, GenericConstBool, GenericConstUsize, interned_bit, slice_range},
|
util::{ConstBool, ConstUsize, GenericConstBool, GenericConstUsize, interned_bit, slice_range},
|
||||||
};
|
};
|
||||||
|
|
@ -1019,6 +1019,24 @@ macro_rules! impl_int {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<Width: Size> SimValueDebug for $name<Width> {
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<Width: Size> SimValueDisplay for $name<Width> {
|
||||||
|
fn sim_value_display(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Display::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<Width: KnownSize> Default for $name<Width> {
|
impl<Width: KnownSize> Default for $name<Width> {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self::TYPE
|
Self::TYPE
|
||||||
|
|
@ -1259,6 +1277,9 @@ macro_rules! impl_int {
|
||||||
pub fn bitvec_mut(&mut self) -> &mut BitVec {
|
pub fn bitvec_mut(&mut self) -> &mut BitVec {
|
||||||
Arc::make_mut(&mut self.bits)
|
Arc::make_mut(&mut self.bits)
|
||||||
}
|
}
|
||||||
|
pub fn arc_bitvec_mut(&mut self) -> &mut Arc<BitVec> {
|
||||||
|
&mut self.bits
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -1899,6 +1920,15 @@ impl Type for Bool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl SimValueDebug for Bool {
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl StaticType for Bool {
|
impl StaticType for Bool {
|
||||||
const TYPE: Self = Bool;
|
const TYPE: Self = Bool;
|
||||||
const MASK_TYPE: Self::MaskType = Bool;
|
const MASK_TYPE: Self::MaskType = Bool;
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ use crate::{
|
||||||
source_location::SourceLocation,
|
source_location::SourceLocation,
|
||||||
ty::{
|
ty::{
|
||||||
CanonicalType, OpaqueSimValueSlice, OpaqueSimValueWriter, OpaqueSimValueWritten,
|
CanonicalType, OpaqueSimValueSlice, OpaqueSimValueWriter, OpaqueSimValueWritten,
|
||||||
StaticType, Type, TypeProperties, impl_match_variant_as_self,
|
SimValueDebug, StaticType, Type, TypeProperties, impl_match_variant_as_self,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use bitvec::{order::Lsb0, view::BitView};
|
use bitvec::{order::Lsb0, view::BitView};
|
||||||
|
|
@ -94,6 +94,15 @@ impl Type for UIntInRangeMaskType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl SimValueDebug for UIntInRangeMaskType {
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl BundleType for UIntInRangeMaskType {
|
impl BundleType for UIntInRangeMaskType {
|
||||||
type Builder = NoBuilder;
|
type Builder = NoBuilder;
|
||||||
|
|
||||||
|
|
@ -339,6 +348,15 @@ macro_rules! define_uint_in_range_type {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<Start: Size, End: Size> SimValueDebug for $UIntInRangeType<Start, End> {
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<Start: Size, End: Size> fmt::Debug for $UIntInRangeType<Start, End> {
|
impl<Start: Size, End: Size> fmt::Debug for $UIntInRangeType<Start, End> {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
let Self { value, range } = self;
|
let Self { value, range } = self;
|
||||||
|
|
|
||||||
|
|
@ -1093,6 +1093,7 @@ pub fn splat_mask<T: Type>(ty: T, value: Expr<Bool>) -> Expr<AsMask<T>> {
|
||||||
.to_expr(),
|
.to_expr(),
|
||||||
)),
|
)),
|
||||||
CanonicalType::PhantomConst(_) => Expr::from_canonical(Expr::canonical(().to_expr())),
|
CanonicalType::PhantomConst(_) => Expr::from_canonical(Expr::canonical(().to_expr())),
|
||||||
|
CanonicalType::TraceAsString(ty) => Expr::from_canonical(splat_mask(ty.inner_ty(), value)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1111,7 +1111,10 @@ fn validate_clock_for_past<S: ModuleBuildingStatus>(
|
||||||
let mut target = clock_for_past;
|
let mut target = clock_for_past;
|
||||||
while let Target::Child(child) = target {
|
while let Target::Child(child) = target {
|
||||||
match *child.path_element() {
|
match *child.path_element() {
|
||||||
TargetPathElement::BundleField(_) | TargetPathElement::ArrayElement(_) => {}
|
TargetPathElement::BundleField(_)
|
||||||
|
| TargetPathElement::ArrayElement(_)
|
||||||
|
| TargetPathElement::ToTraceAsString(_)
|
||||||
|
| TargetPathElement::TraceAsStringInner(_) => {}
|
||||||
TargetPathElement::DynArrayElement(_) => {
|
TargetPathElement::DynArrayElement(_) => {
|
||||||
panic!(
|
panic!(
|
||||||
"clock_for_past: clock must be a static target (you can't use `Expr<UInt>` array indexes):\n{clock_for_past:?}"
|
"clock_for_past: clock must be a static target (you can't use `Expr<UInt>` array indexes):\n{clock_for_past:?}"
|
||||||
|
|
@ -1535,6 +1538,7 @@ impl TargetState {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn new(target: Interned<Target>, declared_in_block: usize) -> Self {
|
fn new(target: Interned<Target>, declared_in_block: usize) -> Self {
|
||||||
|
let target = Target::unwrap_transparent_types_interned(target);
|
||||||
Self {
|
Self {
|
||||||
target,
|
target,
|
||||||
inner: match target.canonical_ty() {
|
inner: match target.canonical_ty() {
|
||||||
|
|
@ -1586,6 +1590,9 @@ impl TargetState {
|
||||||
declared_in_block,
|
declared_in_block,
|
||||||
written_in_blocks: RefCell::default(),
|
written_in_blocks: RefCell::default(),
|
||||||
},
|
},
|
||||||
|
CanonicalType::TraceAsString(_) => {
|
||||||
|
unreachable!("handled by Target::unwrap_transparent_types_interned")
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1605,44 +1612,59 @@ impl AssertValidityState {
|
||||||
}
|
}
|
||||||
fn get_target_states<'a>(
|
fn get_target_states<'a>(
|
||||||
&'a self,
|
&'a self,
|
||||||
target: &Target,
|
target: Target,
|
||||||
process_target_state: &dyn Fn(&'a TargetState, bool),
|
process_target_state: &dyn Fn(&'a TargetState, bool),
|
||||||
) -> Result<(), ()> {
|
) -> Result<(), ()> {
|
||||||
match target {
|
let mut target = target.unwrap_transparent_types();
|
||||||
Target::Base(target_base) => {
|
loop {
|
||||||
let target_state = self.get_base_state(*target_base)?;
|
break match target {
|
||||||
process_target_state(target_state, false);
|
Target::Base(target_base) => {
|
||||||
Ok(())
|
let target_state = self.get_base_state(target_base)?;
|
||||||
}
|
process_target_state(target_state, false);
|
||||||
Target::Child(target_child) => self.get_target_states(
|
Ok(())
|
||||||
&target_child.parent(),
|
}
|
||||||
&|target_state, exact_target_unknown| {
|
Target::Child(target_child) => match *target_child.path_element() {
|
||||||
let TargetStateInner::Decomposed { subtargets } = &target_state.inner else {
|
TargetPathElement::BundleField(_)
|
||||||
unreachable!(
|
| TargetPathElement::ArrayElement(_)
|
||||||
"TargetState::new makes TargetState tree match the Target type"
|
| TargetPathElement::DynArrayElement(_) => self.get_target_states(
|
||||||
);
|
*target_child.parent(),
|
||||||
};
|
&|target_state, exact_target_unknown| {
|
||||||
match *target_child.path_element() {
|
let TargetStateInner::Decomposed { subtargets } = &target_state.inner
|
||||||
TargetPathElement::BundleField(_) => process_target_state(
|
else {
|
||||||
subtargets
|
unreachable!(
|
||||||
.get(&target_child.path_element())
|
"TargetState::new makes TargetState tree match the Target type"
|
||||||
.expect("bundle fields filled in by TargetState::new"),
|
);
|
||||||
exact_target_unknown,
|
};
|
||||||
),
|
match *target_child.path_element() {
|
||||||
TargetPathElement::ArrayElement(_) => process_target_state(
|
TargetPathElement::BundleField(_) => process_target_state(
|
||||||
subtargets
|
subtargets
|
||||||
.get(&target_child.path_element())
|
.get(&target_child.path_element())
|
||||||
.expect("array elements filled in by TargetState::new"),
|
.expect("bundle fields filled in by TargetState::new"),
|
||||||
exact_target_unknown,
|
exact_target_unknown,
|
||||||
),
|
),
|
||||||
TargetPathElement::DynArrayElement(_) => {
|
TargetPathElement::ArrayElement(_) => process_target_state(
|
||||||
for target_state in subtargets.values() {
|
subtargets
|
||||||
process_target_state(target_state, true);
|
.get(&target_child.path_element())
|
||||||
|
.expect("array elements filled in by TargetState::new"),
|
||||||
|
exact_target_unknown,
|
||||||
|
),
|
||||||
|
TargetPathElement::DynArrayElement(_) => {
|
||||||
|
for target_state in subtargets.values() {
|
||||||
|
process_target_state(target_state, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TargetPathElement::TraceAsStringInner(_)
|
||||||
|
| TargetPathElement::ToTraceAsString(_) => unreachable!(),
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
),
|
||||||
|
TargetPathElement::TraceAsStringInner(_)
|
||||||
|
| TargetPathElement::ToTraceAsString(_) => {
|
||||||
|
target = *target_child.parent();
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
),
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn get_base_state(&self, target_base: Interned<TargetBase>) -> Result<&TargetState, ()> {
|
fn get_base_state(&self, target_base: Interned<TargetBase>) -> Result<&TargetState, ()> {
|
||||||
|
|
@ -1693,6 +1715,7 @@ impl AssertValidityState {
|
||||||
&TargetPathElement::BundleField(_) => {
|
&TargetPathElement::BundleField(_) => {
|
||||||
let field = sub_target_state
|
let field = sub_target_state
|
||||||
.target
|
.target
|
||||||
|
.without_trailing_transparent_path_elements()
|
||||||
.child()
|
.child()
|
||||||
.expect("known to be a child")
|
.expect("known to be a child")
|
||||||
.bundle_field()
|
.bundle_field()
|
||||||
|
|
@ -1716,6 +1739,8 @@ impl AssertValidityState {
|
||||||
TargetPathElement::DynArrayElement { .. } => {
|
TargetPathElement::DynArrayElement { .. } => {
|
||||||
Self::set_connect_target_written(sub_target_state, is_lhs, block, true);
|
Self::set_connect_target_written(sub_target_state, is_lhs, block, true);
|
||||||
}
|
}
|
||||||
|
TargetPathElement::TraceAsStringInner(_)
|
||||||
|
| TargetPathElement::ToTraceAsString(_) => unreachable!("never added"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1733,7 +1758,7 @@ impl AssertValidityState {
|
||||||
debug_assert!(!is_lhs, "the ModuleBuilder asserts lhs.target().is_some()");
|
debug_assert!(!is_lhs, "the ModuleBuilder asserts lhs.target().is_some()");
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
let result = self.get_target_states(&target, &|target_state, exact_target_unknown| {
|
let result = self.get_target_states(*target, &|target_state, exact_target_unknown| {
|
||||||
Self::set_connect_target_written(target_state, is_lhs, block, exact_target_unknown);
|
Self::set_connect_target_written(target_state, is_lhs, block, exact_target_unknown);
|
||||||
});
|
});
|
||||||
if result.is_err() {
|
if result.is_err() {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,8 @@ use crate::{
|
||||||
ops::{self, ArrayLiteral},
|
ops::{self, ArrayLiteral},
|
||||||
target::{
|
target::{
|
||||||
Target, TargetBase, TargetChild, TargetPathArrayElement, TargetPathBundleField,
|
Target, TargetBase, TargetChild, TargetPathArrayElement, TargetPathBundleField,
|
||||||
TargetPathDynArrayElement, TargetPathElement,
|
TargetPathDynArrayElement, TargetPathElement, TargetPathToTraceAsString,
|
||||||
|
TargetPathTraceAsStringInner,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
formal::FormalKind,
|
formal::FormalKind,
|
||||||
|
|
@ -26,6 +27,7 @@ use crate::{
|
||||||
prelude::*,
|
prelude::*,
|
||||||
reset::{ResetType, ResetTypeDispatch},
|
reset::{ResetType, ResetTypeDispatch},
|
||||||
sim::ExternModuleSimulation,
|
sim::ExternModuleSimulation,
|
||||||
|
ty::TraceAsString,
|
||||||
util::{HashMap, HashSet},
|
util::{HashMap, HashSet},
|
||||||
};
|
};
|
||||||
use hashbrown::hash_map::Entry;
|
use hashbrown::hash_map::Entry;
|
||||||
|
|
@ -103,6 +105,10 @@ enum ResetsLayout {
|
||||||
element: Interned<ResetsLayout>,
|
element: Interned<ResetsLayout>,
|
||||||
reset_count: usize,
|
reset_count: usize,
|
||||||
},
|
},
|
||||||
|
Transparent {
|
||||||
|
inner: Interned<ResetsLayout>,
|
||||||
|
reset_count: usize,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ResetsLayout {
|
impl ResetsLayout {
|
||||||
|
|
@ -112,7 +118,8 @@ impl ResetsLayout {
|
||||||
ResetsLayout::Reset | ResetsLayout::SyncReset | ResetsLayout::AsyncReset => 1,
|
ResetsLayout::Reset | ResetsLayout::SyncReset | ResetsLayout::AsyncReset => 1,
|
||||||
ResetsLayout::Bundle { reset_count, .. }
|
ResetsLayout::Bundle { reset_count, .. }
|
||||||
| ResetsLayout::Enum { reset_count, .. }
|
| ResetsLayout::Enum { reset_count, .. }
|
||||||
| ResetsLayout::Array { reset_count, .. } => reset_count,
|
| ResetsLayout::Array { reset_count, .. }
|
||||||
|
| ResetsLayout::Transparent { reset_count, .. } => reset_count,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn new(ty: CanonicalType) -> Self {
|
fn new(ty: CanonicalType) -> Self {
|
||||||
|
|
@ -166,6 +173,13 @@ impl ResetsLayout {
|
||||||
CanonicalType::Clock(_) => ResetsLayout::NoResets,
|
CanonicalType::Clock(_) => ResetsLayout::NoResets,
|
||||||
CanonicalType::PhantomConst(_) => ResetsLayout::NoResets,
|
CanonicalType::PhantomConst(_) => ResetsLayout::NoResets,
|
||||||
CanonicalType::DynSimOnly(_) => ResetsLayout::NoResets,
|
CanonicalType::DynSimOnly(_) => ResetsLayout::NoResets,
|
||||||
|
CanonicalType::TraceAsString(ty) => {
|
||||||
|
let inner = ResetsLayout::new(ty.inner_ty()).intern_sized();
|
||||||
|
ResetsLayout::Transparent {
|
||||||
|
inner,
|
||||||
|
reset_count: inner.reset_count(),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -315,6 +329,12 @@ impl ResetGraph {
|
||||||
} => {
|
} => {
|
||||||
self.append_new_nodes_for_layout(*element, node_indexes, source_location);
|
self.append_new_nodes_for_layout(*element, node_indexes, source_location);
|
||||||
}
|
}
|
||||||
|
ResetsLayout::Transparent {
|
||||||
|
inner,
|
||||||
|
reset_count: _,
|
||||||
|
} => {
|
||||||
|
self.append_new_nodes_for_layout(*inner, node_indexes, source_location);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -357,6 +377,21 @@ impl Resets {
|
||||||
node_indexes: self.node_indexes,
|
node_indexes: self.node_indexes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fn trace_as_string_inner(self) -> Self {
|
||||||
|
let trace_as_string = TraceAsString::from_canonical(self.ty);
|
||||||
|
let ResetsLayout::Transparent {
|
||||||
|
inner,
|
||||||
|
reset_count: _,
|
||||||
|
} = self.layout
|
||||||
|
else {
|
||||||
|
unreachable!();
|
||||||
|
};
|
||||||
|
Self {
|
||||||
|
ty: trace_as_string.inner_ty(),
|
||||||
|
layout: *inner,
|
||||||
|
node_indexes: self.node_indexes,
|
||||||
|
}
|
||||||
|
}
|
||||||
fn bundle_fields(self) -> impl Iterator<Item = Self> {
|
fn bundle_fields(self) -> impl Iterator<Item = Self> {
|
||||||
let bundle = Bundle::from_canonical(self.ty);
|
let bundle = Bundle::from_canonical(self.ty);
|
||||||
let ResetsLayout::Bundle {
|
let ResetsLayout::Bundle {
|
||||||
|
|
@ -480,6 +515,17 @@ impl Resets {
|
||||||
CanonicalType::SyncReset(SyncReset)
|
CanonicalType::SyncReset(SyncReset)
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
CanonicalType::TraceAsString(ty) => Ok(CanonicalType::TraceAsString(
|
||||||
|
ty.with_new_inner_ty(
|
||||||
|
self.array_elements()
|
||||||
|
.substituted_type(
|
||||||
|
reset_graph,
|
||||||
|
fallback_to_sync_reset,
|
||||||
|
fallback_error_source_location,
|
||||||
|
)?
|
||||||
|
.intern_sized(),
|
||||||
|
),
|
||||||
|
)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1013,7 +1059,8 @@ fn cast_bit_op<P: Pass, T: Type, A: Type>(
|
||||||
| CanonicalType::Bundle(_)
|
| CanonicalType::Bundle(_)
|
||||||
| CanonicalType::Reset(_)
|
| CanonicalType::Reset(_)
|
||||||
| CanonicalType::PhantomConst(_)
|
| CanonicalType::PhantomConst(_)
|
||||||
| CanonicalType::DynSimOnly(_) => unreachable!(),
|
| CanonicalType::DynSimOnly(_)
|
||||||
|
| CanonicalType::TraceAsString(_) => unreachable!(),
|
||||||
$(CanonicalType::$Variant(ty) => Expr::expr_enum($arg.cast_to(ty)),)*
|
$(CanonicalType::$Variant(ty) => Expr::expr_enum($arg.cast_to(ty)),)*
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -1024,7 +1071,8 @@ fn cast_bit_op<P: Pass, T: Type, A: Type>(
|
||||||
CanonicalType::Array(_)
|
CanonicalType::Array(_)
|
||||||
| CanonicalType::Enum(_)
|
| CanonicalType::Enum(_)
|
||||||
| CanonicalType::Bundle(_)
|
| CanonicalType::Bundle(_)
|
||||||
| CanonicalType::Reset(_) => unreachable!(),
|
| CanonicalType::Reset(_)
|
||||||
|
| CanonicalType::TraceAsString(_) => unreachable!(),
|
||||||
CanonicalType::PhantomConst(_) |
|
CanonicalType::PhantomConst(_) |
|
||||||
CanonicalType::DynSimOnly(_) => Expr::expr_enum(arg),
|
CanonicalType::DynSimOnly(_) => Expr::expr_enum(arg),
|
||||||
$(CanonicalType::$Variant(_) => {
|
$(CanonicalType::$Variant(_) => {
|
||||||
|
|
@ -1156,6 +1204,10 @@ impl<P: Pass> RunPass<P> for ExprEnum {
|
||||||
ExprEnum::SliceSInt(expr) => Ok(expr.run_pass(pass_args)?.map(ExprEnum::from)),
|
ExprEnum::SliceSInt(expr) => Ok(expr.run_pass(pass_args)?.map(ExprEnum::from)),
|
||||||
ExprEnum::CastToBits(expr) => Ok(expr.run_pass(pass_args)?.map(ExprEnum::from)),
|
ExprEnum::CastToBits(expr) => Ok(expr.run_pass(pass_args)?.map(ExprEnum::from)),
|
||||||
ExprEnum::CastBitsTo(expr) => Ok(expr.run_pass(pass_args)?.map(ExprEnum::from)),
|
ExprEnum::CastBitsTo(expr) => Ok(expr.run_pass(pass_args)?.map(ExprEnum::from)),
|
||||||
|
ExprEnum::TraceAsStringAsInner(expr) => {
|
||||||
|
Ok(expr.run_pass(pass_args)?.map(ExprEnum::from))
|
||||||
|
}
|
||||||
|
ExprEnum::ToTraceAsString(expr) => Ok(expr.run_pass(pass_args)?.map(ExprEnum::from)),
|
||||||
ExprEnum::ModuleIO(expr) => Ok(expr.run_pass(pass_args)?.map(ExprEnum::from)),
|
ExprEnum::ModuleIO(expr) => Ok(expr.run_pass(pass_args)?.map(ExprEnum::from)),
|
||||||
ExprEnum::Instance(expr) => Ok(expr.run_pass(pass_args)?.map(ExprEnum::from)),
|
ExprEnum::Instance(expr) => Ok(expr.run_pass(pass_args)?.map(ExprEnum::from)),
|
||||||
ExprEnum::Wire(expr) => Ok(expr.run_pass(pass_args)?.map(ExprEnum::from)),
|
ExprEnum::Wire(expr) => Ok(expr.run_pass(pass_args)?.map(ExprEnum::from)),
|
||||||
|
|
@ -1536,6 +1588,67 @@ impl RunPassExpr for ops::CastBitsTo {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl RunPassExpr for ops::TraceAsStringAsInner {
|
||||||
|
type Args<'a> = [Expr<CanonicalType>; 1];
|
||||||
|
|
||||||
|
fn args<'a>(&'a self) -> Self::Args<'a> {
|
||||||
|
[Expr::canonical(self.arg())]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn source_location(&self) -> Option<SourceLocation> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn union_parts(
|
||||||
|
&self,
|
||||||
|
resets: Resets,
|
||||||
|
args_resets: Vec<Resets>,
|
||||||
|
mut pass_args: PassArgs<'_, BuildResetGraph>,
|
||||||
|
) -> Result<(), DeduceResetsError> {
|
||||||
|
pass_args.union(resets, args_resets[0].trace_as_string_inner(), None)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn new(
|
||||||
|
&self,
|
||||||
|
_ty: CanonicalType,
|
||||||
|
new_args: Vec<Expr<CanonicalType>>,
|
||||||
|
) -> Result<Self, DeduceResetsError> {
|
||||||
|
Ok(Self::new(Expr::from_canonical(new_args[0])))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RunPassExpr for ops::ToTraceAsString {
|
||||||
|
type Args<'a> = [Expr<CanonicalType>; 1];
|
||||||
|
|
||||||
|
fn args<'a>(&'a self) -> Self::Args<'a> {
|
||||||
|
[Expr::canonical(self.inner())]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn source_location(&self) -> Option<SourceLocation> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn union_parts(
|
||||||
|
&self,
|
||||||
|
resets: Resets,
|
||||||
|
args_resets: Vec<Resets>,
|
||||||
|
mut pass_args: PassArgs<'_, BuildResetGraph>,
|
||||||
|
) -> Result<(), DeduceResetsError> {
|
||||||
|
pass_args.union(resets.trace_as_string_inner(), args_resets[0], None)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn new(
|
||||||
|
&self,
|
||||||
|
_ty: CanonicalType,
|
||||||
|
new_args: Vec<Expr<CanonicalType>>,
|
||||||
|
) -> Result<Self, DeduceResetsError> {
|
||||||
|
Ok(Self::new(
|
||||||
|
new_args[0],
|
||||||
|
self.ty().with_new_inner_ty(new_args[0].ty().intern_sized()),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl RunPassExpr for ModuleIO<CanonicalType> {
|
impl RunPassExpr for ModuleIO<CanonicalType> {
|
||||||
type Args<'a> = [Expr<CanonicalType>; 0];
|
type Args<'a> = [Expr<CanonicalType>; 0];
|
||||||
|
|
||||||
|
|
@ -1691,7 +1804,8 @@ impl RunPassDispatch for AnyReg {
|
||||||
| CanonicalType::Reset(_)
|
| CanonicalType::Reset(_)
|
||||||
| CanonicalType::Clock(_)
|
| CanonicalType::Clock(_)
|
||||||
| CanonicalType::PhantomConst(_)
|
| CanonicalType::PhantomConst(_)
|
||||||
| CanonicalType::DynSimOnly(_) => unreachable!(),
|
| CanonicalType::DynSimOnly(_)
|
||||||
|
| CanonicalType::TraceAsString(_) => unreachable!(),
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -2173,30 +2287,6 @@ impl<P: Pass> RunPass<P> for StmtDeclaration {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl_run_pass_for_struct! {
|
|
||||||
impl[] RunPass for TargetPathBundleField {
|
|
||||||
name: _,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl_run_pass_for_struct! {
|
|
||||||
impl[] RunPass for TargetPathArrayElement {
|
|
||||||
index: _,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl_run_pass_for_struct! {
|
|
||||||
impl[] RunPass for TargetPathDynArrayElement {}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl_run_pass_for_enum! {
|
|
||||||
impl[] RunPass for TargetPathElement {
|
|
||||||
BundleField(v),
|
|
||||||
ArrayElement(v),
|
|
||||||
DynArrayElement(v),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl_run_pass_for_enum! {
|
impl_run_pass_for_enum! {
|
||||||
impl[] RunPass for Target {
|
impl[] RunPass for Target {
|
||||||
Base(v),
|
Base(v),
|
||||||
|
|
@ -2204,11 +2294,28 @@ impl_run_pass_for_enum! {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl_run_pass_for_struct! {
|
impl<P: Pass> RunPass<P> for TargetChild {
|
||||||
#[constructor = TargetChild::new(parent, path_element)]
|
fn run_pass(
|
||||||
impl[] RunPass for TargetChild {
|
&self,
|
||||||
parent(): _,
|
mut pass_args: PassArgs<'_, P>,
|
||||||
path_element(): _,
|
) -> Result<PassOutput<Self, P>, DeduceResetsError> {
|
||||||
|
Ok(self.parent().run_pass(pass_args.as_mut())?.map(|parent| {
|
||||||
|
let path_element = match *self.path_element() {
|
||||||
|
TargetPathElement::BundleField(TargetPathBundleField { name: _ })
|
||||||
|
| TargetPathElement::ArrayElement(TargetPathArrayElement { index: _ })
|
||||||
|
| TargetPathElement::DynArrayElement(TargetPathDynArrayElement {})
|
||||||
|
| TargetPathElement::TraceAsStringInner(TargetPathTraceAsStringInner {}) => {
|
||||||
|
self.path_element()
|
||||||
|
}
|
||||||
|
TargetPathElement::ToTraceAsString(TargetPathToTraceAsString { ty }) => {
|
||||||
|
TargetPathElement::from(TargetPathToTraceAsString {
|
||||||
|
ty: ty.with_new_inner_ty(parent.canonical_ty().intern_sized()),
|
||||||
|
})
|
||||||
|
.intern_sized()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
TargetChild::new(parent, path_element)
|
||||||
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ use crate::{
|
||||||
transform::visit::{Fold, Folder},
|
transform::visit::{Fold, Folder},
|
||||||
},
|
},
|
||||||
source_location::SourceLocation,
|
source_location::SourceLocation,
|
||||||
ty::{CanonicalType, Type},
|
ty::{CanonicalType, TraceAsString, Type},
|
||||||
util::HashMap,
|
util::HashMap,
|
||||||
wire::Wire,
|
wire::Wire,
|
||||||
};
|
};
|
||||||
|
|
@ -64,6 +64,7 @@ fn contains_any_enum_types(ty: CanonicalType) -> bool {
|
||||||
.fields()
|
.fields()
|
||||||
.iter()
|
.iter()
|
||||||
.any(|field| contains_any_enum_types(field.ty)),
|
.any(|field| contains_any_enum_types(field.ty)),
|
||||||
|
CanonicalType::TraceAsString(ty) => contains_any_enum_types(ty.inner_ty()),
|
||||||
CanonicalType::UInt(_)
|
CanonicalType::UInt(_)
|
||||||
| CanonicalType::SInt(_)
|
| CanonicalType::SInt(_)
|
||||||
| CanonicalType::Bool(_)
|
| CanonicalType::Bool(_)
|
||||||
|
|
@ -313,6 +314,24 @@ impl State {
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
fn handle_stmt_connect_trace_as_string(
|
||||||
|
&mut self,
|
||||||
|
unfolded_lhs_ty: TraceAsString,
|
||||||
|
unfolded_rhs_ty: TraceAsString,
|
||||||
|
folded_lhs: Expr<TraceAsString>,
|
||||||
|
folded_rhs: Expr<TraceAsString>,
|
||||||
|
source_location: SourceLocation,
|
||||||
|
output_stmts: &mut Vec<Stmt>,
|
||||||
|
) -> Result<(), SimplifyEnumsError> {
|
||||||
|
self.handle_stmt_connect(
|
||||||
|
unfolded_lhs_ty.inner_ty(),
|
||||||
|
unfolded_rhs_ty.inner_ty(),
|
||||||
|
ops::TraceAsStringAsInner::new(folded_lhs).to_expr(),
|
||||||
|
ops::TraceAsStringAsInner::new(folded_rhs).to_expr(),
|
||||||
|
source_location,
|
||||||
|
output_stmts,
|
||||||
|
)
|
||||||
|
}
|
||||||
fn handle_stmt_connect_bundle(
|
fn handle_stmt_connect_bundle(
|
||||||
&mut self,
|
&mut self,
|
||||||
unfolded_lhs_ty: Bundle,
|
unfolded_lhs_ty: Bundle,
|
||||||
|
|
@ -509,6 +528,15 @@ impl State {
|
||||||
source_location,
|
source_location,
|
||||||
output_stmts,
|
output_stmts,
|
||||||
),
|
),
|
||||||
|
CanonicalType::TraceAsString(unfolded_lhs_ty) => self
|
||||||
|
.handle_stmt_connect_trace_as_string(
|
||||||
|
unfolded_lhs_ty,
|
||||||
|
TraceAsString::from_canonical(unfolded_rhs_ty),
|
||||||
|
Expr::from_canonical(folded_lhs),
|
||||||
|
Expr::from_canonical(folded_rhs),
|
||||||
|
source_location,
|
||||||
|
output_stmts,
|
||||||
|
),
|
||||||
CanonicalType::UInt(_)
|
CanonicalType::UInt(_)
|
||||||
| CanonicalType::SInt(_)
|
| CanonicalType::SInt(_)
|
||||||
| CanonicalType::Bool(_)
|
| CanonicalType::Bool(_)
|
||||||
|
|
@ -528,6 +556,8 @@ fn connect_port(
|
||||||
rhs: Expr<CanonicalType>,
|
rhs: Expr<CanonicalType>,
|
||||||
source_location: SourceLocation,
|
source_location: SourceLocation,
|
||||||
) {
|
) {
|
||||||
|
let lhs = Expr::unwrap_transparent_types(lhs);
|
||||||
|
let rhs = Expr::unwrap_transparent_types(rhs);
|
||||||
if lhs.ty() == rhs.ty() {
|
if lhs.ty() == rhs.ty() {
|
||||||
stmts.push(
|
stmts.push(
|
||||||
StmtConnect {
|
StmtConnect {
|
||||||
|
|
@ -573,6 +603,9 @@ fn connect_port(
|
||||||
connect_port(stmts, lhs[index], rhs[index], source_location);
|
connect_port(stmts, lhs[index], rhs[index], source_location);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
(CanonicalType::TraceAsString(_), CanonicalType::TraceAsString(_)) => {
|
||||||
|
unreachable!("handled by unwrap_transparent_types")
|
||||||
|
}
|
||||||
(CanonicalType::Bundle(_), _)
|
(CanonicalType::Bundle(_), _)
|
||||||
| (CanonicalType::Enum(_), _)
|
| (CanonicalType::Enum(_), _)
|
||||||
| (CanonicalType::Array(_), _)
|
| (CanonicalType::Array(_), _)
|
||||||
|
|
@ -584,7 +617,8 @@ fn connect_port(
|
||||||
| (CanonicalType::SyncReset(_), _)
|
| (CanonicalType::SyncReset(_), _)
|
||||||
| (CanonicalType::Reset(_), _)
|
| (CanonicalType::Reset(_), _)
|
||||||
| (CanonicalType::PhantomConst(_), _)
|
| (CanonicalType::PhantomConst(_), _)
|
||||||
| (CanonicalType::DynSimOnly(_), _) => unreachable!(
|
| (CanonicalType::DynSimOnly(_), _)
|
||||||
|
| (CanonicalType::TraceAsString(_), _) => unreachable!(
|
||||||
"trying to connect memory ports:\n{:?}\n{:?}",
|
"trying to connect memory ports:\n{:?}\n{:?}",
|
||||||
lhs.ty(),
|
lhs.ty(),
|
||||||
rhs.ty(),
|
rhs.ty(),
|
||||||
|
|
@ -772,6 +806,8 @@ impl Folder for State {
|
||||||
| ExprEnum::SliceSInt(_)
|
| ExprEnum::SliceSInt(_)
|
||||||
| ExprEnum::CastToBits(_)
|
| ExprEnum::CastToBits(_)
|
||||||
| ExprEnum::CastBitsTo(_)
|
| ExprEnum::CastBitsTo(_)
|
||||||
|
| ExprEnum::TraceAsStringAsInner(_)
|
||||||
|
| ExprEnum::ToTraceAsString(_)
|
||||||
| ExprEnum::ModuleIO(_)
|
| ExprEnum::ModuleIO(_)
|
||||||
| ExprEnum::Instance(_)
|
| ExprEnum::Instance(_)
|
||||||
| ExprEnum::Wire(_)
|
| ExprEnum::Wire(_)
|
||||||
|
|
@ -936,7 +972,8 @@ impl Folder for State {
|
||||||
| CanonicalType::SyncReset(_)
|
| CanonicalType::SyncReset(_)
|
||||||
| CanonicalType::Reset(_)
|
| CanonicalType::Reset(_)
|
||||||
| CanonicalType::PhantomConst(_)
|
| CanonicalType::PhantomConst(_)
|
||||||
| CanonicalType::DynSimOnly(_) => canonical_type.default_fold(self),
|
| CanonicalType::DynSimOnly(_)
|
||||||
|
| CanonicalType::TraceAsString(_) => canonical_type.default_fold(self),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ impl MemSplit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn new(element_type: CanonicalType) -> Self {
|
fn new(element_type: CanonicalType) -> Self {
|
||||||
match element_type {
|
match element_type.unwrap_transparent_types() {
|
||||||
CanonicalType::Bundle(bundle_ty) => MemSplit::Bundle {
|
CanonicalType::Bundle(bundle_ty) => MemSplit::Bundle {
|
||||||
fields: bundle_ty
|
fields: bundle_ty
|
||||||
.fields()
|
.fields()
|
||||||
|
|
@ -195,6 +195,7 @@ impl MemSplit {
|
||||||
| CanonicalType::SyncReset(_)
|
| CanonicalType::SyncReset(_)
|
||||||
| CanonicalType::Reset(_) => unreachable!("memory element type is a storable type"),
|
| CanonicalType::Reset(_) => unreachable!("memory element type is a storable type"),
|
||||||
CanonicalType::DynSimOnly(_) => todo!("memory containing sim-only values"),
|
CanonicalType::DynSimOnly(_) => todo!("memory containing sim-only values"),
|
||||||
|
CanonicalType::TraceAsString(_) => unreachable!("handled by unwrap_transparent_types"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -306,7 +307,9 @@ impl SplitMemState<'_, '_> {
|
||||||
let outer_mem_name_path_len = self.mem_name_path.len();
|
let outer_mem_name_path_len = self.mem_name_path.len();
|
||||||
match self.split {
|
match self.split {
|
||||||
MemSplit::Bundle { fields } => {
|
MemSplit::Bundle { fields } => {
|
||||||
let CanonicalType::Bundle(bundle_type) = self.element_type else {
|
let CanonicalType::Bundle(bundle_type) =
|
||||||
|
self.element_type.unwrap_transparent_types()
|
||||||
|
else {
|
||||||
unreachable!();
|
unreachable!();
|
||||||
};
|
};
|
||||||
for ((field, field_offset), split) in bundle_type
|
for ((field, field_offset), split) in bundle_type
|
||||||
|
|
@ -321,7 +324,10 @@ impl SplitMemState<'_, '_> {
|
||||||
let field_ty_bit_width = field.ty.bit_width();
|
let field_ty_bit_width = field.ty.bit_width();
|
||||||
self.split_state_stack.push_map(
|
self.split_state_stack.push_map(
|
||||||
|e: Expr<CanonicalType>| {
|
|e: Expr<CanonicalType>| {
|
||||||
Expr::field(Expr::<Bundle>::from_canonical(e), &field.name)
|
Expr::field(
|
||||||
|
Expr::<Bundle>::from_canonical(Expr::unwrap_transparent_types(e)),
|
||||||
|
&field.name,
|
||||||
|
)
|
||||||
},
|
},
|
||||||
|initial_value_element| {
|
|initial_value_element| {
|
||||||
let Some(field_offset) = field_offset.only_bit_width() else {
|
let Some(field_offset) = field_offset.only_bit_width() else {
|
||||||
|
|
@ -377,8 +383,8 @@ impl SplitMemState<'_, '_> {
|
||||||
};
|
};
|
||||||
self.output_stmts.push(
|
self.output_stmts.push(
|
||||||
StmtConnect {
|
StmtConnect {
|
||||||
lhs: Expr::field(port_expr, name),
|
lhs: Expr::unwrap_transparent_types(Expr::field(port_expr, name)),
|
||||||
rhs: Expr::field(wire_expr, name),
|
rhs: Expr::unwrap_transparent_types(Expr::field(wire_expr, name)),
|
||||||
source_location: port.source_location(),
|
source_location: port.source_location(),
|
||||||
}
|
}
|
||||||
.into(),
|
.into(),
|
||||||
|
|
@ -389,7 +395,8 @@ impl SplitMemState<'_, '_> {
|
||||||
self.output_mems.push(new_mem);
|
self.output_mems.push(new_mem);
|
||||||
}
|
}
|
||||||
MemSplit::Array { elements } => {
|
MemSplit::Array { elements } => {
|
||||||
let CanonicalType::Array(array_type) = self.element_type else {
|
let CanonicalType::Array(array_type) = self.element_type.unwrap_transparent_types()
|
||||||
|
else {
|
||||||
unreachable!();
|
unreachable!();
|
||||||
};
|
};
|
||||||
let element_type = array_type.element();
|
let element_type = array_type.element();
|
||||||
|
|
@ -398,7 +405,7 @@ impl SplitMemState<'_, '_> {
|
||||||
self.mem_name_path.truncate(outer_mem_name_path_len);
|
self.mem_name_path.truncate(outer_mem_name_path_len);
|
||||||
write!(self.mem_name_path, "_{index}").unwrap();
|
write!(self.mem_name_path, "_{index}").unwrap();
|
||||||
self.split_state_stack.push_map(
|
self.split_state_stack.push_map(
|
||||||
|e| Expr::<Array>::from_canonical(e)[index],
|
|e| Expr::<Array>::from_canonical(Expr::unwrap_transparent_types(e))[index],
|
||||||
|initial_value_element| {
|
|initial_value_element| {
|
||||||
&initial_value_element[index * element_bit_width..][..element_bit_width]
|
&initial_value_element[index * element_bit_width..][..element_bit_width]
|
||||||
},
|
},
|
||||||
|
|
@ -464,7 +471,7 @@ impl ModuleState {
|
||||||
assert_eq!(memory_element_array_range_len % input_array_type.len(), 0);
|
assert_eq!(memory_element_array_range_len % input_array_type.len(), 0);
|
||||||
let chunk_size = memory_element_array_range_len / input_array_type.len();
|
let chunk_size = memory_element_array_range_len / input_array_type.len();
|
||||||
for index in 0..input_array_type.len() {
|
for index in 0..input_array_type.len() {
|
||||||
let map = |e| Expr::<Array>::from_canonical(e)[index];
|
let map = |e| Expr::<Array>::from_canonical(Expr::unwrap_transparent_types(e))[index];
|
||||||
let wire_rdata = wire_rdata.map(map);
|
let wire_rdata = wire_rdata.map(map);
|
||||||
let wire_wdata = wire_wdata.map(map);
|
let wire_wdata = wire_wdata.map(map);
|
||||||
let wire_wmask = wire_wmask.map(map);
|
let wire_wmask = wire_wmask.map(map);
|
||||||
|
|
@ -505,8 +512,8 @@ impl ModuleState {
|
||||||
port_read: Expr<CanonicalType>| {
|
port_read: Expr<CanonicalType>| {
|
||||||
output_stmts.push(
|
output_stmts.push(
|
||||||
StmtConnect {
|
StmtConnect {
|
||||||
lhs: wire_read,
|
lhs: Expr::unwrap_transparent_types(wire_read),
|
||||||
rhs: port_read,
|
rhs: Expr::unwrap_transparent_types(port_read),
|
||||||
source_location,
|
source_location,
|
||||||
}
|
}
|
||||||
.into(),
|
.into(),
|
||||||
|
|
@ -517,8 +524,8 @@ impl ModuleState {
|
||||||
port_write: Expr<CanonicalType>| {
|
port_write: Expr<CanonicalType>| {
|
||||||
output_stmts.push(
|
output_stmts.push(
|
||||||
StmtConnect {
|
StmtConnect {
|
||||||
lhs: port_write,
|
lhs: Expr::unwrap_transparent_types(port_write),
|
||||||
rhs: wire_write,
|
rhs: Expr::unwrap_transparent_types(wire_write),
|
||||||
source_location,
|
source_location,
|
||||||
}
|
}
|
||||||
.into(),
|
.into(),
|
||||||
|
|
@ -530,7 +537,8 @@ impl ModuleState {
|
||||||
connect_read(
|
connect_read(
|
||||||
output_stmts,
|
output_stmts,
|
||||||
wire_read,
|
wire_read,
|
||||||
Expr::<UInt>::from_canonical(port_read).cast_bits_to(wire_read.ty()),
|
Expr::<UInt>::from_canonical(Expr::unwrap_transparent_types(port_read))
|
||||||
|
.cast_bits_to(wire_read.ty()),
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
let connect_write_enum =
|
let connect_write_enum =
|
||||||
|
|
@ -544,7 +552,7 @@ impl ModuleState {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
loop {
|
loop {
|
||||||
match input_element_type {
|
match input_element_type.unwrap_transparent_types() {
|
||||||
CanonicalType::Bundle(_) => {
|
CanonicalType::Bundle(_) => {
|
||||||
unreachable!("bundle types are always split")
|
unreachable!("bundle types are always split")
|
||||||
}
|
}
|
||||||
|
|
@ -625,6 +633,9 @@ impl ModuleState {
|
||||||
| CanonicalType::SyncReset(_)
|
| CanonicalType::SyncReset(_)
|
||||||
| CanonicalType::Reset(_) => unreachable!("memory element type is a storable type"),
|
| CanonicalType::Reset(_) => unreachable!("memory element type is a storable type"),
|
||||||
CanonicalType::DynSimOnly(_) => todo!("memory containing sim-only values"),
|
CanonicalType::DynSimOnly(_) => todo!("memory containing sim-only values"),
|
||||||
|
CanonicalType::TraceAsString(_) => {
|
||||||
|
unreachable!("handled by unwrap_transparent_types")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,8 @@ use crate::{
|
||||||
Expr, ExprEnum, ValueType, ops,
|
Expr, ExprEnum, ValueType, ops,
|
||||||
target::{
|
target::{
|
||||||
Target, TargetBase, TargetChild, TargetPathArrayElement, TargetPathBundleField,
|
Target, TargetBase, TargetChild, TargetPathArrayElement, TargetPathBundleField,
|
||||||
TargetPathDynArrayElement, TargetPathElement,
|
TargetPathDynArrayElement, TargetPathElement, TargetPathToTraceAsString,
|
||||||
|
TargetPathTraceAsStringInner,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
formal::FormalKind,
|
formal::FormalKind,
|
||||||
|
|
@ -32,7 +33,7 @@ use crate::{
|
||||||
reset::{AsyncReset, Reset, ResetType, SyncReset},
|
reset::{AsyncReset, Reset, ResetType, SyncReset},
|
||||||
sim::{ExternModuleSimulation, value::DynSimOnly},
|
sim::{ExternModuleSimulation, value::DynSimOnly},
|
||||||
source_location::SourceLocation,
|
source_location::SourceLocation,
|
||||||
ty::{CanonicalType, Type},
|
ty::{CanonicalType, TraceAsString, Type},
|
||||||
vendor::xilinx::{
|
vendor::xilinx::{
|
||||||
XdcCreateClockAnnotation, XdcIOStandardAnnotation, XdcLocationAnnotation, XilinxAnnotation,
|
XdcCreateClockAnnotation, XdcIOStandardAnnotation, XdcLocationAnnotation, XilinxAnnotation,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ use crate::{
|
||||||
source_location::SourceLocation,
|
source_location::SourceLocation,
|
||||||
ty::{
|
ty::{
|
||||||
CanonicalType, OpaqueSimValueSlice, OpaqueSimValueWriter, OpaqueSimValueWritten,
|
CanonicalType, OpaqueSimValueSlice, OpaqueSimValueWriter, OpaqueSimValueWritten,
|
||||||
StaticType, Type, TypeProperties, impl_match_variant_as_self,
|
SimValueDebug, StaticType, Type, TypeProperties, impl_match_variant_as_self,
|
||||||
serde_impls::{SerdeCanonicalType, SerdePhantomConst},
|
serde_impls::{SerdeCanonicalType, SerdePhantomConst},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
@ -327,6 +327,15 @@ impl<T: ?Sized + PhantomConstValue> Type for PhantomConst<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T: ?Sized + PhantomConstValue> SimValueDebug for PhantomConst<T> {
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<T: ?Sized + PhantomConstValue> Default for PhantomConst<T>
|
impl<T: ?Sized + PhantomConstValue> Default for PhantomConst<T>
|
||||||
where
|
where
|
||||||
Interned<T>: Default,
|
Interned<T>: Default,
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ pub use crate::{
|
||||||
enum_::{Enum, HdlNone, HdlOption, HdlSome},
|
enum_::{Enum, HdlNone, HdlOption, HdlSome},
|
||||||
expr::{
|
expr::{
|
||||||
CastBitsTo, CastTo, CastToBits, Expr, HdlPartialEq, HdlPartialOrd, MakeUninitExpr,
|
CastBitsTo, CastTo, CastToBits, Expr, HdlPartialEq, HdlPartialOrd, MakeUninitExpr,
|
||||||
ReduceBits, ToExpr, ValueType, repeat,
|
ReduceBits, ToExpr, ToTraceAsString, ValueType, repeat,
|
||||||
},
|
},
|
||||||
formal::{
|
formal::{
|
||||||
MakeFormalExpr, all_const, all_seq, any_const, any_seq, formal_global_clock, formal_reset,
|
MakeFormalExpr, all_const, all_seq, any_const, any_seq, formal_global_clock, formal_reset,
|
||||||
|
|
@ -38,7 +38,7 @@ pub use crate::{
|
||||||
},
|
},
|
||||||
source_location::SourceLocation,
|
source_location::SourceLocation,
|
||||||
testing::{FormalMode, assert_formal},
|
testing::{FormalMode, assert_formal},
|
||||||
ty::{AsMask, CanonicalType, Type},
|
ty::{AsMask, CanonicalType, TraceAsString, Type},
|
||||||
util::{ConstUsize, GenericConstUsize},
|
util::{ConstUsize, GenericConstUsize},
|
||||||
wire::Wire,
|
wire::Wire,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||||
// See Notices.txt for copyright information
|
// See Notices.txt for copyright information
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
clock::Clock,
|
clock::Clock,
|
||||||
expr::{CastToImpl, Expr, ValueType},
|
expr::{CastToImpl, Expr, ValueType},
|
||||||
|
|
@ -8,11 +9,13 @@ use crate::{
|
||||||
source_location::SourceLocation,
|
source_location::SourceLocation,
|
||||||
ty::{
|
ty::{
|
||||||
CanonicalType, OpaqueSimValueSize, OpaqueSimValueSlice, OpaqueSimValueWriter,
|
CanonicalType, OpaqueSimValueSize, OpaqueSimValueSlice, OpaqueSimValueWriter,
|
||||||
OpaqueSimValueWritten, StaticType, Type, TypeProperties, impl_match_variant_as_self,
|
OpaqueSimValueWritten, SimValueDebug, StaticType, Type, TypeProperties,
|
||||||
|
impl_match_variant_as_self,
|
||||||
},
|
},
|
||||||
util::ConstUsize,
|
util::ConstUsize,
|
||||||
};
|
};
|
||||||
use bitvec::{bits, order::Lsb0};
|
use bitvec::{bits, order::Lsb0};
|
||||||
|
use std::fmt;
|
||||||
|
|
||||||
mod sealed {
|
mod sealed {
|
||||||
pub trait ResetTypeSealed {}
|
pub trait ResetTypeSealed {}
|
||||||
|
|
@ -100,6 +103,15 @@ macro_rules! reset_type {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl SimValueDebug for $name {
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl $name {
|
impl $name {
|
||||||
pub fn type_properties(self) -> TypeProperties {
|
pub fn type_properties(self) -> TypeProperties {
|
||||||
Self::TYPE_PROPERTIES
|
Self::TYPE_PROPERTIES
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ use crate::{
|
||||||
Flow,
|
Flow,
|
||||||
target::{
|
target::{
|
||||||
GetTarget, Target, TargetPathArrayElement, TargetPathBundleField, TargetPathElement,
|
GetTarget, Target, TargetPathArrayElement, TargetPathBundleField, TargetPathElement,
|
||||||
|
TargetPathTraceAsStringInner,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
int::BoolOrIntType,
|
int::BoolOrIntType,
|
||||||
|
|
@ -38,7 +39,7 @@ use crate::{
|
||||||
},
|
},
|
||||||
ty::{
|
ty::{
|
||||||
OpaqueSimValue, OpaqueSimValueSize, OpaqueSimValueSizeRange, OpaqueSimValueSlice,
|
OpaqueSimValue, OpaqueSimValueSize, OpaqueSimValueSizeRange, OpaqueSimValueSlice,
|
||||||
OpaqueSimValueWriter,
|
OpaqueSimValueWriter, TraceAsString,
|
||||||
},
|
},
|
||||||
util::{BitSliceWriteWithBase, DebugAsDisplay, HashMap, HashSet, copy_le_bytes_to_bitslice},
|
util::{BitSliceWriteWithBase, DebugAsDisplay, HashMap, HashSet, copy_le_bytes_to_bitslice},
|
||||||
};
|
};
|
||||||
|
|
@ -432,6 +433,15 @@ impl_trace_decl! {
|
||||||
ty: DynSimOnly,
|
ty: DynSimOnly,
|
||||||
flow: Flow,
|
flow: Flow,
|
||||||
}),
|
}),
|
||||||
|
TraceAsString(TraceTraceAsString {
|
||||||
|
fn location(self) -> _ {
|
||||||
|
self.location
|
||||||
|
}
|
||||||
|
location: TraceLocation,
|
||||||
|
name: Interned<str>,
|
||||||
|
ty: TraceAsString,
|
||||||
|
flow: Flow,
|
||||||
|
}),
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -543,6 +553,7 @@ pub trait TraceWriter: fmt::Debug + 'static {
|
||||||
id: TraceScalarId,
|
id: TraceScalarId,
|
||||||
value: &DynSimOnlyValue,
|
value: &DynSimOnlyValue,
|
||||||
) -> Result<(), Self::Error>;
|
) -> Result<(), Self::Error>;
|
||||||
|
fn set_signal_string(&mut self, id: TraceScalarId, value: &str) -> Result<(), Self::Error>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct DynTraceWriterDecls(Box<dyn TraceWriterDeclsDynTrait>);
|
pub struct DynTraceWriterDecls(Box<dyn TraceWriterDeclsDynTrait>);
|
||||||
|
|
@ -607,6 +618,7 @@ trait TraceWriterDynTrait: fmt::Debug + 'static {
|
||||||
id: TraceScalarId,
|
id: TraceScalarId,
|
||||||
value: &DynSimOnlyValue,
|
value: &DynSimOnlyValue,
|
||||||
) -> std::io::Result<()>;
|
) -> std::io::Result<()>;
|
||||||
|
fn set_signal_string_dyn(&mut self, id: TraceScalarId, value: &str) -> std::io::Result<()>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: TraceWriter> TraceWriterDynTrait for T {
|
impl<T: TraceWriter> TraceWriterDynTrait for T {
|
||||||
|
|
@ -680,6 +692,9 @@ impl<T: TraceWriter> TraceWriterDynTrait for T {
|
||||||
) -> std::io::Result<()> {
|
) -> std::io::Result<()> {
|
||||||
Ok(TraceWriter::set_signal_sim_only_value(self, id, value).map_err(err_into_io)?)
|
Ok(TraceWriter::set_signal_sim_only_value(self, id, value).map_err(err_into_io)?)
|
||||||
}
|
}
|
||||||
|
fn set_signal_string_dyn(&mut self, id: TraceScalarId, value: &str) -> std::io::Result<()> {
|
||||||
|
Ok(TraceWriter::set_signal_string(self, id, value).map_err(err_into_io)?)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct DynTraceWriter(Box<dyn TraceWriterDynTrait>);
|
pub struct DynTraceWriter(Box<dyn TraceWriterDynTrait>);
|
||||||
|
|
@ -758,6 +773,9 @@ impl TraceWriter for DynTraceWriter {
|
||||||
) -> Result<(), Self::Error> {
|
) -> Result<(), Self::Error> {
|
||||||
self.0.set_signal_sim_only_value_dyn(id, value)
|
self.0.set_signal_sim_only_value_dyn(id, value)
|
||||||
}
|
}
|
||||||
|
fn set_signal_string(&mut self, id: TraceScalarId, value: &str) -> Result<(), Self::Error> {
|
||||||
|
self.0.set_signal_string_dyn(id, value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
@ -828,6 +846,7 @@ where
|
||||||
#[derive(Clone, PartialEq, Eq, Hash, Debug)]
|
#[derive(Clone, PartialEq, Eq, Hash, Debug)]
|
||||||
pub(crate) struct SimTrace<K, S> {
|
pub(crate) struct SimTrace<K, S> {
|
||||||
kind: K,
|
kind: K,
|
||||||
|
maybe_changed: bool,
|
||||||
state: S,
|
state: S,
|
||||||
last_state: S,
|
last_state: S,
|
||||||
}
|
}
|
||||||
|
|
@ -848,12 +867,14 @@ impl<K: fmt::Debug> SimTraceDebug<TraceScalarId> for SimTrace<K, ()> {
|
||||||
fn fmt(&self, id: TraceScalarId, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, id: TraceScalarId, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
let Self {
|
let Self {
|
||||||
kind,
|
kind,
|
||||||
|
maybe_changed,
|
||||||
state,
|
state,
|
||||||
last_state,
|
last_state,
|
||||||
} = self;
|
} = self;
|
||||||
f.debug_struct("SimTrace")
|
f.debug_struct("SimTrace")
|
||||||
.field("id", &id)
|
.field("id", &id)
|
||||||
.field("kind", kind)
|
.field("kind", kind)
|
||||||
|
.field("maybe_changed", maybe_changed)
|
||||||
.field("state", state)
|
.field("state", state)
|
||||||
.field("last_state", last_state)
|
.field("last_state", last_state)
|
||||||
.finish()
|
.finish()
|
||||||
|
|
@ -864,12 +885,14 @@ impl<K: fmt::Debug> SimTraceDebug<TraceScalarId> for SimTrace<K, SimTraceState>
|
||||||
fn fmt(&self, id: TraceScalarId, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, id: TraceScalarId, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
let Self {
|
let Self {
|
||||||
kind,
|
kind,
|
||||||
|
maybe_changed,
|
||||||
state,
|
state,
|
||||||
last_state,
|
last_state,
|
||||||
} = self;
|
} = self;
|
||||||
f.debug_struct("SimTrace")
|
f.debug_struct("SimTrace")
|
||||||
.field("id", &id)
|
.field("id", &id)
|
||||||
.field("kind", kind)
|
.field("kind", kind)
|
||||||
|
.field("maybe_changed", maybe_changed)
|
||||||
.field("state", state)
|
.field("state", state)
|
||||||
.field("last_state", last_state)
|
.field("last_state", last_state)
|
||||||
.finish()
|
.finish()
|
||||||
|
|
@ -929,6 +952,10 @@ pub(crate) enum SimTraceKind {
|
||||||
PhantomConst {
|
PhantomConst {
|
||||||
ty: PhantomConst,
|
ty: PhantomConst,
|
||||||
},
|
},
|
||||||
|
TraceAsString {
|
||||||
|
layout: compiler::CompiledTypeLayout<TraceAsString>,
|
||||||
|
range: TypeIndexRange,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(PartialEq, Eq)]
|
#[derive(PartialEq, Eq)]
|
||||||
|
|
@ -936,6 +963,7 @@ pub(crate) enum SimTraceState {
|
||||||
Bits(BitVec),
|
Bits(BitVec),
|
||||||
SimOnly(DynSimOnlyValue),
|
SimOnly(DynSimOnlyValue),
|
||||||
PhantomConst,
|
PhantomConst,
|
||||||
|
OpaqueSimValue(OpaqueSimValue),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Clone for SimTraceState {
|
impl Clone for SimTraceState {
|
||||||
|
|
@ -944,6 +972,7 @@ impl Clone for SimTraceState {
|
||||||
Self::Bits(v) => Self::Bits(v.clone()),
|
Self::Bits(v) => Self::Bits(v.clone()),
|
||||||
Self::SimOnly(v) => Self::SimOnly(v.clone()),
|
Self::SimOnly(v) => Self::SimOnly(v.clone()),
|
||||||
Self::PhantomConst => Self::PhantomConst,
|
Self::PhantomConst => Self::PhantomConst,
|
||||||
|
Self::OpaqueSimValue(v) => Self::OpaqueSimValue(v.clone()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn clone_from(&mut self, source: &Self) {
|
fn clone_from(&mut self, source: &Self) {
|
||||||
|
|
@ -951,6 +980,9 @@ impl Clone for SimTraceState {
|
||||||
(SimTraceState::Bits(dest), SimTraceState::Bits(source)) => {
|
(SimTraceState::Bits(dest), SimTraceState::Bits(source)) => {
|
||||||
dest.clone_from_bitslice(source);
|
dest.clone_from_bitslice(source);
|
||||||
}
|
}
|
||||||
|
(SimTraceState::OpaqueSimValue(dest), SimTraceState::OpaqueSimValue(source)) => {
|
||||||
|
dest.clone_from(source);
|
||||||
|
}
|
||||||
_ => *self = source.clone(),
|
_ => *self = source.clone(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -985,6 +1017,20 @@ impl SimTraceState {
|
||||||
unreachable!()
|
unreachable!()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fn unwrap_opaque_sim_value_ref(&self) -> &OpaqueSimValue {
|
||||||
|
if let SimTraceState::OpaqueSimValue(v) = self {
|
||||||
|
v
|
||||||
|
} else {
|
||||||
|
unreachable!()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn unwrap_opaque_sim_value_mut(&mut self) -> &mut OpaqueSimValue {
|
||||||
|
if let SimTraceState::OpaqueSimValue(v) = self {
|
||||||
|
v
|
||||||
|
} else {
|
||||||
|
unreachable!()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Debug for SimTraceState {
|
impl fmt::Debug for SimTraceState {
|
||||||
|
|
@ -993,6 +1039,7 @@ impl fmt::Debug for SimTraceState {
|
||||||
SimTraceState::Bits(v) => BitSliceWriteWithBase(v).fmt(f),
|
SimTraceState::Bits(v) => BitSliceWriteWithBase(v).fmt(f),
|
||||||
SimTraceState::SimOnly(v) => v.fmt(f),
|
SimTraceState::SimOnly(v) => v.fmt(f),
|
||||||
SimTraceState::PhantomConst => f.debug_tuple("PhantomConst").finish(),
|
SimTraceState::PhantomConst => f.debug_tuple("PhantomConst").finish(),
|
||||||
|
SimTraceState::OpaqueSimValue(v) => v.fmt(f),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1021,6 +1068,13 @@ impl SimTraceKind {
|
||||||
}
|
}
|
||||||
SimTraceKind::PhantomConst { .. } => SimTraceState::PhantomConst,
|
SimTraceKind::PhantomConst { .. } => SimTraceState::PhantomConst,
|
||||||
SimTraceKind::SimOnly { index: _, ty } => SimTraceState::SimOnly(ty.default_value()),
|
SimTraceKind::SimOnly { index: _, ty } => SimTraceState::SimOnly(ty.default_value()),
|
||||||
|
SimTraceKind::TraceAsString { layout, range: _ } => {
|
||||||
|
let type_properties = layout.ty.type_properties();
|
||||||
|
SimTraceState::OpaqueSimValue(OpaqueSimValue::from_bits_and_sim_only_values(
|
||||||
|
UIntValue::new_dyn(Arc::new(BitVec::repeat(false, type_properties.bit_width))),
|
||||||
|
Vec::with_capacity(type_properties.sim_only_values_len),
|
||||||
|
))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1175,6 +1229,31 @@ impl SimulationModuleState {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
CompiledTypeLayoutBody::Transparent { .. } => {
|
||||||
|
let value = value.map_ty(|ty| match ty {
|
||||||
|
CanonicalType::UInt(_)
|
||||||
|
| CanonicalType::SInt(_)
|
||||||
|
| CanonicalType::Bool(_)
|
||||||
|
| CanonicalType::Array(_)
|
||||||
|
| CanonicalType::Enum(_)
|
||||||
|
| CanonicalType::Bundle(_)
|
||||||
|
| CanonicalType::AsyncReset(_)
|
||||||
|
| CanonicalType::SyncReset(_)
|
||||||
|
| CanonicalType::Reset(_)
|
||||||
|
| CanonicalType::Clock(_)
|
||||||
|
| CanonicalType::PhantomConst(_)
|
||||||
|
| CanonicalType::DynSimOnly(_) => unreachable!(),
|
||||||
|
CanonicalType::TraceAsString(ty) => ty,
|
||||||
|
});
|
||||||
|
let sub_target = target
|
||||||
|
.join(TargetPathElement::from(TargetPathTraceAsStringInner {}).intern_sized());
|
||||||
|
if self.parse_io(sub_target, value.inner()) {
|
||||||
|
self.uninitialized_ios.insert(target, vec![sub_target]);
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn mark_target_as_initialized(&mut self, mut target: Target) {
|
fn mark_target_as_initialized(&mut self, mut target: Target) {
|
||||||
|
|
@ -1225,7 +1304,10 @@ impl SimulationModuleState {
|
||||||
Target::Base(_) => break,
|
Target::Base(_) => break,
|
||||||
Target::Child(child) => {
|
Target::Child(child) => {
|
||||||
match *child.path_element() {
|
match *child.path_element() {
|
||||||
TargetPathElement::BundleField(_) | TargetPathElement::ArrayElement(_) => {}
|
TargetPathElement::BundleField(_)
|
||||||
|
| TargetPathElement::ArrayElement(_)
|
||||||
|
| TargetPathElement::TraceAsStringInner(_)
|
||||||
|
| TargetPathElement::ToTraceAsString(_) => {}
|
||||||
TargetPathElement::DynArrayElement(_) => panic!(
|
TargetPathElement::DynArrayElement(_) => panic!(
|
||||||
"simulator read/write expression must not have dynamic array indexes"
|
"simulator read/write expression must not have dynamic array indexes"
|
||||||
),
|
),
|
||||||
|
|
@ -1268,7 +1350,8 @@ impl SimulationModuleState {
|
||||||
| CanonicalType::Reset(_)
|
| CanonicalType::Reset(_)
|
||||||
| CanonicalType::Clock(_)
|
| CanonicalType::Clock(_)
|
||||||
| CanonicalType::PhantomConst(_)
|
| CanonicalType::PhantomConst(_)
|
||||||
| CanonicalType::DynSimOnly(_) => unreachable!(),
|
| CanonicalType::DynSimOnly(_)
|
||||||
|
| CanonicalType::TraceAsString(_) => unreachable!(),
|
||||||
CanonicalType::AsyncReset(_) => true,
|
CanonicalType::AsyncReset(_) => true,
|
||||||
CanonicalType::SyncReset(_) => false,
|
CanonicalType::SyncReset(_) => false,
|
||||||
}
|
}
|
||||||
|
|
@ -1433,6 +1516,26 @@ impl SimulationExternModuleClockForPast {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
CompiledTypeLayoutBody::Transparent { .. } => {
|
||||||
|
let map_ty_fn = |ty| match ty {
|
||||||
|
CanonicalType::UInt(_)
|
||||||
|
| CanonicalType::SInt(_)
|
||||||
|
| CanonicalType::Bool(_)
|
||||||
|
| CanonicalType::Array(_)
|
||||||
|
| CanonicalType::Enum(_)
|
||||||
|
| CanonicalType::Bundle(_)
|
||||||
|
| CanonicalType::AsyncReset(_)
|
||||||
|
| CanonicalType::SyncReset(_)
|
||||||
|
| CanonicalType::Reset(_)
|
||||||
|
| CanonicalType::Clock(_)
|
||||||
|
| CanonicalType::PhantomConst(_)
|
||||||
|
| CanonicalType::DynSimOnly(_) => unreachable!(),
|
||||||
|
CanonicalType::TraceAsString(ty) => ty,
|
||||||
|
};
|
||||||
|
let current = current.map_ty(map_ty_fn);
|
||||||
|
let past = past.map_ty(map_ty_fn);
|
||||||
|
self.add_current_to_past_mapping(current.inner(), past.inner());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1901,6 +2004,7 @@ struct SimulationImpl {
|
||||||
),
|
),
|
||||||
>,
|
>,
|
||||||
waiting_sensitivity_sets_by_address: HashMap<*const SensitivitySet, Rc<SensitivitySet>>,
|
waiting_sensitivity_sets_by_address: HashMap<*const SensitivitySet, Rc<SensitivitySet>>,
|
||||||
|
trace_as_string_buf: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Debug for SimulationImpl {
|
impl fmt::Debug for SimulationImpl {
|
||||||
|
|
@ -1990,6 +2094,7 @@ impl SimulationImpl {
|
||||||
next_sensitivity_set_debug_id: _,
|
next_sensitivity_set_debug_id: _,
|
||||||
waiting_sensitivity_sets_by_compiled_value,
|
waiting_sensitivity_sets_by_compiled_value,
|
||||||
waiting_sensitivity_sets_by_address,
|
waiting_sensitivity_sets_by_address,
|
||||||
|
trace_as_string_buf: _,
|
||||||
} = self;
|
} = self;
|
||||||
f.debug_struct("Simulation")
|
f.debug_struct("Simulation")
|
||||||
.field("state", state)
|
.field("state", state)
|
||||||
|
|
@ -2078,10 +2183,12 @@ impl SimulationImpl {
|
||||||
traces: SimTraces(Box::from_iter(compiled.traces.0.iter().map(
|
traces: SimTraces(Box::from_iter(compiled.traces.0.iter().map(
|
||||||
|&SimTrace {
|
|&SimTrace {
|
||||||
kind,
|
kind,
|
||||||
|
maybe_changed: _,
|
||||||
state: _,
|
state: _,
|
||||||
last_state: _,
|
last_state: _,
|
||||||
}| SimTrace {
|
}| SimTrace {
|
||||||
kind,
|
kind,
|
||||||
|
maybe_changed: true,
|
||||||
state: kind.make_state(),
|
state: kind.make_state(),
|
||||||
last_state: kind.make_state(),
|
last_state: kind.make_state(),
|
||||||
},
|
},
|
||||||
|
|
@ -2094,6 +2201,7 @@ impl SimulationImpl {
|
||||||
next_sensitivity_set_debug_id: 0,
|
next_sensitivity_set_debug_id: 0,
|
||||||
waiting_sensitivity_sets_by_compiled_value: HashMap::default(),
|
waiting_sensitivity_sets_by_compiled_value: HashMap::default(),
|
||||||
waiting_sensitivity_sets_by_address: HashMap::default(),
|
waiting_sensitivity_sets_by_address: HashMap::default(),
|
||||||
|
trace_as_string_buf: String::with_capacity(256),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn write_traces<const ONLY_IF_CHANGED: bool>(
|
fn write_traces<const ONLY_IF_CHANGED: bool>(
|
||||||
|
|
@ -2126,13 +2234,16 @@ impl SimulationImpl {
|
||||||
id,
|
id,
|
||||||
&SimTrace {
|
&SimTrace {
|
||||||
kind,
|
kind,
|
||||||
|
maybe_changed,
|
||||||
ref state,
|
ref state,
|
||||||
ref last_state,
|
ref last_state,
|
||||||
},
|
},
|
||||||
) in self.traces.0.iter().enumerate()
|
) in self.traces.0.iter().enumerate()
|
||||||
{
|
{
|
||||||
if ONLY_IF_CHANGED && state == last_state {
|
if ONLY_IF_CHANGED {
|
||||||
continue;
|
if !(maybe_changed && state != last_state) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let id = TraceScalarId(id);
|
let id = TraceScalarId(id);
|
||||||
match kind {
|
match kind {
|
||||||
|
|
@ -2171,6 +2282,15 @@ impl SimulationImpl {
|
||||||
SimTraceKind::SimOnly { .. } => {
|
SimTraceKind::SimOnly { .. } => {
|
||||||
trace_writer.set_signal_sim_only_value(id, state.unwrap_sim_only_ref())?
|
trace_writer.set_signal_sim_only_value(id, state.unwrap_sim_only_ref())?
|
||||||
}
|
}
|
||||||
|
SimTraceKind::TraceAsString { layout, .. } => {
|
||||||
|
self.trace_as_string_buf.clear();
|
||||||
|
layout.ty.trace_fmt_append_to_string(
|
||||||
|
&mut self.trace_as_string_buf,
|
||||||
|
state.unwrap_opaque_sim_value_ref().as_slice(),
|
||||||
|
);
|
||||||
|
trace_writer.set_signal_string(id, &self.trace_as_string_buf)?;
|
||||||
|
self.trace_as_string_buf.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(trace_writer)
|
Ok(trace_writer)
|
||||||
|
|
@ -2193,10 +2313,48 @@ impl SimulationImpl {
|
||||||
fn read_traces<const IS_INITIAL_STEP: bool>(&mut self) {
|
fn read_traces<const IS_INITIAL_STEP: bool>(&mut self) {
|
||||||
for &mut SimTrace {
|
for &mut SimTrace {
|
||||||
kind,
|
kind,
|
||||||
|
ref mut maybe_changed,
|
||||||
ref mut state,
|
ref mut state,
|
||||||
ref mut last_state,
|
ref mut last_state,
|
||||||
} in &mut self.traces.0
|
} in &mut self.traces.0
|
||||||
{
|
{
|
||||||
|
let new_maybe_changed = match kind {
|
||||||
|
SimTraceKind::BigUInt { index, ty: _ }
|
||||||
|
| SimTraceKind::BigSInt { index, ty: _ }
|
||||||
|
| SimTraceKind::BigBool { index }
|
||||||
|
| SimTraceKind::BigAsyncReset { index }
|
||||||
|
| SimTraceKind::BigSyncReset { index }
|
||||||
|
| SimTraceKind::BigClock { index } => self
|
||||||
|
.state
|
||||||
|
.big_slots
|
||||||
|
.state_index_fetch_maybe_modified_flag(index),
|
||||||
|
SimTraceKind::SmallUInt { index, ty: _ }
|
||||||
|
| SimTraceKind::SmallSInt { index, ty: _ }
|
||||||
|
| SimTraceKind::SmallBool { index }
|
||||||
|
| SimTraceKind::SmallAsyncReset { index }
|
||||||
|
| SimTraceKind::SmallSyncReset { index }
|
||||||
|
| SimTraceKind::SmallClock { index }
|
||||||
|
| SimTraceKind::EnumDiscriminant { index, ty: _ } => self
|
||||||
|
.state
|
||||||
|
.small_slots
|
||||||
|
.state_index_fetch_maybe_modified_flag(index),
|
||||||
|
SimTraceKind::SimOnly { index, ty: _ } => self
|
||||||
|
.state
|
||||||
|
.sim_only_slots
|
||||||
|
.state_index_fetch_maybe_modified_flag(index),
|
||||||
|
SimTraceKind::PhantomConst { ty: _ } => IS_INITIAL_STEP,
|
||||||
|
SimTraceKind::TraceAsString { layout: _, range } => self
|
||||||
|
.state
|
||||||
|
.type_index_range_fetch_maybe_modified_flags(range),
|
||||||
|
};
|
||||||
|
if !new_maybe_changed && !IS_INITIAL_STEP {
|
||||||
|
if *maybe_changed {
|
||||||
|
last_state.clone_from(state);
|
||||||
|
}
|
||||||
|
*maybe_changed = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
*maybe_changed = new_maybe_changed;
|
||||||
if !IS_INITIAL_STEP {
|
if !IS_INITIAL_STEP {
|
||||||
mem::swap(state, last_state);
|
mem::swap(state, last_state);
|
||||||
}
|
}
|
||||||
|
|
@ -2241,11 +2399,26 @@ impl SimulationImpl {
|
||||||
.unwrap_sim_only_mut()
|
.unwrap_sim_only_mut()
|
||||||
.clone_from(&self.state.sim_only_slots[index]);
|
.clone_from(&self.state.sim_only_slots[index]);
|
||||||
}
|
}
|
||||||
|
SimTraceKind::TraceAsString { layout, range } => {
|
||||||
|
let CompiledTypeLayoutBody::Transparent { inner } = layout.body else {
|
||||||
|
unreachable!()
|
||||||
|
};
|
||||||
|
Self::read_opaque_no_settle(
|
||||||
|
&mut self.state,
|
||||||
|
CompiledValue {
|
||||||
|
layout: *inner,
|
||||||
|
range,
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
state.unwrap_opaque_sim_value_mut(),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if IS_INITIAL_STEP {
|
if IS_INITIAL_STEP {
|
||||||
last_state.clone_from(state);
|
last_state.clone_from(state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
self.state.clear_all_maybe_modified_flags();
|
||||||
}
|
}
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
fn advance_time(this_ref: &Rc<RefCell<Self>>, duration: SimDuration) {
|
fn advance_time(this_ref: &Rc<RefCell<Self>>, duration: SimDuration) {
|
||||||
|
|
@ -2772,6 +2945,7 @@ impl SimulationImpl {
|
||||||
+ Copy,
|
+ Copy,
|
||||||
read_write_sim_only_scalar: impl Fn(usize, &mut Opaque, &mut DynSimOnlyValue) + Copy,
|
read_write_sim_only_scalar: impl Fn(usize, &mut Opaque, &mut DynSimOnlyValue) + Copy,
|
||||||
) {
|
) {
|
||||||
|
let compiled_value = compiled_value.unwrap_transparent_types();
|
||||||
match compiled_value.layout.body {
|
match compiled_value.layout.body {
|
||||||
CompiledTypeLayoutBody::Scalar => {
|
CompiledTypeLayoutBody::Scalar => {
|
||||||
let signed = match compiled_value.layout.ty {
|
let signed = match compiled_value.layout.ty {
|
||||||
|
|
@ -2787,6 +2961,7 @@ impl SimulationImpl {
|
||||||
CanonicalType::Clock(_) => false,
|
CanonicalType::Clock(_) => false,
|
||||||
CanonicalType::PhantomConst(_) => unreachable!(),
|
CanonicalType::PhantomConst(_) => unreachable!(),
|
||||||
CanonicalType::DynSimOnly(_) => false,
|
CanonicalType::DynSimOnly(_) => false,
|
||||||
|
CanonicalType::TraceAsString(_) => unreachable!(),
|
||||||
};
|
};
|
||||||
let indexes = OpaqueSimValueSizeRange::from(
|
let indexes = OpaqueSimValueSizeRange::from(
|
||||||
start_index..start_index + compiled_value.layout.ty.size(),
|
start_index..start_index + compiled_value.layout.ty.size(),
|
||||||
|
|
@ -2863,14 +3038,17 @@ impl SimulationImpl {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
CompiledTypeLayoutBody::Transparent { .. } => {
|
||||||
|
unreachable!("handled by unwrap_transparent_types")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
fn read_no_settle_helper(
|
fn read_opaque_no_settle(
|
||||||
state: &mut interpreter::State,
|
state: &mut interpreter::State,
|
||||||
io: Expr<CanonicalType>,
|
|
||||||
compiled_value: CompiledValue<CanonicalType>,
|
compiled_value: CompiledValue<CanonicalType>,
|
||||||
) -> SimValue<CanonicalType> {
|
opaque: &mut OpaqueSimValue,
|
||||||
|
) {
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
fn read_write_sim_only_scalar(
|
fn read_write_sim_only_scalar(
|
||||||
index: usize,
|
index: usize,
|
||||||
|
|
@ -2891,8 +3069,7 @@ impl SimulationImpl {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
let size = io.ty().size();
|
let size = compiled_value.layout.ty.size();
|
||||||
let mut opaque = OpaqueSimValue::with_capacity(size);
|
|
||||||
opaque.rewrite_with(size, |mut writer| {
|
opaque.rewrite_with(size, |mut writer| {
|
||||||
SimulationImpl::read_write_sim_value_helper(
|
SimulationImpl::read_write_sim_value_helper(
|
||||||
state,
|
state,
|
||||||
|
|
@ -2924,6 +3101,16 @@ impl SimulationImpl {
|
||||||
);
|
);
|
||||||
writer.fill_cloned_from_slice(OpaqueSimValueSlice::empty())
|
writer.fill_cloned_from_slice(OpaqueSimValueSlice::empty())
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
#[track_caller]
|
||||||
|
fn read_no_settle_helper(
|
||||||
|
state: &mut interpreter::State,
|
||||||
|
io: Expr<CanonicalType>,
|
||||||
|
compiled_value: CompiledValue<CanonicalType>,
|
||||||
|
) -> SimValue<CanonicalType> {
|
||||||
|
let size = io.ty().size();
|
||||||
|
let mut opaque = OpaqueSimValue::with_capacity(size);
|
||||||
|
Self::read_opaque_no_settle(state, compiled_value, &mut opaque);
|
||||||
SimValue::from_opaque(io.ty(), opaque)
|
SimValue::from_opaque(io.ty(), opaque)
|
||||||
}
|
}
|
||||||
/// doesn't modify `opaque`
|
/// doesn't modify `opaque`
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ use crate::{
|
||||||
ExprEnum, Flow, ValueType, ops,
|
ExprEnum, Flow, ValueType, ops,
|
||||||
target::{
|
target::{
|
||||||
GetTarget, Target, TargetBase, TargetPathArrayElement, TargetPathBundleField,
|
GetTarget, Target, TargetBase, TargetPathArrayElement, TargetPathBundleField,
|
||||||
TargetPathElement,
|
TargetPathElement, TargetPathToTraceAsString, TargetPathTraceAsStringInner,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
int::BoolOrIntType,
|
int::BoolOrIntType,
|
||||||
|
|
@ -29,7 +29,8 @@ use crate::{
|
||||||
TraceBool, TraceBundle, TraceClock, TraceDecl, TraceEnumDiscriminant, TraceEnumWithFields,
|
TraceBool, TraceBundle, TraceClock, TraceDecl, TraceEnumDiscriminant, TraceEnumWithFields,
|
||||||
TraceFieldlessEnum, TraceInstance, TraceLocation, TraceMem, TraceMemPort, TraceMemoryId,
|
TraceFieldlessEnum, TraceInstance, TraceLocation, TraceMem, TraceMemPort, TraceMemoryId,
|
||||||
TraceMemoryLocation, TraceModule, TraceModuleIO, TracePhantomConst, TraceReg, TraceSInt,
|
TraceMemoryLocation, TraceModule, TraceModuleIO, TracePhantomConst, TraceReg, TraceSInt,
|
||||||
TraceScalarId, TraceScope, TraceSimOnly, TraceSyncReset, TraceUInt, TraceWire,
|
TraceScalarId, TraceScope, TraceSimOnly, TraceSyncReset, TraceTraceAsString, TraceUInt,
|
||||||
|
TraceWire,
|
||||||
interpreter::{
|
interpreter::{
|
||||||
self, Insn, InsnField, InsnFieldKind, InsnFieldType, InsnOrLabel, Insns, InsnsBuilding,
|
self, Insn, InsnField, InsnFieldKind, InsnFieldType, InsnOrLabel, Insns, InsnsBuilding,
|
||||||
InsnsBuildingDone, InsnsBuildingKind, Label, PrefixLinesWrapper, SmallUInt,
|
InsnsBuildingDone, InsnsBuildingKind, Label, PrefixLinesWrapper, SmallUInt,
|
||||||
|
|
@ -42,7 +43,7 @@ use crate::{
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
ty::{OpaqueSimValueSize, StaticType},
|
ty::{OpaqueSimValueSize, StaticType, TraceAsString},
|
||||||
util::{HashMap, chain},
|
util::{HashMap, chain},
|
||||||
};
|
};
|
||||||
use bitvec::vec::BitVec;
|
use bitvec::vec::BitVec;
|
||||||
|
|
@ -110,6 +111,9 @@ pub(crate) enum CompiledTypeLayoutBody {
|
||||||
Bundle {
|
Bundle {
|
||||||
fields: Interned<[CompiledBundleField]>,
|
fields: Interned<[CompiledBundleField]>,
|
||||||
},
|
},
|
||||||
|
Transparent {
|
||||||
|
inner: Interned<CompiledTypeLayout<CanonicalType>>,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CompiledTypeLayoutBody {
|
impl CompiledTypeLayoutBody {
|
||||||
|
|
@ -128,6 +132,9 @@ impl CompiledTypeLayoutBody {
|
||||||
.map(|field| field.with_prefixed_debug_names(prefix))
|
.map(|field| field.with_prefixed_debug_names(prefix))
|
||||||
.collect(),
|
.collect(),
|
||||||
},
|
},
|
||||||
|
CompiledTypeLayoutBody::Transparent { inner } => CompiledTypeLayoutBody::Transparent {
|
||||||
|
inner: inner.with_prefixed_debug_names(prefix).intern_sized(),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn with_anonymized_debug_info(self) -> Self {
|
fn with_anonymized_debug_info(self) -> Self {
|
||||||
|
|
@ -145,6 +152,9 @@ impl CompiledTypeLayoutBody {
|
||||||
.map(|field| field.with_anonymized_debug_info())
|
.map(|field| field.with_anonymized_debug_info())
|
||||||
.collect(),
|
.collect(),
|
||||||
},
|
},
|
||||||
|
CompiledTypeLayoutBody::Transparent { inner } => CompiledTypeLayoutBody::Transparent {
|
||||||
|
inner: inner.with_anonymized_debug_info().intern_sized(),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -179,7 +189,7 @@ impl<T: Type> CompiledTypeLayout<T> {
|
||||||
impl Memoize for MyMemoize {
|
impl Memoize for MyMemoize {
|
||||||
type Input = CanonicalType;
|
type Input = CanonicalType;
|
||||||
type InputOwned = CanonicalType;
|
type InputOwned = CanonicalType;
|
||||||
type Output = CompiledTypeLayout<CanonicalType>;
|
type Output = (TypeLayout<InsnsBuildingDone>, CompiledTypeLayoutBody);
|
||||||
|
|
||||||
fn inner(self, input: &Self::Input) -> Self::Output {
|
fn inner(self, input: &Self::Input) -> Self::Output {
|
||||||
match input {
|
match input {
|
||||||
|
|
@ -197,11 +207,7 @@ impl<T: Type> CompiledTypeLayout<T> {
|
||||||
ty: *input,
|
ty: *input,
|
||||||
};
|
};
|
||||||
layout.big_slots = StatePartLayout::scalar(debug_data, ());
|
layout.big_slots = StatePartLayout::scalar(debug_data, ());
|
||||||
CompiledTypeLayout {
|
(layout.into(), CompiledTypeLayoutBody::Scalar)
|
||||||
ty: *input,
|
|
||||||
layout: layout.into(),
|
|
||||||
body: CompiledTypeLayoutBody::Scalar,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
CanonicalType::Array(array) => {
|
CanonicalType::Array(array) => {
|
||||||
let mut layout = TypeLayout::empty();
|
let mut layout = TypeLayout::empty();
|
||||||
|
|
@ -215,19 +221,16 @@ impl<T: Type> CompiledTypeLayout<T> {
|
||||||
if array.is_empty() {
|
if array.is_empty() {
|
||||||
elements_non_empty.push(element.with_prefixed_debug_names("[<none>]"));
|
elements_non_empty.push(element.with_prefixed_debug_names("[<none>]"));
|
||||||
}
|
}
|
||||||
CompiledTypeLayout {
|
(
|
||||||
ty: *input,
|
layout.into(),
|
||||||
layout: layout.into(),
|
CompiledTypeLayoutBody::Array {
|
||||||
body: CompiledTypeLayoutBody::Array {
|
|
||||||
elements_non_empty: elements_non_empty.intern_deref(),
|
elements_non_empty: elements_non_empty.intern_deref(),
|
||||||
},
|
},
|
||||||
}
|
)
|
||||||
|
}
|
||||||
|
CanonicalType::PhantomConst(_) => {
|
||||||
|
(TypeLayout::empty(), CompiledTypeLayoutBody::PhantomConst)
|
||||||
}
|
}
|
||||||
CanonicalType::PhantomConst(_) => CompiledTypeLayout {
|
|
||||||
ty: *input,
|
|
||||||
layout: TypeLayout::empty(),
|
|
||||||
body: CompiledTypeLayoutBody::PhantomConst,
|
|
||||||
},
|
|
||||||
CanonicalType::Bundle(bundle) => {
|
CanonicalType::Bundle(bundle) => {
|
||||||
let mut layout = TypeLayout::empty();
|
let mut layout = TypeLayout::empty();
|
||||||
let fields = bundle
|
let fields = bundle
|
||||||
|
|
@ -246,11 +249,7 @@ impl<T: Type> CompiledTypeLayout<T> {
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.collect();
|
.collect();
|
||||||
CompiledTypeLayout {
|
(layout.into(), CompiledTypeLayoutBody::Bundle { fields })
|
||||||
ty: *input,
|
|
||||||
layout: layout.into(),
|
|
||||||
body: CompiledTypeLayoutBody::Bundle { fields },
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
CanonicalType::DynSimOnly(ty) => {
|
CanonicalType::DynSimOnly(ty) => {
|
||||||
let mut layout = TypeLayout::empty();
|
let mut layout = TypeLayout::empty();
|
||||||
|
|
@ -259,24 +258,30 @@ impl<T: Type> CompiledTypeLayout<T> {
|
||||||
ty: *input,
|
ty: *input,
|
||||||
};
|
};
|
||||||
layout.sim_only_slots = StatePartLayout::scalar(debug_data, *ty);
|
layout.sim_only_slots = StatePartLayout::scalar(debug_data, *ty);
|
||||||
CompiledTypeLayout {
|
(layout.into(), CompiledTypeLayoutBody::Scalar)
|
||||||
ty: *input,
|
}
|
||||||
layout: layout.into(),
|
CanonicalType::TraceAsString(ty) => {
|
||||||
body: CompiledTypeLayoutBody::Scalar,
|
let inner = CompiledTypeLayout::get(ty.inner_ty()).intern_sized();
|
||||||
}
|
(inner.layout, CompiledTypeLayoutBody::Transparent { inner })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let CompiledTypeLayout {
|
let (layout, body) = MyMemoize.get_owned(ty.canonical());
|
||||||
ty: _,
|
|
||||||
layout,
|
|
||||||
body,
|
|
||||||
} = MyMemoize.get_owned(ty.canonical());
|
|
||||||
Self { ty, layout, body }
|
Self { ty, layout, body }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl CompiledTypeLayout<CanonicalType> {
|
||||||
|
#[must_use]
|
||||||
|
fn unwrap_transparent_types(mut self) -> Self {
|
||||||
|
while let CompiledTypeLayoutBody::Transparent { inner } = self.body {
|
||||||
|
self = *inner;
|
||||||
|
}
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
|
#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
|
||||||
pub(crate) struct CompiledValue<T: Type> {
|
pub(crate) struct CompiledValue<T: Type> {
|
||||||
pub(crate) layout: CompiledTypeLayout<T>,
|
pub(crate) layout: CompiledTypeLayout<T>,
|
||||||
|
|
@ -324,6 +329,29 @@ impl<T: Type> CompiledValue<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl CompiledValue<CanonicalType> {
|
||||||
|
#[must_use]
|
||||||
|
pub(crate) fn unwrap_transparent_types(self) -> Self {
|
||||||
|
let Self {
|
||||||
|
layout,
|
||||||
|
range,
|
||||||
|
write,
|
||||||
|
} = self;
|
||||||
|
Self {
|
||||||
|
layout: layout.unwrap_transparent_types(),
|
||||||
|
range,
|
||||||
|
write: write.map(|(layout, range)| (layout.unwrap_transparent_types(), range)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[must_use]
|
||||||
|
pub(crate) fn wrap_in_trace_as_string(self, ty: TraceAsString) -> CompiledValue<TraceAsString> {
|
||||||
|
self.map(|layout, range| {
|
||||||
|
assert_eq!(layout.ty, ty.inner_ty());
|
||||||
|
(CompiledTypeLayout::get(ty), range)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) struct DebugCompiledValueStateAsMap<'a> {
|
pub(crate) struct DebugCompiledValueStateAsMap<'a> {
|
||||||
pub(crate) compiled_value: CompiledValue<CanonicalType>,
|
pub(crate) compiled_value: CompiledValue<CanonicalType>,
|
||||||
pub(crate) state_layout: &'a interpreter::parts::StateLayout<InsnsBuildingDone>,
|
pub(crate) state_layout: &'a interpreter::parts::StateLayout<InsnsBuildingDone>,
|
||||||
|
|
@ -402,6 +430,17 @@ impl CompiledValue<Array> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl CompiledValue<TraceAsString> {
|
||||||
|
pub(crate) fn inner(self) -> CompiledValue<CanonicalType> {
|
||||||
|
self.map(|layout, range| {
|
||||||
|
let CompiledTypeLayoutBody::Transparent { inner } = layout.body else {
|
||||||
|
unreachable!();
|
||||||
|
};
|
||||||
|
(*inner, range)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
macro_rules! make_type_array_indexes {
|
macro_rules! make_type_array_indexes {
|
||||||
(
|
(
|
||||||
type_plural_fields = [$($type_plural_field:ident,)*];
|
type_plural_fields = [$($type_plural_field:ident,)*];
|
||||||
|
|
@ -618,6 +657,16 @@ impl<T: Type> CompiledExpr<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl CompiledExpr<CanonicalType> {
|
||||||
|
#[must_use]
|
||||||
|
pub(crate) fn wrap_in_trace_as_string(self, ty: TraceAsString) -> CompiledExpr<TraceAsString> {
|
||||||
|
CompiledExpr {
|
||||||
|
static_part: self.static_part.wrap_in_trace_as_string(ty),
|
||||||
|
indexes: self.indexes,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl CompiledExpr<Bundle> {
|
impl CompiledExpr<Bundle> {
|
||||||
fn field_by_index(self, field_index: usize) -> CompiledExpr<CanonicalType> {
|
fn field_by_index(self, field_index: usize) -> CompiledExpr<CanonicalType> {
|
||||||
CompiledExpr {
|
CompiledExpr {
|
||||||
|
|
@ -666,6 +715,15 @@ impl CompiledExpr<Array> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl CompiledExpr<TraceAsString> {
|
||||||
|
pub(crate) fn inner(self) -> CompiledExpr<CanonicalType> {
|
||||||
|
CompiledExpr {
|
||||||
|
static_part: self.static_part.inner(),
|
||||||
|
indexes: self.indexes,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
macro_rules! make_assignment_graph {
|
macro_rules! make_assignment_graph {
|
||||||
(
|
(
|
||||||
type_plural_fields = [$($type_plural_field:ident,)*];
|
type_plural_fields = [$($type_plural_field:ident,)*];
|
||||||
|
|
@ -1977,6 +2035,39 @@ macro_rules! impl_compiler {
|
||||||
flow,
|
flow,
|
||||||
}
|
}
|
||||||
.into(),
|
.into(),
|
||||||
|
CanonicalType::TraceAsString(ty) => {
|
||||||
|
let location = match target {
|
||||||
|
MakeTraceDeclTarget::Expr(target) => {
|
||||||
|
let compiled_value = self.compile_expr(instantiated_module, target);
|
||||||
|
let CompiledValue { layout, range, write: _ } =
|
||||||
|
self.compiled_expr_to_value(compiled_value, source_location).map_ty(Type::from_canonical);
|
||||||
|
TraceLocation::Scalar(self.new_sim_trace(SimTraceKind::TraceAsString {
|
||||||
|
layout,
|
||||||
|
range,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
MakeTraceDeclTarget::Memory {
|
||||||
|
id,
|
||||||
|
depth,
|
||||||
|
stride,
|
||||||
|
start,
|
||||||
|
ty: _,
|
||||||
|
} => TraceLocation::Memory(TraceMemoryLocation {
|
||||||
|
id,
|
||||||
|
depth,
|
||||||
|
stride,
|
||||||
|
start,
|
||||||
|
len: ty.type_properties().bit_width,
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
TraceTraceAsString {
|
||||||
|
location,
|
||||||
|
name,
|
||||||
|
ty,
|
||||||
|
flow,
|
||||||
|
}
|
||||||
|
.into()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn compiled_expr_to_value(
|
fn compiled_expr_to_value(
|
||||||
|
|
@ -2234,6 +2325,7 @@ impl Compiler {
|
||||||
let id = TraceScalarId(self.traces.0.len());
|
let id = TraceScalarId(self.traces.0.len());
|
||||||
self.traces.0.push(SimTrace {
|
self.traces.0.push(SimTrace {
|
||||||
kind,
|
kind,
|
||||||
|
maybe_changed: true,
|
||||||
state: (),
|
state: (),
|
||||||
last_state: (),
|
last_state: (),
|
||||||
});
|
});
|
||||||
|
|
@ -2420,7 +2512,8 @@ impl Compiler {
|
||||||
| CanonicalType::Reset(_)
|
| CanonicalType::Reset(_)
|
||||||
| CanonicalType::Clock(_)
|
| CanonicalType::Clock(_)
|
||||||
| CanonicalType::DynSimOnly(_)
|
| CanonicalType::DynSimOnly(_)
|
||||||
| CanonicalType::PhantomConst(_) => {
|
| CanonicalType::PhantomConst(_)
|
||||||
|
| CanonicalType::TraceAsString(_) => {
|
||||||
self.make_trace_scalar(instantiated_module, target, name, source_location)
|
self.make_trace_scalar(instantiated_module, target, name, source_location)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2590,6 +2683,12 @@ impl Compiler {
|
||||||
parent.map_ty(Array::from_canonical).element(index)
|
parent.map_ty(Array::from_canonical).element(index)
|
||||||
}
|
}
|
||||||
TargetPathElement::DynArrayElement(_) => unreachable!(),
|
TargetPathElement::DynArrayElement(_) => unreachable!(),
|
||||||
|
TargetPathElement::TraceAsStringInner(TargetPathTraceAsStringInner {}) => {
|
||||||
|
parent.map_ty(TraceAsString::from_canonical).inner()
|
||||||
|
}
|
||||||
|
TargetPathElement::ToTraceAsString(TargetPathToTraceAsString { ty }) => parent
|
||||||
|
.wrap_in_trace_as_string(ty)
|
||||||
|
.map_ty(|ty| ty.canonical()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -2822,6 +2921,12 @@ impl Compiler {
|
||||||
CanonicalType::PhantomConst(_) | CanonicalType::DynSimOnly(_) => {
|
CanonicalType::PhantomConst(_) | CanonicalType::DynSimOnly(_) => {
|
||||||
self.compile_cast_aggregate_to_bits(instantiated_module, [])
|
self.compile_cast_aggregate_to_bits(instantiated_module, [])
|
||||||
}
|
}
|
||||||
|
CanonicalType::TraceAsString(_) => self.compile_cast_to_bits(
|
||||||
|
instantiated_module,
|
||||||
|
ops::CastToBits::new(
|
||||||
|
ops::TraceAsStringAsInner::new(Expr::from_canonical(expr.arg())).to_expr(),
|
||||||
|
),
|
||||||
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn compile_cast_bits_to_or_uninit(
|
fn compile_cast_bits_to_or_uninit(
|
||||||
|
|
@ -2911,6 +3016,16 @@ impl Compiler {
|
||||||
vec![]
|
vec![]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
CanonicalType::TraceAsString(ty) => Expr::canonical(
|
||||||
|
ops::ToTraceAsString::new(
|
||||||
|
match arg {
|
||||||
|
Some(arg) => arg.cast_bits_to(ty.inner_ty()),
|
||||||
|
None => ty.inner_ty().uninit(),
|
||||||
|
},
|
||||||
|
ty,
|
||||||
|
)
|
||||||
|
.to_expr(),
|
||||||
|
),
|
||||||
};
|
};
|
||||||
let retval = self.compile_expr(instantiated_module, Expr::canonical(retval));
|
let retval = self.compile_expr(instantiated_module, Expr::canonical(retval));
|
||||||
self.compiled_expr_to_value(retval, instantiated_module.leaf_module().source_location())
|
self.compiled_expr_to_value(retval, instantiated_module.leaf_module().source_location())
|
||||||
|
|
@ -2962,6 +3077,7 @@ impl Compiler {
|
||||||
CanonicalType::Clock(_) => false,
|
CanonicalType::Clock(_) => false,
|
||||||
CanonicalType::PhantomConst(_) => unreachable!(),
|
CanonicalType::PhantomConst(_) => unreachable!(),
|
||||||
CanonicalType::DynSimOnly(_) => unreachable!(),
|
CanonicalType::DynSimOnly(_) => unreachable!(),
|
||||||
|
CanonicalType::TraceAsString(_) => unreachable!(),
|
||||||
};
|
};
|
||||||
let dest_signed = match expr.ty() {
|
let dest_signed = match expr.ty() {
|
||||||
CanonicalType::UInt(_) => false,
|
CanonicalType::UInt(_) => false,
|
||||||
|
|
@ -2976,6 +3092,7 @@ impl Compiler {
|
||||||
CanonicalType::Clock(_) => false,
|
CanonicalType::Clock(_) => false,
|
||||||
CanonicalType::PhantomConst(_) => unreachable!(),
|
CanonicalType::PhantomConst(_) => unreachable!(),
|
||||||
CanonicalType::DynSimOnly(_) => unreachable!(),
|
CanonicalType::DynSimOnly(_) => unreachable!(),
|
||||||
|
CanonicalType::TraceAsString(_) => unreachable!(),
|
||||||
};
|
};
|
||||||
self.simple_nary_big_expr(instantiated_module, expr.ty(), [arg], |dest, [src]| match (
|
self.simple_nary_big_expr(instantiated_module, expr.ty(), [arg], |dest, [src]| match (
|
||||||
src_signed,
|
src_signed,
|
||||||
|
|
@ -3721,6 +3838,14 @@ impl Compiler {
|
||||||
ExprEnum::CastBitsTo(expr) => self
|
ExprEnum::CastBitsTo(expr) => self
|
||||||
.compile_cast_bits_to_or_uninit(instantiated_module, Some(expr.arg()), expr.ty())
|
.compile_cast_bits_to_or_uninit(instantiated_module, Some(expr.arg()), expr.ty())
|
||||||
.into(),
|
.into(),
|
||||||
|
ExprEnum::ToTraceAsString(expr) => self
|
||||||
|
.compile_expr(instantiated_module, expr.inner())
|
||||||
|
.wrap_in_trace_as_string(expr.ty())
|
||||||
|
.map_ty(|ty| ty.canonical()),
|
||||||
|
ExprEnum::TraceAsStringAsInner(expr) => self
|
||||||
|
.compile_expr(instantiated_module, Expr::canonical(expr.arg()))
|
||||||
|
.map_ty(TraceAsString::from_canonical)
|
||||||
|
.inner(),
|
||||||
ExprEnum::ModuleIO(expr) => self
|
ExprEnum::ModuleIO(expr) => self
|
||||||
.compile_value(TargetInInstantiatedModule {
|
.compile_value(TargetInInstantiatedModule {
|
||||||
instantiated_module,
|
instantiated_module,
|
||||||
|
|
@ -3868,6 +3993,21 @@ impl Compiler {
|
||||||
CanonicalType::DynSimOnly(_) => {
|
CanonicalType::DynSimOnly(_) => {
|
||||||
unreachable!("DynSimOnly mismatch");
|
unreachable!("DynSimOnly mismatch");
|
||||||
}
|
}
|
||||||
|
CanonicalType::TraceAsString(_) => {
|
||||||
|
let lhs = Expr::<TraceAsString>::from_canonical(lhs);
|
||||||
|
let rhs = Expr::<TraceAsString>::from_canonical(rhs);
|
||||||
|
let lhs_expr = ops::TraceAsStringAsInner::new(lhs).to_expr();
|
||||||
|
let rhs_expr = ops::TraceAsStringAsInner::new(rhs).to_expr();
|
||||||
|
return self.compile_connect(
|
||||||
|
lhs_instantiated_module,
|
||||||
|
lhs_conditions,
|
||||||
|
lhs_expr,
|
||||||
|
rhs_instantiated_module,
|
||||||
|
rhs_conditions,
|
||||||
|
rhs_expr,
|
||||||
|
source_location,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let Some(target) = lhs.target() else {
|
let Some(target) = lhs.target() else {
|
||||||
|
|
@ -4243,6 +4383,8 @@ impl Compiler {
|
||||||
mut read: Option<MemoryPortReadInsns<'_>>,
|
mut read: Option<MemoryPortReadInsns<'_>>,
|
||||||
mut write: Option<MemoryPortWriteInsns<'_>>,
|
mut write: Option<MemoryPortWriteInsns<'_>>,
|
||||||
) {
|
) {
|
||||||
|
let data_layout = data_layout.unwrap_transparent_types();
|
||||||
|
let mask_layout = mask_layout.unwrap_transparent_types();
|
||||||
match data_layout.body {
|
match data_layout.body {
|
||||||
CompiledTypeLayoutBody::Scalar => {
|
CompiledTypeLayoutBody::Scalar => {
|
||||||
let CompiledTypeLayoutBody::Scalar = mask_layout.body else {
|
let CompiledTypeLayoutBody::Scalar = mask_layout.body else {
|
||||||
|
|
@ -4261,6 +4403,7 @@ impl Compiler {
|
||||||
CanonicalType::Clock(_) => false,
|
CanonicalType::Clock(_) => false,
|
||||||
CanonicalType::PhantomConst(_) => unreachable!(),
|
CanonicalType::PhantomConst(_) => unreachable!(),
|
||||||
CanonicalType::DynSimOnly(_) => false,
|
CanonicalType::DynSimOnly(_) => false,
|
||||||
|
CanonicalType::TraceAsString(_) => unreachable!(),
|
||||||
};
|
};
|
||||||
let width = data_layout.ty.bit_width();
|
let width = data_layout.ty.bit_width();
|
||||||
if let Some(MemoryPortReadInsns {
|
if let Some(MemoryPortReadInsns {
|
||||||
|
|
@ -4483,6 +4626,9 @@ impl Compiler {
|
||||||
start = start + field.ty.ty.bit_width();
|
start = start + field.ty.ty.bit_width();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
CompiledTypeLayoutBody::Transparent { .. } => {
|
||||||
|
unreachable!("handled by unwrap_transparent_types")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn compile_memory_port_rw(
|
fn compile_memory_port_rw(
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,9 @@ use crate::{
|
||||||
int::{BoolOrIntType, SInt, UInt},
|
int::{BoolOrIntType, SInt, UInt},
|
||||||
intern::{Intern, Interned, Memoize},
|
intern::{Intern, Interned, Memoize},
|
||||||
sim::interpreter::parts::{
|
sim::interpreter::parts::{
|
||||||
StateLayout, StatePartIndex, StatePartKind, StatePartKindBigSlots, StatePartKindMemories,
|
StateLayout, StatePartIndex, StatePartIndexRange, StatePartKind, StatePartKindBigSlots,
|
||||||
StatePartKindSimOnlySlots, StatePartKindSmallSlots, StatePartLen, TypeIndexRange,
|
StatePartKindMemories, StatePartKindSimOnlySlots, StatePartKindSmallSlots, StatePartLen,
|
||||||
TypeLayout, get_state_part_kinds,
|
TypeIndexRange, TypeLayout, get_state_part_kinds,
|
||||||
},
|
},
|
||||||
source_location::SourceLocation,
|
source_location::SourceLocation,
|
||||||
util::{HashMap, HashSet},
|
util::{HashMap, HashSet},
|
||||||
|
|
@ -17,12 +17,11 @@ use bitvec::slice::BitSlice;
|
||||||
use num_bigint::BigInt;
|
use num_bigint::BigInt;
|
||||||
use num_traits::{One, Signed, ToPrimitive, Zero};
|
use num_traits::{One, Signed, ToPrimitive, Zero};
|
||||||
use std::{
|
use std::{
|
||||||
borrow::BorrowMut,
|
|
||||||
convert::Infallible,
|
convert::Infallible,
|
||||||
fmt::{self, Write},
|
fmt::{self, Write},
|
||||||
hash::Hash,
|
hash::Hash,
|
||||||
marker::PhantomData,
|
marker::PhantomData,
|
||||||
ops::{ControlFlow, Deref, DerefMut, Index, IndexMut},
|
ops::{ControlFlow, Deref, Index, IndexMut},
|
||||||
};
|
};
|
||||||
use vec_map::VecMap;
|
use vec_map::VecMap;
|
||||||
|
|
||||||
|
|
@ -915,6 +914,21 @@ impl<K: StatePartKind> StatePart<K> {
|
||||||
value: K::borrow_state(&mut self.value),
|
value: K::borrow_state(&mut self.value),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pub(crate) fn state_index_fetch_maybe_modified_flag(
|
||||||
|
&self,
|
||||||
|
part_index: StatePartIndex<K>,
|
||||||
|
) -> bool {
|
||||||
|
K::state_index_fetch_maybe_modified_flag(&self.value, part_index)
|
||||||
|
}
|
||||||
|
pub(crate) fn state_index_range_fetch_maybe_modified_flags(
|
||||||
|
&self,
|
||||||
|
part_index_range: StatePartIndexRange<K>,
|
||||||
|
) -> bool {
|
||||||
|
K::state_index_range_fetch_maybe_modified_flags(&self.value, part_index_range)
|
||||||
|
}
|
||||||
|
pub(crate) fn clear_all_maybe_modified_flags(&mut self) {
|
||||||
|
K::clear_all_maybe_modified_flags(&mut self.value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, PartialEq, Eq, Hash, Debug)]
|
#[derive(Clone, PartialEq, Eq, Hash, Debug)]
|
||||||
|
|
@ -922,56 +936,38 @@ pub(crate) struct BorrowedStatePart<'a, K: StatePartKind> {
|
||||||
pub(crate) value: K::BorrowedState<'a>,
|
pub(crate) value: K::BorrowedState<'a>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<
|
impl<K: StatePartKind> BorrowedStatePart<'_, K> {
|
||||||
'a,
|
|
||||||
K: StatePartKind<
|
|
||||||
BorrowedState<'a>: DerefMut<Target: IndexMut<usize, Output = T> + BorrowMut<[T]>>,
|
|
||||||
>,
|
|
||||||
T,
|
|
||||||
> BorrowedStatePart<'a, K>
|
|
||||||
{
|
|
||||||
pub(crate) fn get_disjoint_mut<const N: usize>(
|
pub(crate) fn get_disjoint_mut<const N: usize>(
|
||||||
&mut self,
|
&mut self,
|
||||||
indexes: [StatePartIndex<K>; N],
|
indexes: [StatePartIndex<K>; N],
|
||||||
) -> [&mut T; N] {
|
) -> [&mut K::StateElement; N] {
|
||||||
(*self.value)
|
K::borrowed_state_get_disjoint_mut(&mut self.value, indexes)
|
||||||
.borrow_mut()
|
|
||||||
.get_disjoint_mut(indexes.map(|v| v.value as usize))
|
|
||||||
.expect("indexes are disjoint")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<K: StatePartKind<State: Deref<Target: Index<usize, Output = T>>>, T> Index<StatePartIndex<K>>
|
impl<K: StatePartKind> Index<StatePartIndex<K>> for StatePart<K> {
|
||||||
for StatePart<K>
|
type Output = K::StateElement;
|
||||||
{
|
|
||||||
type Output = T;
|
|
||||||
fn index(&self, index: StatePartIndex<K>) -> &Self::Output {
|
fn index(&self, index: StatePartIndex<K>) -> &Self::Output {
|
||||||
&self.value[index.value as usize]
|
K::state_index(&self.value, index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<K: StatePartKind<State: DerefMut<Target: IndexMut<usize, Output = T>>>, T>
|
impl<K: StatePartKind> IndexMut<StatePartIndex<K>> for StatePart<K> {
|
||||||
IndexMut<StatePartIndex<K>> for StatePart<K>
|
|
||||||
{
|
|
||||||
fn index_mut(&mut self, index: StatePartIndex<K>) -> &mut Self::Output {
|
fn index_mut(&mut self, index: StatePartIndex<K>) -> &mut Self::Output {
|
||||||
&mut self.value[index.value as usize]
|
K::state_index_mut(&mut self.value, index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, K: StatePartKind<BorrowedState<'a>: Deref<Target: Index<usize, Output = T>>>, T>
|
impl<K: StatePartKind> Index<StatePartIndex<K>> for BorrowedStatePart<'_, K> {
|
||||||
Index<StatePartIndex<K>> for BorrowedStatePart<'a, K>
|
type Output = K::StateElement;
|
||||||
{
|
|
||||||
type Output = T;
|
|
||||||
fn index(&self, index: StatePartIndex<K>) -> &Self::Output {
|
fn index(&self, index: StatePartIndex<K>) -> &Self::Output {
|
||||||
&self.value[index.value as usize]
|
K::borrowed_state_index(&self.value, index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, K: StatePartKind<BorrowedState<'a>: DerefMut<Target: IndexMut<usize, Output = T>>>, T>
|
impl<K: StatePartKind> IndexMut<StatePartIndex<K>> for BorrowedStatePart<'_, K> {
|
||||||
IndexMut<StatePartIndex<K>> for BorrowedStatePart<'a, K>
|
|
||||||
{
|
|
||||||
fn index_mut(&mut self, index: StatePartIndex<K>) -> &mut Self::Output {
|
fn index_mut(&mut self, index: StatePartIndex<K>) -> &mut Self::Output {
|
||||||
&mut self.value[index.value as usize]
|
K::borrowed_state_index_mut(&mut self.value, index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1028,6 +1024,15 @@ macro_rules! make_state {
|
||||||
$($type_plural_field: self.$type_plural_field.borrow(),)*
|
$($type_plural_field: self.$type_plural_field.borrow(),)*
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pub(crate) fn type_index_range_fetch_maybe_modified_flags(&self, range: TypeIndexRange) -> bool {
|
||||||
|
$(self.$type_plural_field.state_index_range_fetch_maybe_modified_flags(
|
||||||
|
range.$type_plural_field,
|
||||||
|
))||*
|
||||||
|
}
|
||||||
|
pub(crate) fn clear_all_maybe_modified_flags(&mut self) {
|
||||||
|
$(self.$state_plural_field.clear_all_maybe_modified_flags();)*
|
||||||
|
$(self.$type_plural_field.clear_all_maybe_modified_flags();)*
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
|
||||||
|
|
@ -236,6 +236,7 @@ pub(crate) trait StatePartKind:
|
||||||
type LayoutData: Send + Sync + Eq + Hash + fmt::Debug + 'static + Copy;
|
type LayoutData: Send + Sync + Eq + Hash + fmt::Debug + 'static + Copy;
|
||||||
type State: fmt::Debug + 'static + Clone;
|
type State: fmt::Debug + 'static + Clone;
|
||||||
type BorrowedState<'a>: 'a;
|
type BorrowedState<'a>: 'a;
|
||||||
|
type StateElement;
|
||||||
fn new_state(layout_data: &[Self::LayoutData]) -> Self::State;
|
fn new_state(layout_data: &[Self::LayoutData]) -> Self::State;
|
||||||
fn borrow_state<'a>(state: &'a mut Self::State) -> Self::BorrowedState<'a>;
|
fn borrow_state<'a>(state: &'a mut Self::State) -> Self::BorrowedState<'a>;
|
||||||
fn part_debug_data<BK: InsnsBuildingKind>(
|
fn part_debug_data<BK: InsnsBuildingKind>(
|
||||||
|
|
@ -247,6 +248,35 @@ pub(crate) trait StatePartKind:
|
||||||
index: StatePartIndex<Self>,
|
index: StatePartIndex<Self>,
|
||||||
f: &mut impl fmt::Write,
|
f: &mut impl fmt::Write,
|
||||||
) -> fmt::Result;
|
) -> fmt::Result;
|
||||||
|
fn state_index<'a>(
|
||||||
|
state: &'a Self::State,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a Self::StateElement;
|
||||||
|
fn state_index_mut<'a>(
|
||||||
|
state: &'a mut Self::State,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a mut Self::StateElement;
|
||||||
|
fn state_index_fetch_maybe_modified_flag(
|
||||||
|
state: &Self::State,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> bool;
|
||||||
|
fn state_index_range_fetch_maybe_modified_flags(
|
||||||
|
state: &Self::State,
|
||||||
|
part_index_range: StatePartIndexRange<Self>,
|
||||||
|
) -> bool;
|
||||||
|
fn clear_all_maybe_modified_flags(state: &mut Self::State);
|
||||||
|
fn borrowed_state_index<'a, 'b>(
|
||||||
|
state: &'a Self::BorrowedState<'b>,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a Self::StateElement;
|
||||||
|
fn borrowed_state_index_mut<'a, 'b>(
|
||||||
|
state: &'a mut Self::BorrowedState<'b>,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a mut Self::StateElement;
|
||||||
|
fn borrowed_state_get_disjoint_mut<'a, 'b, const N: usize>(
|
||||||
|
state: &'a mut Self::BorrowedState<'b>,
|
||||||
|
part_indexes: [StatePartIndex<Self>; N],
|
||||||
|
) -> [&'a mut Self::StateElement; N];
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! make_state_part_kinds {
|
macro_rules! make_state_part_kinds {
|
||||||
|
|
@ -272,6 +302,7 @@ impl StatePartKind for StatePartKindMemories {
|
||||||
type LayoutData = MemoryData<Interned<BitSlice>>;
|
type LayoutData = MemoryData<Interned<BitSlice>>;
|
||||||
type State = Box<[MemoryData<BitBox>]>;
|
type State = Box<[MemoryData<BitBox>]>;
|
||||||
type BorrowedState<'a> = &'a mut [MemoryData<BitBox>];
|
type BorrowedState<'a> = &'a mut [MemoryData<BitBox>];
|
||||||
|
type StateElement = MemoryData<BitBox>;
|
||||||
fn new_state(layout_data: &[Self::LayoutData]) -> Self::State {
|
fn new_state(layout_data: &[Self::LayoutData]) -> Self::State {
|
||||||
layout_data
|
layout_data
|
||||||
.iter()
|
.iter()
|
||||||
|
|
@ -297,19 +328,95 @@ impl StatePartKind for StatePartKindMemories {
|
||||||
) -> fmt::Result {
|
) -> fmt::Result {
|
||||||
write!(f, "{:#?}", &state.memories[index])
|
write!(f, "{:#?}", &state.memories[index])
|
||||||
}
|
}
|
||||||
|
fn state_index<'a>(
|
||||||
|
state: &'a Self::State,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a Self::StateElement {
|
||||||
|
&state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn state_index_mut<'a>(
|
||||||
|
state: &'a mut Self::State,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a mut Self::StateElement {
|
||||||
|
&mut state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn state_index_fetch_maybe_modified_flag(
|
||||||
|
_state: &Self::State,
|
||||||
|
_part_index: StatePartIndex<Self>,
|
||||||
|
) -> bool {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
fn state_index_range_fetch_maybe_modified_flags(
|
||||||
|
_state: &Self::State,
|
||||||
|
part_index_range: StatePartIndexRange<Self>,
|
||||||
|
) -> bool {
|
||||||
|
part_index_range.len.value > 0
|
||||||
|
}
|
||||||
|
fn clear_all_maybe_modified_flags(_state: &mut Self::State) {}
|
||||||
|
fn borrowed_state_index<'a, 'b>(
|
||||||
|
state: &'a Self::BorrowedState<'b>,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a Self::StateElement {
|
||||||
|
&state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn borrowed_state_index_mut<'a, 'b>(
|
||||||
|
state: &'a mut Self::BorrowedState<'b>,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a mut Self::StateElement {
|
||||||
|
&mut state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn borrowed_state_get_disjoint_mut<'a, 'b, const N: usize>(
|
||||||
|
state: &'a mut Self::BorrowedState<'b>,
|
||||||
|
part_indexes: [StatePartIndex<Self>; N],
|
||||||
|
) -> [&'a mut Self::StateElement; N] {
|
||||||
|
state
|
||||||
|
.get_disjoint_mut(part_indexes.map(StatePartIndex::as_usize))
|
||||||
|
.expect("indexes are disjoint")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, PartialEq, Eq, Hash, Default)]
|
||||||
|
pub(crate) struct StateAndModified<T, M> {
|
||||||
|
pub(crate) state: T,
|
||||||
|
pub(crate) modified: M,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Deref<Target = [E]>, M: Deref<Target = [bool]>, E: fmt::Debug> fmt::Debug
|
||||||
|
for StateAndModified<T, M>
|
||||||
|
{
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
f.debug_list()
|
||||||
|
.entries(self.state.iter().zip(self.modified.iter().copied()).map(
|
||||||
|
|(state, modified)| {
|
||||||
|
fmt::from_fn(move |f| {
|
||||||
|
state.fmt(f)?;
|
||||||
|
if modified {
|
||||||
|
f.write_str(" (modified)")?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
})
|
||||||
|
},
|
||||||
|
))
|
||||||
|
.finish()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl StatePartKind for StatePartKindSmallSlots {
|
impl StatePartKind for StatePartKindSmallSlots {
|
||||||
const NAME: &'static str = "SmallSlots";
|
const NAME: &'static str = "SmallSlots";
|
||||||
type DebugData = SlotDebugData;
|
type DebugData = SlotDebugData;
|
||||||
type LayoutData = ();
|
type LayoutData = ();
|
||||||
type State = Box<[SmallUInt]>;
|
type State = StateAndModified<Box<[Self::StateElement]>, Box<[bool]>>;
|
||||||
type BorrowedState<'a> = &'a mut [SmallUInt];
|
type BorrowedState<'a> = StateAndModified<&'a mut [Self::StateElement], &'a mut [bool]>;
|
||||||
|
type StateElement = SmallUInt;
|
||||||
fn new_state(layout_data: &[Self::LayoutData]) -> Self::State {
|
fn new_state(layout_data: &[Self::LayoutData]) -> Self::State {
|
||||||
vec![0; layout_data.len()].into_boxed_slice()
|
StateAndModified {
|
||||||
|
state: vec![0; layout_data.len()].into_boxed_slice(),
|
||||||
|
modified: vec![false; layout_data.len()].into_boxed_slice(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fn borrow_state<'a>(state: &'a mut Self::State) -> Self::BorrowedState<'a> {
|
fn borrow_state<'a>(state: &'a mut Self::State) -> Self::BorrowedState<'a> {
|
||||||
state
|
let StateAndModified { state, modified } = state;
|
||||||
|
StateAndModified { state, modified }
|
||||||
}
|
}
|
||||||
fn part_debug_data<BK: InsnsBuildingKind>(
|
fn part_debug_data<BK: InsnsBuildingKind>(
|
||||||
state_layout: &StateLayout<BK>,
|
state_layout: &StateLayout<BK>,
|
||||||
|
|
@ -330,19 +437,80 @@ impl StatePartKind for StatePartKindSmallSlots {
|
||||||
write!(f, "{value:#x} {}", value as SmallSInt)?;
|
write!(f, "{value:#x} {}", value as SmallSInt)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
fn state_index<'a>(
|
||||||
|
state: &'a Self::State,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a Self::StateElement {
|
||||||
|
&state.state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn state_index_mut<'a>(
|
||||||
|
state: &'a mut Self::State,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a mut Self::StateElement {
|
||||||
|
state.modified[part_index.as_usize()] = true;
|
||||||
|
&mut state.state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn state_index_fetch_maybe_modified_flag(
|
||||||
|
state: &Self::State,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> bool {
|
||||||
|
state.modified[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn state_index_range_fetch_maybe_modified_flags(
|
||||||
|
state: &Self::State,
|
||||||
|
part_index_range: StatePartIndexRange<Self>,
|
||||||
|
) -> bool {
|
||||||
|
state.modified[part_index_range.start.as_usize()..]
|
||||||
|
[..part_index_range.len.as_index().as_usize()]
|
||||||
|
.contains(&true)
|
||||||
|
}
|
||||||
|
fn clear_all_maybe_modified_flags(state: &mut Self::State) {
|
||||||
|
state.modified.fill(false);
|
||||||
|
}
|
||||||
|
fn borrowed_state_index<'a, 'b>(
|
||||||
|
state: &'a Self::BorrowedState<'b>,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a Self::StateElement {
|
||||||
|
&state.state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn borrowed_state_index_mut<'a, 'b>(
|
||||||
|
state: &'a mut Self::BorrowedState<'b>,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a mut Self::StateElement {
|
||||||
|
state.modified[part_index.as_usize()] = true;
|
||||||
|
&mut state.state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn borrowed_state_get_disjoint_mut<'a, 'b, const N: usize>(
|
||||||
|
state: &'a mut Self::BorrowedState<'b>,
|
||||||
|
part_indexes: [StatePartIndex<Self>; N],
|
||||||
|
) -> [&'a mut Self::StateElement; N] {
|
||||||
|
for part_index in part_indexes {
|
||||||
|
state.modified[part_index.as_usize()] = true;
|
||||||
|
}
|
||||||
|
state
|
||||||
|
.state
|
||||||
|
.get_disjoint_mut(part_indexes.map(StatePartIndex::as_usize))
|
||||||
|
.expect("indexes are disjoint")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl StatePartKind for StatePartKindBigSlots {
|
impl StatePartKind for StatePartKindBigSlots {
|
||||||
const NAME: &'static str = "BigSlots";
|
const NAME: &'static str = "BigSlots";
|
||||||
type DebugData = SlotDebugData;
|
type DebugData = SlotDebugData;
|
||||||
type LayoutData = ();
|
type LayoutData = ();
|
||||||
type State = Box<[BigInt]>;
|
type State = StateAndModified<Box<[Self::StateElement]>, Box<[bool]>>;
|
||||||
type BorrowedState<'a> = &'a mut [BigInt];
|
type BorrowedState<'a> = StateAndModified<&'a mut [Self::StateElement], &'a mut [bool]>;
|
||||||
|
type StateElement = BigInt;
|
||||||
fn new_state(layout_data: &[Self::LayoutData]) -> Self::State {
|
fn new_state(layout_data: &[Self::LayoutData]) -> Self::State {
|
||||||
layout_data.iter().map(|_| BigInt::default()).collect()
|
let state: Box<[_]> = layout_data.iter().map(|_| BigInt::default()).collect();
|
||||||
|
StateAndModified {
|
||||||
|
modified: vec![false; state.len()].into_boxed_slice(),
|
||||||
|
state,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fn borrow_state<'a>(state: &'a mut Self::State) -> Self::BorrowedState<'a> {
|
fn borrow_state<'a>(state: &'a mut Self::State) -> Self::BorrowedState<'a> {
|
||||||
state
|
let StateAndModified { state, modified } = state;
|
||||||
|
StateAndModified { state, modified }
|
||||||
}
|
}
|
||||||
fn part_debug_data<BK: InsnsBuildingKind>(
|
fn part_debug_data<BK: InsnsBuildingKind>(
|
||||||
state_layout: &StateLayout<BK>,
|
state_layout: &StateLayout<BK>,
|
||||||
|
|
@ -361,19 +529,80 @@ impl StatePartKind for StatePartKindBigSlots {
|
||||||
) -> fmt::Result {
|
) -> fmt::Result {
|
||||||
write!(f, "{:#x}", state.big_slots[index])
|
write!(f, "{:#x}", state.big_slots[index])
|
||||||
}
|
}
|
||||||
|
fn state_index<'a>(
|
||||||
|
state: &'a Self::State,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a Self::StateElement {
|
||||||
|
&state.state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn state_index_mut<'a>(
|
||||||
|
state: &'a mut Self::State,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a mut Self::StateElement {
|
||||||
|
state.modified[part_index.as_usize()] = true;
|
||||||
|
&mut state.state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn state_index_fetch_maybe_modified_flag(
|
||||||
|
state: &Self::State,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> bool {
|
||||||
|
state.modified[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn state_index_range_fetch_maybe_modified_flags(
|
||||||
|
state: &Self::State,
|
||||||
|
part_index_range: StatePartIndexRange<Self>,
|
||||||
|
) -> bool {
|
||||||
|
state.modified[part_index_range.start.as_usize()..]
|
||||||
|
[..part_index_range.len.as_index().as_usize()]
|
||||||
|
.contains(&true)
|
||||||
|
}
|
||||||
|
fn clear_all_maybe_modified_flags(state: &mut Self::State) {
|
||||||
|
state.modified.fill(false);
|
||||||
|
}
|
||||||
|
fn borrowed_state_index<'a, 'b>(
|
||||||
|
state: &'a Self::BorrowedState<'b>,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a Self::StateElement {
|
||||||
|
&state.state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn borrowed_state_index_mut<'a, 'b>(
|
||||||
|
state: &'a mut Self::BorrowedState<'b>,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a mut Self::StateElement {
|
||||||
|
state.modified[part_index.as_usize()] = true;
|
||||||
|
&mut state.state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn borrowed_state_get_disjoint_mut<'a, 'b, const N: usize>(
|
||||||
|
state: &'a mut Self::BorrowedState<'b>,
|
||||||
|
part_indexes: [StatePartIndex<Self>; N],
|
||||||
|
) -> [&'a mut Self::StateElement; N] {
|
||||||
|
for part_index in part_indexes {
|
||||||
|
state.modified[part_index.as_usize()] = true;
|
||||||
|
}
|
||||||
|
state
|
||||||
|
.state
|
||||||
|
.get_disjoint_mut(part_indexes.map(StatePartIndex::as_usize))
|
||||||
|
.expect("indexes are disjoint")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl StatePartKind for StatePartKindSimOnlySlots {
|
impl StatePartKind for StatePartKindSimOnlySlots {
|
||||||
const NAME: &'static str = "SimOnlySlots";
|
const NAME: &'static str = "SimOnlySlots";
|
||||||
type DebugData = SlotDebugData;
|
type DebugData = SlotDebugData;
|
||||||
type LayoutData = DynSimOnly;
|
type LayoutData = DynSimOnly;
|
||||||
type State = Box<[DynSimOnlyValue]>;
|
type State = StateAndModified<Box<[Self::StateElement]>, Box<[bool]>>;
|
||||||
type BorrowedState<'a> = &'a mut [DynSimOnlyValue];
|
type BorrowedState<'a> = StateAndModified<&'a mut [Self::StateElement], &'a mut [bool]>;
|
||||||
|
type StateElement = DynSimOnlyValue;
|
||||||
fn new_state(layout_data: &[Self::LayoutData]) -> Self::State {
|
fn new_state(layout_data: &[Self::LayoutData]) -> Self::State {
|
||||||
layout_data.iter().map(|ty| ty.default_value()).collect()
|
let state: Box<[_]> = layout_data.iter().map(|ty| ty.default_value()).collect();
|
||||||
|
StateAndModified {
|
||||||
|
modified: vec![false; state.len()].into_boxed_slice(),
|
||||||
|
state,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fn borrow_state<'a>(state: &'a mut Self::State) -> Self::BorrowedState<'a> {
|
fn borrow_state<'a>(state: &'a mut Self::State) -> Self::BorrowedState<'a> {
|
||||||
state
|
let StateAndModified { state, modified } = state;
|
||||||
|
StateAndModified { state, modified }
|
||||||
}
|
}
|
||||||
fn part_debug_data<BK: InsnsBuildingKind>(
|
fn part_debug_data<BK: InsnsBuildingKind>(
|
||||||
state_layout: &StateLayout<BK>,
|
state_layout: &StateLayout<BK>,
|
||||||
|
|
@ -392,6 +621,61 @@ impl StatePartKind for StatePartKindSimOnlySlots {
|
||||||
) -> fmt::Result {
|
) -> fmt::Result {
|
||||||
write!(f, "{:?}", state.sim_only_slots[index])
|
write!(f, "{:?}", state.sim_only_slots[index])
|
||||||
}
|
}
|
||||||
|
fn state_index<'a>(
|
||||||
|
state: &'a Self::State,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a Self::StateElement {
|
||||||
|
&state.state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn state_index_mut<'a>(
|
||||||
|
state: &'a mut Self::State,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a mut Self::StateElement {
|
||||||
|
state.modified[part_index.as_usize()] = true;
|
||||||
|
&mut state.state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn state_index_fetch_maybe_modified_flag(
|
||||||
|
state: &Self::State,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> bool {
|
||||||
|
state.modified[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn state_index_range_fetch_maybe_modified_flags(
|
||||||
|
state: &Self::State,
|
||||||
|
part_index_range: StatePartIndexRange<Self>,
|
||||||
|
) -> bool {
|
||||||
|
state.modified[part_index_range.start.as_usize()..]
|
||||||
|
[..part_index_range.len.as_index().as_usize()]
|
||||||
|
.contains(&true)
|
||||||
|
}
|
||||||
|
fn clear_all_maybe_modified_flags(state: &mut Self::State) {
|
||||||
|
state.modified.fill(false);
|
||||||
|
}
|
||||||
|
fn borrowed_state_index<'a, 'b>(
|
||||||
|
state: &'a Self::BorrowedState<'b>,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a Self::StateElement {
|
||||||
|
&state.state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn borrowed_state_index_mut<'a, 'b>(
|
||||||
|
state: &'a mut Self::BorrowedState<'b>,
|
||||||
|
part_index: StatePartIndex<Self>,
|
||||||
|
) -> &'a mut Self::StateElement {
|
||||||
|
state.modified[part_index.as_usize()] = true;
|
||||||
|
&mut state.state[part_index.as_usize()]
|
||||||
|
}
|
||||||
|
fn borrowed_state_get_disjoint_mut<'a, 'b, const N: usize>(
|
||||||
|
state: &'a mut Self::BorrowedState<'b>,
|
||||||
|
part_indexes: [StatePartIndex<Self>; N],
|
||||||
|
) -> [&'a mut Self::StateElement; N] {
|
||||||
|
for part_index in part_indexes {
|
||||||
|
state.modified[part_index.as_usize()] = true;
|
||||||
|
}
|
||||||
|
state
|
||||||
|
.state
|
||||||
|
.get_disjoint_mut(part_indexes.map(StatePartIndex::as_usize))
|
||||||
|
.expect("indexes are disjoint")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
|
|
|
||||||
|
|
@ -15,23 +15,23 @@ use crate::{
|
||||||
source_location::SourceLocation,
|
source_location::SourceLocation,
|
||||||
ty::{
|
ty::{
|
||||||
CanonicalType, OpaqueSimValue, OpaqueSimValueSize, OpaqueSimValueSlice,
|
CanonicalType, OpaqueSimValue, OpaqueSimValueSize, OpaqueSimValueSlice,
|
||||||
OpaqueSimValueWriter, StaticType, Type, TypeProperties, impl_match_variant_as_self,
|
OpaqueSimValueWriter, SimValueDebug, StaticType, Type, TypeProperties,
|
||||||
|
impl_match_variant_as_self,
|
||||||
},
|
},
|
||||||
util::{
|
util::{
|
||||||
ConstUsize, HashMap,
|
ConstUsize,
|
||||||
alternating_cell::{AlternatingCell, AlternatingCellMethods},
|
alternating_cell::{AlternatingCell, AlternatingCellMethods},
|
||||||
|
serde_by_id::{SerdeById, SerdeByIdProperties, SerdeByIdTable, SerdeByIdTrait},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use bitvec::{slice::BitSlice, vec::BitVec};
|
use bitvec::{slice::BitSlice, vec::BitVec};
|
||||||
use hashbrown::hash_map::Entry;
|
|
||||||
use serde::{Deserialize, Deserializer, Serialize, Serializer, de::Error as _, ser::Error as _};
|
use serde::{Deserialize, Deserializer, Serialize, Serializer, de::Error as _, ser::Error as _};
|
||||||
use std::{
|
use std::{
|
||||||
borrow::{Borrow, BorrowMut, Cow},
|
borrow::{Borrow, BorrowMut, Cow},
|
||||||
fmt::{self, Write},
|
fmt,
|
||||||
hash::{BuildHasher, Hash, Hasher, RandomState},
|
|
||||||
num::NonZero,
|
num::NonZero,
|
||||||
ops::{Deref, DerefMut, Index, IndexMut},
|
ops::{Deref, DerefMut, Index, IndexMut},
|
||||||
sync::{Arc, Mutex},
|
sync::Arc,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub(crate) mod sim_only_value_unsafe;
|
pub(crate) mod sim_only_value_unsafe;
|
||||||
|
|
@ -551,113 +551,119 @@ impl_sim_value_cmp_as_bool!(AsyncReset);
|
||||||
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub mod match_sim_value {
|
pub mod match_sim_value {
|
||||||
use crate::{
|
use crate::{sim::value::SimValue, ty::Type};
|
||||||
sim::value::{SimValue, ToSimValue},
|
use std::ops::{Deref, DerefMut};
|
||||||
ty::Type,
|
|
||||||
};
|
macro_rules! wrapper {
|
||||||
|
(
|
||||||
|
$(pub struct $wrapper:ident<$T:ident>($inner:ty);)*
|
||||||
|
) => {
|
||||||
|
$(#[doc(hidden)]
|
||||||
|
pub struct $wrapper<$T>($inner);
|
||||||
|
|
||||||
|
impl<$T> $wrapper<$T> {
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn new(value: $T) -> Self {
|
||||||
|
Self(<$inner>::new(value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<$T> Deref for $wrapper<$T> {
|
||||||
|
type Target = $inner;
|
||||||
|
|
||||||
|
#[inline(always)]
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<$T> DerefMut for $wrapper<$T> {
|
||||||
|
#[inline(always)]
|
||||||
|
fn deref_mut(&mut self) -> &mut Self::Target {
|
||||||
|
&mut self.0
|
||||||
|
}
|
||||||
|
})*
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
wrapper! {
|
||||||
|
pub struct MatchSimValueHelperCheckSimValue<T>(MatchSimValueHelperCheckMutSimValue<T>);
|
||||||
|
pub struct MatchSimValueHelperCheckMutSimValue<T>(MatchSimValueHelperCheckRefSimValue<T>);
|
||||||
|
pub struct MatchSimValueHelperCheckRefSimValue<T>(MatchSimValueHelperCheckRefRefSimValue<T>);
|
||||||
|
pub struct MatchSimValueHelperCheckRefRefSimValue<T>(MatchSimValueHelperCheckRefMutSimValue<T>);
|
||||||
|
pub struct MatchSimValueHelperCheckRefMutSimValue<T>(MatchSimValueHelperCheckMutRefSimValue<T>);
|
||||||
|
pub struct MatchSimValueHelperCheckMutRefSimValue<T>(MatchSimValueHelperCheckMutMutSimValue<T>);
|
||||||
|
pub struct MatchSimValueHelperCheckMutMutSimValue<T>(MatchSimValueHelperIdentity<T>);
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type> MatchSimValueHelperCheckSimValue<SimValue<T>> {
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn __fayalite_match_sim_value(&mut self) -> T::SimValue {
|
||||||
|
SimValue::into_value(self.take())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, T: Type> MatchSimValueHelperCheckMutSimValue<&'a mut SimValue<T>> {
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn __fayalite_match_sim_value(&mut self) -> &'a mut T::SimValue {
|
||||||
|
self.take()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, T: Type> MatchSimValueHelperCheckRefSimValue<&'a SimValue<T>> {
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn __fayalite_match_sim_value(&mut self) -> &'a T::SimValue {
|
||||||
|
self.take()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, 'b, T: Type> MatchSimValueHelperCheckRefRefSimValue<&'a &'b SimValue<T>> {
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn __fayalite_match_sim_value(&mut self) -> &'b T::SimValue {
|
||||||
|
self.take()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, 'b, T: Type> MatchSimValueHelperCheckRefMutSimValue<&'a &'b mut SimValue<T>> {
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn __fayalite_match_sim_value(&mut self) -> &'a T::SimValue {
|
||||||
|
self.take()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, 'b, T: Type> MatchSimValueHelperCheckMutRefSimValue<&'a mut &'b SimValue<T>> {
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn __fayalite_match_sim_value(&mut self) -> &'b T::SimValue {
|
||||||
|
self.take()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, 'b, T: Type> MatchSimValueHelperCheckMutMutSimValue<&'a mut &'b mut SimValue<T>> {
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn __fayalite_match_sim_value(&mut self) -> &'a mut T::SimValue {
|
||||||
|
self.take()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub struct MatchSimValueHelper<T>(Option<T>);
|
pub struct MatchSimValueHelperIdentity<T>(Option<T>);
|
||||||
|
|
||||||
impl<T> MatchSimValueHelper<T> {
|
impl<T> MatchSimValueHelperIdentity<T> {
|
||||||
pub fn new(v: T) -> Self {
|
fn new(v: T) -> Self {
|
||||||
Self(Some(v))
|
Self(Some(v))
|
||||||
}
|
}
|
||||||
}
|
#[inline(always)]
|
||||||
|
fn take(&mut self) -> T {
|
||||||
#[doc(hidden)]
|
self.0.take().expect("known to be Some")
|
||||||
pub trait MatchSimValue {
|
|
||||||
type MatchValue;
|
|
||||||
|
|
||||||
/// use `self` so it comes first in the method resolution order
|
|
||||||
fn __fayalite_match_sim_value(self) -> Self::MatchValue
|
|
||||||
where
|
|
||||||
Self: Sized;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: Type> MatchSimValue for MatchSimValueHelper<SimValue<T>> {
|
|
||||||
type MatchValue = T::SimValue;
|
|
||||||
|
|
||||||
fn __fayalite_match_sim_value(self) -> Self::MatchValue {
|
|
||||||
SimValue::into_value(self.0.expect("should be Some"))
|
|
||||||
}
|
}
|
||||||
}
|
#[inline(always)]
|
||||||
|
pub fn __fayalite_match_sim_value(&mut self) -> T {
|
||||||
impl<'a, T: Type> MatchSimValue for MatchSimValueHelper<&'a SimValue<T>> {
|
self.take()
|
||||||
type MatchValue = &'a T::SimValue;
|
|
||||||
|
|
||||||
fn __fayalite_match_sim_value(self) -> Self::MatchValue {
|
|
||||||
SimValue::value(self.0.expect("should be Some"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a, T: Type> MatchSimValue for MatchSimValueHelper<&'a mut SimValue<T>> {
|
|
||||||
type MatchValue = &'a mut T::SimValue;
|
|
||||||
|
|
||||||
fn __fayalite_match_sim_value(self) -> Self::MatchValue {
|
|
||||||
SimValue::value_mut(self.0.expect("should be Some"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a, T> MatchSimValue for MatchSimValueHelper<&'_ &'a T>
|
|
||||||
where
|
|
||||||
MatchSimValueHelper<&'a T>: MatchSimValue,
|
|
||||||
{
|
|
||||||
type MatchValue = <MatchSimValueHelper<&'a T> as MatchSimValue>::MatchValue;
|
|
||||||
|
|
||||||
fn __fayalite_match_sim_value(self) -> Self::MatchValue {
|
|
||||||
MatchSimValue::__fayalite_match_sim_value(MatchSimValueHelper(self.0.map(|v| *v)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a, T> MatchSimValue for MatchSimValueHelper<&'_ mut &'a T>
|
|
||||||
where
|
|
||||||
MatchSimValueHelper<&'a T>: MatchSimValue,
|
|
||||||
{
|
|
||||||
type MatchValue = <MatchSimValueHelper<&'a T> as MatchSimValue>::MatchValue;
|
|
||||||
|
|
||||||
fn __fayalite_match_sim_value(self) -> Self::MatchValue {
|
|
||||||
MatchSimValue::__fayalite_match_sim_value(MatchSimValueHelper(self.0.map(|v| *v)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a, T> MatchSimValue for MatchSimValueHelper<&'a &'_ mut T>
|
|
||||||
where
|
|
||||||
MatchSimValueHelper<&'a T>: MatchSimValue,
|
|
||||||
{
|
|
||||||
type MatchValue = <MatchSimValueHelper<&'a T> as MatchSimValue>::MatchValue;
|
|
||||||
|
|
||||||
fn __fayalite_match_sim_value(self) -> Self::MatchValue {
|
|
||||||
MatchSimValue::__fayalite_match_sim_value(MatchSimValueHelper(self.0.map(|v| &**v)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a, T> MatchSimValue for MatchSimValueHelper<&'a mut &'_ mut T>
|
|
||||||
where
|
|
||||||
MatchSimValueHelper<&'a mut T>: MatchSimValue,
|
|
||||||
{
|
|
||||||
type MatchValue = <MatchSimValueHelper<&'a mut T> as MatchSimValue>::MatchValue;
|
|
||||||
|
|
||||||
fn __fayalite_match_sim_value(self) -> Self::MatchValue {
|
|
||||||
MatchSimValue::__fayalite_match_sim_value(MatchSimValueHelper(self.0.map(|v| &mut **v)))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub trait MatchSimValueFallback {
|
pub type MatchSimValueHelper<T> = MatchSimValueHelperCheckSimValue<T>;
|
||||||
type MatchValue;
|
|
||||||
|
|
||||||
/// use `&mut self` so it comes later in the method resolution order than MatchSimValue
|
|
||||||
fn __fayalite_match_sim_value(&mut self) -> Self::MatchValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: ToSimValue> MatchSimValueFallback for MatchSimValueHelper<T> {
|
|
||||||
type MatchValue = <T::Type as Type>::SimValue;
|
|
||||||
|
|
||||||
fn __fayalite_match_sim_value(&mut self) -> Self::MatchValue {
|
|
||||||
SimValue::into_value(self.0.take().expect("should be Some").into_sim_value())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait ToSimValue: ToSimValueWithType<<Self as ValueType>::Type> + ValueType {
|
pub trait ToSimValue: ToSimValueWithType<<Self as ValueType>::Type> + ValueType {
|
||||||
|
|
@ -1091,7 +1097,8 @@ impl ToSimValueWithType<CanonicalType> for bool {
|
||||||
| CanonicalType::Enum(_)
|
| CanonicalType::Enum(_)
|
||||||
| CanonicalType::Bundle(_)
|
| CanonicalType::Bundle(_)
|
||||||
| CanonicalType::PhantomConst(_)
|
| CanonicalType::PhantomConst(_)
|
||||||
| CanonicalType::DynSimOnly(_) => {
|
| CanonicalType::DynSimOnly(_)
|
||||||
|
| CanonicalType::TraceAsString(_) => {
|
||||||
panic!("can't create SimValue from bool: expected value of type: {ty:?}");
|
panic!("can't create SimValue from bool: expected value of type: {ty:?}");
|
||||||
}
|
}
|
||||||
CanonicalType::Bool(_)
|
CanonicalType::Bool(_)
|
||||||
|
|
@ -1220,80 +1227,17 @@ macro_rules! impl_to_sim_value_for_int_value {
|
||||||
impl_to_sim_value_for_int_value!(UIntValue, UInt, UIntType);
|
impl_to_sim_value_for_int_value!(UIntValue, UInt, UIntType);
|
||||||
impl_to_sim_value_for_int_value!(SIntValue, SInt, SIntType);
|
impl_to_sim_value_for_int_value!(SIntValue, SInt, SIntType);
|
||||||
|
|
||||||
#[derive(Default)]
|
impl SerdeByIdTrait for DynSimOnly {
|
||||||
struct DynSimOnlySerdeTableRest {
|
fn serde_by_id_properties(&self) -> SerdeByIdProperties<Self> {
|
||||||
from_serde: HashMap<DynSimOnlySerdeId, DynSimOnly>,
|
self.serde_by_id_properties_inner()
|
||||||
serde_id_random_state: RandomState,
|
|
||||||
buffer: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl DynSimOnlySerdeTableRest {
|
|
||||||
#[cold]
|
|
||||||
fn add_new(&mut self, ty: DynSimOnly) -> DynSimOnlySerdeId {
|
|
||||||
let mut try_number = 0u64;
|
|
||||||
let mut hasher = self.serde_id_random_state.build_hasher();
|
|
||||||
// extract more bits of randomness from TypeId -- its Hash impl only hashes 64-bits
|
|
||||||
write!(self.buffer, "{:?}", ty.type_id()).expect("shouldn't ever fail");
|
|
||||||
self.buffer.hash(&mut hasher);
|
|
||||||
loop {
|
|
||||||
let mut hasher = hasher.clone();
|
|
||||||
try_number.hash(&mut hasher);
|
|
||||||
try_number += 1;
|
|
||||||
let retval = DynSimOnlySerdeId(std::array::from_fn(|i| {
|
|
||||||
let mut hasher = hasher.clone();
|
|
||||||
i.hash(&mut hasher);
|
|
||||||
hasher.finish() as u32
|
|
||||||
}));
|
|
||||||
match self.from_serde.entry(retval) {
|
|
||||||
Entry::Occupied(_) => continue,
|
|
||||||
Entry::Vacant(e) => {
|
|
||||||
e.insert(ty);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Default)]
|
fn static_table() -> &'static SerdeByIdTable<Self> {
|
||||||
struct DynSimOnlySerdeTable {
|
static TABLE: SerdeByIdTable<DynSimOnly> = SerdeByIdTable::new();
|
||||||
to_serde: HashMap<DynSimOnly, DynSimOnlySerdeId>,
|
&TABLE
|
||||||
rest: DynSimOnlySerdeTableRest,
|
|
||||||
}
|
|
||||||
|
|
||||||
static DYN_SIM_ONLY_VALUE_TYPE_SERDE_TABLE: Mutex<Option<DynSimOnlySerdeTable>> = Mutex::new(None);
|
|
||||||
|
|
||||||
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, Serialize, Deserialize)]
|
|
||||||
#[serde(transparent)]
|
|
||||||
struct DynSimOnlySerdeId([u32; 4]);
|
|
||||||
|
|
||||||
impl From<DynSimOnly> for DynSimOnlySerdeId {
|
|
||||||
fn from(ty: DynSimOnly) -> Self {
|
|
||||||
let mut locked = DYN_SIM_ONLY_VALUE_TYPE_SERDE_TABLE
|
|
||||||
.lock()
|
|
||||||
.expect("shouldn't be poison");
|
|
||||||
let DynSimOnlySerdeTable { to_serde, rest } = locked.get_or_insert_default();
|
|
||||||
match to_serde.entry(ty) {
|
|
||||||
Entry::Occupied(occupied_entry) => *occupied_entry.get(),
|
|
||||||
Entry::Vacant(vacant_entry) => *vacant_entry.insert(rest.add_new(ty)),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
impl DynSimOnlySerdeId {
|
const NAME: &'static str = "DynSimOnly";
|
||||||
fn ty(self) -> Option<DynSimOnly> {
|
|
||||||
let locked = DYN_SIM_ONLY_VALUE_TYPE_SERDE_TABLE
|
|
||||||
.lock()
|
|
||||||
.expect("shouldn't be poison");
|
|
||||||
Some(*locked.as_ref()?.rest.from_serde.get(&self)?)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Eq, PartialEq, Hash, Debug, Serialize, Deserialize)]
|
|
||||||
struct DynSimOnlySerde<'a> {
|
|
||||||
random_id: DynSimOnlySerdeId,
|
|
||||||
#[serde(borrow)]
|
|
||||||
type_name: Cow<'a, str>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Serialize for DynSimOnly {
|
impl Serialize for DynSimOnly {
|
||||||
|
|
@ -1301,11 +1245,7 @@ impl Serialize for DynSimOnly {
|
||||||
where
|
where
|
||||||
S: Serializer,
|
S: Serializer,
|
||||||
{
|
{
|
||||||
DynSimOnlySerde {
|
SerdeById { inner: *self }.serialize(serializer)
|
||||||
random_id: (*self).into(),
|
|
||||||
type_name: Cow::Borrowed(self.type_name()),
|
|
||||||
}
|
|
||||||
.serialize(serializer)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1314,16 +1254,7 @@ impl<'de> Deserialize<'de> for DynSimOnly {
|
||||||
where
|
where
|
||||||
D: Deserializer<'de>,
|
D: Deserializer<'de>,
|
||||||
{
|
{
|
||||||
let deserialized = DynSimOnlySerde::deserialize(deserializer)?;
|
Ok(SerdeById::deserialize(deserializer)?.inner)
|
||||||
let retval = deserialized
|
|
||||||
.random_id
|
|
||||||
.ty()
|
|
||||||
.filter(|ty| ty.type_name() == deserialized.type_name);
|
|
||||||
retval.ok_or_else(|| {
|
|
||||||
D::Error::custom(
|
|
||||||
"doesn't match any DynSimOnly that was serialized this time this program was run",
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1394,6 +1325,15 @@ impl Type for DynSimOnly {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl SimValueDebug for DynSimOnly {
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<T: SimOnlyValueTrait> Type for SimOnly<T> {
|
impl<T: SimOnlyValueTrait> Type for SimOnly<T> {
|
||||||
type BaseType = DynSimOnly;
|
type BaseType = DynSimOnly;
|
||||||
type MaskType = Bool;
|
type MaskType = Bool;
|
||||||
|
|
@ -1459,6 +1399,15 @@ impl<T: SimOnlyValueTrait> Type for SimOnly<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T: SimOnlyValueTrait> SimValueDebug for SimOnly<T> {
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(value, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<T: SimOnlyValueTrait> StaticType for SimOnly<T> {
|
impl<T: SimOnlyValueTrait> StaticType for SimOnly<T> {
|
||||||
const TYPE: Self = Self::new();
|
const TYPE: Self = Self::new();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,10 @@
|
||||||
|
|
||||||
//! `unsafe` parts of [`DynSimOnlyValue`]
|
//! `unsafe` parts of [`DynSimOnlyValue`]
|
||||||
|
|
||||||
use crate::expr::{ValueType, value_category::ValueCategoryValue};
|
use crate::{
|
||||||
|
expr::{ValueType, value_category::ValueCategoryValue},
|
||||||
|
util::serde_by_id::SerdeByIdProperties,
|
||||||
|
};
|
||||||
use serde::{Serialize, de::DeserializeOwned};
|
use serde::{Serialize, de::DeserializeOwned};
|
||||||
use std::{
|
use std::{
|
||||||
any::{self, TypeId},
|
any::{self, TypeId},
|
||||||
|
|
@ -33,6 +36,7 @@ unsafe trait DynSimOnlyTrait: 'static + Send + Sync {
|
||||||
&self,
|
&self,
|
||||||
json_str: &str,
|
json_str: &str,
|
||||||
) -> serde_json::Result<Rc<dyn DynSimOnlyValueTrait>>;
|
) -> serde_json::Result<Rc<dyn DynSimOnlyValueTrait>>;
|
||||||
|
fn serde_by_id_properties_inner(&self) -> SerdeByIdProperties<DynSimOnly>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Safety: `type_id_dyn` is implemented correctly
|
/// Safety: `type_id_dyn` is implemented correctly
|
||||||
|
|
@ -55,6 +59,9 @@ unsafe impl<T: SimOnlyValueTrait> DynSimOnlyTrait for SimOnly<T> {
|
||||||
) -> serde_json::Result<Rc<dyn DynSimOnlyValueTrait>> {
|
) -> serde_json::Result<Rc<dyn DynSimOnlyValueTrait>> {
|
||||||
Ok(Rc::<T>::new(serde_json::from_str(json_str)?))
|
Ok(Rc::<T>::new(serde_json::from_str(json_str)?))
|
||||||
}
|
}
|
||||||
|
fn serde_by_id_properties_inner(&self) -> SerdeByIdProperties<DynSimOnly> {
|
||||||
|
SerdeByIdProperties::of::<T>()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Safety:
|
/// Safety:
|
||||||
|
|
@ -151,6 +158,9 @@ impl DynSimOnly {
|
||||||
pub fn default_value(self) -> DynSimOnlyValue {
|
pub fn default_value(self) -> DynSimOnlyValue {
|
||||||
DynSimOnlyValue(self.ty.default_value())
|
DynSimOnlyValue(self.ty.default_value())
|
||||||
}
|
}
|
||||||
|
pub(super) fn serde_by_id_properties_inner(self) -> SerdeByIdProperties<Self> {
|
||||||
|
self.ty.serde_by_id_properties_inner()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PartialEq for DynSimOnly {
|
impl PartialEq for DynSimOnly {
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,12 @@ use crate::{
|
||||||
TraceEnumDiscriminant, TraceEnumWithFields, TraceFieldlessEnum, TraceInstance,
|
TraceEnumDiscriminant, TraceEnumWithFields, TraceFieldlessEnum, TraceInstance,
|
||||||
TraceLocation, TraceMem, TraceMemPort, TraceMemoryId, TraceMemoryLocation, TraceModule,
|
TraceLocation, TraceMem, TraceMemPort, TraceMemoryId, TraceMemoryLocation, TraceModule,
|
||||||
TraceModuleIO, TracePhantomConst, TraceReg, TraceSInt, TraceScalar, TraceScalarId,
|
TraceModuleIO, TracePhantomConst, TraceReg, TraceSInt, TraceScalar, TraceScalarId,
|
||||||
TraceScope, TraceSimOnly, TraceSyncReset, TraceUInt, TraceWire, TraceWriter,
|
TraceScope, TraceSimOnly, TraceSyncReset, TraceTraceAsString, TraceUInt, TraceWire,
|
||||||
TraceWriterDecls,
|
TraceWriter, TraceWriterDecls,
|
||||||
time::{SimDuration, SimInstant},
|
time::{SimDuration, SimInstant},
|
||||||
value::DynSimOnlyValue,
|
value::DynSimOnlyValue,
|
||||||
},
|
},
|
||||||
|
ty::{OpaqueSimValueSlice, TraceAsString},
|
||||||
util::HashMap,
|
util::HashMap,
|
||||||
};
|
};
|
||||||
use bitvec::{order::Lsb0, slice::BitSlice};
|
use bitvec::{order::Lsb0, slice::BitSlice};
|
||||||
|
|
@ -331,6 +332,7 @@ impl WriteTrace for TraceScalar {
|
||||||
Self::AsyncReset(v) => v.write_trace(writer, arg),
|
Self::AsyncReset(v) => v.write_trace(writer, arg),
|
||||||
Self::PhantomConst(v) => v.write_trace(writer, arg),
|
Self::PhantomConst(v) => v.write_trace(writer, arg),
|
||||||
Self::SimOnly(v) => v.write_trace(writer, arg),
|
Self::SimOnly(v) => v.write_trace(writer, arg),
|
||||||
|
Self::TraceAsString(v) => v.write_trace(writer, arg),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -726,6 +728,34 @@ impl WriteTrace for TraceSimOnly {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl WriteTrace for TraceTraceAsString {
|
||||||
|
fn write_trace<W: io::Write, A: Arg>(self, writer: &mut W, mut arg: A) -> io::Result<()> {
|
||||||
|
let ArgInType {
|
||||||
|
source_var_type: _,
|
||||||
|
sink_var_type: _,
|
||||||
|
duplex_var_type: _,
|
||||||
|
properties,
|
||||||
|
scope,
|
||||||
|
} = arg.in_type();
|
||||||
|
let Self {
|
||||||
|
location,
|
||||||
|
name,
|
||||||
|
ty,
|
||||||
|
flow: _,
|
||||||
|
} = self;
|
||||||
|
write_vcd_var(
|
||||||
|
properties,
|
||||||
|
scope,
|
||||||
|
MemoryElementPartBody::TraceAsString { ty },
|
||||||
|
writer,
|
||||||
|
"string",
|
||||||
|
1,
|
||||||
|
location,
|
||||||
|
name,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl WriteTrace for TraceScope {
|
impl WriteTrace for TraceScope {
|
||||||
fn write_trace<W: io::Write, A: Arg>(self, writer: &mut W, arg: A) -> io::Result<()> {
|
fn write_trace<W: io::Write, A: Arg>(self, writer: &mut W, arg: A) -> io::Result<()> {
|
||||||
match self {
|
match self {
|
||||||
|
|
@ -1093,6 +1123,7 @@ impl<W: io::Write> TraceWriterDecls for VcdWriterDecls<W> {
|
||||||
finished_init: false,
|
finished_init: false,
|
||||||
timescale,
|
timescale,
|
||||||
properties,
|
properties,
|
||||||
|
trace_as_string_buf: String::with_capacity(256),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1100,6 +1131,7 @@ impl<W: io::Write> TraceWriterDecls for VcdWriterDecls<W> {
|
||||||
enum MemoryElementPartBody {
|
enum MemoryElementPartBody {
|
||||||
Scalar,
|
Scalar,
|
||||||
EnumDiscriminant { ty: Enum },
|
EnumDiscriminant { ty: Enum },
|
||||||
|
TraceAsString { ty: TraceAsString },
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MemoryElementPart {
|
struct MemoryElementPart {
|
||||||
|
|
@ -1217,6 +1249,7 @@ pub struct VcdWriter<W: io::Write + 'static> {
|
||||||
finished_init: bool,
|
finished_init: bool,
|
||||||
timescale: SimDuration,
|
timescale: SimDuration,
|
||||||
properties: VcdWriterProperties,
|
properties: VcdWriterProperties,
|
||||||
|
trace_as_string_buf: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<W: io::Write + 'static> VcdWriter<W> {
|
impl<W: io::Write + 'static> VcdWriter<W> {
|
||||||
|
|
@ -1326,6 +1359,21 @@ impl<W: io::Write> TraceWriter for VcdWriter<W> {
|
||||||
.built_scalar_id_to_vcd_id(first_id + element_index),
|
.built_scalar_id_to_vcd_id(first_id + element_index),
|
||||||
)?
|
)?
|
||||||
}
|
}
|
||||||
|
MemoryElementPartBody::TraceAsString { ty } => {
|
||||||
|
self.trace_as_string_buf.clear();
|
||||||
|
ty.trace_fmt_append_to_string(
|
||||||
|
&mut self.trace_as_string_buf,
|
||||||
|
OpaqueSimValueSlice::from_bitslice(&element_data[start..start + len]),
|
||||||
|
);
|
||||||
|
write_string_value_change(
|
||||||
|
&mut self.writer,
|
||||||
|
&self.trace_as_string_buf,
|
||||||
|
self.properties
|
||||||
|
.scalar_id_to_vcd_id_map
|
||||||
|
.built_scalar_id_to_vcd_id(first_id + element_index),
|
||||||
|
)?;
|
||||||
|
self.trace_as_string_buf.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
@ -1419,6 +1467,16 @@ impl<W: io::Write> TraceWriter for VcdWriter<W> {
|
||||||
.built_scalar_id_to_vcd_id(id.as_usize()),
|
.built_scalar_id_to_vcd_id(id.as_usize()),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn set_signal_string(&mut self, id: TraceScalarId, value: &str) -> Result<(), Self::Error> {
|
||||||
|
write_string_value_change(
|
||||||
|
&mut self.writer,
|
||||||
|
value,
|
||||||
|
self.properties
|
||||||
|
.scalar_id_to_vcd_id_map
|
||||||
|
.built_scalar_id_to_vcd_id(id.as_usize()),
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<W: io::Write> fmt::Debug for VcdWriter<W> {
|
impl<W: io::Write> fmt::Debug for VcdWriter<W> {
|
||||||
|
|
@ -1428,6 +1486,7 @@ impl<W: io::Write> fmt::Debug for VcdWriter<W> {
|
||||||
finished_init,
|
finished_init,
|
||||||
timescale,
|
timescale,
|
||||||
properties: _,
|
properties: _,
|
||||||
|
trace_as_string_buf: _,
|
||||||
} = self;
|
} = self;
|
||||||
f.debug_struct("VcdWriter")
|
f.debug_struct("VcdWriter")
|
||||||
.field("finished_init", finished_init)
|
.field("finished_init", finished_init)
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -12,7 +12,8 @@ use crate::{
|
||||||
prelude::PhantomConst,
|
prelude::PhantomConst,
|
||||||
reset::{AsyncReset, Reset, SyncReset},
|
reset::{AsyncReset, Reset, SyncReset},
|
||||||
sim::value::DynSimOnly,
|
sim::value::DynSimOnly,
|
||||||
ty::{BaseType, CanonicalType},
|
ty::{BaseType, CanonicalType, TraceAsString, TraceAsStringTrait},
|
||||||
|
util::serde_by_id::SerdeById,
|
||||||
};
|
};
|
||||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||||
|
|
||||||
|
|
@ -38,6 +39,7 @@ impl<'de, T: ?Sized + PhantomConstValue> Deserialize<'de> for SerdePhantomConst<
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
#[serde(rename = "CanonicalType")]
|
#[serde(rename = "CanonicalType")]
|
||||||
|
#[expect(private_interfaces)]
|
||||||
pub(crate) enum SerdeCanonicalType<
|
pub(crate) enum SerdeCanonicalType<
|
||||||
ArrayElement = CanonicalType,
|
ArrayElement = CanonicalType,
|
||||||
ThePhantomConst = SerdePhantomConst<Interned<PhantomConstCanonicalValue>>,
|
ThePhantomConst = SerdePhantomConst<Interned<PhantomConstCanonicalValue>>,
|
||||||
|
|
@ -65,6 +67,10 @@ pub(crate) enum SerdeCanonicalType<
|
||||||
Clock,
|
Clock,
|
||||||
PhantomConst(ThePhantomConst),
|
PhantomConst(ThePhantomConst),
|
||||||
DynSimOnly(DynSimOnly),
|
DynSimOnly(DynSimOnly),
|
||||||
|
TraceAsString {
|
||||||
|
inner_ty: Interned<CanonicalType>,
|
||||||
|
trace_as_string: SerdeById<Interned<dyn TraceAsStringTrait>>,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<ArrayElement, PhantomConstInner> SerdeCanonicalType<ArrayElement, PhantomConstInner> {
|
impl<ArrayElement, PhantomConstInner> SerdeCanonicalType<ArrayElement, PhantomConstInner> {
|
||||||
|
|
@ -82,6 +88,7 @@ impl<ArrayElement, PhantomConstInner> SerdeCanonicalType<ArrayElement, PhantomCo
|
||||||
Self::Clock => "a Clock",
|
Self::Clock => "a Clock",
|
||||||
Self::PhantomConst(_) => "a PhantomConst",
|
Self::PhantomConst(_) => "a PhantomConst",
|
||||||
Self::DynSimOnly(_) => "a SimOnlyValue",
|
Self::DynSimOnly(_) => "a SimOnlyValue",
|
||||||
|
Self::TraceAsString { .. } => "a TraceAsString",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -109,6 +116,15 @@ impl<T: BaseType> From<T> for SerdeCanonicalType {
|
||||||
CanonicalType::Clock(Clock {}) => Self::Clock,
|
CanonicalType::Clock(Clock {}) => Self::Clock,
|
||||||
CanonicalType::PhantomConst(ty) => Self::PhantomConst(SerdePhantomConst(ty.get())),
|
CanonicalType::PhantomConst(ty) => Self::PhantomConst(SerdePhantomConst(ty.get())),
|
||||||
CanonicalType::DynSimOnly(ty) => Self::DynSimOnly(ty),
|
CanonicalType::DynSimOnly(ty) => Self::DynSimOnly(ty),
|
||||||
|
CanonicalType::TraceAsString(TraceAsString {
|
||||||
|
inner_ty,
|
||||||
|
trace_as_string,
|
||||||
|
}) => Self::TraceAsString {
|
||||||
|
inner_ty: inner_ty.interned(),
|
||||||
|
trace_as_string: SerdeById {
|
||||||
|
inner: trace_as_string.interned(),
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -130,6 +146,13 @@ impl From<SerdeCanonicalType> for CanonicalType {
|
||||||
Self::PhantomConst(PhantomConst::new_interned(value.0))
|
Self::PhantomConst(PhantomConst::new_interned(value.0))
|
||||||
}
|
}
|
||||||
SerdeCanonicalType::DynSimOnly(value) => Self::DynSimOnly(value),
|
SerdeCanonicalType::DynSimOnly(value) => Self::DynSimOnly(value),
|
||||||
|
SerdeCanonicalType::TraceAsString {
|
||||||
|
inner_ty,
|
||||||
|
trace_as_string,
|
||||||
|
} => Self::TraceAsString(TraceAsString {
|
||||||
|
inner_ty: crate::intern::LazyInterned::Interned(inner_ty),
|
||||||
|
trace_as_string: crate::intern::LazyInterned::Interned(trace_as_string.inner),
|
||||||
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,3 +46,4 @@ pub(crate) use misc::{InternedStrCompareAsStr, chain, copy_le_bytes_to_bitslice}
|
||||||
pub mod job_server;
|
pub mod job_server;
|
||||||
pub mod prefix_sum;
|
pub mod prefix_sum;
|
||||||
pub mod ready_valid;
|
pub mod ready_valid;
|
||||||
|
pub(crate) mod serde_by_id;
|
||||||
|
|
|
||||||
234
crates/fayalite/src/util/serde_by_id.rs
Normal file
234
crates/fayalite/src/util/serde_by_id.rs
Normal file
|
|
@ -0,0 +1,234 @@
|
||||||
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||||
|
// See Notices.txt for copyright information
|
||||||
|
|
||||||
|
use crate::util::HashMap;
|
||||||
|
use hashbrown::hash_map::Entry;
|
||||||
|
use serde::{Deserialize, Serialize, de::Error};
|
||||||
|
use std::{
|
||||||
|
any::TypeId,
|
||||||
|
borrow::Cow,
|
||||||
|
fmt::Write,
|
||||||
|
hash::{BuildHasher, Hash, Hasher},
|
||||||
|
marker::PhantomData,
|
||||||
|
sync::Mutex,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub(crate) struct SerdeByIdProperties<T: SerdeByIdTrait> {
|
||||||
|
type_id: TypeId,
|
||||||
|
type_name: &'static str,
|
||||||
|
_phantom: PhantomData<fn(T) -> T>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: SerdeByIdTrait> Clone for SerdeByIdProperties<T> {
|
||||||
|
fn clone(&self) -> Self {
|
||||||
|
*self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: SerdeByIdTrait> Copy for SerdeByIdProperties<T> {}
|
||||||
|
|
||||||
|
impl<T: SerdeByIdTrait> SerdeByIdProperties<T> {
|
||||||
|
pub fn of<U: ?Sized + 'static>() -> Self {
|
||||||
|
Self {
|
||||||
|
type_id: TypeId::of::<U>(),
|
||||||
|
type_name: std::any::type_name::<U>(),
|
||||||
|
_phantom: PhantomData,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) trait SerdeByIdTrait: Hash + Eq + Clone + 'static + Send {
|
||||||
|
fn serde_by_id_properties(&self) -> SerdeByIdProperties<Self>;
|
||||||
|
fn static_table() -> &'static SerdeByIdTable<Self>;
|
||||||
|
const NAME: &'static str;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, Serialize, Deserialize)]
|
||||||
|
#[serde(transparent)]
|
||||||
|
struct SerdeRandomId([u32; 4]);
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub(crate) struct SerdeId<'a, T: SerdeByIdTrait> {
|
||||||
|
random_id: SerdeRandomId,
|
||||||
|
#[serde(borrow)]
|
||||||
|
type_name: Cow<'a, str>,
|
||||||
|
#[serde(skip)]
|
||||||
|
_phantom: PhantomData<fn(T) -> T>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, T: SerdeByIdTrait> Clone for SerdeId<'a, T> {
|
||||||
|
fn clone(&self) -> Self {
|
||||||
|
Self {
|
||||||
|
random_id: self.random_id,
|
||||||
|
type_name: self.type_name.clone(),
|
||||||
|
_phantom: PhantomData,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, T: SerdeByIdTrait> Eq for SerdeId<'a, T> {}
|
||||||
|
|
||||||
|
impl<'a, 'b, T: SerdeByIdTrait> PartialEq<SerdeId<'b, T>> for SerdeId<'a, T> {
|
||||||
|
fn eq(&self, other: &SerdeId<'b, T>) -> bool {
|
||||||
|
let Self {
|
||||||
|
random_id,
|
||||||
|
type_name,
|
||||||
|
_phantom: _,
|
||||||
|
} = self;
|
||||||
|
*random_id == other.random_id && *type_name == other.type_name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, T: SerdeByIdTrait> Hash for SerdeId<'a, T> {
|
||||||
|
fn hash<H: Hasher>(&self, state: &mut H) {
|
||||||
|
let Self {
|
||||||
|
random_id,
|
||||||
|
type_name: _,
|
||||||
|
_phantom: _,
|
||||||
|
} = self;
|
||||||
|
random_id.hash(state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct SerdeByIdTableRest<T: SerdeByIdTrait> {
|
||||||
|
from_serde: HashMap<SerdeId<'static, T>, T>,
|
||||||
|
serde_id_random_state: std::hash::RandomState,
|
||||||
|
buffer: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: SerdeByIdTrait> Default for SerdeByIdTableRest<T> {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
from_serde: Default::default(),
|
||||||
|
serde_id_random_state: Default::default(),
|
||||||
|
buffer: Default::default(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: SerdeByIdTrait> SerdeByIdTableRest<T> {
|
||||||
|
fn add_new(&mut self, value: T) -> SerdeId<'static, T> {
|
||||||
|
let properties = value.serde_by_id_properties();
|
||||||
|
let mut try_number = 0u64;
|
||||||
|
let mut hasher = self.serde_id_random_state.build_hasher();
|
||||||
|
// extract more bits of randomness from TypeId -- its Hash impl only hashes 64-bits
|
||||||
|
write!(self.buffer, "{:?}", properties.type_id).expect("shouldn't ever fail");
|
||||||
|
self.buffer.hash(&mut hasher);
|
||||||
|
loop {
|
||||||
|
let mut hasher = hasher.clone();
|
||||||
|
try_number.hash(&mut hasher);
|
||||||
|
try_number += 1;
|
||||||
|
let key = SerdeId {
|
||||||
|
random_id: SerdeRandomId(std::array::from_fn(|i| {
|
||||||
|
let mut hasher = hasher.clone();
|
||||||
|
i.hash(&mut hasher);
|
||||||
|
hasher.finish() as u32
|
||||||
|
})),
|
||||||
|
type_name: Cow::Borrowed(properties.type_name),
|
||||||
|
_phantom: PhantomData,
|
||||||
|
};
|
||||||
|
match self.from_serde.entry(key) {
|
||||||
|
Entry::Occupied(_) => continue,
|
||||||
|
Entry::Vacant(e) => {
|
||||||
|
let key = e.key().clone();
|
||||||
|
e.insert(value);
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) struct SerdeByIdTableMut<T: SerdeByIdTrait> {
|
||||||
|
to_serde: HashMap<T, SerdeId<'static, T>>,
|
||||||
|
rest: SerdeByIdTableRest<T>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: SerdeByIdTrait> Default for SerdeByIdTableMut<T> {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
to_serde: Default::default(),
|
||||||
|
rest: Default::default(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: SerdeByIdTrait> SerdeByIdTableMut<T> {
|
||||||
|
pub(crate) fn to_serde(&mut self, value: &T) -> SerdeId<'static, T> {
|
||||||
|
if let Some(retval) = self.to_serde.get(value) {
|
||||||
|
return retval.clone();
|
||||||
|
}
|
||||||
|
self.to_serde_insert(value)
|
||||||
|
}
|
||||||
|
#[cold]
|
||||||
|
fn to_serde_insert(&mut self, value: &T) -> SerdeId<'static, T> {
|
||||||
|
let value = value.clone();
|
||||||
|
let retval = self.rest.add_new(value.clone());
|
||||||
|
self.to_serde.insert(value, retval.clone());
|
||||||
|
retval
|
||||||
|
}
|
||||||
|
pub(crate) fn from_serde(&self, id: &SerdeId<'_, T>) -> Option<T> {
|
||||||
|
self.rest.from_serde.get(id).cloned()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) struct SerdeByIdTable<T: SerdeByIdTrait>(Mutex<Option<SerdeByIdTableMut<T>>>);
|
||||||
|
|
||||||
|
impl<T: SerdeByIdTrait> SerdeByIdTable<T> {
|
||||||
|
pub(crate) const fn new() -> Self {
|
||||||
|
Self(Mutex::new(None))
|
||||||
|
}
|
||||||
|
pub(crate) fn to_serde(&self, value: &T) -> SerdeId<'static, T> {
|
||||||
|
self.0
|
||||||
|
.lock()
|
||||||
|
.expect("shouldn't be poison")
|
||||||
|
.get_or_insert_with(
|
||||||
|
#[cold]
|
||||||
|
|| Default::default(),
|
||||||
|
)
|
||||||
|
.to_serde(value)
|
||||||
|
}
|
||||||
|
pub(crate) fn from_serde(&self, id: &SerdeId<'_, T>) -> Option<T> {
|
||||||
|
self.0
|
||||||
|
.lock()
|
||||||
|
.expect("shouldn't be poison")
|
||||||
|
.get_or_insert_with(
|
||||||
|
#[cold]
|
||||||
|
|| Default::default(),
|
||||||
|
)
|
||||||
|
.from_serde(id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug, Default, Ord, PartialOrd)]
|
||||||
|
pub(crate) struct SerdeById<T: SerdeByIdTrait> {
|
||||||
|
pub(crate) inner: T,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'de, T: SerdeByIdTrait> Deserialize<'de> for SerdeById<T> {
|
||||||
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||||
|
where
|
||||||
|
D: serde::Deserializer<'de>,
|
||||||
|
{
|
||||||
|
let id = SerdeId::deserialize(deserializer)?;
|
||||||
|
let inner = T::static_table().from_serde(&id).ok_or_else(|| {
|
||||||
|
D::Error::custom(format_args!(
|
||||||
|
"doesn't match any {} that was serialized this time this program was run: type_name={:?}",
|
||||||
|
T::NAME,
|
||||||
|
id.type_name,
|
||||||
|
))
|
||||||
|
})?;
|
||||||
|
Ok(Self { inner })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: SerdeByIdTrait> Serialize for SerdeById<T> {
|
||||||
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: serde::Serializer,
|
||||||
|
{
|
||||||
|
T::static_table()
|
||||||
|
.to_serde(&self.inner)
|
||||||
|
.serialize(serializer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -546,7 +546,7 @@ impl<W: fmt::Write> Visitor for XdcFileWriter<W> {
|
||||||
base.source_location(),
|
base.source_location(),
|
||||||
)? {},
|
)? {},
|
||||||
}
|
}
|
||||||
match base.canonical_ty() {
|
match base.canonical_ty().unwrap_transparent_types() {
|
||||||
CanonicalType::UInt(_)
|
CanonicalType::UInt(_)
|
||||||
| CanonicalType::SInt(_)
|
| CanonicalType::SInt(_)
|
||||||
| CanonicalType::Bool(_)
|
| CanonicalType::Bool(_)
|
||||||
|
|
@ -563,6 +563,9 @@ impl<W: fmt::Write> Visitor for XdcFileWriter<W> {
|
||||||
v,
|
v,
|
||||||
base.source_location(),
|
base.source_location(),
|
||||||
)? {},
|
)? {},
|
||||||
|
CanonicalType::TraceAsString(_) => {
|
||||||
|
unreachable!("handled by unwrap_transparent_types")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
self.required_dont_touch_targets.insert(target);
|
self.required_dont_touch_targets.insert(target);
|
||||||
match v {
|
match v {
|
||||||
|
|
|
||||||
166
crates/fayalite/tests/hdl_types_fmt.rs
Normal file
166
crates/fayalite/tests/hdl_types_fmt.rs
Normal file
|
|
@ -0,0 +1,166 @@
|
||||||
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||||
|
// See Notices.txt for copyright information
|
||||||
|
use fayalite::{prelude::*, ty::SimValueDebug};
|
||||||
|
use std::fmt;
|
||||||
|
|
||||||
|
#[hdl(outline_generated)]
|
||||||
|
struct MyStruct0<T, S: Size> {
|
||||||
|
v: T,
|
||||||
|
a: ArrayType<UInt<8>, S>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[hdl]
|
||||||
|
#[test]
|
||||||
|
fn check_my_struct0() {
|
||||||
|
let ty = MyStruct0[UInt[8]][3];
|
||||||
|
assert_eq!(
|
||||||
|
format!("{ty:?}"),
|
||||||
|
"MyStruct0 { v: UInt<8>, a: Array<UInt<8>, 3> }",
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
format!("{:?}", ty.mask_type()),
|
||||||
|
"MaskType<MyStruct0> { v: Bool, a: Array<Bool, 3> }",
|
||||||
|
);
|
||||||
|
let v = #[hdl(sim)]
|
||||||
|
MyStruct0::<_, _> {
|
||||||
|
v: 0x23u8,
|
||||||
|
a: [1u8, 2, 3],
|
||||||
|
};
|
||||||
|
assert_eq!(
|
||||||
|
format!("{v:?}"),
|
||||||
|
"MyStruct0 { v: 0x23_u8, a: [0x1_u8, 0x2_u8, 0x3_u8] }",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[hdl(outline_generated, custom_debug())]
|
||||||
|
struct MyStruct1<T, S: Size> {
|
||||||
|
v: T,
|
||||||
|
a: ArrayType<UInt<8>, S>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type, S: Size> fmt::Debug for MyStruct1<T, S> {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
let Self { v, a } = self;
|
||||||
|
f.debug_struct("Custom<MyStruct1>")
|
||||||
|
.field("v", v)
|
||||||
|
.field("a", a)
|
||||||
|
.finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type, S: Size> SimValueDebug for MyStruct1<T, S> {
|
||||||
|
#[hdl]
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
#[hdl(sim)]
|
||||||
|
let Self { v, a } = value;
|
||||||
|
f.debug_struct("Custom<MyStruct1>")
|
||||||
|
.field("v", &v)
|
||||||
|
.field("a", &a)
|
||||||
|
.finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[hdl]
|
||||||
|
#[test]
|
||||||
|
fn check_my_struct1() {
|
||||||
|
let ty = MyStruct1[UInt[8]][3];
|
||||||
|
assert_eq!(
|
||||||
|
format!("{ty:?}"),
|
||||||
|
"Custom<MyStruct1> { v: UInt<8>, a: Array<UInt<8>, 3> }",
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
format!("{:?}", ty.mask_type()),
|
||||||
|
"MaskType<MyStruct1> { v: Bool, a: Array<Bool, 3> }",
|
||||||
|
);
|
||||||
|
let v = #[hdl(sim)]
|
||||||
|
MyStruct1::<_, _> {
|
||||||
|
v: 0x23u8,
|
||||||
|
a: [1u8, 2, 3],
|
||||||
|
};
|
||||||
|
assert_eq!(
|
||||||
|
format!("{v:?}"),
|
||||||
|
"Custom<MyStruct1> { v: 0x23_u8, a: [0x1_u8, 0x2_u8, 0x3_u8] }",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[hdl(outline_generated)]
|
||||||
|
enum MyEnum0<T, S: Size> {
|
||||||
|
Unit,
|
||||||
|
V(T),
|
||||||
|
A(ArrayType<UInt<8>, S>),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[hdl]
|
||||||
|
#[test]
|
||||||
|
fn check_my_enum0() {
|
||||||
|
let ty = MyEnum0[UInt[8]][3];
|
||||||
|
assert_eq!(
|
||||||
|
format!("{ty:?}"),
|
||||||
|
"MyEnum0 { Unit: (), V: UInt<8>, A: Array<UInt<8>, 3> }",
|
||||||
|
);
|
||||||
|
let v = #[hdl(sim)]
|
||||||
|
ty.Unit();
|
||||||
|
assert_eq!(format!("{v:?}"), "Unit");
|
||||||
|
let v = #[hdl(sim)]
|
||||||
|
ty.V(0x23u8);
|
||||||
|
assert_eq!(format!("{v:?}"), "V(0x23_u8)");
|
||||||
|
let v = #[hdl(sim)]
|
||||||
|
ty.A([1u8, 2, 3]);
|
||||||
|
assert_eq!(format!("{v:?}"), "A([0x1_u8, 0x2_u8, 0x3_u8])");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[hdl(outline_generated, custom_debug())]
|
||||||
|
enum MyEnum1<T, S: Size> {
|
||||||
|
Unit,
|
||||||
|
V(T),
|
||||||
|
A(ArrayType<UInt<8>, S>),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type, S: Size> fmt::Debug for MyEnum1<T, S> {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
let Self { Unit, V, A } = self;
|
||||||
|
f.debug_struct("Custom<MyEnum1>")
|
||||||
|
.field("Unit", Unit)
|
||||||
|
.field("V", V)
|
||||||
|
.field("A", A)
|
||||||
|
.finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Type, S: Size> SimValueDebug for MyEnum1<T, S> {
|
||||||
|
#[hdl]
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut fmt::Formatter<'_>,
|
||||||
|
) -> fmt::Result {
|
||||||
|
type SimValueT<T> = <T as Type>::SimValue;
|
||||||
|
match value {
|
||||||
|
SimValueT::<Self>::Unit(_) => f.write_str("MyEnum1::Unit"),
|
||||||
|
SimValueT::<Self>::V(v, _) => f.debug_tuple("MyEnum1::V").field(v).finish(),
|
||||||
|
SimValueT::<Self>::A(a, _) => f.debug_tuple("MyEnum1::A").field(a).finish(),
|
||||||
|
SimValueT::<Self>::Unknown(_) => f.write_str("MyEnum1::Unknown"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[hdl]
|
||||||
|
#[test]
|
||||||
|
fn check_my_enum1() {
|
||||||
|
let ty = MyEnum1[UInt[8]][3];
|
||||||
|
assert_eq!(
|
||||||
|
format!("{ty:?}"),
|
||||||
|
"Custom<MyEnum1> { Unit: (), V: UInt<8>, A: Array<UInt<8>, 3> }",
|
||||||
|
);
|
||||||
|
let v = #[hdl(sim)]
|
||||||
|
ty.Unit();
|
||||||
|
assert_eq!(format!("{v:?}"), "MyEnum1::Unit");
|
||||||
|
let v = #[hdl(sim)]
|
||||||
|
ty.V(0x23u8);
|
||||||
|
assert_eq!(format!("{v:?}"), "MyEnum1::V(0x23_u8)");
|
||||||
|
let v = #[hdl(sim)]
|
||||||
|
ty.A([1u8, 2, 3]);
|
||||||
|
assert_eq!(format!("{v:?}"), "MyEnum1::A([0x1_u8, 0x2_u8, 0x3_u8])");
|
||||||
|
}
|
||||||
|
|
@ -13,7 +13,7 @@ use fayalite::{
|
||||||
};
|
};
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
|
||||||
#[hdl(outline_generated)]
|
#[hdl(outline_generated, cmp_eq)]
|
||||||
pub enum TestEnum {
|
pub enum TestEnum {
|
||||||
A,
|
A,
|
||||||
B(UInt<8>),
|
B(UInt<8>),
|
||||||
|
|
@ -679,6 +679,366 @@ circuit check_enum_literals:
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[hdl_module(outline_generated)]
|
||||||
|
pub fn check_enum_cmp_eq() {
|
||||||
|
#[hdl]
|
||||||
|
let lhs: TestEnum = m.input();
|
||||||
|
#[hdl]
|
||||||
|
let rhs: TestEnum = m.input();
|
||||||
|
#[hdl]
|
||||||
|
let eq: Bool = m.output();
|
||||||
|
connect(eq, lhs.cmp_eq(rhs));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_enum_cmp_eq() {
|
||||||
|
let _n = SourceLocation::normalize_files_for_tests();
|
||||||
|
let m = check_enum_cmp_eq();
|
||||||
|
dbg!(m);
|
||||||
|
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
|
||||||
|
assert_export_firrtl! {
|
||||||
|
m =>
|
||||||
|
options: ExportOptions {
|
||||||
|
simplify_enums: None,
|
||||||
|
..ExportOptions::default()
|
||||||
|
},
|
||||||
|
"/test/check_enum_cmp_eq.fir": r"FIRRTL version 3.2.0
|
||||||
|
circuit check_enum_cmp_eq:
|
||||||
|
type Ty0 = {|A, B: UInt<8>, C: UInt<1>[3]|}
|
||||||
|
module check_enum_cmp_eq: @[module-XXXXXXXXXX.rs 1:1]
|
||||||
|
input lhs: Ty0 @[module-XXXXXXXXXX.rs 2:1]
|
||||||
|
input rhs: Ty0 @[module-XXXXXXXXXX.rs 3:1]
|
||||||
|
output eq: UInt<1> @[module-XXXXXXXXXX.rs 4:1]
|
||||||
|
wire TestEnum_cmp_eq: UInt<1> @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
connect TestEnum_cmp_eq, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
match lhs: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
A:
|
||||||
|
match rhs: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
A:
|
||||||
|
connect TestEnum_cmp_eq, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
B(_match_arm_value):
|
||||||
|
skip
|
||||||
|
C(_match_arm_value_1):
|
||||||
|
skip
|
||||||
|
B(_match_arm_value_2):
|
||||||
|
match rhs: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
A:
|
||||||
|
skip
|
||||||
|
B(_match_arm_value_3):
|
||||||
|
connect TestEnum_cmp_eq, eq(_match_arm_value_2, _match_arm_value_3) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
C(_match_arm_value_4):
|
||||||
|
skip
|
||||||
|
C(_match_arm_value_5):
|
||||||
|
match rhs: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
A:
|
||||||
|
skip
|
||||||
|
B(_match_arm_value_6):
|
||||||
|
skip
|
||||||
|
C(_match_arm_value_7):
|
||||||
|
wire _array_literal_expr: UInt<1>[3]
|
||||||
|
connect _array_literal_expr[0], eq(_match_arm_value_5[0], _match_arm_value_7[0])
|
||||||
|
connect _array_literal_expr[1], eq(_match_arm_value_5[1], _match_arm_value_7[1])
|
||||||
|
connect _array_literal_expr[2], eq(_match_arm_value_5[2], _match_arm_value_7[2])
|
||||||
|
wire _cast_array_to_bits_expr: UInt<1>[3]
|
||||||
|
connect _cast_array_to_bits_expr[0], _array_literal_expr[0]
|
||||||
|
connect _cast_array_to_bits_expr[1], _array_literal_expr[1]
|
||||||
|
connect _cast_array_to_bits_expr[2], _array_literal_expr[2]
|
||||||
|
wire _cast_to_bits_expr: UInt<3>
|
||||||
|
connect _cast_to_bits_expr, cat(_cast_array_to_bits_expr[2], cat(_cast_array_to_bits_expr[1], _cast_array_to_bits_expr[0]))
|
||||||
|
connect TestEnum_cmp_eq, andr(_cast_to_bits_expr) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
connect eq, TestEnum_cmp_eq @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
",
|
||||||
|
};
|
||||||
|
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
|
||||||
|
assert_export_firrtl! {
|
||||||
|
m =>
|
||||||
|
options: ExportOptions {
|
||||||
|
simplify_enums: Some(SimplifyEnumsKind::SimplifyToEnumsWithNoBody),
|
||||||
|
..ExportOptions::default()
|
||||||
|
},
|
||||||
|
"/test/check_enum_cmp_eq.fir": r"FIRRTL version 3.2.0
|
||||||
|
circuit check_enum_cmp_eq:
|
||||||
|
type Ty0 = {|A, B, C|}
|
||||||
|
type Ty1 = {tag: Ty0, body: UInt<8>}
|
||||||
|
module check_enum_cmp_eq: @[module-XXXXXXXXXX.rs 1:1]
|
||||||
|
input lhs: Ty1 @[module-XXXXXXXXXX.rs 2:1]
|
||||||
|
input rhs: Ty1 @[module-XXXXXXXXXX.rs 3:1]
|
||||||
|
output eq: UInt<1> @[module-XXXXXXXXXX.rs 4:1]
|
||||||
|
wire TestEnum_cmp_eq: UInt<1> @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
connect TestEnum_cmp_eq, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
match lhs.tag: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
A:
|
||||||
|
match rhs.tag: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
A:
|
||||||
|
connect TestEnum_cmp_eq, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
B:
|
||||||
|
skip
|
||||||
|
C:
|
||||||
|
skip
|
||||||
|
B:
|
||||||
|
match rhs.tag: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
A:
|
||||||
|
skip
|
||||||
|
B:
|
||||||
|
connect TestEnum_cmp_eq, eq(bits(lhs.body, 7, 0), bits(rhs.body, 7, 0)) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
C:
|
||||||
|
skip
|
||||||
|
C:
|
||||||
|
match rhs.tag: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
A:
|
||||||
|
skip
|
||||||
|
B:
|
||||||
|
skip
|
||||||
|
C:
|
||||||
|
wire _array_literal_expr: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened[0], bits(bits(lhs.body, 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr[0], _cast_bits_to_array_expr_flattened[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened[1], bits(bits(lhs.body, 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr[1], _cast_bits_to_array_expr_flattened[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened[2], bits(bits(lhs.body, 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr[2], _cast_bits_to_array_expr_flattened[2]
|
||||||
|
wire _cast_bits_to_array_expr_1: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_1: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_1[0], bits(bits(rhs.body, 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_1[0], _cast_bits_to_array_expr_flattened_1[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_1[1], bits(bits(rhs.body, 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_1[1], _cast_bits_to_array_expr_flattened_1[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_1[2], bits(bits(rhs.body, 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_1[2], _cast_bits_to_array_expr_flattened_1[2]
|
||||||
|
connect _array_literal_expr[0], eq(_cast_bits_to_array_expr[0], _cast_bits_to_array_expr_1[0])
|
||||||
|
wire _cast_bits_to_array_expr_2: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_2: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_2[0], bits(bits(lhs.body, 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_2[0], _cast_bits_to_array_expr_flattened_2[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_2[1], bits(bits(lhs.body, 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_2[1], _cast_bits_to_array_expr_flattened_2[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_2[2], bits(bits(lhs.body, 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_2[2], _cast_bits_to_array_expr_flattened_2[2]
|
||||||
|
wire _cast_bits_to_array_expr_3: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_3: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_3[0], bits(bits(rhs.body, 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_3[0], _cast_bits_to_array_expr_flattened_3[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_3[1], bits(bits(rhs.body, 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_3[1], _cast_bits_to_array_expr_flattened_3[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_3[2], bits(bits(rhs.body, 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_3[2], _cast_bits_to_array_expr_flattened_3[2]
|
||||||
|
connect _array_literal_expr[1], eq(_cast_bits_to_array_expr_2[1], _cast_bits_to_array_expr_3[1])
|
||||||
|
wire _cast_bits_to_array_expr_4: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_4: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_4[0], bits(bits(lhs.body, 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_4[0], _cast_bits_to_array_expr_flattened_4[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_4[1], bits(bits(lhs.body, 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_4[1], _cast_bits_to_array_expr_flattened_4[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_4[2], bits(bits(lhs.body, 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_4[2], _cast_bits_to_array_expr_flattened_4[2]
|
||||||
|
wire _cast_bits_to_array_expr_5: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_5: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_5[0], bits(bits(rhs.body, 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_5[0], _cast_bits_to_array_expr_flattened_5[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_5[1], bits(bits(rhs.body, 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_5[1], _cast_bits_to_array_expr_flattened_5[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_5[2], bits(bits(rhs.body, 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_5[2], _cast_bits_to_array_expr_flattened_5[2]
|
||||||
|
connect _array_literal_expr[2], eq(_cast_bits_to_array_expr_4[2], _cast_bits_to_array_expr_5[2])
|
||||||
|
wire _cast_array_to_bits_expr: UInt<1>[3]
|
||||||
|
connect _cast_array_to_bits_expr[0], _array_literal_expr[0]
|
||||||
|
connect _cast_array_to_bits_expr[1], _array_literal_expr[1]
|
||||||
|
connect _cast_array_to_bits_expr[2], _array_literal_expr[2]
|
||||||
|
wire _cast_to_bits_expr: UInt<3>
|
||||||
|
connect _cast_to_bits_expr, cat(_cast_array_to_bits_expr[2], cat(_cast_array_to_bits_expr[1], _cast_array_to_bits_expr[0]))
|
||||||
|
connect TestEnum_cmp_eq, andr(_cast_to_bits_expr) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
connect eq, TestEnum_cmp_eq @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
",
|
||||||
|
};
|
||||||
|
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
|
||||||
|
assert_export_firrtl! {
|
||||||
|
m =>
|
||||||
|
options: ExportOptions {
|
||||||
|
simplify_enums: Some(SimplifyEnumsKind::ReplaceWithBundleOfUInts),
|
||||||
|
..ExportOptions::default()
|
||||||
|
},
|
||||||
|
"/test/check_enum_cmp_eq.fir": r"FIRRTL version 3.2.0
|
||||||
|
circuit check_enum_cmp_eq:
|
||||||
|
type Ty0 = {tag: UInt<2>, body: UInt<8>}
|
||||||
|
module check_enum_cmp_eq: @[module-XXXXXXXXXX.rs 1:1]
|
||||||
|
input lhs: Ty0 @[module-XXXXXXXXXX.rs 2:1]
|
||||||
|
input rhs: Ty0 @[module-XXXXXXXXXX.rs 3:1]
|
||||||
|
output eq: UInt<1> @[module-XXXXXXXXXX.rs 4:1]
|
||||||
|
wire TestEnum_cmp_eq: UInt<1> @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
connect TestEnum_cmp_eq, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
when eq(lhs.tag, UInt<2>(0h0)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
when eq(rhs.tag, UInt<2>(0h0)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
connect TestEnum_cmp_eq, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
else when eq(rhs.tag, UInt<2>(0h1)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
skip
|
||||||
|
else when eq(lhs.tag, UInt<2>(0h1)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
when eq(rhs.tag, UInt<2>(0h0)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
skip
|
||||||
|
else when eq(rhs.tag, UInt<2>(0h1)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
connect TestEnum_cmp_eq, eq(bits(lhs.body, 7, 0), bits(rhs.body, 7, 0)) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
else when eq(rhs.tag, UInt<2>(0h0)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
skip
|
||||||
|
else when eq(rhs.tag, UInt<2>(0h1)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
skip
|
||||||
|
else:
|
||||||
|
wire _array_literal_expr: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened[0], bits(bits(lhs.body, 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr[0], _cast_bits_to_array_expr_flattened[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened[1], bits(bits(lhs.body, 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr[1], _cast_bits_to_array_expr_flattened[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened[2], bits(bits(lhs.body, 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr[2], _cast_bits_to_array_expr_flattened[2]
|
||||||
|
wire _cast_bits_to_array_expr_1: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_1: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_1[0], bits(bits(rhs.body, 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_1[0], _cast_bits_to_array_expr_flattened_1[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_1[1], bits(bits(rhs.body, 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_1[1], _cast_bits_to_array_expr_flattened_1[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_1[2], bits(bits(rhs.body, 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_1[2], _cast_bits_to_array_expr_flattened_1[2]
|
||||||
|
connect _array_literal_expr[0], eq(_cast_bits_to_array_expr[0], _cast_bits_to_array_expr_1[0])
|
||||||
|
wire _cast_bits_to_array_expr_2: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_2: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_2[0], bits(bits(lhs.body, 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_2[0], _cast_bits_to_array_expr_flattened_2[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_2[1], bits(bits(lhs.body, 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_2[1], _cast_bits_to_array_expr_flattened_2[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_2[2], bits(bits(lhs.body, 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_2[2], _cast_bits_to_array_expr_flattened_2[2]
|
||||||
|
wire _cast_bits_to_array_expr_3: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_3: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_3[0], bits(bits(rhs.body, 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_3[0], _cast_bits_to_array_expr_flattened_3[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_3[1], bits(bits(rhs.body, 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_3[1], _cast_bits_to_array_expr_flattened_3[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_3[2], bits(bits(rhs.body, 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_3[2], _cast_bits_to_array_expr_flattened_3[2]
|
||||||
|
connect _array_literal_expr[1], eq(_cast_bits_to_array_expr_2[1], _cast_bits_to_array_expr_3[1])
|
||||||
|
wire _cast_bits_to_array_expr_4: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_4: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_4[0], bits(bits(lhs.body, 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_4[0], _cast_bits_to_array_expr_flattened_4[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_4[1], bits(bits(lhs.body, 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_4[1], _cast_bits_to_array_expr_flattened_4[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_4[2], bits(bits(lhs.body, 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_4[2], _cast_bits_to_array_expr_flattened_4[2]
|
||||||
|
wire _cast_bits_to_array_expr_5: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_5: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_5[0], bits(bits(rhs.body, 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_5[0], _cast_bits_to_array_expr_flattened_5[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_5[1], bits(bits(rhs.body, 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_5[1], _cast_bits_to_array_expr_flattened_5[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_5[2], bits(bits(rhs.body, 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_5[2], _cast_bits_to_array_expr_flattened_5[2]
|
||||||
|
connect _array_literal_expr[2], eq(_cast_bits_to_array_expr_4[2], _cast_bits_to_array_expr_5[2])
|
||||||
|
wire _cast_array_to_bits_expr: UInt<1>[3]
|
||||||
|
connect _cast_array_to_bits_expr[0], _array_literal_expr[0]
|
||||||
|
connect _cast_array_to_bits_expr[1], _array_literal_expr[1]
|
||||||
|
connect _cast_array_to_bits_expr[2], _array_literal_expr[2]
|
||||||
|
wire _cast_to_bits_expr: UInt<3>
|
||||||
|
connect _cast_to_bits_expr, cat(_cast_array_to_bits_expr[2], cat(_cast_array_to_bits_expr[1], _cast_array_to_bits_expr[0]))
|
||||||
|
connect TestEnum_cmp_eq, andr(_cast_to_bits_expr) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
connect eq, TestEnum_cmp_eq @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
",
|
||||||
|
};
|
||||||
|
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
|
||||||
|
assert_export_firrtl! {
|
||||||
|
m =>
|
||||||
|
options: ExportOptions {
|
||||||
|
simplify_enums: Some(SimplifyEnumsKind::ReplaceWithUInt),
|
||||||
|
..ExportOptions::default()
|
||||||
|
},
|
||||||
|
"/test/check_enum_cmp_eq.fir": r"FIRRTL version 3.2.0
|
||||||
|
circuit check_enum_cmp_eq:
|
||||||
|
module check_enum_cmp_eq: @[module-XXXXXXXXXX.rs 1:1]
|
||||||
|
input lhs: UInt<10> @[module-XXXXXXXXXX.rs 2:1]
|
||||||
|
input rhs: UInt<10> @[module-XXXXXXXXXX.rs 3:1]
|
||||||
|
output eq: UInt<1> @[module-XXXXXXXXXX.rs 4:1]
|
||||||
|
wire TestEnum_cmp_eq: UInt<1> @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
connect TestEnum_cmp_eq, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
when eq(bits(lhs, 1, 0), UInt<2>(0h0)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
when eq(bits(rhs, 1, 0), UInt<2>(0h0)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
connect TestEnum_cmp_eq, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
else when eq(bits(rhs, 1, 0), UInt<2>(0h1)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
skip
|
||||||
|
else when eq(bits(lhs, 1, 0), UInt<2>(0h1)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
when eq(bits(rhs, 1, 0), UInt<2>(0h0)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
skip
|
||||||
|
else when eq(bits(rhs, 1, 0), UInt<2>(0h1)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
connect TestEnum_cmp_eq, eq(bits(bits(lhs, 9, 2), 7, 0), bits(bits(rhs, 9, 2), 7, 0)) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
else when eq(bits(rhs, 1, 0), UInt<2>(0h0)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
skip
|
||||||
|
else when eq(bits(rhs, 1, 0), UInt<2>(0h1)): @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
skip
|
||||||
|
else:
|
||||||
|
wire _array_literal_expr: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened[0], bits(bits(bits(lhs, 9, 2), 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr[0], _cast_bits_to_array_expr_flattened[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened[1], bits(bits(bits(lhs, 9, 2), 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr[1], _cast_bits_to_array_expr_flattened[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened[2], bits(bits(bits(lhs, 9, 2), 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr[2], _cast_bits_to_array_expr_flattened[2]
|
||||||
|
wire _cast_bits_to_array_expr_1: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_1: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_1[0], bits(bits(bits(rhs, 9, 2), 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_1[0], _cast_bits_to_array_expr_flattened_1[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_1[1], bits(bits(bits(rhs, 9, 2), 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_1[1], _cast_bits_to_array_expr_flattened_1[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_1[2], bits(bits(bits(rhs, 9, 2), 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_1[2], _cast_bits_to_array_expr_flattened_1[2]
|
||||||
|
connect _array_literal_expr[0], eq(_cast_bits_to_array_expr[0], _cast_bits_to_array_expr_1[0])
|
||||||
|
wire _cast_bits_to_array_expr_2: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_2: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_2[0], bits(bits(bits(lhs, 9, 2), 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_2[0], _cast_bits_to_array_expr_flattened_2[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_2[1], bits(bits(bits(lhs, 9, 2), 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_2[1], _cast_bits_to_array_expr_flattened_2[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_2[2], bits(bits(bits(lhs, 9, 2), 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_2[2], _cast_bits_to_array_expr_flattened_2[2]
|
||||||
|
wire _cast_bits_to_array_expr_3: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_3: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_3[0], bits(bits(bits(rhs, 9, 2), 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_3[0], _cast_bits_to_array_expr_flattened_3[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_3[1], bits(bits(bits(rhs, 9, 2), 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_3[1], _cast_bits_to_array_expr_flattened_3[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_3[2], bits(bits(bits(rhs, 9, 2), 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_3[2], _cast_bits_to_array_expr_flattened_3[2]
|
||||||
|
connect _array_literal_expr[1], eq(_cast_bits_to_array_expr_2[1], _cast_bits_to_array_expr_3[1])
|
||||||
|
wire _cast_bits_to_array_expr_4: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_4: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_4[0], bits(bits(bits(lhs, 9, 2), 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_4[0], _cast_bits_to_array_expr_flattened_4[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_4[1], bits(bits(bits(lhs, 9, 2), 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_4[1], _cast_bits_to_array_expr_flattened_4[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_4[2], bits(bits(bits(lhs, 9, 2), 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_4[2], _cast_bits_to_array_expr_flattened_4[2]
|
||||||
|
wire _cast_bits_to_array_expr_5: UInt<1>[3]
|
||||||
|
wire _cast_bits_to_array_expr_flattened_5: UInt<1>[3]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_5[0], bits(bits(bits(rhs, 9, 2), 2, 0), 0, 0)
|
||||||
|
connect _cast_bits_to_array_expr_5[0], _cast_bits_to_array_expr_flattened_5[0]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_5[1], bits(bits(bits(rhs, 9, 2), 2, 0), 1, 1)
|
||||||
|
connect _cast_bits_to_array_expr_5[1], _cast_bits_to_array_expr_flattened_5[1]
|
||||||
|
connect _cast_bits_to_array_expr_flattened_5[2], bits(bits(bits(rhs, 9, 2), 2, 0), 2, 2)
|
||||||
|
connect _cast_bits_to_array_expr_5[2], _cast_bits_to_array_expr_flattened_5[2]
|
||||||
|
connect _array_literal_expr[2], eq(_cast_bits_to_array_expr_4[2], _cast_bits_to_array_expr_5[2])
|
||||||
|
wire _cast_array_to_bits_expr: UInt<1>[3]
|
||||||
|
connect _cast_array_to_bits_expr[0], _array_literal_expr[0]
|
||||||
|
connect _cast_array_to_bits_expr[1], _array_literal_expr[1]
|
||||||
|
connect _cast_array_to_bits_expr[2], _array_literal_expr[2]
|
||||||
|
wire _cast_to_bits_expr: UInt<3>
|
||||||
|
connect _cast_to_bits_expr, cat(_cast_array_to_bits_expr[2], cat(_cast_array_to_bits_expr[1], _cast_array_to_bits_expr[0]))
|
||||||
|
connect TestEnum_cmp_eq, andr(_cast_to_bits_expr) @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
connect eq, TestEnum_cmp_eq @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
#[hdl_module(outline_generated)]
|
#[hdl_module(outline_generated)]
|
||||||
pub fn check_struct_enum_match() {
|
pub fn check_struct_enum_match() {
|
||||||
#[hdl]
|
#[hdl]
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,19 @@
|
||||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||||
// See Notices.txt for copyright information
|
// See Notices.txt for copyright information
|
||||||
|
|
||||||
|
use bitvec::{order::Lsb0, view::BitView};
|
||||||
use fayalite::{
|
use fayalite::{
|
||||||
memory::{ReadStruct, ReadWriteStruct, WriteStruct},
|
assert_export_firrtl,
|
||||||
module::{instance_with_loc, memory_with_init_and_loc, reg_builder_with_loc},
|
firrtl::ExportOptions,
|
||||||
|
memory::{ReadStruct, ReadWriteStruct, WriteStruct, splat_mask},
|
||||||
|
module::{
|
||||||
|
instance_with_loc, memory_with_init_and_loc, reg_builder_with_loc,
|
||||||
|
transform::simplify_enums::SimplifyEnumsKind,
|
||||||
|
},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
reset::ResetType,
|
reset::ResetType,
|
||||||
sim::vcd::VcdWriterDecls,
|
sim::vcd::VcdWriterDecls,
|
||||||
|
ty::SimValueDebug,
|
||||||
util::{RcWriter, ready_valid::queue},
|
util::{RcWriter, ready_valid::queue},
|
||||||
};
|
};
|
||||||
use std::{collections::BTreeMap, num::NonZeroUsize, rc::Rc};
|
use std::{collections::BTreeMap, num::NonZeroUsize, rc::Rc};
|
||||||
|
|
@ -550,6 +557,150 @@ fn test_enums() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[hdl]
|
||||||
|
pub enum EnumWithSimpleBody {
|
||||||
|
A(UInt<8>),
|
||||||
|
B(UInt<8>),
|
||||||
|
C(UInt<8>),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[hdl_module(outline_generated)]
|
||||||
|
pub fn enum_with_simple_body() {
|
||||||
|
#[hdl]
|
||||||
|
let which_in: UInt<8> = m.input();
|
||||||
|
#[hdl]
|
||||||
|
let data_in: UInt<8> = m.input();
|
||||||
|
#[hdl]
|
||||||
|
let which_out: UInt<8> = m.output();
|
||||||
|
#[hdl]
|
||||||
|
let data_out: UInt<8> = m.output();
|
||||||
|
#[hdl]
|
||||||
|
let enum_out: EnumWithSimpleBody = m.output();
|
||||||
|
|
||||||
|
#[hdl]
|
||||||
|
if which_in.cmp_eq(0u8) {
|
||||||
|
connect(enum_out, EnumWithSimpleBody.A(data_in));
|
||||||
|
} else if which_in.cmp_eq(1u8) {
|
||||||
|
connect(enum_out, EnumWithSimpleBody.B(data_in));
|
||||||
|
} else {
|
||||||
|
connect(enum_out, EnumWithSimpleBody.C(data_in));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[hdl]
|
||||||
|
match enum_out {
|
||||||
|
EnumWithSimpleBody::A(v) => {
|
||||||
|
connect(which_out, 0u8);
|
||||||
|
connect(data_out, v);
|
||||||
|
}
|
||||||
|
EnumWithSimpleBody::B(v) => {
|
||||||
|
connect(which_out, 1u8);
|
||||||
|
connect(data_out, v);
|
||||||
|
}
|
||||||
|
EnumWithSimpleBody::C(v) => {
|
||||||
|
connect(which_out, 2u8);
|
||||||
|
connect(data_out, v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[hdl]
|
||||||
|
#[test]
|
||||||
|
fn test_enum_with_simple_body() {
|
||||||
|
let _n = SourceLocation::normalize_files_for_tests();
|
||||||
|
let mut sim = Simulation::new(enum_with_simple_body());
|
||||||
|
let mut writer = RcWriter::default();
|
||||||
|
sim.add_trace_writer(VcdWriterDecls::new(writer.clone()));
|
||||||
|
for which in 0u8..=2 {
|
||||||
|
for data in (0..u8::MAX).step_by(45) {
|
||||||
|
sim.write(sim.io().which_in, which);
|
||||||
|
sim.write(sim.io().data_in, data);
|
||||||
|
sim.advance_time(SimDuration::from_micros(1));
|
||||||
|
assert_eq!(sim.read(sim.io().which_out).as_int(), which);
|
||||||
|
assert_eq!(sim.read(sim.io().data_out).as_int(), data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sim.flush_traces().unwrap();
|
||||||
|
let vcd = String::from_utf8(writer.take()).unwrap();
|
||||||
|
println!("####### VCD:\n{vcd}\n#######");
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct WireState<'a> {
|
||||||
|
name: &'a str,
|
||||||
|
space_then_id: Option<&'a str>,
|
||||||
|
value: Option<&'a str>,
|
||||||
|
}
|
||||||
|
impl<'a> WireState<'a> {
|
||||||
|
fn new(name: &'a str) -> Self {
|
||||||
|
Self {
|
||||||
|
name,
|
||||||
|
space_then_id: None,
|
||||||
|
value: None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let mut variant_wires = [
|
||||||
|
WireState::new("A"),
|
||||||
|
WireState::new("B"),
|
||||||
|
WireState::new("C"),
|
||||||
|
];
|
||||||
|
// check that output .vcd has the proper values for all variants' wires
|
||||||
|
for (is_last, line) in vcd.lines().map(|line| (false, line)).chain([(true, "")]) {
|
||||||
|
if let Some(line) = line.strip_prefix("$var wire 8")
|
||||||
|
&& let Some(line) = line.strip_suffix(" $end")
|
||||||
|
&& let Some((space_then_id, state)) = variant_wires
|
||||||
|
.iter_mut()
|
||||||
|
.find_map(|state| Some((line.strip_suffix(state.name)?.strip_suffix(" ")?, state)))
|
||||||
|
{
|
||||||
|
assert_eq!(space_then_id.chars().next(), Some(' '));
|
||||||
|
assert!(
|
||||||
|
space_then_id
|
||||||
|
.chars()
|
||||||
|
.skip(1)
|
||||||
|
.all(|ch| matches!(ch, '!'..='~'))
|
||||||
|
);
|
||||||
|
assert_eq!(state.space_then_id.replace(space_then_id), None);
|
||||||
|
} else if line.starts_with("#") || is_last {
|
||||||
|
let Some(expected_value) = variant_wires[0].value else {
|
||||||
|
panic!(
|
||||||
|
"variant {} hasn't been initialized before a timestamp or EOF: {variant_wires:#?}\n\
|
||||||
|
line={line:?}",
|
||||||
|
variant_wires[0].name,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
for state in &variant_wires {
|
||||||
|
assert_eq!(
|
||||||
|
state.value,
|
||||||
|
Some(expected_value),
|
||||||
|
"at a timestamp or EOF: variant value for {} doesn't match expected value.\n\
|
||||||
|
{variant_wires:#?}\nline={line:?}",
|
||||||
|
state.name,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else if line.starts_with("b") {
|
||||||
|
for state in &mut variant_wires {
|
||||||
|
let Some(space_then_id) = state.space_then_id else {
|
||||||
|
let name = state.name;
|
||||||
|
panic!(
|
||||||
|
"variant {name} hasn't had an id assigned yet: {variant_wires:#?}\n\
|
||||||
|
line={line:?}",
|
||||||
|
);
|
||||||
|
};
|
||||||
|
if let Some(value) = line.strip_suffix(space_then_id) {
|
||||||
|
state.value = Some(value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if vcd != include_str!("sim/expected/enum_with_simple_body.vcd") {
|
||||||
|
panic!();
|
||||||
|
}
|
||||||
|
let sim_debug = format!("{sim:#?}");
|
||||||
|
println!("#######\n{sim_debug}\n#######");
|
||||||
|
if sim_debug != include_str!("sim/expected/enum_with_simple_body.txt") {
|
||||||
|
panic!();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[hdl_module(outline_generated)]
|
#[hdl_module(outline_generated)]
|
||||||
pub fn memories() {
|
pub fn memories() {
|
||||||
#[hdl]
|
#[hdl]
|
||||||
|
|
@ -2841,3 +2992,621 @@ fn test_queue_4_true_true() {
|
||||||
include_str!("sim/expected/queue_4_true_true.txt"),
|
include_str!("sim/expected/queue_4_true_true.txt"),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[hdl(outline_generated, custom_debug(sim), cmp_eq)]
|
||||||
|
pub enum HasCustomDebug {
|
||||||
|
Text(UInt<512>),
|
||||||
|
FmtError,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl HasCustomDebug {
|
||||||
|
#[hdl]
|
||||||
|
pub fn new_sim(text: Result<&str, std::fmt::Error>) -> SimValue<Self> {
|
||||||
|
match text {
|
||||||
|
Ok(text) => {
|
||||||
|
let mut retval = HasCustomDebug.Text.zero();
|
||||||
|
let src = text.as_bytes().view_bits::<Lsb0>();
|
||||||
|
let dest = retval.bits_mut();
|
||||||
|
let len = src.len().min(dest.len());
|
||||||
|
dest[..len].clone_from_bitslice(&src[..len]);
|
||||||
|
#[hdl(sim)]
|
||||||
|
HasCustomDebug.Text(retval)
|
||||||
|
}
|
||||||
|
Err(std::fmt::Error) =>
|
||||||
|
{
|
||||||
|
#[hdl(sim)]
|
||||||
|
HasCustomDebug.FmtError()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn new(text: Result<&str, std::fmt::Error>) -> Expr<Self> {
|
||||||
|
Self::new_sim(text).to_expr()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SimValueDebug for HasCustomDebug {
|
||||||
|
#[hdl]
|
||||||
|
fn sim_value_debug(
|
||||||
|
value: &<Self as Type>::SimValue,
|
||||||
|
f: &mut std::fmt::Formatter<'_>,
|
||||||
|
) -> std::fmt::Result {
|
||||||
|
if f.alternate() {
|
||||||
|
return #[hdl(sim)]
|
||||||
|
match value {
|
||||||
|
Self::FmtError => f.write_str("FmtError"),
|
||||||
|
Self::Text(text) => f.debug_tuple("Text").field(text).finish(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#[hdl(sim)]
|
||||||
|
match value {
|
||||||
|
Self::FmtError => Err(std::fmt::Error),
|
||||||
|
Self::Text(text) => {
|
||||||
|
assert_eq!(text.ty().width() % u8::BITS as usize, 0);
|
||||||
|
let mut bytes = vec![0u8; text.ty().width() / u8::BITS as usize];
|
||||||
|
bytes
|
||||||
|
.view_bits_mut::<Lsb0>()
|
||||||
|
.clone_from_bitslice(text.bits());
|
||||||
|
if let Some(len) = bytes.iter().position(|b| *b == 0) {
|
||||||
|
bytes.truncate(len);
|
||||||
|
}
|
||||||
|
f.write_str(&String::from_utf8_lossy(&bytes))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[hdl_module(outline_generated)]
|
||||||
|
pub fn sim_trace_as_string() {
|
||||||
|
#[hdl]
|
||||||
|
let clk: Clock = m.input();
|
||||||
|
#[hdl]
|
||||||
|
let read: ReadStruct<TraceAsString<Array<HasCustomDebug, 2>>, ConstUsize<8>> = m.input();
|
||||||
|
#[hdl]
|
||||||
|
let write: WriteStruct<Array<TraceAsString<HasCustomDebug>, 2>, ConstUsize<8>> = m.input();
|
||||||
|
#[hdl]
|
||||||
|
let mut mem = memory_with_init([[HasCustomDebug::new(Ok("")).to_trace_as_string(); 2]; 4]);
|
||||||
|
let read_port = mem.new_read_port();
|
||||||
|
connect(read_port.clk, clk);
|
||||||
|
connect_any(read_port.addr, read.addr);
|
||||||
|
connect(read_port.en, read.en);
|
||||||
|
for (l, r) in read.data.iter().zip(read_port.data.iter()) {
|
||||||
|
connect(l, &**r);
|
||||||
|
}
|
||||||
|
let write_port = mem.new_write_port();
|
||||||
|
connect(write_port.clk, clk);
|
||||||
|
connect_any(write_port.addr, write.addr);
|
||||||
|
connect(write_port.data, write.data);
|
||||||
|
connect(write_port.en, write.en);
|
||||||
|
connect(write_port.mask, write.mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[hdl]
|
||||||
|
#[test]
|
||||||
|
fn test_sim_trace_as_string() {
|
||||||
|
let _n = SourceLocation::normalize_files_for_tests();
|
||||||
|
let m = sim_trace_as_string();
|
||||||
|
let mut sim = Simulation::new(m);
|
||||||
|
// sim.set_breakpoints_unstable(Default::default(), true);
|
||||||
|
let mut writer = RcWriter::default();
|
||||||
|
sim.add_trace_writer(VcdWriterDecls::new(writer.clone()));
|
||||||
|
sim.write(sim.io().clk, false);
|
||||||
|
sim.write(sim.io().read.clk, false);
|
||||||
|
sim.write(sim.io().write.clk, false);
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct TestCase {
|
||||||
|
read: Option<(u8, [Result<&'static str, std::fmt::Error>; 2])>,
|
||||||
|
write_addr: Option<u8>,
|
||||||
|
write_data: [Result<&'static str, std::fmt::Error>; 2],
|
||||||
|
write_mask: [bool; 2],
|
||||||
|
}
|
||||||
|
const TEST_CASES: &[TestCase] = &[
|
||||||
|
TestCase {
|
||||||
|
read: None,
|
||||||
|
write_addr: None,
|
||||||
|
write_data: [Ok(""); 2],
|
||||||
|
write_mask: [false; 2],
|
||||||
|
},
|
||||||
|
TestCase {
|
||||||
|
read: None,
|
||||||
|
write_addr: Some(0),
|
||||||
|
write_data: [Ok("mem[0][0]"), Ok("mem[0][1]")],
|
||||||
|
write_mask: [true; 2],
|
||||||
|
},
|
||||||
|
TestCase {
|
||||||
|
read: None,
|
||||||
|
write_addr: Some(1),
|
||||||
|
write_data: [Ok("mem[1][0]"), Ok("mem[1][1]")],
|
||||||
|
write_mask: [true; 2],
|
||||||
|
},
|
||||||
|
TestCase {
|
||||||
|
read: None,
|
||||||
|
write_addr: Some(2),
|
||||||
|
write_data: [Ok("mem[2][0]"), Ok("mem[2][1]")],
|
||||||
|
write_mask: [true; 2],
|
||||||
|
},
|
||||||
|
TestCase {
|
||||||
|
read: None,
|
||||||
|
write_addr: Some(3),
|
||||||
|
write_data: [Ok("mem[3][0]"), Ok("mem[3][1]")],
|
||||||
|
write_mask: [true; 2],
|
||||||
|
},
|
||||||
|
TestCase {
|
||||||
|
read: Some((1, [Ok("mem[1][0]"), Ok("mem[1][1]")])),
|
||||||
|
write_addr: None,
|
||||||
|
write_data: [Err(std::fmt::Error), Err(std::fmt::Error)],
|
||||||
|
write_mask: [true; 2],
|
||||||
|
},
|
||||||
|
TestCase {
|
||||||
|
read: Some((1, [Err(std::fmt::Error), Err(std::fmt::Error)])),
|
||||||
|
write_addr: Some(1),
|
||||||
|
write_data: [Err(std::fmt::Error), Err(std::fmt::Error)],
|
||||||
|
write_mask: [true; 2],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
for test_case in TEST_CASES {
|
||||||
|
let TestCase {
|
||||||
|
read,
|
||||||
|
write_addr,
|
||||||
|
write_data,
|
||||||
|
write_mask,
|
||||||
|
} = test_case;
|
||||||
|
sim.write(sim.io().read.addr, read.map(|v| v.0).unwrap_or(0));
|
||||||
|
sim.write(sim.io().read.en, read.is_some());
|
||||||
|
sim.write(sim.io().write.addr, write_addr.unwrap_or(0));
|
||||||
|
sim.write(sim.io().write.en, write_addr.is_some());
|
||||||
|
sim.write(
|
||||||
|
sim.io().write.data,
|
||||||
|
write_data.map(|v| HasCustomDebug::new_sim(v).to_trace_as_string()),
|
||||||
|
);
|
||||||
|
sim.write(
|
||||||
|
sim.io().write.mask,
|
||||||
|
write_mask.map(|v| splat_mask(TraceAsString[HasCustomDebug], v.to_expr())),
|
||||||
|
);
|
||||||
|
sim.write(sim.io().clk, false);
|
||||||
|
sim.advance_time(SimDuration::from_nanos(500));
|
||||||
|
sim.write(sim.io().clk, true);
|
||||||
|
sim.advance_time(SimDuration::from_nanos(500));
|
||||||
|
if let Some((_, expected_read_data)) = read {
|
||||||
|
let read_data = sim.read(sim.io().read.data);
|
||||||
|
let expected_read_data = expected_read_data
|
||||||
|
.map(HasCustomDebug::new_sim)
|
||||||
|
.into_sim_value();
|
||||||
|
assert!(
|
||||||
|
*read_data.inner() == expected_read_data,
|
||||||
|
"{read_data:#?}\n!= {expected_read_data:#?}",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sim.flush_traces().unwrap();
|
||||||
|
let vcd = String::from_utf8(writer.take()).unwrap();
|
||||||
|
println!("####### VCD:\n{vcd}\n#######");
|
||||||
|
if vcd != include_str!("sim/expected/sim_trace_as_string.vcd") {
|
||||||
|
panic!();
|
||||||
|
}
|
||||||
|
let sim_debug = format!("{sim:#?}");
|
||||||
|
println!("#######\n{sim_debug}\n#######");
|
||||||
|
if sim_debug != include_str!("sim/expected/sim_trace_as_string.txt") {
|
||||||
|
panic!();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_firrtl_trace_as_string() {
|
||||||
|
let _n = SourceLocation::normalize_files_for_tests();
|
||||||
|
let m = sim_trace_as_string();
|
||||||
|
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
|
||||||
|
assert_export_firrtl! {
|
||||||
|
m =>
|
||||||
|
options: ExportOptions {
|
||||||
|
simplify_memories: false,
|
||||||
|
simplify_enums: None,
|
||||||
|
..ExportOptions::default()
|
||||||
|
},
|
||||||
|
"/test/sim_trace_as_string.fir": r#"FIRRTL version 3.2.0
|
||||||
|
circuit sim_trace_as_string: %[[
|
||||||
|
{
|
||||||
|
"class": "firrtl.annotations.MemoryFileInlineAnnotation",
|
||||||
|
"filename": "/test/sim_trace_as_string/mem.mem",
|
||||||
|
"hexOrBinary": "b",
|
||||||
|
"target": "~sim_trace_as_string|sim_trace_as_string>mem"
|
||||||
|
}
|
||||||
|
]]
|
||||||
|
type Ty0 = {|Text: UInt<512>, FmtError|}
|
||||||
|
type Ty1 = {addr: UInt<8>, en: UInt<1>, clk: Clock, flip data: Ty0[2]}
|
||||||
|
type Ty2 = {addr: UInt<8>, en: UInt<1>, clk: Clock, data: Ty0[2], mask: UInt<1>[2]}
|
||||||
|
type Ty3 = {addr: UInt<2>, en: UInt<1>, clk: Clock, flip data: Ty0[2]}
|
||||||
|
type Ty4 = {addr: UInt<2>, en: UInt<1>, clk: Clock, data: Ty0[2], mask: UInt<1>[2]}
|
||||||
|
module sim_trace_as_string: @[module-XXXXXXXXXX.rs 1:1]
|
||||||
|
input clk: Clock @[module-XXXXXXXXXX.rs 2:1]
|
||||||
|
input `read`: Ty1 @[module-XXXXXXXXXX.rs 3:1]
|
||||||
|
input `write`: Ty2 @[module-XXXXXXXXXX.rs 4:1]
|
||||||
|
mem `mem`: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
data-type => Ty0[2]
|
||||||
|
depth => 4
|
||||||
|
read-latency => 0
|
||||||
|
write-latency => 1
|
||||||
|
read-under-write => old
|
||||||
|
reader => r0
|
||||||
|
writer => w1
|
||||||
|
connect `mem`.r0.clk, clk @[module-XXXXXXXXXX.rs 7:1]
|
||||||
|
; connect different types:
|
||||||
|
; lhs: UInt<2>
|
||||||
|
; rhs: UInt<8>
|
||||||
|
connect `mem`.r0.addr, `read`.addr @[module-XXXXXXXXXX.rs 8:1]
|
||||||
|
connect `mem`.r0.en, `read`.en @[module-XXXXXXXXXX.rs 9:1]
|
||||||
|
connect `read`.data[0], `mem`.r0.data[0] @[module-XXXXXXXXXX.rs 10:1]
|
||||||
|
connect `read`.data[1], `mem`.r0.data[1] @[module-XXXXXXXXXX.rs 10:1]
|
||||||
|
connect `mem`.w1.clk, clk @[module-XXXXXXXXXX.rs 12:1]
|
||||||
|
; connect different types:
|
||||||
|
; lhs: UInt<2>
|
||||||
|
; rhs: UInt<8>
|
||||||
|
connect `mem`.w1.addr, `write`.addr @[module-XXXXXXXXXX.rs 13:1]
|
||||||
|
connect `mem`.w1.data, `write`.data @[module-XXXXXXXXXX.rs 14:1]
|
||||||
|
connect `mem`.w1.en, `write`.en @[module-XXXXXXXXXX.rs 15:1]
|
||||||
|
connect `mem`.w1.mask, `write`.mask @[module-XXXXXXXXXX.rs 16:1]
|
||||||
|
"#,
|
||||||
|
"/test/sim_trace_as_string/mem.mem": r"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
",
|
||||||
|
};
|
||||||
|
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
|
||||||
|
assert_export_firrtl! {
|
||||||
|
m =>
|
||||||
|
options: ExportOptions {
|
||||||
|
simplify_memories: true,
|
||||||
|
simplify_enums: None,
|
||||||
|
..ExportOptions::default()
|
||||||
|
},
|
||||||
|
"/test/sim_trace_as_string.fir": r#"FIRRTL version 3.2.0
|
||||||
|
circuit sim_trace_as_string: %[[
|
||||||
|
{
|
||||||
|
"class": "firrtl.annotations.MemoryFileInlineAnnotation",
|
||||||
|
"filename": "/test/sim_trace_as_string/mem.mem",
|
||||||
|
"hexOrBinary": "b",
|
||||||
|
"target": "~sim_trace_as_string|sim_trace_as_string>mem"
|
||||||
|
}
|
||||||
|
]]
|
||||||
|
type Ty0 = {|Text: UInt<512>, FmtError|}
|
||||||
|
type Ty1 = {addr: UInt<8>, en: UInt<1>, clk: Clock, flip data: Ty0[2]}
|
||||||
|
type Ty2 = {addr: UInt<8>, en: UInt<1>, clk: Clock, data: Ty0[2], mask: UInt<1>[2]}
|
||||||
|
type Ty3 = {addr: UInt<2>, en: UInt<1>, clk: Clock, flip data: Ty0[2]}
|
||||||
|
type Ty4 = {addr: UInt<2>, en: UInt<1>, clk: Clock, data: Ty0[2], mask: UInt<1>[2]}
|
||||||
|
type Ty5 = {addr: UInt<2>, en: UInt<1>, clk: Clock, flip data: UInt<513>[2]}
|
||||||
|
type Ty6 = {addr: UInt<2>, en: UInt<1>, clk: Clock, data: UInt<513>[2], mask: UInt<1>[2]}
|
||||||
|
module sim_trace_as_string: @[module-XXXXXXXXXX.rs 1:1]
|
||||||
|
input clk: Clock @[module-XXXXXXXXXX.rs 2:1]
|
||||||
|
input `read`: Ty1 @[module-XXXXXXXXXX.rs 3:1]
|
||||||
|
input `write`: Ty2 @[module-XXXXXXXXXX.rs 4:1]
|
||||||
|
mem `mem`: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
data-type => UInt<513>[2]
|
||||||
|
depth => 4
|
||||||
|
read-latency => 0
|
||||||
|
write-latency => 1
|
||||||
|
read-under-write => old
|
||||||
|
reader => r0
|
||||||
|
writer => w1
|
||||||
|
wire mem_r0: Ty3 @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
wire mem_w1: Ty4 @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
wire _cast_bits_to_enum_expr: Ty0
|
||||||
|
wire _cast_bits_to_enum_expr_body: UInt<512>
|
||||||
|
connect _cast_bits_to_enum_expr_body, head(`mem`.r0.data[0], 512)
|
||||||
|
when eq(UInt<1>(0), tail(`mem`.r0.data[0], 512)):
|
||||||
|
connect _cast_bits_to_enum_expr, {|Text: UInt<512>, FmtError|}(Text, _cast_bits_to_enum_expr_body)
|
||||||
|
else:
|
||||||
|
connect _cast_bits_to_enum_expr, {|Text: UInt<512>, FmtError|}(FmtError)
|
||||||
|
connect mem_r0.data[0], _cast_bits_to_enum_expr @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
wire _cast_bits_to_enum_expr_1: Ty0
|
||||||
|
wire _cast_bits_to_enum_expr_body_1: UInt<512>
|
||||||
|
connect _cast_bits_to_enum_expr_body_1, head(`mem`.r0.data[1], 512)
|
||||||
|
when eq(UInt<1>(0), tail(`mem`.r0.data[1], 512)):
|
||||||
|
connect _cast_bits_to_enum_expr_1, {|Text: UInt<512>, FmtError|}(Text, _cast_bits_to_enum_expr_body_1)
|
||||||
|
else:
|
||||||
|
connect _cast_bits_to_enum_expr_1, {|Text: UInt<512>, FmtError|}(FmtError)
|
||||||
|
connect mem_r0.data[1], _cast_bits_to_enum_expr_1 @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
wire _cast_enum_to_bits_expr: UInt<513>
|
||||||
|
match mem_w1.data[0]:
|
||||||
|
Text(_cast_enum_to_bits_expr_Text):
|
||||||
|
connect _cast_enum_to_bits_expr, pad(cat(_cast_enum_to_bits_expr_Text, UInt<1>(0)), 513)
|
||||||
|
FmtError:
|
||||||
|
connect _cast_enum_to_bits_expr, UInt<513>(1)
|
||||||
|
connect `mem`.w1.data[0], _cast_enum_to_bits_expr @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect `mem`.w1.mask[0], mem_w1.mask[0] @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
wire _cast_enum_to_bits_expr_1: UInt<513>
|
||||||
|
match mem_w1.data[1]:
|
||||||
|
Text(_cast_enum_to_bits_expr_Text_1):
|
||||||
|
connect _cast_enum_to_bits_expr_1, pad(cat(_cast_enum_to_bits_expr_Text_1, UInt<1>(0)), 513)
|
||||||
|
FmtError:
|
||||||
|
connect _cast_enum_to_bits_expr_1, UInt<513>(1)
|
||||||
|
connect `mem`.w1.data[1], _cast_enum_to_bits_expr_1 @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect `mem`.w1.mask[1], mem_w1.mask[1] @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect `mem`.r0.addr, mem_r0.addr @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect `mem`.r0.clk, mem_r0.clk @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect `mem`.r0.en, mem_r0.en @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect `mem`.w1.addr, mem_w1.addr @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect `mem`.w1.clk, mem_w1.clk @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect `mem`.w1.en, mem_w1.en @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_r0.clk, clk @[module-XXXXXXXXXX.rs 7:1]
|
||||||
|
; connect different types:
|
||||||
|
; lhs: UInt<2>
|
||||||
|
; rhs: UInt<8>
|
||||||
|
connect mem_r0.addr, `read`.addr @[module-XXXXXXXXXX.rs 8:1]
|
||||||
|
connect mem_r0.en, `read`.en @[module-XXXXXXXXXX.rs 9:1]
|
||||||
|
connect `read`.data[0], mem_r0.data[0] @[module-XXXXXXXXXX.rs 10:1]
|
||||||
|
connect `read`.data[1], mem_r0.data[1] @[module-XXXXXXXXXX.rs 10:1]
|
||||||
|
connect mem_w1.clk, clk @[module-XXXXXXXXXX.rs 12:1]
|
||||||
|
; connect different types:
|
||||||
|
; lhs: UInt<2>
|
||||||
|
; rhs: UInt<8>
|
||||||
|
connect mem_w1.addr, `write`.addr @[module-XXXXXXXXXX.rs 13:1]
|
||||||
|
connect mem_w1.data, `write`.data @[module-XXXXXXXXXX.rs 14:1]
|
||||||
|
connect mem_w1.en, `write`.en @[module-XXXXXXXXXX.rs 15:1]
|
||||||
|
connect mem_w1.mask, `write`.mask @[module-XXXXXXXXXX.rs 16:1]
|
||||||
|
"#,
|
||||||
|
"/test/sim_trace_as_string/mem.mem": r"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
",
|
||||||
|
};
|
||||||
|
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
|
||||||
|
assert_export_firrtl! {
|
||||||
|
m =>
|
||||||
|
options: ExportOptions {
|
||||||
|
simplify_memories: false,
|
||||||
|
simplify_enums: Some(SimplifyEnumsKind::SimplifyToEnumsWithNoBody),
|
||||||
|
..ExportOptions::default()
|
||||||
|
},
|
||||||
|
"/test/sim_trace_as_string.fir": r#"FIRRTL version 3.2.0
|
||||||
|
circuit sim_trace_as_string: %[[
|
||||||
|
{
|
||||||
|
"class": "firrtl.annotations.MemoryFileInlineAnnotation",
|
||||||
|
"filename": "/test/sim_trace_as_string/mem.mem",
|
||||||
|
"hexOrBinary": "b",
|
||||||
|
"target": "~sim_trace_as_string|sim_trace_as_string>mem"
|
||||||
|
}
|
||||||
|
]]
|
||||||
|
type Ty0 = {|Text, FmtError|}
|
||||||
|
type Ty1 = {tag: Ty0, body: UInt<512>}
|
||||||
|
type Ty2 = {addr: UInt<8>, en: UInt<1>, clk: Clock, flip data: Ty1[2]}
|
||||||
|
type Ty3 = {addr: UInt<8>, en: UInt<1>, clk: Clock, data: Ty1[2], mask: UInt<1>[2]}
|
||||||
|
type Ty4 = {addr: UInt<2>, en: UInt<1>, clk: Clock, data: Ty1[2], mask: UInt<1>[2]}
|
||||||
|
type Ty5 = {tag: UInt<1>, body: UInt<1>}
|
||||||
|
type Ty6 = {addr: UInt<2>, en: UInt<1>, clk: Clock, data: Ty1[2], mask: Ty5[2]}
|
||||||
|
type Ty7 = {addr: UInt<2>, en: UInt<1>, clk: Clock, flip data: Ty1[2]}
|
||||||
|
module sim_trace_as_string: @[module-XXXXXXXXXX.rs 1:1]
|
||||||
|
input clk: Clock @[module-XXXXXXXXXX.rs 2:1]
|
||||||
|
input `read`: Ty2 @[module-XXXXXXXXXX.rs 3:1]
|
||||||
|
input `write`: Ty3 @[module-XXXXXXXXXX.rs 4:1]
|
||||||
|
mem `mem`: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
data-type => Ty1[2]
|
||||||
|
depth => 4
|
||||||
|
read-latency => 0
|
||||||
|
write-latency => 1
|
||||||
|
read-under-write => old
|
||||||
|
reader => r0
|
||||||
|
writer => w1
|
||||||
|
wire mem_w1: Ty4 @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect `mem`.w1.addr, mem_w1.addr @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect `mem`.w1.en, mem_w1.en @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect `mem`.w1.clk, mem_w1.clk @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect `mem`.w1.data, mem_w1.data @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect `mem`.w1.mask[0].tag, mem_w1.mask[0] @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect `mem`.w1.mask[0].body, mem_w1.mask[0] @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect `mem`.w1.mask[1].tag, mem_w1.mask[1] @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect `mem`.w1.mask[1].body, mem_w1.mask[1] @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect `mem`.r0.clk, clk @[module-XXXXXXXXXX.rs 7:1]
|
||||||
|
; connect different types:
|
||||||
|
; lhs: UInt<2>
|
||||||
|
; rhs: UInt<8>
|
||||||
|
connect `mem`.r0.addr, `read`.addr @[module-XXXXXXXXXX.rs 8:1]
|
||||||
|
connect `mem`.r0.en, `read`.en @[module-XXXXXXXXXX.rs 9:1]
|
||||||
|
connect `read`.data[0], `mem`.r0.data[0] @[module-XXXXXXXXXX.rs 10:1]
|
||||||
|
connect `read`.data[1], `mem`.r0.data[1] @[module-XXXXXXXXXX.rs 10:1]
|
||||||
|
connect mem_w1.clk, clk @[module-XXXXXXXXXX.rs 12:1]
|
||||||
|
; connect different types:
|
||||||
|
; lhs: UInt<2>
|
||||||
|
; rhs: UInt<8>
|
||||||
|
connect mem_w1.addr, `write`.addr @[module-XXXXXXXXXX.rs 13:1]
|
||||||
|
connect mem_w1.data, `write`.data @[module-XXXXXXXXXX.rs 14:1]
|
||||||
|
connect mem_w1.en, `write`.en @[module-XXXXXXXXXX.rs 15:1]
|
||||||
|
connect mem_w1.mask, `write`.mask @[module-XXXXXXXXXX.rs 16:1]
|
||||||
|
"#,
|
||||||
|
"/test/sim_trace_as_string/mem.mem": r"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
",
|
||||||
|
};
|
||||||
|
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
|
||||||
|
assert_export_firrtl! {
|
||||||
|
m =>
|
||||||
|
options: ExportOptions {
|
||||||
|
simplify_memories: true,
|
||||||
|
simplify_enums: Some(SimplifyEnumsKind::SimplifyToEnumsWithNoBody),
|
||||||
|
..ExportOptions::default()
|
||||||
|
},
|
||||||
|
"/test/sim_trace_as_string.fir": r#"FIRRTL version 3.2.0
|
||||||
|
circuit sim_trace_as_string: %[[
|
||||||
|
{
|
||||||
|
"class": "firrtl.annotations.MemoryFileInlineAnnotation",
|
||||||
|
"filename": "/test/sim_trace_as_string/mem_0_tag.mem",
|
||||||
|
"hexOrBinary": "b",
|
||||||
|
"target": "~sim_trace_as_string|sim_trace_as_string>mem_0_tag"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"class": "firrtl.annotations.MemoryFileInlineAnnotation",
|
||||||
|
"filename": "/test/sim_trace_as_string/mem_0_body.mem",
|
||||||
|
"hexOrBinary": "h",
|
||||||
|
"target": "~sim_trace_as_string|sim_trace_as_string>mem_0_body"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"class": "firrtl.annotations.MemoryFileInlineAnnotation",
|
||||||
|
"filename": "/test/sim_trace_as_string/mem_1_tag.mem",
|
||||||
|
"hexOrBinary": "b",
|
||||||
|
"target": "~sim_trace_as_string|sim_trace_as_string>mem_1_tag"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"class": "firrtl.annotations.MemoryFileInlineAnnotation",
|
||||||
|
"filename": "/test/sim_trace_as_string/mem_1_body.mem",
|
||||||
|
"hexOrBinary": "h",
|
||||||
|
"target": "~sim_trace_as_string|sim_trace_as_string>mem_1_body"
|
||||||
|
}
|
||||||
|
]]
|
||||||
|
type Ty0 = {|Text, FmtError|}
|
||||||
|
type Ty1 = {tag: Ty0, body: UInt<512>}
|
||||||
|
type Ty2 = {addr: UInt<8>, en: UInt<1>, clk: Clock, flip data: Ty1[2]}
|
||||||
|
type Ty3 = {addr: UInt<8>, en: UInt<1>, clk: Clock, data: Ty1[2], mask: UInt<1>[2]}
|
||||||
|
type Ty4 = {addr: UInt<2>, en: UInt<1>, clk: Clock, flip data: Ty1[2]}
|
||||||
|
type Ty5 = {tag: UInt<1>, body: UInt<1>}
|
||||||
|
type Ty6 = {addr: UInt<2>, en: UInt<1>, clk: Clock, data: Ty1[2], mask: Ty5[2]}
|
||||||
|
type Ty7 = {addr: UInt<2>, en: UInt<1>, clk: Clock, flip data: UInt<1>}
|
||||||
|
type Ty8 = {addr: UInt<2>, en: UInt<1>, clk: Clock, data: UInt<1>, mask: UInt<1>}
|
||||||
|
type Ty9 = {addr: UInt<2>, en: UInt<1>, clk: Clock, flip data: UInt<512>}
|
||||||
|
type Ty10 = {addr: UInt<2>, en: UInt<1>, clk: Clock, data: UInt<512>, mask: UInt<1>}
|
||||||
|
type Ty11 = {addr: UInt<2>, en: UInt<1>, clk: Clock, data: Ty1[2], mask: UInt<1>[2]}
|
||||||
|
module sim_trace_as_string: @[module-XXXXXXXXXX.rs 1:1]
|
||||||
|
input clk: Clock @[module-XXXXXXXXXX.rs 2:1]
|
||||||
|
input `read`: Ty2 @[module-XXXXXXXXXX.rs 3:1]
|
||||||
|
input `write`: Ty3 @[module-XXXXXXXXXX.rs 4:1]
|
||||||
|
mem mem_0_tag: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
data-type => UInt<1>
|
||||||
|
depth => 4
|
||||||
|
read-latency => 0
|
||||||
|
write-latency => 1
|
||||||
|
read-under-write => old
|
||||||
|
reader => r0
|
||||||
|
writer => w1
|
||||||
|
mem mem_0_body: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
data-type => UInt<512>
|
||||||
|
depth => 4
|
||||||
|
read-latency => 0
|
||||||
|
write-latency => 1
|
||||||
|
read-under-write => old
|
||||||
|
reader => r0
|
||||||
|
writer => w1
|
||||||
|
mem mem_1_tag: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
data-type => UInt<1>
|
||||||
|
depth => 4
|
||||||
|
read-latency => 0
|
||||||
|
write-latency => 1
|
||||||
|
read-under-write => old
|
||||||
|
reader => r0
|
||||||
|
writer => w1
|
||||||
|
mem mem_1_body: @[module-XXXXXXXXXX.rs 5:1]
|
||||||
|
data-type => UInt<512>
|
||||||
|
depth => 4
|
||||||
|
read-latency => 0
|
||||||
|
write-latency => 1
|
||||||
|
read-under-write => old
|
||||||
|
reader => r0
|
||||||
|
writer => w1
|
||||||
|
wire mem_r0: Ty4 @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
wire mem_w1: Ty6 @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
wire _cast_bits_to_enum_expr: Ty0
|
||||||
|
when eq(UInt<1>(0), tail(mem_0_tag.r0.data, 0)):
|
||||||
|
connect _cast_bits_to_enum_expr, {|Text, FmtError|}(Text)
|
||||||
|
else:
|
||||||
|
connect _cast_bits_to_enum_expr, {|Text, FmtError|}(FmtError)
|
||||||
|
connect mem_r0.data[0].tag, _cast_bits_to_enum_expr @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
wire _cast_enum_to_bits_expr: UInt<1>
|
||||||
|
match mem_w1.data[0].tag:
|
||||||
|
Text:
|
||||||
|
connect _cast_enum_to_bits_expr, UInt<1>(0)
|
||||||
|
FmtError:
|
||||||
|
connect _cast_enum_to_bits_expr, UInt<1>(1)
|
||||||
|
connect mem_0_tag.w1.data, _cast_enum_to_bits_expr @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_0_tag.w1.mask, mem_w1.mask[0].tag @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_0_tag.r0.addr, mem_r0.addr @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect mem_0_tag.r0.clk, mem_r0.clk @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect mem_0_tag.r0.en, mem_r0.en @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect mem_0_tag.w1.addr, mem_w1.addr @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_0_tag.w1.clk, mem_w1.clk @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_0_tag.w1.en, mem_w1.en @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_r0.data[0].body, mem_0_body.r0.data @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect mem_0_body.w1.data, mem_w1.data[0].body @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_0_body.w1.mask, mem_w1.mask[0].body @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_0_body.r0.addr, mem_r0.addr @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect mem_0_body.r0.clk, mem_r0.clk @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect mem_0_body.r0.en, mem_r0.en @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect mem_0_body.w1.addr, mem_w1.addr @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_0_body.w1.clk, mem_w1.clk @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_0_body.w1.en, mem_w1.en @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
wire _cast_bits_to_enum_expr_1: Ty0
|
||||||
|
when eq(UInt<1>(0), tail(mem_1_tag.r0.data, 0)):
|
||||||
|
connect _cast_bits_to_enum_expr_1, {|Text, FmtError|}(Text)
|
||||||
|
else:
|
||||||
|
connect _cast_bits_to_enum_expr_1, {|Text, FmtError|}(FmtError)
|
||||||
|
connect mem_r0.data[1].tag, _cast_bits_to_enum_expr_1 @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
wire _cast_enum_to_bits_expr_1: UInt<1>
|
||||||
|
match mem_w1.data[1].tag:
|
||||||
|
Text:
|
||||||
|
connect _cast_enum_to_bits_expr_1, UInt<1>(0)
|
||||||
|
FmtError:
|
||||||
|
connect _cast_enum_to_bits_expr_1, UInt<1>(1)
|
||||||
|
connect mem_1_tag.w1.data, _cast_enum_to_bits_expr_1 @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_1_tag.w1.mask, mem_w1.mask[1].tag @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_1_tag.r0.addr, mem_r0.addr @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect mem_1_tag.r0.clk, mem_r0.clk @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect mem_1_tag.r0.en, mem_r0.en @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect mem_1_tag.w1.addr, mem_w1.addr @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_1_tag.w1.clk, mem_w1.clk @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_1_tag.w1.en, mem_w1.en @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_r0.data[1].body, mem_1_body.r0.data @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect mem_1_body.w1.data, mem_w1.data[1].body @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_1_body.w1.mask, mem_w1.mask[1].body @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_1_body.r0.addr, mem_r0.addr @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect mem_1_body.r0.clk, mem_r0.clk @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect mem_1_body.r0.en, mem_r0.en @[module-XXXXXXXXXX.rs 6:1]
|
||||||
|
connect mem_1_body.w1.addr, mem_w1.addr @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_1_body.w1.clk, mem_w1.clk @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_1_body.w1.en, mem_w1.en @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
wire mem_w1_1: Ty11 @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_w1.addr, mem_w1_1.addr @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_w1.en, mem_w1_1.en @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_w1.clk, mem_w1_1.clk @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_w1.data, mem_w1_1.data @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_w1.mask[0].tag, mem_w1_1.mask[0] @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_w1.mask[0].body, mem_w1_1.mask[0] @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_w1.mask[1].tag, mem_w1_1.mask[1] @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_w1.mask[1].body, mem_w1_1.mask[1] @[module-XXXXXXXXXX.rs 11:1]
|
||||||
|
connect mem_r0.clk, clk @[module-XXXXXXXXXX.rs 7:1]
|
||||||
|
; connect different types:
|
||||||
|
; lhs: UInt<2>
|
||||||
|
; rhs: UInt<8>
|
||||||
|
connect mem_r0.addr, `read`.addr @[module-XXXXXXXXXX.rs 8:1]
|
||||||
|
connect mem_r0.en, `read`.en @[module-XXXXXXXXXX.rs 9:1]
|
||||||
|
connect `read`.data[0], mem_r0.data[0] @[module-XXXXXXXXXX.rs 10:1]
|
||||||
|
connect `read`.data[1], mem_r0.data[1] @[module-XXXXXXXXXX.rs 10:1]
|
||||||
|
connect mem_w1_1.clk, clk @[module-XXXXXXXXXX.rs 12:1]
|
||||||
|
; connect different types:
|
||||||
|
; lhs: UInt<2>
|
||||||
|
; rhs: UInt<8>
|
||||||
|
connect mem_w1_1.addr, `write`.addr @[module-XXXXXXXXXX.rs 13:1]
|
||||||
|
connect mem_w1_1.data, `write`.data @[module-XXXXXXXXXX.rs 14:1]
|
||||||
|
connect mem_w1_1.en, `write`.en @[module-XXXXXXXXXX.rs 15:1]
|
||||||
|
connect mem_w1_1.mask, `write`.mask @[module-XXXXXXXXXX.rs 16:1]
|
||||||
|
"#,
|
||||||
|
"/test/sim_trace_as_string/mem_0_body.mem": r"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
",
|
||||||
|
"/test/sim_trace_as_string/mem_0_tag.mem": r"0
|
||||||
|
0
|
||||||
|
0
|
||||||
|
0
|
||||||
|
",
|
||||||
|
"/test/sim_trace_as_string/mem_1_body.mem": r"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
",
|
||||||
|
"/test/sim_trace_as_string/mem_1_tag.mem": r"0
|
||||||
|
0
|
||||||
|
0
|
||||||
|
0
|
||||||
|
",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1218,6 +1218,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xff,
|
state: 0xff,
|
||||||
last_state: 0xff,
|
last_state: 0xff,
|
||||||
},
|
},
|
||||||
|
|
@ -1227,6 +1228,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x7f,
|
state: 0x7f,
|
||||||
last_state: 0x7f,
|
last_state: 0x7f,
|
||||||
},
|
},
|
||||||
|
|
@ -1236,6 +1238,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x3f,
|
state: 0x3f,
|
||||||
last_state: 0x3f,
|
last_state: 0x3f,
|
||||||
},
|
},
|
||||||
|
|
@ -1245,6 +1248,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1f,
|
state: 0x1f,
|
||||||
last_state: 0x1f,
|
last_state: 0x1f,
|
||||||
},
|
},
|
||||||
|
|
@ -1254,6 +1258,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(4),
|
index: StatePartIndex<BigSlots>(4),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0f,
|
state: 0x0f,
|
||||||
last_state: 0x0f,
|
last_state: 0x0f,
|
||||||
},
|
},
|
||||||
|
|
@ -1263,6 +1268,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x07,
|
state: 0x07,
|
||||||
last_state: 0x07,
|
last_state: 0x07,
|
||||||
},
|
},
|
||||||
|
|
@ -1272,6 +1278,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(6),
|
index: StatePartIndex<BigSlots>(6),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x03,
|
state: 0x03,
|
||||||
last_state: 0x03,
|
last_state: 0x03,
|
||||||
},
|
},
|
||||||
|
|
@ -1281,6 +1288,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x01,
|
state: 0x01,
|
||||||
last_state: 0x01,
|
last_state: 0x01,
|
||||||
},
|
},
|
||||||
|
|
@ -1290,6 +1298,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(8),
|
index: StatePartIndex<BigSlots>(8),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -1299,6 +1308,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x80,
|
state: 0x80,
|
||||||
last_state: 0x80,
|
last_state: 0x80,
|
||||||
},
|
},
|
||||||
|
|
@ -1308,6 +1318,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xc0,
|
state: 0xc0,
|
||||||
last_state: 0xc0,
|
last_state: 0xc0,
|
||||||
},
|
},
|
||||||
|
|
@ -1317,6 +1328,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xe0,
|
state: 0xe0,
|
||||||
last_state: 0xe0,
|
last_state: 0xe0,
|
||||||
},
|
},
|
||||||
|
|
@ -1326,6 +1338,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xf0,
|
state: 0xf0,
|
||||||
last_state: 0xf0,
|
last_state: 0xf0,
|
||||||
},
|
},
|
||||||
|
|
@ -1335,6 +1348,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xf8,
|
state: 0xf8,
|
||||||
last_state: 0xf8,
|
last_state: 0xf8,
|
||||||
},
|
},
|
||||||
|
|
@ -1344,6 +1358,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xfc,
|
state: 0xfc,
|
||||||
last_state: 0xfc,
|
last_state: 0xfc,
|
||||||
},
|
},
|
||||||
|
|
@ -1353,6 +1368,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xfe,
|
state: 0xfe,
|
||||||
last_state: 0xfe,
|
last_state: 0xfe,
|
||||||
},
|
},
|
||||||
|
|
@ -1362,6 +1378,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xff,
|
state: 0xff,
|
||||||
last_state: 0xff,
|
last_state: 0xff,
|
||||||
},
|
},
|
||||||
|
|
@ -1371,6 +1388,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x7f,
|
state: 0x7f,
|
||||||
last_state: 0x7f,
|
last_state: 0x7f,
|
||||||
},
|
},
|
||||||
|
|
@ -1380,6 +1398,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x3f,
|
state: 0x3f,
|
||||||
last_state: 0x3f,
|
last_state: 0x3f,
|
||||||
},
|
},
|
||||||
|
|
@ -1389,6 +1408,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1f,
|
state: 0x1f,
|
||||||
last_state: 0x1f,
|
last_state: 0x1f,
|
||||||
},
|
},
|
||||||
|
|
@ -1398,6 +1418,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(20),
|
index: StatePartIndex<BigSlots>(20),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0f,
|
state: 0x0f,
|
||||||
last_state: 0x0f,
|
last_state: 0x0f,
|
||||||
},
|
},
|
||||||
|
|
@ -1407,6 +1428,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(21),
|
index: StatePartIndex<BigSlots>(21),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x07,
|
state: 0x07,
|
||||||
last_state: 0x07,
|
last_state: 0x07,
|
||||||
},
|
},
|
||||||
|
|
@ -1416,6 +1438,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x03,
|
state: 0x03,
|
||||||
last_state: 0x03,
|
last_state: 0x03,
|
||||||
},
|
},
|
||||||
|
|
@ -1425,6 +1448,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(23),
|
index: StatePartIndex<BigSlots>(23),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x01,
|
state: 0x01,
|
||||||
last_state: 0x01,
|
last_state: 0x01,
|
||||||
},
|
},
|
||||||
|
|
@ -1434,6 +1458,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(24),
|
index: StatePartIndex<BigSlots>(24),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -1443,6 +1468,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x80,
|
state: 0x80,
|
||||||
last_state: 0x80,
|
last_state: 0x80,
|
||||||
},
|
},
|
||||||
|
|
@ -1452,6 +1478,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(26),
|
index: StatePartIndex<BigSlots>(26),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xc0,
|
state: 0xc0,
|
||||||
last_state: 0xc0,
|
last_state: 0xc0,
|
||||||
},
|
},
|
||||||
|
|
@ -1461,6 +1488,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xe0,
|
state: 0xe0,
|
||||||
last_state: 0xe0,
|
last_state: 0xe0,
|
||||||
},
|
},
|
||||||
|
|
@ -1470,6 +1498,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(28),
|
index: StatePartIndex<BigSlots>(28),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xf0,
|
state: 0xf0,
|
||||||
last_state: 0xf0,
|
last_state: 0xf0,
|
||||||
},
|
},
|
||||||
|
|
@ -1479,6 +1508,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(29),
|
index: StatePartIndex<BigSlots>(29),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xf8,
|
state: 0xf8,
|
||||||
last_state: 0xf8,
|
last_state: 0xf8,
|
||||||
},
|
},
|
||||||
|
|
@ -1488,6 +1518,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xfc,
|
state: 0xfc,
|
||||||
last_state: 0xfc,
|
last_state: 0xfc,
|
||||||
},
|
},
|
||||||
|
|
@ -1497,6 +1528,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xfe,
|
state: 0xfe,
|
||||||
last_state: 0xe1,
|
last_state: 0xe1,
|
||||||
},
|
},
|
||||||
|
|
@ -1506,6 +1538,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -1515,6 +1548,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xff,
|
state: 0xff,
|
||||||
last_state: 0xff,
|
last_state: 0xff,
|
||||||
},
|
},
|
||||||
|
|
@ -1524,6 +1558,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x10,
|
state: 0x10,
|
||||||
last_state: 0x0f,
|
last_state: 0x0f,
|
||||||
},
|
},
|
||||||
|
|
@ -1533,6 +1568,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(35),
|
index: StatePartIndex<BigSlots>(35),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0xe1,
|
last_state: 0xe1,
|
||||||
},
|
},
|
||||||
|
|
@ -1541,6 +1577,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1550,6 +1587,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(37),
|
index: StatePartIndex<BigSlots>(37),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xff,
|
state: 0xff,
|
||||||
last_state: 0xff,
|
last_state: 0xff,
|
||||||
},
|
},
|
||||||
|
|
@ -1559,6 +1597,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(38),
|
index: StatePartIndex<BigSlots>(38),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x7f,
|
state: 0x7f,
|
||||||
last_state: 0x7f,
|
last_state: 0x7f,
|
||||||
},
|
},
|
||||||
|
|
@ -1568,6 +1607,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x3f,
|
state: 0x3f,
|
||||||
last_state: 0x3f,
|
last_state: 0x3f,
|
||||||
},
|
},
|
||||||
|
|
@ -1577,6 +1617,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(40),
|
index: StatePartIndex<BigSlots>(40),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1f,
|
state: 0x1f,
|
||||||
last_state: 0x1f,
|
last_state: 0x1f,
|
||||||
},
|
},
|
||||||
|
|
@ -1586,6 +1627,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(41),
|
index: StatePartIndex<BigSlots>(41),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0f,
|
state: 0x0f,
|
||||||
last_state: 0x0f,
|
last_state: 0x0f,
|
||||||
},
|
},
|
||||||
|
|
@ -1595,6 +1637,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x07,
|
state: 0x07,
|
||||||
last_state: 0x07,
|
last_state: 0x07,
|
||||||
},
|
},
|
||||||
|
|
@ -1604,6 +1647,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(43),
|
index: StatePartIndex<BigSlots>(43),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x03,
|
state: 0x03,
|
||||||
last_state: 0x03,
|
last_state: 0x03,
|
||||||
},
|
},
|
||||||
|
|
@ -1613,6 +1657,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(44),
|
index: StatePartIndex<BigSlots>(44),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x01,
|
state: 0x01,
|
||||||
last_state: 0x01,
|
last_state: 0x01,
|
||||||
},
|
},
|
||||||
|
|
@ -1622,6 +1667,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(45),
|
index: StatePartIndex<BigSlots>(45),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -1631,6 +1677,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(46),
|
index: StatePartIndex<BigSlots>(46),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x80,
|
state: 0x80,
|
||||||
last_state: 0x80,
|
last_state: 0x80,
|
||||||
},
|
},
|
||||||
|
|
@ -1640,6 +1687,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(47),
|
index: StatePartIndex<BigSlots>(47),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xc0,
|
state: 0xc0,
|
||||||
last_state: 0xc0,
|
last_state: 0xc0,
|
||||||
},
|
},
|
||||||
|
|
@ -1649,6 +1697,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(48),
|
index: StatePartIndex<BigSlots>(48),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xe0,
|
state: 0xe0,
|
||||||
last_state: 0xe0,
|
last_state: 0xe0,
|
||||||
},
|
},
|
||||||
|
|
@ -1658,6 +1707,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(49),
|
index: StatePartIndex<BigSlots>(49),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xf0,
|
state: 0xf0,
|
||||||
last_state: 0xf0,
|
last_state: 0xf0,
|
||||||
},
|
},
|
||||||
|
|
@ -1667,6 +1717,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(50),
|
index: StatePartIndex<BigSlots>(50),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xf8,
|
state: 0xf8,
|
||||||
last_state: 0xf8,
|
last_state: 0xf8,
|
||||||
},
|
},
|
||||||
|
|
@ -1676,6 +1727,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(51),
|
index: StatePartIndex<BigSlots>(51),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xfc,
|
state: 0xfc,
|
||||||
last_state: 0xfc,
|
last_state: 0xfc,
|
||||||
},
|
},
|
||||||
|
|
@ -1685,6 +1737,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(52),
|
index: StatePartIndex<BigSlots>(52),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xfe,
|
state: 0xfe,
|
||||||
last_state: 0xe1,
|
last_state: 0xe1,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -155,6 +155,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -163,6 +164,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -124,6 +124,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x05,
|
state: 0x05,
|
||||||
last_state: 0x05,
|
last_state: 0x05,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -175,6 +175,7 @@ Simulation {
|
||||||
kind: BigAsyncReset {
|
kind: BigAsyncReset {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -183,6 +184,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -332,6 +332,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -340,6 +341,7 @@ Simulation {
|
||||||
kind: BigAsyncReset {
|
kind: BigAsyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -349,6 +351,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x3,
|
state: 0x3,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -358,6 +361,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x3,
|
state: 0x3,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -313,6 +313,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -321,6 +322,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -330,6 +332,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x3,
|
state: 0x3,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -339,6 +342,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x3,
|
state: 0x3,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -137,6 +137,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x05,
|
state: 0x05,
|
||||||
last_state: 0x05,
|
last_state: 0x05,
|
||||||
},
|
},
|
||||||
|
|
@ -146,6 +147,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x06,
|
state: 0x06,
|
||||||
last_state: 0x06,
|
last_state: 0x06,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
749
crates/fayalite/tests/sim/expected/enum_with_simple_body.txt
Normal file
749
crates/fayalite/tests/sim/expected/enum_with_simple_body.txt
Normal file
|
|
@ -0,0 +1,749 @@
|
||||||
|
Simulation {
|
||||||
|
state: State {
|
||||||
|
insns: Insns {
|
||||||
|
state_layout: StateLayout {
|
||||||
|
ty: TypeLayout {
|
||||||
|
small_slots: StatePartLayout<SmallSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Enum {
|
||||||
|
A,
|
||||||
|
B,
|
||||||
|
C,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartLayout<BigSlots> {
|
||||||
|
len: 33,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::which_in",
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::data_in",
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::which_out",
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::data_out",
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::enum_out",
|
||||||
|
ty: Enum {
|
||||||
|
A(UInt<8>),
|
||||||
|
B(UInt<8>),
|
||||||
|
C(UInt<8>),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<10>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: ".0",
|
||||||
|
ty: UInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: ".1",
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<10>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<10>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<10>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Enum {
|
||||||
|
A(UInt<8>),
|
||||||
|
B(UInt<8>),
|
||||||
|
C(UInt<8>),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: ".0",
|
||||||
|
ty: UInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: ".1",
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<10>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<10>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<10>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Enum {
|
||||||
|
A(UInt<8>),
|
||||||
|
B(UInt<8>),
|
||||||
|
C(UInt<8>),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: ".0",
|
||||||
|
ty: UInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: ".1",
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<10>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<10>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<10>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Enum {
|
||||||
|
A(UInt<8>),
|
||||||
|
B(UInt<8>),
|
||||||
|
C(UInt<8>),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
sim_only_slots: StatePartLayout<SimOnlySlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
layout_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
memories: StatePartLayout<Memories> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
layout_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
insns: [
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
0: Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(32), // (0x2) SlotDebugData { name: "", ty: UInt<8> },
|
||||||
|
value: 0x2,
|
||||||
|
},
|
||||||
|
1: Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(27), // (0x2) SlotDebugData { name: "", ty: UInt<2> },
|
||||||
|
value: 0x2,
|
||||||
|
},
|
||||||
|
2: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(25), // (0x2) SlotDebugData { name: ".0", ty: UInt<2> },
|
||||||
|
src: StatePartIndex<BigSlots>(27), // (0x2) SlotDebugData { name: "", ty: UInt<2> },
|
||||||
|
},
|
||||||
|
3: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(26), // (0xe1) SlotDebugData { name: ".1", ty: UInt<8> },
|
||||||
|
src: StatePartIndex<BigSlots>(1), // (0xe1) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::data_in", ty: UInt<8> },
|
||||||
|
},
|
||||||
|
4: Shl {
|
||||||
|
dest: StatePartIndex<BigSlots>(28), // (0x384) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
lhs: StatePartIndex<BigSlots>(26), // (0xe1) SlotDebugData { name: ".1", ty: UInt<8> },
|
||||||
|
rhs: 2,
|
||||||
|
},
|
||||||
|
5: Or {
|
||||||
|
dest: StatePartIndex<BigSlots>(29), // (0x386) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
lhs: StatePartIndex<BigSlots>(25), // (0x2) SlotDebugData { name: ".0", ty: UInt<2> },
|
||||||
|
rhs: StatePartIndex<BigSlots>(28), // (0x384) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
},
|
||||||
|
6: CastToUInt {
|
||||||
|
dest: StatePartIndex<BigSlots>(30), // (0x386) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
src: StatePartIndex<BigSlots>(29), // (0x386) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
dest_width: 10,
|
||||||
|
},
|
||||||
|
7: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(31), // (0x386) SlotDebugData { name: "", ty: Enum {A(UInt<8>), B(UInt<8>), C(UInt<8>)} },
|
||||||
|
src: StatePartIndex<BigSlots>(30), // (0x386) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
},
|
||||||
|
8: Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(20), // (0x1) SlotDebugData { name: "", ty: UInt<2> },
|
||||||
|
value: 0x1,
|
||||||
|
},
|
||||||
|
9: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(18), // (0x1) SlotDebugData { name: ".0", ty: UInt<2> },
|
||||||
|
src: StatePartIndex<BigSlots>(20), // (0x1) SlotDebugData { name: "", ty: UInt<2> },
|
||||||
|
},
|
||||||
|
10: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(19), // (0xe1) SlotDebugData { name: ".1", ty: UInt<8> },
|
||||||
|
src: StatePartIndex<BigSlots>(1), // (0xe1) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::data_in", ty: UInt<8> },
|
||||||
|
},
|
||||||
|
11: Shl {
|
||||||
|
dest: StatePartIndex<BigSlots>(21), // (0x384) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
lhs: StatePartIndex<BigSlots>(19), // (0xe1) SlotDebugData { name: ".1", ty: UInt<8> },
|
||||||
|
rhs: 2,
|
||||||
|
},
|
||||||
|
12: Or {
|
||||||
|
dest: StatePartIndex<BigSlots>(22), // (0x385) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
lhs: StatePartIndex<BigSlots>(18), // (0x1) SlotDebugData { name: ".0", ty: UInt<2> },
|
||||||
|
rhs: StatePartIndex<BigSlots>(21), // (0x384) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
},
|
||||||
|
13: CastToUInt {
|
||||||
|
dest: StatePartIndex<BigSlots>(23), // (0x385) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
src: StatePartIndex<BigSlots>(22), // (0x385) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
dest_width: 10,
|
||||||
|
},
|
||||||
|
14: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(24), // (0x385) SlotDebugData { name: "", ty: Enum {A(UInt<8>), B(UInt<8>), C(UInt<8>)} },
|
||||||
|
src: StatePartIndex<BigSlots>(23), // (0x385) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
},
|
||||||
|
15: Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(16), // (0x1) SlotDebugData { name: "", ty: UInt<8> },
|
||||||
|
value: 0x1,
|
||||||
|
},
|
||||||
|
16: CmpEq {
|
||||||
|
dest: StatePartIndex<BigSlots>(17), // (0x0) SlotDebugData { name: "", ty: Bool },
|
||||||
|
lhs: StatePartIndex<BigSlots>(0), // (0x2) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::which_in", ty: UInt<8> },
|
||||||
|
rhs: StatePartIndex<BigSlots>(16), // (0x1) SlotDebugData { name: "", ty: UInt<8> },
|
||||||
|
},
|
||||||
|
17: Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(11), // (0x0) SlotDebugData { name: "", ty: UInt<2> },
|
||||||
|
value: 0x0,
|
||||||
|
},
|
||||||
|
18: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(9), // (0x0) SlotDebugData { name: ".0", ty: UInt<2> },
|
||||||
|
src: StatePartIndex<BigSlots>(11), // (0x0) SlotDebugData { name: "", ty: UInt<2> },
|
||||||
|
},
|
||||||
|
19: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(10), // (0xe1) SlotDebugData { name: ".1", ty: UInt<8> },
|
||||||
|
src: StatePartIndex<BigSlots>(1), // (0xe1) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::data_in", ty: UInt<8> },
|
||||||
|
},
|
||||||
|
20: Shl {
|
||||||
|
dest: StatePartIndex<BigSlots>(12), // (0x384) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
lhs: StatePartIndex<BigSlots>(10), // (0xe1) SlotDebugData { name: ".1", ty: UInt<8> },
|
||||||
|
rhs: 2,
|
||||||
|
},
|
||||||
|
21: Or {
|
||||||
|
dest: StatePartIndex<BigSlots>(13), // (0x384) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
lhs: StatePartIndex<BigSlots>(9), // (0x0) SlotDebugData { name: ".0", ty: UInt<2> },
|
||||||
|
rhs: StatePartIndex<BigSlots>(12), // (0x384) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
},
|
||||||
|
22: CastToUInt {
|
||||||
|
dest: StatePartIndex<BigSlots>(14), // (0x384) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
src: StatePartIndex<BigSlots>(13), // (0x384) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
dest_width: 10,
|
||||||
|
},
|
||||||
|
23: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(15), // (0x384) SlotDebugData { name: "", ty: Enum {A(UInt<8>), B(UInt<8>), C(UInt<8>)} },
|
||||||
|
src: StatePartIndex<BigSlots>(14), // (0x384) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
},
|
||||||
|
24: Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(7), // (0x0) SlotDebugData { name: "", ty: UInt<8> },
|
||||||
|
value: 0x0,
|
||||||
|
},
|
||||||
|
25: CmpEq {
|
||||||
|
dest: StatePartIndex<BigSlots>(8), // (0x0) SlotDebugData { name: "", ty: Bool },
|
||||||
|
lhs: StatePartIndex<BigSlots>(0), // (0x2) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::which_in", ty: UInt<8> },
|
||||||
|
rhs: StatePartIndex<BigSlots>(7), // (0x0) SlotDebugData { name: "", ty: UInt<8> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:7:1
|
||||||
|
26: BranchIfZero {
|
||||||
|
target: 28,
|
||||||
|
value: StatePartIndex<BigSlots>(8), // (0x0) SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:8:1
|
||||||
|
27: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(4), // (0x386) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::enum_out", ty: Enum {A(UInt<8>), B(UInt<8>), C(UInt<8>)} },
|
||||||
|
src: StatePartIndex<BigSlots>(15), // (0x384) SlotDebugData { name: "", ty: Enum {A(UInt<8>), B(UInt<8>), C(UInt<8>)} },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:7:1
|
||||||
|
28: BranchIfNonZero {
|
||||||
|
target: 33,
|
||||||
|
value: StatePartIndex<BigSlots>(8), // (0x0) SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:9:1
|
||||||
|
29: BranchIfZero {
|
||||||
|
target: 31,
|
||||||
|
value: StatePartIndex<BigSlots>(17), // (0x0) SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:10:1
|
||||||
|
30: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(4), // (0x386) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::enum_out", ty: Enum {A(UInt<8>), B(UInt<8>), C(UInt<8>)} },
|
||||||
|
src: StatePartIndex<BigSlots>(24), // (0x385) SlotDebugData { name: "", ty: Enum {A(UInt<8>), B(UInt<8>), C(UInt<8>)} },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:9:1
|
||||||
|
31: BranchIfNonZero {
|
||||||
|
target: 33,
|
||||||
|
value: StatePartIndex<BigSlots>(17), // (0x0) SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:11:1
|
||||||
|
32: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(4), // (0x386) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::enum_out", ty: Enum {A(UInt<8>), B(UInt<8>), C(UInt<8>)} },
|
||||||
|
src: StatePartIndex<BigSlots>(31), // (0x386) SlotDebugData { name: "", ty: Enum {A(UInt<8>), B(UInt<8>), C(UInt<8>)} },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
33: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(5), // (0x386) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
src: StatePartIndex<BigSlots>(4), // (0x386) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::enum_out", ty: Enum {A(UInt<8>), B(UInt<8>), C(UInt<8>)} },
|
||||||
|
},
|
||||||
|
34: SliceInt {
|
||||||
|
dest: StatePartIndex<BigSlots>(6), // (0xe1) SlotDebugData { name: "", ty: UInt<8> },
|
||||||
|
src: StatePartIndex<BigSlots>(5), // (0x386) SlotDebugData { name: "", ty: UInt<10> },
|
||||||
|
start: 2,
|
||||||
|
len: 8,
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:6:1
|
||||||
|
35: AndBigWithSmallImmediate {
|
||||||
|
dest: StatePartIndex<SmallSlots>(0), // (0x2 2) SlotDebugData { name: "", ty: Enum {A, B, C} },
|
||||||
|
lhs: StatePartIndex<BigSlots>(4), // (0x386) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::enum_out", ty: Enum {A(UInt<8>), B(UInt<8>), C(UInt<8>)} },
|
||||||
|
rhs: 0x3,
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:12:1
|
||||||
|
36: BranchIfSmallNeImmediate {
|
||||||
|
target: 39,
|
||||||
|
lhs: StatePartIndex<SmallSlots>(0), // (0x2 2) SlotDebugData { name: "", ty: Enum {A, B, C} },
|
||||||
|
rhs: 0x0,
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:13:1
|
||||||
|
37: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(2), // (0x2) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::which_out", ty: UInt<8> },
|
||||||
|
src: StatePartIndex<BigSlots>(7), // (0x0) SlotDebugData { name: "", ty: UInt<8> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:14:1
|
||||||
|
38: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(3), // (0xe1) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::data_out", ty: UInt<8> },
|
||||||
|
src: StatePartIndex<BigSlots>(6), // (0xe1) SlotDebugData { name: "", ty: UInt<8> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:12:1
|
||||||
|
39: BranchIfSmallNeImmediate {
|
||||||
|
target: 42,
|
||||||
|
lhs: StatePartIndex<SmallSlots>(0), // (0x2 2) SlotDebugData { name: "", ty: Enum {A, B, C} },
|
||||||
|
rhs: 0x1,
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:15:1
|
||||||
|
40: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(2), // (0x2) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::which_out", ty: UInt<8> },
|
||||||
|
src: StatePartIndex<BigSlots>(16), // (0x1) SlotDebugData { name: "", ty: UInt<8> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:16:1
|
||||||
|
41: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(3), // (0xe1) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::data_out", ty: UInt<8> },
|
||||||
|
src: StatePartIndex<BigSlots>(6), // (0xe1) SlotDebugData { name: "", ty: UInt<8> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:12:1
|
||||||
|
42: BranchIfSmallNeImmediate {
|
||||||
|
target: 45,
|
||||||
|
lhs: StatePartIndex<SmallSlots>(0), // (0x2 2) SlotDebugData { name: "", ty: Enum {A, B, C} },
|
||||||
|
rhs: 0x2,
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:17:1
|
||||||
|
43: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(2), // (0x2) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::which_out", ty: UInt<8> },
|
||||||
|
src: StatePartIndex<BigSlots>(32), // (0x2) SlotDebugData { name: "", ty: UInt<8> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:18:1
|
||||||
|
44: Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(3), // (0xe1) SlotDebugData { name: "InstantiatedModule(enum_with_simple_body: enum_with_simple_body).enum_with_simple_body::data_out", ty: UInt<8> },
|
||||||
|
src: StatePartIndex<BigSlots>(6), // (0xe1) SlotDebugData { name: "", ty: UInt<8> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
45: Return,
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
pc: 45,
|
||||||
|
memory_write_log: [],
|
||||||
|
memories: StatePart {
|
||||||
|
value: [],
|
||||||
|
},
|
||||||
|
small_slots: StatePart {
|
||||||
|
value: [
|
||||||
|
2,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
big_slots: StatePart {
|
||||||
|
value: [
|
||||||
|
2,
|
||||||
|
225,
|
||||||
|
2 (modified),
|
||||||
|
225 (modified),
|
||||||
|
902,
|
||||||
|
902,
|
||||||
|
225,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
225,
|
||||||
|
0,
|
||||||
|
900,
|
||||||
|
900,
|
||||||
|
900,
|
||||||
|
900,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
225,
|
||||||
|
1,
|
||||||
|
900,
|
||||||
|
901,
|
||||||
|
901,
|
||||||
|
901,
|
||||||
|
2,
|
||||||
|
225,
|
||||||
|
2,
|
||||||
|
900,
|
||||||
|
902,
|
||||||
|
902,
|
||||||
|
902,
|
||||||
|
2,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
sim_only_slots: StatePart {
|
||||||
|
value: [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
io: Instance {
|
||||||
|
name: <simulator>::enum_with_simple_body,
|
||||||
|
instantiated: Module {
|
||||||
|
name: enum_with_simple_body,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
main_module: SimulationModuleState {
|
||||||
|
base_targets: [
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::enum_with_simple_body,
|
||||||
|
instantiated: Module {
|
||||||
|
name: enum_with_simple_body,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.which_in,
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::enum_with_simple_body,
|
||||||
|
instantiated: Module {
|
||||||
|
name: enum_with_simple_body,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.data_in,
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::enum_with_simple_body,
|
||||||
|
instantiated: Module {
|
||||||
|
name: enum_with_simple_body,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.which_out,
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::enum_with_simple_body,
|
||||||
|
instantiated: Module {
|
||||||
|
name: enum_with_simple_body,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.data_out,
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::enum_with_simple_body,
|
||||||
|
instantiated: Module {
|
||||||
|
name: enum_with_simple_body,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.enum_out,
|
||||||
|
],
|
||||||
|
uninitialized_ios: {},
|
||||||
|
io_targets: {
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::enum_with_simple_body,
|
||||||
|
instantiated: Module {
|
||||||
|
name: enum_with_simple_body,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.data_in,
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::enum_with_simple_body,
|
||||||
|
instantiated: Module {
|
||||||
|
name: enum_with_simple_body,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.data_out,
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::enum_with_simple_body,
|
||||||
|
instantiated: Module {
|
||||||
|
name: enum_with_simple_body,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.enum_out,
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::enum_with_simple_body,
|
||||||
|
instantiated: Module {
|
||||||
|
name: enum_with_simple_body,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.which_in,
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::enum_with_simple_body,
|
||||||
|
instantiated: Module {
|
||||||
|
name: enum_with_simple_body,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.which_out,
|
||||||
|
},
|
||||||
|
did_initial_settle: true,
|
||||||
|
clocks_for_past: {},
|
||||||
|
},
|
||||||
|
extern_modules: [],
|
||||||
|
trace_decls: TraceModule {
|
||||||
|
name: "enum_with_simple_body",
|
||||||
|
children: [
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "which_in",
|
||||||
|
child: TraceUInt {
|
||||||
|
location: TraceScalarId(0),
|
||||||
|
name: "which_in",
|
||||||
|
ty: UInt<8>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
ty: UInt<8>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "data_in",
|
||||||
|
child: TraceUInt {
|
||||||
|
location: TraceScalarId(1),
|
||||||
|
name: "data_in",
|
||||||
|
ty: UInt<8>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
ty: UInt<8>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "which_out",
|
||||||
|
child: TraceUInt {
|
||||||
|
location: TraceScalarId(2),
|
||||||
|
name: "which_out",
|
||||||
|
ty: UInt<8>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
ty: UInt<8>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "data_out",
|
||||||
|
child: TraceUInt {
|
||||||
|
location: TraceScalarId(3),
|
||||||
|
name: "data_out",
|
||||||
|
ty: UInt<8>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
ty: UInt<8>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "enum_out",
|
||||||
|
child: TraceEnumWithFields {
|
||||||
|
name: "enum_out",
|
||||||
|
discriminant: TraceEnumDiscriminant {
|
||||||
|
location: TraceScalarId(4),
|
||||||
|
name: "$tag",
|
||||||
|
ty: Enum {
|
||||||
|
A(UInt<8>),
|
||||||
|
B(UInt<8>),
|
||||||
|
C(UInt<8>),
|
||||||
|
},
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
non_empty_fields: [
|
||||||
|
TraceUInt {
|
||||||
|
location: TraceScalarId(5),
|
||||||
|
name: "A",
|
||||||
|
ty: UInt<8>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceUInt {
|
||||||
|
location: TraceScalarId(6),
|
||||||
|
name: "B",
|
||||||
|
ty: UInt<8>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceUInt {
|
||||||
|
location: TraceScalarId(7),
|
||||||
|
name: "C",
|
||||||
|
ty: UInt<8>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ty: Enum {
|
||||||
|
A(UInt<8>),
|
||||||
|
B(UInt<8>),
|
||||||
|
C(UInt<8>),
|
||||||
|
},
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
ty: Enum {
|
||||||
|
A(UInt<8>),
|
||||||
|
B(UInt<8>),
|
||||||
|
C(UInt<8>),
|
||||||
|
},
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
traces: [
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(0),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(0),
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
maybe_changed: true,
|
||||||
|
state: 0x02,
|
||||||
|
last_state: 0x02,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(1),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(1),
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
maybe_changed: true,
|
||||||
|
state: 0xe1,
|
||||||
|
last_state: 0xb4,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(2),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(2),
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
maybe_changed: true,
|
||||||
|
state: 0x02,
|
||||||
|
last_state: 0x02,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(3),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(3),
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
maybe_changed: true,
|
||||||
|
state: 0xe1,
|
||||||
|
last_state: 0xb4,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(4),
|
||||||
|
kind: EnumDiscriminant {
|
||||||
|
index: StatePartIndex<SmallSlots>(0),
|
||||||
|
ty: Enum {
|
||||||
|
A(UInt<8>),
|
||||||
|
B(UInt<8>),
|
||||||
|
C(UInt<8>),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
maybe_changed: true,
|
||||||
|
state: 0x2,
|
||||||
|
last_state: 0x2,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(5),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(6),
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
maybe_changed: true,
|
||||||
|
state: 0xe1,
|
||||||
|
last_state: 0xb4,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(6),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(6),
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
maybe_changed: true,
|
||||||
|
state: 0xe1,
|
||||||
|
last_state: 0xb4,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(7),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(6),
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
maybe_changed: true,
|
||||||
|
state: 0xe1,
|
||||||
|
last_state: 0xb4,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
trace_memories: {},
|
||||||
|
trace_writers: [
|
||||||
|
Running(
|
||||||
|
VcdWriter {
|
||||||
|
finished_init: true,
|
||||||
|
timescale: 1 ps,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
clocks_triggered: [],
|
||||||
|
event_queue: EventQueue(EventQueueData {
|
||||||
|
instant: 18 μs,
|
||||||
|
events: {},
|
||||||
|
}),
|
||||||
|
waiting_sensitivity_sets_by_address: {},
|
||||||
|
waiting_sensitivity_sets_by_compiled_value: {},
|
||||||
|
..
|
||||||
|
}
|
||||||
133
crates/fayalite/tests/sim/expected/enum_with_simple_body.vcd
Normal file
133
crates/fayalite/tests/sim/expected/enum_with_simple_body.vcd
Normal file
|
|
@ -0,0 +1,133 @@
|
||||||
|
$timescale 1 ps $end
|
||||||
|
$scope module enum_with_simple_body $end
|
||||||
|
$var wire 8 J&-ne which_in $end
|
||||||
|
$var wire 8 \7mo/ data_in $end
|
||||||
|
$var wire 8 ,`>ir which_out $end
|
||||||
|
$var wire 8 0_gMP data_out $end
|
||||||
|
$scope struct enum_out $end
|
||||||
|
$var string 1 kFH/w \$tag $end
|
||||||
|
$var wire 8 |EI_= A $end
|
||||||
|
$var wire 8 !pRd4 B $end
|
||||||
|
$var wire 8 &RAbd C $end
|
||||||
|
$upscope $end
|
||||||
|
$upscope $end
|
||||||
|
$enddefinitions $end
|
||||||
|
$dumpvars
|
||||||
|
b0 J&-ne
|
||||||
|
b0 \7mo/
|
||||||
|
b0 ,`>ir
|
||||||
|
b0 0_gMP
|
||||||
|
sA\x20(0) kFH/w
|
||||||
|
b0 |EI_=
|
||||||
|
b0 !pRd4
|
||||||
|
b0 &RAbd
|
||||||
|
$end
|
||||||
|
#1000000
|
||||||
|
b101101 \7mo/
|
||||||
|
b101101 0_gMP
|
||||||
|
b101101 |EI_=
|
||||||
|
b101101 !pRd4
|
||||||
|
b101101 &RAbd
|
||||||
|
#2000000
|
||||||
|
b1011010 \7mo/
|
||||||
|
b1011010 0_gMP
|
||||||
|
b1011010 |EI_=
|
||||||
|
b1011010 !pRd4
|
||||||
|
b1011010 &RAbd
|
||||||
|
#3000000
|
||||||
|
b10000111 \7mo/
|
||||||
|
b10000111 0_gMP
|
||||||
|
b10000111 |EI_=
|
||||||
|
b10000111 !pRd4
|
||||||
|
b10000111 &RAbd
|
||||||
|
#4000000
|
||||||
|
b10110100 \7mo/
|
||||||
|
b10110100 0_gMP
|
||||||
|
b10110100 |EI_=
|
||||||
|
b10110100 !pRd4
|
||||||
|
b10110100 &RAbd
|
||||||
|
#5000000
|
||||||
|
b11100001 \7mo/
|
||||||
|
b11100001 0_gMP
|
||||||
|
b11100001 |EI_=
|
||||||
|
b11100001 !pRd4
|
||||||
|
b11100001 &RAbd
|
||||||
|
#6000000
|
||||||
|
b1 J&-ne
|
||||||
|
b0 \7mo/
|
||||||
|
b1 ,`>ir
|
||||||
|
b0 0_gMP
|
||||||
|
sB\x20(1) kFH/w
|
||||||
|
b0 |EI_=
|
||||||
|
b0 !pRd4
|
||||||
|
b0 &RAbd
|
||||||
|
#7000000
|
||||||
|
b101101 \7mo/
|
||||||
|
b101101 0_gMP
|
||||||
|
b101101 |EI_=
|
||||||
|
b101101 !pRd4
|
||||||
|
b101101 &RAbd
|
||||||
|
#8000000
|
||||||
|
b1011010 \7mo/
|
||||||
|
b1011010 0_gMP
|
||||||
|
b1011010 |EI_=
|
||||||
|
b1011010 !pRd4
|
||||||
|
b1011010 &RAbd
|
||||||
|
#9000000
|
||||||
|
b10000111 \7mo/
|
||||||
|
b10000111 0_gMP
|
||||||
|
b10000111 |EI_=
|
||||||
|
b10000111 !pRd4
|
||||||
|
b10000111 &RAbd
|
||||||
|
#10000000
|
||||||
|
b10110100 \7mo/
|
||||||
|
b10110100 0_gMP
|
||||||
|
b10110100 |EI_=
|
||||||
|
b10110100 !pRd4
|
||||||
|
b10110100 &RAbd
|
||||||
|
#11000000
|
||||||
|
b11100001 \7mo/
|
||||||
|
b11100001 0_gMP
|
||||||
|
b11100001 |EI_=
|
||||||
|
b11100001 !pRd4
|
||||||
|
b11100001 &RAbd
|
||||||
|
#12000000
|
||||||
|
b10 J&-ne
|
||||||
|
b0 \7mo/
|
||||||
|
b10 ,`>ir
|
||||||
|
b0 0_gMP
|
||||||
|
sC\x20(2) kFH/w
|
||||||
|
b0 |EI_=
|
||||||
|
b0 !pRd4
|
||||||
|
b0 &RAbd
|
||||||
|
#13000000
|
||||||
|
b101101 \7mo/
|
||||||
|
b101101 0_gMP
|
||||||
|
b101101 |EI_=
|
||||||
|
b101101 !pRd4
|
||||||
|
b101101 &RAbd
|
||||||
|
#14000000
|
||||||
|
b1011010 \7mo/
|
||||||
|
b1011010 0_gMP
|
||||||
|
b1011010 |EI_=
|
||||||
|
b1011010 !pRd4
|
||||||
|
b1011010 &RAbd
|
||||||
|
#15000000
|
||||||
|
b10000111 \7mo/
|
||||||
|
b10000111 0_gMP
|
||||||
|
b10000111 |EI_=
|
||||||
|
b10000111 !pRd4
|
||||||
|
b10000111 &RAbd
|
||||||
|
#16000000
|
||||||
|
b10110100 \7mo/
|
||||||
|
b10110100 0_gMP
|
||||||
|
b10110100 |EI_=
|
||||||
|
b10110100 !pRd4
|
||||||
|
b10110100 &RAbd
|
||||||
|
#17000000
|
||||||
|
b11100001 \7mo/
|
||||||
|
b11100001 0_gMP
|
||||||
|
b11100001 |EI_=
|
||||||
|
b11100001 !pRd4
|
||||||
|
b11100001 &RAbd
|
||||||
|
#18000000
|
||||||
|
|
@ -1746,6 +1746,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1754,6 +1755,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1762,6 +1764,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1771,6 +1774,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1780,6 +1784,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(4),
|
index: StatePartIndex<BigSlots>(4),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0xf,
|
state: 0xf,
|
||||||
last_state: 0xf,
|
last_state: 0xf,
|
||||||
},
|
},
|
||||||
|
|
@ -1789,6 +1794,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1798,6 +1804,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(6),
|
index: StatePartIndex<BigSlots>(6),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xf,
|
state: 0xf,
|
||||||
last_state: 0xf,
|
last_state: 0xf,
|
||||||
},
|
},
|
||||||
|
|
@ -1810,6 +1817,7 @@ Simulation {
|
||||||
HdlSome(Bundle {0: UInt<1>, 1: Bool}),
|
HdlSome(Bundle {0: UInt<1>, 1: Bool}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1819,6 +1827,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(8),
|
index: StatePartIndex<BigSlots>(8),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1827,6 +1836,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1839,6 +1849,7 @@ Simulation {
|
||||||
HdlSome(Bundle {0: UInt<1>, 1: Bool}),
|
HdlSome(Bundle {0: UInt<1>, 1: Bool}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1848,6 +1859,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1856,6 +1868,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1869,6 +1882,7 @@ Simulation {
|
||||||
C(Bundle {a: Array<UInt<1>, 2>, b: SInt<2>}),
|
C(Bundle {a: Array<UInt<1>, 2>, b: SInt<2>}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1878,6 +1892,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1886,6 +1901,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(28),
|
index: StatePartIndex<BigSlots>(28),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1895,6 +1911,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1904,6 +1921,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(35),
|
index: StatePartIndex<BigSlots>(35),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1913,6 +1931,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
ty: SInt<2>,
|
ty: SInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x3,
|
state: 0x3,
|
||||||
last_state: 0x3,
|
last_state: 0x3,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -221,6 +221,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -229,6 +230,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ Simulation {
|
||||||
big_slots: StatePart {
|
big_slots: StatePart {
|
||||||
value: [
|
value: [
|
||||||
0,
|
0,
|
||||||
1,
|
1 (modified),
|
||||||
101,
|
101,
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
@ -280,6 +280,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -288,6 +289,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -297,6 +299,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x65,
|
state: 0x65,
|
||||||
last_state: 0x65,
|
last_state: 0x65,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -433,7 +433,7 @@ Simulation {
|
||||||
1,
|
1,
|
||||||
1,
|
1,
|
||||||
1,
|
1,
|
||||||
7,
|
7 (modified),
|
||||||
7,
|
7,
|
||||||
3,
|
3,
|
||||||
0,
|
0,
|
||||||
|
|
@ -614,6 +614,7 @@ Simulation {
|
||||||
HdlSome(Array<Bool, 4>),
|
HdlSome(Array<Bool, 4>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -622,6 +623,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -630,6 +632,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -638,6 +641,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -646,6 +650,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(4),
|
index: StatePartIndex<BigSlots>(4),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -658,6 +663,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -667,6 +673,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x03,
|
state: 0x03,
|
||||||
last_state: 0x02,
|
last_state: 0x02,
|
||||||
},
|
},
|
||||||
|
|
@ -676,6 +683,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(20),
|
index: StatePartIndex<BigSlots>(20),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x03,
|
state: 0x03,
|
||||||
last_state: 0x02,
|
last_state: 0x02,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -1168,6 +1168,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1176,6 +1177,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1184,6 +1186,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1193,6 +1196,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xb0,
|
state: 0xb0,
|
||||||
last_state: 0xb0,
|
last_state: 0xb0,
|
||||||
},
|
},
|
||||||
|
|
@ -1202,6 +1206,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(4),
|
index: StatePartIndex<BigSlots>(4),
|
||||||
ty: SInt<8>,
|
ty: SInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xc0,
|
state: 0xc0,
|
||||||
last_state: 0xc0,
|
last_state: 0xc0,
|
||||||
},
|
},
|
||||||
|
|
@ -1211,6 +1216,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1219,6 +1225,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(6),
|
index: StatePartIndex<BigSlots>(6),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1227,6 +1234,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1236,6 +1244,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(8),
|
index: StatePartIndex<BigSlots>(8),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xd0,
|
state: 0xd0,
|
||||||
last_state: 0xd0,
|
last_state: 0xd0,
|
||||||
},
|
},
|
||||||
|
|
@ -1245,6 +1254,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: SInt<8>,
|
ty: SInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xe0,
|
state: 0xe0,
|
||||||
last_state: 0xe0,
|
last_state: 0xe0,
|
||||||
},
|
},
|
||||||
|
|
@ -1253,6 +1263,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1261,6 +1272,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1270,6 +1282,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1278,6 +1291,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1286,6 +1300,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1295,6 +1310,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xb0,
|
state: 0xb0,
|
||||||
last_state: 0xb0,
|
last_state: 0xb0,
|
||||||
},
|
},
|
||||||
|
|
@ -1304,6 +1320,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
ty: SInt<8>,
|
ty: SInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xc0,
|
state: 0xc0,
|
||||||
last_state: 0xc0,
|
last_state: 0xc0,
|
||||||
},
|
},
|
||||||
|
|
@ -1313,6 +1330,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1321,6 +1339,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1329,6 +1348,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1338,6 +1358,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(20),
|
index: StatePartIndex<BigSlots>(20),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xd0,
|
state: 0xd0,
|
||||||
last_state: 0xd0,
|
last_state: 0xd0,
|
||||||
},
|
},
|
||||||
|
|
@ -1347,6 +1368,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(21),
|
index: StatePartIndex<BigSlots>(21),
|
||||||
ty: SInt<8>,
|
ty: SInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xe0,
|
state: 0xe0,
|
||||||
last_state: 0xe0,
|
last_state: 0xe0,
|
||||||
},
|
},
|
||||||
|
|
@ -1355,6 +1377,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1363,6 +1386,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(23),
|
index: StatePartIndex<BigSlots>(23),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -943,6 +943,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
ty: UInt<3>,
|
ty: UInt<3>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -951,6 +952,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -959,6 +961,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -968,6 +971,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -976,6 +980,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(4),
|
index: StatePartIndex<BigSlots>(4),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -985,6 +990,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -993,6 +999,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(6),
|
index: StatePartIndex<BigSlots>(6),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1002,6 +1009,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
ty: UInt<3>,
|
ty: UInt<3>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1010,6 +1018,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(8),
|
index: StatePartIndex<BigSlots>(8),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1018,6 +1027,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1030,6 +1040,7 @@ Simulation {
|
||||||
HdlSome(Bool),
|
HdlSome(Bool),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1038,6 +1049,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1046,6 +1058,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1058,6 +1071,7 @@ Simulation {
|
||||||
HdlSome(Bool),
|
HdlSome(Bool),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1066,6 +1080,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1074,6 +1089,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -2391,6 +2391,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
ty: UInt<3>,
|
ty: UInt<3>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2399,6 +2400,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2407,6 +2409,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -2416,6 +2419,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2425,6 +2429,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(4),
|
index: StatePartIndex<BigSlots>(4),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2434,6 +2439,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2443,6 +2449,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(6),
|
index: StatePartIndex<BigSlots>(6),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2452,6 +2459,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2461,6 +2469,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(8),
|
index: StatePartIndex<BigSlots>(8),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2470,6 +2479,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2479,6 +2489,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2488,6 +2499,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<3>,
|
ty: UInt<3>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2496,6 +2508,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2504,6 +2517,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -2513,6 +2527,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2522,6 +2537,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2531,6 +2547,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2540,6 +2557,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2549,6 +2567,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2558,6 +2577,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2567,6 +2587,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(20),
|
index: StatePartIndex<BigSlots>(20),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2576,6 +2597,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(21),
|
index: StatePartIndex<BigSlots>(21),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2584,6 +2606,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2592,6 +2615,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(23),
|
index: StatePartIndex<BigSlots>(23),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2600,6 +2624,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(24),
|
index: StatePartIndex<BigSlots>(24),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2608,6 +2633,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2616,6 +2642,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(26),
|
index: StatePartIndex<BigSlots>(26),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2624,6 +2651,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2632,6 +2660,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(28),
|
index: StatePartIndex<BigSlots>(28),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2640,6 +2669,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(29),
|
index: StatePartIndex<BigSlots>(29),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2649,6 +2679,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
ty: UInt<3>,
|
ty: UInt<3>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2657,6 +2688,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2665,6 +2697,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -2674,6 +2707,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2683,6 +2717,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2692,6 +2727,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(35),
|
index: StatePartIndex<BigSlots>(35),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2701,6 +2737,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2710,6 +2747,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(37),
|
index: StatePartIndex<BigSlots>(37),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2719,6 +2757,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(38),
|
index: StatePartIndex<BigSlots>(38),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2728,6 +2767,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2737,6 +2777,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(40),
|
index: StatePartIndex<BigSlots>(40),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2746,6 +2787,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(57),
|
index: StatePartIndex<BigSlots>(57),
|
||||||
ty: UInt<3>,
|
ty: UInt<3>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2754,6 +2796,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(58),
|
index: StatePartIndex<BigSlots>(58),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2762,6 +2805,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(59),
|
index: StatePartIndex<BigSlots>(59),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -2771,6 +2815,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(60),
|
index: StatePartIndex<BigSlots>(60),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2780,6 +2825,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(61),
|
index: StatePartIndex<BigSlots>(61),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2789,6 +2835,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(62),
|
index: StatePartIndex<BigSlots>(62),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2798,6 +2845,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(63),
|
index: StatePartIndex<BigSlots>(63),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2807,6 +2855,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(64),
|
index: StatePartIndex<BigSlots>(64),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2816,6 +2865,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(65),
|
index: StatePartIndex<BigSlots>(65),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2825,6 +2875,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(66),
|
index: StatePartIndex<BigSlots>(66),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2834,6 +2885,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(67),
|
index: StatePartIndex<BigSlots>(67),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -2842,6 +2894,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(68),
|
index: StatePartIndex<BigSlots>(68),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2850,6 +2903,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(69),
|
index: StatePartIndex<BigSlots>(69),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2858,6 +2912,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(70),
|
index: StatePartIndex<BigSlots>(70),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2866,6 +2921,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(71),
|
index: StatePartIndex<BigSlots>(71),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2874,6 +2930,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(72),
|
index: StatePartIndex<BigSlots>(72),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2882,6 +2939,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(73),
|
index: StatePartIndex<BigSlots>(73),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2890,6 +2948,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(74),
|
index: StatePartIndex<BigSlots>(74),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2898,6 +2957,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(75),
|
index: StatePartIndex<BigSlots>(75),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -445,6 +445,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xa,
|
state: 0xa,
|
||||||
last_state: 0x3,
|
last_state: 0x3,
|
||||||
},
|
},
|
||||||
|
|
@ -454,6 +455,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
ty: SInt<2>,
|
ty: SInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x3,
|
last_state: 0x3,
|
||||||
},
|
},
|
||||||
|
|
@ -463,6 +465,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
ty: SInt<2>,
|
ty: SInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -472,6 +475,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xf,
|
state: 0xf,
|
||||||
last_state: 0xe,
|
last_state: 0xe,
|
||||||
},
|
},
|
||||||
|
|
@ -481,6 +485,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(8),
|
index: StatePartIndex<BigSlots>(8),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xa,
|
state: 0xa,
|
||||||
last_state: 0x3,
|
last_state: 0x3,
|
||||||
},
|
},
|
||||||
|
|
@ -490,6 +495,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: SInt<2>,
|
ty: SInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x3,
|
last_state: 0x3,
|
||||||
},
|
},
|
||||||
|
|
@ -499,6 +505,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: SInt<2>,
|
ty: SInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -508,6 +515,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xf,
|
state: 0xf,
|
||||||
last_state: 0xe,
|
last_state: 0xe,
|
||||||
},
|
},
|
||||||
|
|
@ -517,6 +525,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(4),
|
index: StatePartIndex<BigSlots>(4),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xa,
|
state: 0xa,
|
||||||
last_state: 0x3,
|
last_state: 0x3,
|
||||||
},
|
},
|
||||||
|
|
@ -526,6 +535,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: SInt<2>,
|
ty: SInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x3,
|
last_state: 0x3,
|
||||||
},
|
},
|
||||||
|
|
@ -535,6 +545,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(6),
|
index: StatePartIndex<BigSlots>(6),
|
||||||
ty: SInt<2>,
|
ty: SInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -544,6 +555,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
ty: UInt<4>,
|
ty: UInt<4>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0xf,
|
state: 0xf,
|
||||||
last_state: 0xe,
|
last_state: 0xe,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -373,6 +373,7 @@ Simulation {
|
||||||
["a","b"],
|
["a","b"],
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: PhantomConst,
|
state: PhantomConst,
|
||||||
last_state: PhantomConst,
|
last_state: PhantomConst,
|
||||||
},
|
},
|
||||||
|
|
@ -383,6 +384,7 @@ Simulation {
|
||||||
["a","b"],
|
["a","b"],
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: PhantomConst,
|
state: PhantomConst,
|
||||||
last_state: PhantomConst,
|
last_state: PhantomConst,
|
||||||
},
|
},
|
||||||
|
|
@ -392,6 +394,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -400,6 +403,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -408,6 +412,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -418,6 +423,7 @@ Simulation {
|
||||||
"mem_element",
|
"mem_element",
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: PhantomConst,
|
state: PhantomConst,
|
||||||
last_state: PhantomConst,
|
last_state: PhantomConst,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1722,6 +1722,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1730,6 +1731,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1742,6 +1744,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1751,6 +1754,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x19,
|
state: 0x19,
|
||||||
last_state: 0x19,
|
last_state: 0x19,
|
||||||
},
|
},
|
||||||
|
|
@ -1759,6 +1763,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1771,6 +1776,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1780,6 +1786,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x19,
|
state: 0x19,
|
||||||
last_state: 0x19,
|
last_state: 0x19,
|
||||||
},
|
},
|
||||||
|
|
@ -1788,6 +1795,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1797,6 +1805,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1806,6 +1815,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1814,6 +1824,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1822,6 +1833,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1831,6 +1843,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x19,
|
state: 0x19,
|
||||||
last_state: 0x19,
|
last_state: 0x19,
|
||||||
},
|
},
|
||||||
|
|
@ -1840,6 +1853,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1848,6 +1862,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1856,6 +1871,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1865,6 +1881,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x19,
|
state: 0x19,
|
||||||
last_state: 0x19,
|
last_state: 0x19,
|
||||||
},
|
},
|
||||||
|
|
@ -1873,6 +1890,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1882,6 +1900,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1891,6 +1910,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1899,6 +1919,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1907,6 +1928,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1915,6 +1937,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1923,6 +1946,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1931,6 +1955,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1939,6 +1964,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1947,6 +1973,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1955,6 +1982,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1964,6 +1992,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x19,
|
state: 0x19,
|
||||||
last_state: 0x19,
|
last_state: 0x19,
|
||||||
},
|
},
|
||||||
|
|
@ -1973,6 +2002,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(66),
|
index: StatePartIndex<BigSlots>(66),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1701,6 +1701,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1709,6 +1710,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1721,6 +1723,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1730,6 +1733,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1f,
|
state: 0x1f,
|
||||||
last_state: 0x1f,
|
last_state: 0x1f,
|
||||||
},
|
},
|
||||||
|
|
@ -1738,6 +1742,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1750,6 +1755,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1759,6 +1765,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1f,
|
state: 0x1f,
|
||||||
last_state: 0x1f,
|
last_state: 0x1f,
|
||||||
},
|
},
|
||||||
|
|
@ -1767,6 +1774,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1776,6 +1784,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1785,6 +1794,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1793,6 +1803,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1801,6 +1812,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1810,6 +1822,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1f,
|
state: 0x1f,
|
||||||
last_state: 0x1f,
|
last_state: 0x1f,
|
||||||
},
|
},
|
||||||
|
|
@ -1819,6 +1832,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1827,6 +1841,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1835,6 +1850,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1844,6 +1860,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1f,
|
state: 0x1f,
|
||||||
last_state: 0x1f,
|
last_state: 0x1f,
|
||||||
},
|
},
|
||||||
|
|
@ -1852,6 +1869,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1861,6 +1879,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1870,6 +1889,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1878,6 +1898,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1886,6 +1907,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1894,6 +1916,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1902,6 +1925,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1910,6 +1934,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1918,6 +1943,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1926,6 +1952,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1934,6 +1961,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1943,6 +1971,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1f,
|
state: 0x1f,
|
||||||
last_state: 0x1f,
|
last_state: 0x1f,
|
||||||
},
|
},
|
||||||
|
|
@ -1952,6 +1981,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(64),
|
index: StatePartIndex<BigSlots>(64),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1732,6 +1732,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1740,6 +1741,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1752,6 +1754,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1761,6 +1764,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1f,
|
state: 0x1f,
|
||||||
last_state: 0x1f,
|
last_state: 0x1f,
|
||||||
},
|
},
|
||||||
|
|
@ -1769,6 +1773,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1781,6 +1786,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1790,6 +1796,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1f,
|
state: 0x1f,
|
||||||
last_state: 0x1f,
|
last_state: 0x1f,
|
||||||
},
|
},
|
||||||
|
|
@ -1798,6 +1805,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1807,6 +1815,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1816,6 +1825,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1824,6 +1834,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1832,6 +1843,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1841,6 +1853,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1f,
|
state: 0x1f,
|
||||||
last_state: 0x1f,
|
last_state: 0x1f,
|
||||||
},
|
},
|
||||||
|
|
@ -1850,6 +1863,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1858,6 +1872,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1866,6 +1881,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1875,6 +1891,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1f,
|
state: 0x1f,
|
||||||
last_state: 0x1f,
|
last_state: 0x1f,
|
||||||
},
|
},
|
||||||
|
|
@ -1883,6 +1900,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1892,6 +1910,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1901,6 +1920,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1909,6 +1929,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1917,6 +1938,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1925,6 +1947,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1933,6 +1956,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1941,6 +1965,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1949,6 +1974,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1957,6 +1983,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1965,6 +1992,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1974,6 +2002,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1f,
|
state: 0x1f,
|
||||||
last_state: 0x1f,
|
last_state: 0x1f,
|
||||||
},
|
},
|
||||||
|
|
@ -1983,6 +2012,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(66),
|
index: StatePartIndex<BigSlots>(66),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1711,6 +1711,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1719,6 +1720,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1731,6 +1733,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1740,6 +1743,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x23,
|
state: 0x23,
|
||||||
last_state: 0x23,
|
last_state: 0x23,
|
||||||
},
|
},
|
||||||
|
|
@ -1748,6 +1752,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1760,6 +1765,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1769,6 +1775,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x23,
|
state: 0x23,
|
||||||
last_state: 0x23,
|
last_state: 0x23,
|
||||||
},
|
},
|
||||||
|
|
@ -1777,6 +1784,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1786,6 +1794,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1795,6 +1804,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1803,6 +1813,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1811,6 +1822,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1820,6 +1832,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x23,
|
state: 0x23,
|
||||||
last_state: 0x23,
|
last_state: 0x23,
|
||||||
},
|
},
|
||||||
|
|
@ -1829,6 +1842,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1837,6 +1851,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1845,6 +1860,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1854,6 +1870,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x23,
|
state: 0x23,
|
||||||
last_state: 0x23,
|
last_state: 0x23,
|
||||||
},
|
},
|
||||||
|
|
@ -1862,6 +1879,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1871,6 +1889,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1880,6 +1899,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1888,6 +1908,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1896,6 +1917,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1904,6 +1926,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1912,6 +1935,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1920,6 +1944,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1928,6 +1953,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1936,6 +1962,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1944,6 +1971,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1953,6 +1981,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x23,
|
state: 0x23,
|
||||||
last_state: 0x23,
|
last_state: 0x23,
|
||||||
},
|
},
|
||||||
|
|
@ -1962,6 +1991,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(64),
|
index: StatePartIndex<BigSlots>(64),
|
||||||
ty: UInt<0>,
|
ty: UInt<0>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1740,6 +1740,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1748,6 +1749,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1760,6 +1762,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1769,6 +1772,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x23,
|
state: 0x23,
|
||||||
last_state: 0x23,
|
last_state: 0x23,
|
||||||
},
|
},
|
||||||
|
|
@ -1777,6 +1781,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1789,6 +1794,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1798,6 +1804,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x23,
|
state: 0x23,
|
||||||
last_state: 0x23,
|
last_state: 0x23,
|
||||||
},
|
},
|
||||||
|
|
@ -1806,6 +1813,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1815,6 +1823,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1824,6 +1833,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1832,6 +1842,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1840,6 +1851,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1849,6 +1861,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x23,
|
state: 0x23,
|
||||||
last_state: 0x23,
|
last_state: 0x23,
|
||||||
},
|
},
|
||||||
|
|
@ -1858,6 +1871,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1866,6 +1880,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1874,6 +1889,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1883,6 +1899,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x23,
|
state: 0x23,
|
||||||
last_state: 0x23,
|
last_state: 0x23,
|
||||||
},
|
},
|
||||||
|
|
@ -1891,6 +1908,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1900,6 +1918,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1909,6 +1928,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1917,6 +1937,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1925,6 +1946,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1933,6 +1955,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1941,6 +1964,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1949,6 +1973,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1957,6 +1982,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1965,6 +1991,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1973,6 +2000,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1982,6 +2010,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x23,
|
state: 0x23,
|
||||||
last_state: 0x23,
|
last_state: 0x23,
|
||||||
},
|
},
|
||||||
|
|
@ -1991,6 +2020,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(68),
|
index: StatePartIndex<BigSlots>(68),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1719,6 +1719,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1727,6 +1728,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1739,6 +1741,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1748,6 +1751,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x26,
|
state: 0x26,
|
||||||
last_state: 0x26,
|
last_state: 0x26,
|
||||||
},
|
},
|
||||||
|
|
@ -1756,6 +1760,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1768,6 +1773,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1777,6 +1783,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x26,
|
state: 0x26,
|
||||||
last_state: 0x26,
|
last_state: 0x26,
|
||||||
},
|
},
|
||||||
|
|
@ -1785,6 +1792,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1794,6 +1802,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1803,6 +1812,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1811,6 +1821,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1819,6 +1830,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1828,6 +1840,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x26,
|
state: 0x26,
|
||||||
last_state: 0x26,
|
last_state: 0x26,
|
||||||
},
|
},
|
||||||
|
|
@ -1837,6 +1850,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1845,6 +1859,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1853,6 +1868,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1862,6 +1878,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x26,
|
state: 0x26,
|
||||||
last_state: 0x26,
|
last_state: 0x26,
|
||||||
},
|
},
|
||||||
|
|
@ -1870,6 +1887,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1879,6 +1897,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1888,6 +1907,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1896,6 +1916,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1904,6 +1925,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1912,6 +1934,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1920,6 +1943,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1928,6 +1952,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1936,6 +1961,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1944,6 +1970,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1952,6 +1979,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1961,6 +1989,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x26,
|
state: 0x26,
|
||||||
last_state: 0x26,
|
last_state: 0x26,
|
||||||
},
|
},
|
||||||
|
|
@ -1970,6 +1999,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(66),
|
index: StatePartIndex<BigSlots>(66),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1750,6 +1750,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1758,6 +1759,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1770,6 +1772,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1779,6 +1782,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x27,
|
state: 0x27,
|
||||||
last_state: 0x27,
|
last_state: 0x27,
|
||||||
},
|
},
|
||||||
|
|
@ -1787,6 +1791,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1799,6 +1804,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1808,6 +1814,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x26,
|
state: 0x26,
|
||||||
last_state: 0x26,
|
last_state: 0x26,
|
||||||
},
|
},
|
||||||
|
|
@ -1816,6 +1823,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1825,6 +1833,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1834,6 +1843,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1842,6 +1852,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1850,6 +1861,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1859,6 +1871,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x26,
|
state: 0x26,
|
||||||
last_state: 0x26,
|
last_state: 0x26,
|
||||||
},
|
},
|
||||||
|
|
@ -1868,6 +1881,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1876,6 +1890,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1884,6 +1899,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1893,6 +1909,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x27,
|
state: 0x27,
|
||||||
last_state: 0x27,
|
last_state: 0x27,
|
||||||
},
|
},
|
||||||
|
|
@ -1901,6 +1918,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1910,6 +1928,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1919,6 +1938,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1927,6 +1947,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1935,6 +1956,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1943,6 +1965,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1951,6 +1974,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1959,6 +1983,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1967,6 +1992,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1975,6 +2001,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1983,6 +2010,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1992,6 +2020,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x27,
|
state: 0x27,
|
||||||
last_state: 0x27,
|
last_state: 0x27,
|
||||||
},
|
},
|
||||||
|
|
@ -2001,6 +2030,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(68),
|
index: StatePartIndex<BigSlots>(68),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1729,6 +1729,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1737,6 +1738,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1749,6 +1751,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1758,6 +1761,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2a,
|
state: 0x2a,
|
||||||
last_state: 0x2a,
|
last_state: 0x2a,
|
||||||
},
|
},
|
||||||
|
|
@ -1766,6 +1770,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1778,6 +1783,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1787,6 +1793,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1795,6 +1802,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1804,6 +1812,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1813,6 +1822,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1821,6 +1831,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1829,6 +1840,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1838,6 +1850,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1847,6 +1860,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1855,6 +1869,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1863,6 +1878,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1872,6 +1888,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2a,
|
state: 0x2a,
|
||||||
last_state: 0x2a,
|
last_state: 0x2a,
|
||||||
},
|
},
|
||||||
|
|
@ -1880,6 +1897,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1889,6 +1907,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1898,6 +1917,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1906,6 +1926,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1914,6 +1935,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1922,6 +1944,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1930,6 +1953,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1938,6 +1962,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1946,6 +1971,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1954,6 +1980,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1962,6 +1989,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1971,6 +1999,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2a,
|
state: 0x2a,
|
||||||
last_state: 0x2a,
|
last_state: 0x2a,
|
||||||
},
|
},
|
||||||
|
|
@ -1980,6 +2009,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(66),
|
index: StatePartIndex<BigSlots>(66),
|
||||||
ty: UInt<1>,
|
ty: UInt<1>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1759,6 +1759,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1767,6 +1768,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1779,6 +1781,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1788,6 +1791,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x28,
|
state: 0x28,
|
||||||
last_state: 0x28,
|
last_state: 0x28,
|
||||||
},
|
},
|
||||||
|
|
@ -1796,6 +1800,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1808,6 +1813,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1817,6 +1823,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x27,
|
state: 0x27,
|
||||||
last_state: 0x27,
|
last_state: 0x27,
|
||||||
},
|
},
|
||||||
|
|
@ -1825,6 +1832,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1834,6 +1842,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1843,6 +1852,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1851,6 +1861,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1859,6 +1870,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1868,6 +1880,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x27,
|
state: 0x27,
|
||||||
last_state: 0x27,
|
last_state: 0x27,
|
||||||
},
|
},
|
||||||
|
|
@ -1877,6 +1890,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1885,6 +1899,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1893,6 +1908,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1902,6 +1918,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x28,
|
state: 0x28,
|
||||||
last_state: 0x28,
|
last_state: 0x28,
|
||||||
},
|
},
|
||||||
|
|
@ -1910,6 +1927,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1919,6 +1937,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1928,6 +1947,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1936,6 +1956,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1944,6 +1965,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1952,6 +1974,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1960,6 +1983,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1968,6 +1992,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1976,6 +2001,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1984,6 +2010,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1992,6 +2019,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2001,6 +2029,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x28,
|
state: 0x28,
|
||||||
last_state: 0x28,
|
last_state: 0x28,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1738,6 +1738,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1746,6 +1747,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1758,6 +1760,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1767,6 +1770,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2a,
|
state: 0x2a,
|
||||||
last_state: 0x2a,
|
last_state: 0x2a,
|
||||||
},
|
},
|
||||||
|
|
@ -1775,6 +1779,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1787,6 +1792,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1796,6 +1802,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1804,6 +1811,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1813,6 +1821,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1822,6 +1831,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1830,6 +1840,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1838,6 +1849,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1847,6 +1859,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1856,6 +1869,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1864,6 +1878,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1872,6 +1887,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1881,6 +1897,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2a,
|
state: 0x2a,
|
||||||
last_state: 0x2a,
|
last_state: 0x2a,
|
||||||
},
|
},
|
||||||
|
|
@ -1889,6 +1906,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1898,6 +1916,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1907,6 +1926,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1915,6 +1935,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1923,6 +1944,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1931,6 +1953,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1939,6 +1962,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1947,6 +1971,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1955,6 +1980,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1963,6 +1989,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1971,6 +1998,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1980,6 +2008,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2a,
|
state: 0x2a,
|
||||||
last_state: 0x2a,
|
last_state: 0x2a,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1769,6 +1769,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1777,6 +1778,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1789,6 +1791,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1798,6 +1801,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2b,
|
state: 0x2b,
|
||||||
last_state: 0x2b,
|
last_state: 0x2b,
|
||||||
},
|
},
|
||||||
|
|
@ -1806,6 +1810,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1818,6 +1823,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1827,6 +1833,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1835,6 +1842,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1844,6 +1852,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x3,
|
state: 0x3,
|
||||||
last_state: 0x3,
|
last_state: 0x3,
|
||||||
},
|
},
|
||||||
|
|
@ -1853,6 +1862,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1861,6 +1871,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1869,6 +1880,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1878,6 +1890,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1887,6 +1900,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1895,6 +1909,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1903,6 +1918,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1912,6 +1928,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2b,
|
state: 0x2b,
|
||||||
last_state: 0x2b,
|
last_state: 0x2b,
|
||||||
},
|
},
|
||||||
|
|
@ -1920,6 +1937,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1929,6 +1947,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1938,6 +1957,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1946,6 +1966,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1954,6 +1975,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1962,6 +1984,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1970,6 +1993,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1978,6 +2002,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1986,6 +2011,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1994,6 +2020,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -2002,6 +2029,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -2011,6 +2039,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2b,
|
state: 0x2b,
|
||||||
last_state: 0x2b,
|
last_state: 0x2b,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1748,6 +1748,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1756,6 +1757,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1768,6 +1770,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1777,6 +1780,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2b,
|
state: 0x2b,
|
||||||
last_state: 0x2b,
|
last_state: 0x2b,
|
||||||
},
|
},
|
||||||
|
|
@ -1785,6 +1789,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1797,6 +1802,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1806,6 +1812,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1814,6 +1821,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1823,6 +1831,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x3,
|
state: 0x3,
|
||||||
last_state: 0x3,
|
last_state: 0x3,
|
||||||
},
|
},
|
||||||
|
|
@ -1832,6 +1841,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1840,6 +1850,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1848,6 +1859,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1857,6 +1869,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1866,6 +1879,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1874,6 +1888,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1882,6 +1897,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1891,6 +1907,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2b,
|
state: 0x2b,
|
||||||
last_state: 0x2b,
|
last_state: 0x2b,
|
||||||
},
|
},
|
||||||
|
|
@ -1899,6 +1916,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1908,6 +1926,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1917,6 +1936,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2,
|
state: 0x2,
|
||||||
last_state: 0x2,
|
last_state: 0x2,
|
||||||
},
|
},
|
||||||
|
|
@ -1925,6 +1945,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1933,6 +1954,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1941,6 +1963,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1949,6 +1972,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1957,6 +1981,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1965,6 +1990,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1973,6 +1999,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1981,6 +2008,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1990,6 +2018,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2b,
|
state: 0x2b,
|
||||||
last_state: 0x2b,
|
last_state: 0x2b,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1748,6 +1748,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1756,6 +1757,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1768,6 +1770,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1777,6 +1780,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2b,
|
state: 0x2b,
|
||||||
last_state: 0x2b,
|
last_state: 0x2b,
|
||||||
},
|
},
|
||||||
|
|
@ -1785,6 +1789,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1797,6 +1802,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1806,6 +1812,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1814,6 +1821,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1823,6 +1831,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<3>,
|
ty: UInt<3>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x3,
|
state: 0x3,
|
||||||
last_state: 0x3,
|
last_state: 0x3,
|
||||||
},
|
},
|
||||||
|
|
@ -1832,6 +1841,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1840,6 +1850,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1848,6 +1859,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1857,6 +1869,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1866,6 +1879,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1874,6 +1888,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1882,6 +1897,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1891,6 +1907,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2b,
|
state: 0x2b,
|
||||||
last_state: 0x2b,
|
last_state: 0x2b,
|
||||||
},
|
},
|
||||||
|
|
@ -1899,6 +1916,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1908,6 +1926,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1917,6 +1936,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1925,6 +1945,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1933,6 +1954,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1941,6 +1963,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1949,6 +1972,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1957,6 +1981,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1965,6 +1990,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1973,6 +1999,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1981,6 +2008,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1990,6 +2018,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2b,
|
state: 0x2b,
|
||||||
last_state: 0x2b,
|
last_state: 0x2b,
|
||||||
},
|
},
|
||||||
|
|
@ -1999,6 +2028,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(68),
|
index: StatePartIndex<BigSlots>(68),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x3,
|
state: 0x3,
|
||||||
last_state: 0x3,
|
last_state: 0x3,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1727,6 +1727,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1735,6 +1736,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1747,6 +1749,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1756,6 +1759,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2b,
|
state: 0x2b,
|
||||||
last_state: 0x2b,
|
last_state: 0x2b,
|
||||||
},
|
},
|
||||||
|
|
@ -1764,6 +1768,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1776,6 +1781,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1785,6 +1791,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1793,6 +1800,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1802,6 +1810,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<3>,
|
ty: UInt<3>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x3,
|
state: 0x3,
|
||||||
last_state: 0x3,
|
last_state: 0x3,
|
||||||
},
|
},
|
||||||
|
|
@ -1811,6 +1820,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1819,6 +1829,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1827,6 +1838,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1836,6 +1848,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1845,6 +1858,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1853,6 +1867,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1861,6 +1876,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1870,6 +1886,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2b,
|
state: 0x2b,
|
||||||
last_state: 0x2b,
|
last_state: 0x2b,
|
||||||
},
|
},
|
||||||
|
|
@ -1878,6 +1895,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1887,6 +1905,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1896,6 +1915,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1904,6 +1924,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1912,6 +1933,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1920,6 +1942,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1928,6 +1951,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1936,6 +1960,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1944,6 +1969,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1952,6 +1978,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1960,6 +1987,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1969,6 +1997,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2b,
|
state: 0x2b,
|
||||||
last_state: 0x2b,
|
last_state: 0x2b,
|
||||||
},
|
},
|
||||||
|
|
@ -1978,6 +2007,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(66),
|
index: StatePartIndex<BigSlots>(66),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x3,
|
state: 0x3,
|
||||||
last_state: 0x3,
|
last_state: 0x3,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1758,6 +1758,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1766,6 +1767,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1778,6 +1780,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1787,6 +1790,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2c,
|
state: 0x2c,
|
||||||
last_state: 0x2c,
|
last_state: 0x2c,
|
||||||
},
|
},
|
||||||
|
|
@ -1795,6 +1799,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1807,6 +1812,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1816,6 +1822,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1824,6 +1831,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1833,6 +1841,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<3>,
|
ty: UInt<3>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x4,
|
state: 0x4,
|
||||||
last_state: 0x4,
|
last_state: 0x4,
|
||||||
},
|
},
|
||||||
|
|
@ -1842,6 +1851,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1850,6 +1860,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1858,6 +1869,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1867,6 +1879,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1876,6 +1889,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1884,6 +1898,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1892,6 +1907,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1901,6 +1917,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2c,
|
state: 0x2c,
|
||||||
last_state: 0x2c,
|
last_state: 0x2c,
|
||||||
},
|
},
|
||||||
|
|
@ -1909,6 +1926,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1918,6 +1936,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1927,6 +1946,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1935,6 +1955,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1943,6 +1964,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1951,6 +1973,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1959,6 +1982,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1967,6 +1991,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1975,6 +2000,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1983,6 +2009,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1991,6 +2018,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -2000,6 +2028,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2c,
|
state: 0x2c,
|
||||||
last_state: 0x2c,
|
last_state: 0x2c,
|
||||||
},
|
},
|
||||||
|
|
@ -2009,6 +2038,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(68),
|
index: StatePartIndex<BigSlots>(68),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1737,6 +1737,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1745,6 +1746,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1757,6 +1759,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1766,6 +1769,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2c,
|
state: 0x2c,
|
||||||
last_state: 0x2c,
|
last_state: 0x2c,
|
||||||
},
|
},
|
||||||
|
|
@ -1774,6 +1778,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1786,6 +1791,7 @@ Simulation {
|
||||||
HdlSome(UInt<8>),
|
HdlSome(UInt<8>),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1795,6 +1801,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1803,6 +1810,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1812,6 +1820,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<3>,
|
ty: UInt<3>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x4,
|
state: 0x4,
|
||||||
last_state: 0x4,
|
last_state: 0x4,
|
||||||
},
|
},
|
||||||
|
|
@ -1821,6 +1830,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1829,6 +1839,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1837,6 +1848,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1846,6 +1858,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(14),
|
index: StatePartIndex<BigSlots>(14),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x29,
|
state: 0x29,
|
||||||
last_state: 0x29,
|
last_state: 0x29,
|
||||||
},
|
},
|
||||||
|
|
@ -1855,6 +1868,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(15),
|
index: StatePartIndex<BigSlots>(15),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1863,6 +1877,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(16),
|
index: StatePartIndex<BigSlots>(16),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1871,6 +1886,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(17),
|
index: StatePartIndex<BigSlots>(17),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1880,6 +1896,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(18),
|
index: StatePartIndex<BigSlots>(18),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2c,
|
state: 0x2c,
|
||||||
last_state: 0x2c,
|
last_state: 0x2c,
|
||||||
},
|
},
|
||||||
|
|
@ -1888,6 +1905,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(19),
|
index: StatePartIndex<BigSlots>(19),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1897,6 +1915,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(22),
|
index: StatePartIndex<BigSlots>(22),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1906,6 +1925,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(25),
|
index: StatePartIndex<BigSlots>(25),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1914,6 +1934,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(27),
|
index: StatePartIndex<BigSlots>(27),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1922,6 +1943,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(30),
|
index: StatePartIndex<BigSlots>(30),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1930,6 +1952,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1938,6 +1961,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1946,6 +1970,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1954,6 +1979,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1962,6 +1988,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1970,6 +1997,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(39),
|
index: StatePartIndex<BigSlots>(39),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1979,6 +2007,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x2c,
|
state: 0x2c,
|
||||||
last_state: 0x2c,
|
last_state: 0x2c,
|
||||||
},
|
},
|
||||||
|
|
@ -1988,6 +2017,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(66),
|
index: StatePartIndex<BigSlots>(66),
|
||||||
ty: UInt<2>,
|
ty: UInt<2>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -687,18 +687,7 @@ Simulation {
|
||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0 (modified),
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
|
@ -709,9 +698,20 @@ Simulation {
|
||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
0 (modified),
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0 (modified),
|
||||||
|
0,
|
||||||
|
0,
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
sim_only_slots: StatePart {
|
sim_only_slots: StatePart {
|
||||||
|
|
@ -1284,6 +1284,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1293,6 +1294,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
ty: UInt<6>,
|
ty: UInt<6>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x00,
|
state: 0x00,
|
||||||
last_state: 0x00,
|
last_state: 0x00,
|
||||||
},
|
},
|
||||||
|
|
@ -1301,6 +1303,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1309,6 +1312,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1317,6 +1321,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(4),
|
index: StatePartIndex<BigSlots>(4),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1325,6 +1330,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1333,6 +1339,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(6),
|
index: StatePartIndex<BigSlots>(6),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1341,6 +1348,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1349,6 +1357,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(24),
|
index: StatePartIndex<BigSlots>(24),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1357,6 +1366,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(33),
|
index: StatePartIndex<BigSlots>(33),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1365,6 +1375,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(34),
|
index: StatePartIndex<BigSlots>(34),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1373,6 +1384,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(31),
|
index: StatePartIndex<BigSlots>(31),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1381,6 +1393,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(32),
|
index: StatePartIndex<BigSlots>(32),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1389,6 +1402,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(36),
|
index: StatePartIndex<BigSlots>(36),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1397,6 +1411,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(44),
|
index: StatePartIndex<BigSlots>(44),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1405,6 +1420,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(45),
|
index: StatePartIndex<BigSlots>(45),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1413,6 +1429,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(42),
|
index: StatePartIndex<BigSlots>(42),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1421,6 +1438,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(43),
|
index: StatePartIndex<BigSlots>(43),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1429,6 +1447,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(47),
|
index: StatePartIndex<BigSlots>(47),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1437,6 +1456,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(55),
|
index: StatePartIndex<BigSlots>(55),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1445,6 +1465,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(56),
|
index: StatePartIndex<BigSlots>(56),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1453,6 +1474,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(53),
|
index: StatePartIndex<BigSlots>(53),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1461,6 +1483,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(54),
|
index: StatePartIndex<BigSlots>(54),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -458,6 +458,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -466,6 +467,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -474,6 +476,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -482,6 +485,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -490,6 +494,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(4),
|
index: StatePartIndex<BigSlots>(4),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -498,6 +503,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -506,6 +512,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -514,6 +521,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -68,12 +68,12 @@ Simulation {
|
||||||
},
|
},
|
||||||
big_slots: StatePart {
|
big_slots: StatePart {
|
||||||
value: [
|
value: [
|
||||||
|
0 (modified),
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
49 (modified),
|
||||||
49,
|
50 (modified),
|
||||||
50,
|
50 (modified),
|
||||||
50,
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
sim_only_slots: StatePart {
|
sim_only_slots: StatePart {
|
||||||
|
|
@ -356,6 +356,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -364,6 +365,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -372,6 +374,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -381,6 +384,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x31,
|
state: 0x31,
|
||||||
last_state: 0x31,
|
last_state: 0x31,
|
||||||
},
|
},
|
||||||
|
|
@ -390,6 +394,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(4),
|
index: StatePartIndex<BigSlots>(4),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x32,
|
state: 0x32,
|
||||||
last_state: 0x32,
|
last_state: 0x32,
|
||||||
},
|
},
|
||||||
|
|
@ -399,6 +404,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x32,
|
state: 0x32,
|
||||||
last_state: 0x32,
|
last_state: 0x32,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -68,12 +68,12 @@ Simulation {
|
||||||
},
|
},
|
||||||
big_slots: StatePart {
|
big_slots: StatePart {
|
||||||
value: [
|
value: [
|
||||||
|
0 (modified),
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
49 (modified),
|
||||||
49,
|
50 (modified),
|
||||||
50,
|
50 (modified),
|
||||||
50,
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
sim_only_slots: StatePart {
|
sim_only_slots: StatePart {
|
||||||
|
|
@ -356,6 +356,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -364,6 +365,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -372,6 +374,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -381,6 +384,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x31,
|
state: 0x31,
|
||||||
last_state: 0x31,
|
last_state: 0x31,
|
||||||
},
|
},
|
||||||
|
|
@ -390,6 +394,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(4),
|
index: StatePartIndex<BigSlots>(4),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x32,
|
state: 0x32,
|
||||||
last_state: 0x32,
|
last_state: 0x32,
|
||||||
},
|
},
|
||||||
|
|
@ -399,6 +404,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x32,
|
state: 0x32,
|
||||||
last_state: 0x32,
|
last_state: 0x32,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -392,7 +392,7 @@ Simulation {
|
||||||
0,
|
0,
|
||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
1,
|
1 (modified),
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
|
@ -400,7 +400,7 @@ Simulation {
|
||||||
0,
|
0,
|
||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
1,
|
1 (modified),
|
||||||
0,
|
0,
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
@ -1252,6 +1252,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1260,6 +1261,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1269,6 +1271,7 @@ Simulation {
|
||||||
index: StatePartIndex<SimOnlySlots>(0),
|
index: StatePartIndex<SimOnlySlots>(0),
|
||||||
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: {
|
state: {
|
||||||
"extra": "value",
|
"extra": "value",
|
||||||
},
|
},
|
||||||
|
|
@ -1282,6 +1285,7 @@ Simulation {
|
||||||
index: StatePartIndex<SimOnlySlots>(1),
|
index: StatePartIndex<SimOnlySlots>(1),
|
||||||
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: {
|
state: {
|
||||||
"extra": "value",
|
"extra": "value",
|
||||||
},
|
},
|
||||||
|
|
@ -1295,6 +1299,7 @@ Simulation {
|
||||||
index: StatePartIndex<SimOnlySlots>(2),
|
index: StatePartIndex<SimOnlySlots>(2),
|
||||||
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: {
|
state: {
|
||||||
"bar": "",
|
"bar": "",
|
||||||
"extra": "value",
|
"extra": "value",
|
||||||
|
|
@ -1312,6 +1317,7 @@ Simulation {
|
||||||
index: StatePartIndex<SimOnlySlots>(3),
|
index: StatePartIndex<SimOnlySlots>(3),
|
||||||
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: {
|
state: {
|
||||||
"bar": "baz",
|
"bar": "baz",
|
||||||
"extra": "value",
|
"extra": "value",
|
||||||
|
|
@ -1328,6 +1334,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(4),
|
index: StatePartIndex<BigSlots>(4),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1336,6 +1343,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1345,6 +1353,7 @@ Simulation {
|
||||||
index: StatePartIndex<SimOnlySlots>(6),
|
index: StatePartIndex<SimOnlySlots>(6),
|
||||||
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: {
|
state: {
|
||||||
"extra": "value",
|
"extra": "value",
|
||||||
},
|
},
|
||||||
|
|
@ -1358,6 +1367,7 @@ Simulation {
|
||||||
index: StatePartIndex<SimOnlySlots>(7),
|
index: StatePartIndex<SimOnlySlots>(7),
|
||||||
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: {
|
state: {
|
||||||
"bar": "",
|
"bar": "",
|
||||||
"extra": "value",
|
"extra": "value",
|
||||||
|
|
@ -1374,6 +1384,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1382,6 +1393,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1391,6 +1403,7 @@ Simulation {
|
||||||
index: StatePartIndex<SimOnlySlots>(4),
|
index: StatePartIndex<SimOnlySlots>(4),
|
||||||
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: {
|
state: {
|
||||||
"extra": "value",
|
"extra": "value",
|
||||||
},
|
},
|
||||||
|
|
@ -1404,6 +1417,7 @@ Simulation {
|
||||||
index: StatePartIndex<SimOnlySlots>(5),
|
index: StatePartIndex<SimOnlySlots>(5),
|
||||||
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: {
|
state: {
|
||||||
"bar": "",
|
"bar": "",
|
||||||
"extra": "value",
|
"extra": "value",
|
||||||
|
|
@ -1421,6 +1435,7 @@ Simulation {
|
||||||
index: StatePartIndex<SimOnlySlots>(8),
|
index: StatePartIndex<SimOnlySlots>(8),
|
||||||
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: {
|
state: {
|
||||||
"extra": "value",
|
"extra": "value",
|
||||||
},
|
},
|
||||||
|
|
@ -1433,6 +1448,7 @@ Simulation {
|
||||||
kind: BigBool {
|
kind: BigBool {
|
||||||
index: StatePartIndex<BigSlots>(6),
|
index: StatePartIndex<BigSlots>(6),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1441,6 +1457,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(12),
|
index: StatePartIndex<BigSlots>(12),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1449,6 +1466,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(13),
|
index: StatePartIndex<BigSlots>(13),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1458,6 +1476,7 @@ Simulation {
|
||||||
index: StatePartIndex<SimOnlySlots>(13),
|
index: StatePartIndex<SimOnlySlots>(13),
|
||||||
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: {
|
state: {
|
||||||
"bar": "",
|
"bar": "",
|
||||||
"extra": "value",
|
"extra": "value",
|
||||||
|
|
@ -1475,6 +1494,7 @@ Simulation {
|
||||||
index: StatePartIndex<SimOnlySlots>(14),
|
index: StatePartIndex<SimOnlySlots>(14),
|
||||||
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: {
|
state: {
|
||||||
"bar": "baz",
|
"bar": "baz",
|
||||||
"extra": "value",
|
"extra": "value",
|
||||||
|
|
@ -1491,6 +1511,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -1499,6 +1520,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -1508,6 +1530,7 @@ Simulation {
|
||||||
index: StatePartIndex<SimOnlySlots>(11),
|
index: StatePartIndex<SimOnlySlots>(11),
|
||||||
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: {
|
state: {
|
||||||
"bar": "",
|
"bar": "",
|
||||||
"extra": "value",
|
"extra": "value",
|
||||||
|
|
@ -1525,6 +1548,7 @@ Simulation {
|
||||||
index: StatePartIndex<SimOnlySlots>(12),
|
index: StatePartIndex<SimOnlySlots>(12),
|
||||||
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
ty: SimOnly<alloc::collections::btree::map::BTreeMap<alloc::string::String, alloc::rc::Rc<str>>>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: {
|
state: {
|
||||||
"bar": "baz",
|
"bar": "baz",
|
||||||
"extra": "value",
|
"extra": "value",
|
||||||
|
|
|
||||||
|
|
@ -530,18 +530,18 @@ Simulation {
|
||||||
},
|
},
|
||||||
big_slots: StatePart {
|
big_slots: StatePart {
|
||||||
value: [
|
value: [
|
||||||
|
0 (modified),
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
49 (modified),
|
||||||
49,
|
50 (modified),
|
||||||
50,
|
50 (modified),
|
||||||
50,
|
0 (modified),
|
||||||
0,
|
1 (modified),
|
||||||
1,
|
0 (modified),
|
||||||
0,
|
49 (modified),
|
||||||
49,
|
49 (modified),
|
||||||
49,
|
50 (modified),
|
||||||
50,
|
|
||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
|
@ -9500,6 +9500,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -9508,6 +9509,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -9516,6 +9518,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -9525,6 +9528,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(3),
|
index: StatePartIndex<BigSlots>(3),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x31,
|
state: 0x31,
|
||||||
last_state: 0x31,
|
last_state: 0x31,
|
||||||
},
|
},
|
||||||
|
|
@ -9534,6 +9538,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(4),
|
index: StatePartIndex<BigSlots>(4),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x32,
|
state: 0x32,
|
||||||
last_state: 0x32,
|
last_state: 0x32,
|
||||||
},
|
},
|
||||||
|
|
@ -9543,6 +9548,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(5),
|
index: StatePartIndex<BigSlots>(5),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x32,
|
state: 0x32,
|
||||||
last_state: 0x32,
|
last_state: 0x32,
|
||||||
},
|
},
|
||||||
|
|
@ -9551,6 +9557,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(6),
|
index: StatePartIndex<BigSlots>(6),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -9559,6 +9566,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(7),
|
index: StatePartIndex<BigSlots>(7),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x1,
|
state: 0x1,
|
||||||
last_state: 0x1,
|
last_state: 0x1,
|
||||||
},
|
},
|
||||||
|
|
@ -9567,6 +9575,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(8),
|
index: StatePartIndex<BigSlots>(8),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -9576,6 +9585,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(9),
|
index: StatePartIndex<BigSlots>(9),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x31,
|
state: 0x31,
|
||||||
last_state: 0x31,
|
last_state: 0x31,
|
||||||
},
|
},
|
||||||
|
|
@ -9585,6 +9595,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(10),
|
index: StatePartIndex<BigSlots>(10),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x31,
|
state: 0x31,
|
||||||
last_state: 0x31,
|
last_state: 0x31,
|
||||||
},
|
},
|
||||||
|
|
@ -9594,6 +9605,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(11),
|
index: StatePartIndex<BigSlots>(11),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x32,
|
state: 0x32,
|
||||||
last_state: 0x32,
|
last_state: 0x32,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -56,8 +56,8 @@ Simulation {
|
||||||
},
|
},
|
||||||
big_slots: StatePart {
|
big_slots: StatePart {
|
||||||
value: [
|
value: [
|
||||||
0,
|
0 (modified),
|
||||||
0,
|
0 (modified),
|
||||||
3,
|
3,
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
@ -310,6 +310,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -318,6 +319,7 @@ Simulation {
|
||||||
kind: BigAsyncReset {
|
kind: BigAsyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -327,6 +329,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x03,
|
state: 0x03,
|
||||||
last_state: 0x03,
|
last_state: 0x03,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -56,8 +56,8 @@ Simulation {
|
||||||
},
|
},
|
||||||
big_slots: StatePart {
|
big_slots: StatePart {
|
||||||
value: [
|
value: [
|
||||||
0,
|
0 (modified),
|
||||||
0,
|
0 (modified),
|
||||||
3,
|
3,
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
@ -310,6 +310,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -318,6 +319,7 @@ Simulation {
|
||||||
kind: BigAsyncReset {
|
kind: BigAsyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -327,6 +329,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x03,
|
state: 0x03,
|
||||||
last_state: 0x03,
|
last_state: 0x03,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ Simulation {
|
||||||
},
|
},
|
||||||
big_slots: StatePart {
|
big_slots: StatePart {
|
||||||
value: [
|
value: [
|
||||||
0,
|
0 (modified),
|
||||||
0,
|
0,
|
||||||
3,
|
3,
|
||||||
],
|
],
|
||||||
|
|
@ -310,6 +310,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -318,6 +319,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -327,6 +329,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x03,
|
state: 0x03,
|
||||||
last_state: 0x03,
|
last_state: 0x03,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ Simulation {
|
||||||
},
|
},
|
||||||
big_slots: StatePart {
|
big_slots: StatePart {
|
||||||
value: [
|
value: [
|
||||||
0,
|
0 (modified),
|
||||||
0,
|
0,
|
||||||
3,
|
3,
|
||||||
],
|
],
|
||||||
|
|
@ -310,6 +310,7 @@ Simulation {
|
||||||
kind: BigClock {
|
kind: BigClock {
|
||||||
index: StatePartIndex<BigSlots>(0),
|
index: StatePartIndex<BigSlots>(0),
|
||||||
},
|
},
|
||||||
|
maybe_changed: true,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -318,6 +319,7 @@ Simulation {
|
||||||
kind: BigSyncReset {
|
kind: BigSyncReset {
|
||||||
index: StatePartIndex<BigSlots>(1),
|
index: StatePartIndex<BigSlots>(1),
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x0,
|
state: 0x0,
|
||||||
last_state: 0x0,
|
last_state: 0x0,
|
||||||
},
|
},
|
||||||
|
|
@ -327,6 +329,7 @@ Simulation {
|
||||||
index: StatePartIndex<BigSlots>(2),
|
index: StatePartIndex<BigSlots>(2),
|
||||||
ty: UInt<8>,
|
ty: UInt<8>,
|
||||||
},
|
},
|
||||||
|
maybe_changed: false,
|
||||||
state: 0x03,
|
state: 0x03,
|
||||||
last_state: 0x03,
|
last_state: 0x03,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
2254
crates/fayalite/tests/sim/expected/sim_trace_as_string.txt
Normal file
2254
crates/fayalite/tests/sim/expected/sim_trace_as_string.txt
Normal file
File diff suppressed because it is too large
Load diff
221
crates/fayalite/tests/sim/expected/sim_trace_as_string.vcd
Normal file
221
crates/fayalite/tests/sim/expected/sim_trace_as_string.vcd
Normal file
|
|
@ -0,0 +1,221 @@
|
||||||
|
$timescale 1 ps $end
|
||||||
|
$scope module sim_trace_as_string $end
|
||||||
|
$var wire 1 J(7*b clk $end
|
||||||
|
$scope struct read $end
|
||||||
|
$var wire 8 @t0}\ addr $end
|
||||||
|
$var wire 1 78"T5 en $end
|
||||||
|
$var wire 1 G7v@m clk $end
|
||||||
|
$var string 1 F&^FN data $end
|
||||||
|
$upscope $end
|
||||||
|
$scope struct write $end
|
||||||
|
$var wire 8 "fUdW addr $end
|
||||||
|
$var wire 1 r1OK) en $end
|
||||||
|
$var wire 1 ,ADvU clk $end
|
||||||
|
$scope struct data $end
|
||||||
|
$var string 1 pD.mP \[0] $end
|
||||||
|
$var string 1 !V!em \[1] $end
|
||||||
|
$upscope $end
|
||||||
|
$scope struct mask $end
|
||||||
|
$var wire 1 l8dgD \[0] $end
|
||||||
|
$var wire 1 1/sDs \[1] $end
|
||||||
|
$upscope $end
|
||||||
|
$upscope $end
|
||||||
|
$scope struct mem $end
|
||||||
|
$scope struct contents $end
|
||||||
|
$scope struct \[0] $end
|
||||||
|
$scope struct mem $end
|
||||||
|
$var string 1 sz>#| \[0] $end
|
||||||
|
$var string 1 G._83 \[1] $end
|
||||||
|
$upscope $end
|
||||||
|
$upscope $end
|
||||||
|
$scope struct \[1] $end
|
||||||
|
$scope struct mem $end
|
||||||
|
$var string 1 2r3#W \[0] $end
|
||||||
|
$var string 1 AbGF% \[1] $end
|
||||||
|
$upscope $end
|
||||||
|
$upscope $end
|
||||||
|
$scope struct \[2] $end
|
||||||
|
$scope struct mem $end
|
||||||
|
$var string 1 .^<$p \[0] $end
|
||||||
|
$var string 1 ?s@Dc \[1] $end
|
||||||
|
$upscope $end
|
||||||
|
$upscope $end
|
||||||
|
$scope struct \[3] $end
|
||||||
|
$scope struct mem $end
|
||||||
|
$var string 1 {*||o \[0] $end
|
||||||
|
$var string 1 Bg,vB \[1] $end
|
||||||
|
$upscope $end
|
||||||
|
$upscope $end
|
||||||
|
$upscope $end
|
||||||
|
$scope struct r0 $end
|
||||||
|
$var wire 2 .0()- addr $end
|
||||||
|
$var wire 1 GEbRA en $end
|
||||||
|
$var wire 1 ;`9BK clk $end
|
||||||
|
$scope struct data $end
|
||||||
|
$var string 1 _Xe"P \[0] $end
|
||||||
|
$var string 1 jXrsx \[1] $end
|
||||||
|
$upscope $end
|
||||||
|
$upscope $end
|
||||||
|
$scope struct w1 $end
|
||||||
|
$var wire 2 '8u?z addr $end
|
||||||
|
$var wire 1 ~o=`& en $end
|
||||||
|
$var wire 1 *q>M1 clk $end
|
||||||
|
$scope struct data $end
|
||||||
|
$var string 1 N\zBe \[0] $end
|
||||||
|
$var string 1 c3h8{ \[1] $end
|
||||||
|
$upscope $end
|
||||||
|
$scope struct mask $end
|
||||||
|
$var wire 1 .SYGD \[0] $end
|
||||||
|
$var wire 1 />wYd \[1] $end
|
||||||
|
$upscope $end
|
||||||
|
$upscope $end
|
||||||
|
$upscope $end
|
||||||
|
$upscope $end
|
||||||
|
$enddefinitions $end
|
||||||
|
$dumpvars
|
||||||
|
s sz>#|
|
||||||
|
s G._83
|
||||||
|
s 2r3#W
|
||||||
|
s AbGF%
|
||||||
|
s .^<$p
|
||||||
|
s ?s@Dc
|
||||||
|
s {*||o
|
||||||
|
s Bg,vB
|
||||||
|
0J(7*b
|
||||||
|
b0 @t0}\
|
||||||
|
078"T5
|
||||||
|
0G7v@m
|
||||||
|
s[,\x20] F&^FN
|
||||||
|
b0 "fUdW
|
||||||
|
0r1OK)
|
||||||
|
0,ADvU
|
||||||
|
s pD.mP
|
||||||
|
s !V!em
|
||||||
|
0l8dgD
|
||||||
|
01/sDs
|
||||||
|
b0 .0()-
|
||||||
|
0GEbRA
|
||||||
|
0;`9BK
|
||||||
|
s _Xe"P
|
||||||
|
s jXrsx
|
||||||
|
b0 '8u?z
|
||||||
|
0~o=`&
|
||||||
|
0*q>M1
|
||||||
|
s N\zBe
|
||||||
|
s c3h8{
|
||||||
|
0.SYGD
|
||||||
|
0/>wYd
|
||||||
|
$end
|
||||||
|
#500000
|
||||||
|
1J(7*b
|
||||||
|
1;`9BK
|
||||||
|
1*q>M1
|
||||||
|
#1000000
|
||||||
|
0J(7*b
|
||||||
|
1r1OK)
|
||||||
|
smem[0][0] pD.mP
|
||||||
|
smem[0][1] !V!em
|
||||||
|
1l8dgD
|
||||||
|
11/sDs
|
||||||
|
0;`9BK
|
||||||
|
1~o=`&
|
||||||
|
0*q>M1
|
||||||
|
smem[0][0] N\zBe
|
||||||
|
smem[0][1] c3h8{
|
||||||
|
1.SYGD
|
||||||
|
1/>wYd
|
||||||
|
#1500000
|
||||||
|
smem[0][0] sz>#|
|
||||||
|
smem[0][1] G._83
|
||||||
|
1J(7*b
|
||||||
|
1;`9BK
|
||||||
|
1*q>M1
|
||||||
|
#2000000
|
||||||
|
0J(7*b
|
||||||
|
b1 "fUdW
|
||||||
|
smem[1][0] pD.mP
|
||||||
|
smem[1][1] !V!em
|
||||||
|
0;`9BK
|
||||||
|
b1 '8u?z
|
||||||
|
0*q>M1
|
||||||
|
smem[1][0] N\zBe
|
||||||
|
smem[1][1] c3h8{
|
||||||
|
#2500000
|
||||||
|
smem[1][0] 2r3#W
|
||||||
|
smem[1][1] AbGF%
|
||||||
|
1J(7*b
|
||||||
|
1;`9BK
|
||||||
|
1*q>M1
|
||||||
|
#3000000
|
||||||
|
0J(7*b
|
||||||
|
b10 "fUdW
|
||||||
|
smem[2][0] pD.mP
|
||||||
|
smem[2][1] !V!em
|
||||||
|
0;`9BK
|
||||||
|
b10 '8u?z
|
||||||
|
0*q>M1
|
||||||
|
smem[2][0] N\zBe
|
||||||
|
smem[2][1] c3h8{
|
||||||
|
#3500000
|
||||||
|
smem[2][0] .^<$p
|
||||||
|
smem[2][1] ?s@Dc
|
||||||
|
1J(7*b
|
||||||
|
1;`9BK
|
||||||
|
1*q>M1
|
||||||
|
#4000000
|
||||||
|
0J(7*b
|
||||||
|
b11 "fUdW
|
||||||
|
smem[3][0] pD.mP
|
||||||
|
smem[3][1] !V!em
|
||||||
|
0;`9BK
|
||||||
|
b11 '8u?z
|
||||||
|
0*q>M1
|
||||||
|
smem[3][0] N\zBe
|
||||||
|
smem[3][1] c3h8{
|
||||||
|
#4500000
|
||||||
|
smem[3][0] {*||o
|
||||||
|
smem[3][1] Bg,vB
|
||||||
|
1J(7*b
|
||||||
|
1;`9BK
|
||||||
|
1*q>M1
|
||||||
|
#5000000
|
||||||
|
0J(7*b
|
||||||
|
b1 @t0}\
|
||||||
|
178"T5
|
||||||
|
s[mem[1][0],\x20mem[1][1]] F&^FN
|
||||||
|
b0 "fUdW
|
||||||
|
0r1OK)
|
||||||
|
s<!!!failed\x20to\x20format!!!> pD.mP
|
||||||
|
s<!!!failed\x20to\x20format!!!> !V!em
|
||||||
|
b1 .0()-
|
||||||
|
1GEbRA
|
||||||
|
0;`9BK
|
||||||
|
smem[1][0] _Xe"P
|
||||||
|
smem[1][1] jXrsx
|
||||||
|
b0 '8u?z
|
||||||
|
0~o=`&
|
||||||
|
0*q>M1
|
||||||
|
s<!!!failed\x20to\x20format!!!> N\zBe
|
||||||
|
s<!!!failed\x20to\x20format!!!> c3h8{
|
||||||
|
#5500000
|
||||||
|
1J(7*b
|
||||||
|
1;`9BK
|
||||||
|
1*q>M1
|
||||||
|
#6000000
|
||||||
|
0J(7*b
|
||||||
|
b1 "fUdW
|
||||||
|
1r1OK)
|
||||||
|
0;`9BK
|
||||||
|
b1 '8u?z
|
||||||
|
1~o=`&
|
||||||
|
0*q>M1
|
||||||
|
#6500000
|
||||||
|
s<!!!failed\x20to\x20format!!!> 2r3#W
|
||||||
|
s<!!!failed\x20to\x20format!!!> AbGF%
|
||||||
|
1J(7*b
|
||||||
|
s<!!!failed\x20to\x20format!!!> F&^FN
|
||||||
|
1;`9BK
|
||||||
|
s<!!!failed\x20to\x20format!!!> _Xe"P
|
||||||
|
s<!!!failed\x20to\x20format!!!> jXrsx
|
||||||
|
1*q>M1
|
||||||
|
#7000000
|
||||||
|
|
@ -55,7 +55,7 @@ error[E0277]: `Rc<(dyn value::sim_only_value_unsafe::DynSimOnlyValueTrait + 'sta
|
||||||
note: required because it appears within the type `DynSimOnlyValue`
|
note: required because it appears within the type `DynSimOnlyValue`
|
||||||
--> src/sim/value/sim_only_value_unsafe.rs
|
--> src/sim/value/sim_only_value_unsafe.rs
|
||||||
|
|
|
|
||||||
271 | pub struct DynSimOnlyValue(Rc<dyn DynSimOnlyValueTrait>);
|
281 | pub struct DynSimOnlyValue(Rc<dyn DynSimOnlyValueTrait>);
|
||||||
| ^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^
|
||||||
note: required because it appears within the type `PhantomData<DynSimOnlyValue>`
|
note: required because it appears within the type `PhantomData<DynSimOnlyValue>`
|
||||||
--> $RUST/core/src/marker.rs
|
--> $RUST/core/src/marker.rs
|
||||||
|
|
@ -75,7 +75,7 @@ note: required because it appears within the type `Vec<DynSimOnlyValue>`
|
||||||
note: required because it appears within the type `OpaqueSimValue`
|
note: required because it appears within the type `OpaqueSimValue`
|
||||||
--> src/ty.rs
|
--> src/ty.rs
|
||||||
|
|
|
|
||||||
734 | pub struct OpaqueSimValue {
|
896 | pub struct OpaqueSimValue {
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
note: required because it appears within the type `value::SimValueInner<()>`
|
note: required because it appears within the type `value::SimValueInner<()>`
|
||||||
--> src/sim/value.rs
|
--> src/sim/value.rs
|
||||||
|
|
@ -194,7 +194,7 @@ error[E0277]: `Rc<(dyn value::sim_only_value_unsafe::DynSimOnlyValueTrait + 'sta
|
||||||
note: required because it appears within the type `DynSimOnlyValue`
|
note: required because it appears within the type `DynSimOnlyValue`
|
||||||
--> src/sim/value/sim_only_value_unsafe.rs
|
--> src/sim/value/sim_only_value_unsafe.rs
|
||||||
|
|
|
|
||||||
271 | pub struct DynSimOnlyValue(Rc<dyn DynSimOnlyValueTrait>);
|
281 | pub struct DynSimOnlyValue(Rc<dyn DynSimOnlyValueTrait>);
|
||||||
| ^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^
|
||||||
note: required because it appears within the type `PhantomData<DynSimOnlyValue>`
|
note: required because it appears within the type `PhantomData<DynSimOnlyValue>`
|
||||||
--> $RUST/core/src/marker.rs
|
--> $RUST/core/src/marker.rs
|
||||||
|
|
@ -214,7 +214,7 @@ note: required because it appears within the type `Vec<DynSimOnlyValue>`
|
||||||
note: required because it appears within the type `OpaqueSimValue`
|
note: required because it appears within the type `OpaqueSimValue`
|
||||||
--> src/ty.rs
|
--> src/ty.rs
|
||||||
|
|
|
|
||||||
734 | pub struct OpaqueSimValue {
|
896 | pub struct OpaqueSimValue {
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
note: required because it appears within the type `value::SimValueInner<()>`
|
note: required because it appears within the type `value::SimValueInner<()>`
|
||||||
--> src/sim/value.rs
|
--> src/sim/value.rs
|
||||||
|
|
@ -306,7 +306,7 @@ error[E0277]: `Rc<(dyn value::sim_only_value_unsafe::DynSimOnlyValueTrait + 'sta
|
||||||
note: required because it appears within the type `DynSimOnlyValue`
|
note: required because it appears within the type `DynSimOnlyValue`
|
||||||
--> src/sim/value/sim_only_value_unsafe.rs
|
--> src/sim/value/sim_only_value_unsafe.rs
|
||||||
|
|
|
|
||||||
271 | pub struct DynSimOnlyValue(Rc<dyn DynSimOnlyValueTrait>);
|
281 | pub struct DynSimOnlyValue(Rc<dyn DynSimOnlyValueTrait>);
|
||||||
| ^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^
|
||||||
note: required because it appears within the type `PhantomData<DynSimOnlyValue>`
|
note: required because it appears within the type `PhantomData<DynSimOnlyValue>`
|
||||||
--> $RUST/core/src/marker.rs
|
--> $RUST/core/src/marker.rs
|
||||||
|
|
@ -326,7 +326,7 @@ note: required because it appears within the type `Vec<DynSimOnlyValue>`
|
||||||
note: required because it appears within the type `OpaqueSimValue`
|
note: required because it appears within the type `OpaqueSimValue`
|
||||||
--> src/ty.rs
|
--> src/ty.rs
|
||||||
|
|
|
|
||||||
734 | pub struct OpaqueSimValue {
|
896 | pub struct OpaqueSimValue {
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
note: required because it appears within the type `value::SimValueInner<()>`
|
note: required because it appears within the type `value::SimValueInner<()>`
|
||||||
--> src/sim/value.rs
|
--> src/sim/value.rs
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,8 @@
|
||||||
"Reset": "Visible",
|
"Reset": "Visible",
|
||||||
"Clock": "Visible",
|
"Clock": "Visible",
|
||||||
"PhantomConst": "Visible",
|
"PhantomConst": "Visible",
|
||||||
"DynSimOnly": "Visible"
|
"DynSimOnly": "Visible",
|
||||||
|
"TraceAsString": "Visible"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Bundle": {
|
"Bundle": {
|
||||||
|
|
@ -1021,6 +1022,27 @@
|
||||||
"fold_where": "T: Fold<State>",
|
"fold_where": "T: Fold<State>",
|
||||||
"visit_where": "T: Visit<State>"
|
"visit_where": "T: Visit<State>"
|
||||||
},
|
},
|
||||||
|
"ops::ToTraceAsString": {
|
||||||
|
"data": {
|
||||||
|
"$kind": "Struct",
|
||||||
|
"$constructor": "ops::ToTraceAsString::new",
|
||||||
|
"inner()": "Visible",
|
||||||
|
"ty()": "Visible"
|
||||||
|
},
|
||||||
|
"generics": "<T: Type>",
|
||||||
|
"fold_where": "T: Fold<State>",
|
||||||
|
"visit_where": "T: Visit<State>"
|
||||||
|
},
|
||||||
|
"ops::TraceAsStringAsInner": {
|
||||||
|
"data": {
|
||||||
|
"$kind": "Struct",
|
||||||
|
"$constructor": "ops::TraceAsStringAsInner::new",
|
||||||
|
"arg_typed()": "Visible"
|
||||||
|
},
|
||||||
|
"generics": "<T: Type>",
|
||||||
|
"fold_where": "T: Fold<State>",
|
||||||
|
"visit_where": "T: Visit<State>"
|
||||||
|
},
|
||||||
"BlockId": {
|
"BlockId": {
|
||||||
"data": {
|
"data": {
|
||||||
"$kind": "Opaque"
|
"$kind": "Opaque"
|
||||||
|
|
@ -1283,12 +1305,25 @@
|
||||||
"$kind": "Struct"
|
"$kind": "Struct"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"TargetPathTraceAsStringInner": {
|
||||||
|
"data": {
|
||||||
|
"$kind": "Struct"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"TargetPathToTraceAsString": {
|
||||||
|
"data": {
|
||||||
|
"$kind": "Struct",
|
||||||
|
"ty": "Visible"
|
||||||
|
}
|
||||||
|
},
|
||||||
"TargetPathElement": {
|
"TargetPathElement": {
|
||||||
"data": {
|
"data": {
|
||||||
"$kind": "Enum",
|
"$kind": "Enum",
|
||||||
"BundleField": "Visible",
|
"BundleField": "Visible",
|
||||||
"ArrayElement": "Visible",
|
"ArrayElement": "Visible",
|
||||||
"DynArrayElement": "Visible"
|
"DynArrayElement": "Visible",
|
||||||
|
"TraceAsStringInner": "Visible",
|
||||||
|
"ToTraceAsString": "Visible"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PhantomConst": {
|
"PhantomConst": {
|
||||||
|
|
@ -1306,6 +1341,14 @@
|
||||||
"data": {
|
"data": {
|
||||||
"$kind": "ManualImpl"
|
"$kind": "ManualImpl"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"TraceAsString": {
|
||||||
|
"data": {
|
||||||
|
"$kind": "ManualImpl"
|
||||||
|
},
|
||||||
|
"generics": "<T: Type>",
|
||||||
|
"fold_where": "T: Fold<State>",
|
||||||
|
"visit_where": "T: Visit<State>"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue