WIP: adding ExecuteToUnitInterface::other_units_cant_cause_cancels_before
All checks were successful
/ test (pull_request) Successful in 29m47s

This commit is contained in:
Jacob Lifshay 2026-07-31 16:51:04 -07:00
parent a81d85d9c0
commit acecc74ea0
Signed by: programmerjake
SSH key fingerprint: SHA256:HnFTLGpSm4Q4Fj502oCFisjZSoakwEuTsJJMSke63RQ
25 changed files with 30094 additions and 28513 deletions

View file

@ -203,6 +203,18 @@ pub struct UnitMOpCantCauseCancel<C: PhantomConstGet<CpuConfig>> {
pub config: C,
}
/// This tells the Unit that:
/// * Other Units can't cause any cancels for any µOps before [`Self::id`] (so all µOps before then are either assigned to this Unit or have reported that they can't cause a cancel or have finished without causing a cancel).
///
/// The rename/execute/retire logic guarantees:
/// * [`Self::id`] refers to a µOp that is/was enqueued in this Unit.
/// * This was not previously told to the unit.
#[hdl(no_static)]
pub struct UnitMOpOtherUnitsCantCauseCancelsBefore<C: PhantomConstGet<CpuConfig>> {
pub id: MOpId,
pub config: C,
}
/// Interface from the Rename/Execute/Retire control logic to a single Unit.
///
/// ## State diagram for a single &micro;Op in a Unit
@ -223,6 +235,9 @@ pub struct ExecuteToUnitInterface<C: PhantomConstGet<CpuConfig>> {
pub inputs_ready: HdlOption<UnitInputsReady<C>>,
/// if [`Self::unit_outputs_ready`] is `false`, then this is always [`HdlNone`]
pub is_no_longer_speculative: HdlOption<UnitMOpIsNoLongerSpeculative<C>>,
/// if [`Self::unit_outputs_ready`] is `false`, then this is always [`HdlNone`]
pub other_units_cant_cause_cancels_before:
HdlOption<UnitMOpOtherUnitsCantCauseCancelsBefore<C>>,
/// this uses [`Self::unit_outputs_ready`] as a shared ready flag
#[hdl(flip)]
pub cant_cause_cancel: HdlOption<UnitMOpCantCauseCancel<C>>,
@ -466,6 +481,16 @@ impl MOpInUnitState {
Self::FinishedAndOrCausedCancel => true,
}
}
/// return `true` if this µOp has been enqueued and has neither finished nor caused a cancel.
fn is_active(self) -> bool {
match self {
Self::NotYetEnqueued => false,
Self::InputsNotReadySpeculative { .. }
| Self::InputsReady { .. }
| Self::OutputReady { .. } => true,
Self::FinishedAndOrCausedCancel => false,
}
}
}
impl fmt::Debug for MOpInUnitState {
@ -614,6 +639,8 @@ impl<C: PhantomConstCpuConfig> RenameExecuteRetireState<C> {
all_prior_mops_finished_and_or_caused_cancel,
output,
caused_cancel,
other_units_cant_cause_cancels_before,
sent_other_units_cant_cause_cancels_before,
} in self.rob.renamed()
{
let masked_id = mop.id.as_int() as usize & mask;
@ -631,6 +658,11 @@ impl<C: PhantomConstCpuConfig> RenameExecuteRetireState<C> {
if *all_prior_mops_finished_and_or_caused_cancel {
f.write_str("(apfc)")?;
}
if *sent_other_units_cant_cause_cancels_before {
f.write_str("(socccb)")?;
} else if *other_units_cant_cause_cancels_before {
f.write_str("(occcb)")?;
}
if output.is_some() {
f.write_str("(output)")?;
}
@ -647,7 +679,6 @@ impl<C: PhantomConstCpuConfig> RenameExecuteRetireState<C> {
)
})
.to_string();
// TODO
}
retval
}
@ -1219,6 +1250,8 @@ impl<C: PhantomConstCpuConfig> RenameExecuteRetireState<C> {
all_prior_mops_finished_and_or_caused_cancel: _,
output: _,
caused_cancel: _,
other_units_cant_cause_cancels_before: _,
sent_other_units_cant_cause_cancels_before: _,
} in self.rob.renamed()
{
if *done_waiting_for_register_fences
@ -1263,31 +1296,50 @@ impl<C: PhantomConstCpuConfig> RenameExecuteRetireState<C> {
fn get_unit_mop_is_no_longer_speculative(
&self,
unit_index: usize,
) -> SimValue<HdlOption<UnitMOpIsNoLongerSpeculative<C>>> {
let ret_ty = HdlOption[UnitMOpIsNoLongerSpeculative[self.config]];
) -> Option<SimValue<UnitMOpIsNoLongerSpeculative<C>>> {
if self.is_canceling() {
let retval = #[hdl(sim)]
ret_ty.HdlNone();
return retval; // separate variable to work around rust-analyzer parse error
return None;
}
for rob in self.rob.renamed() {
if rob.unit_index == unit_index
&& !rob.is_speculative
&& let Some(_) = rob.mop_in_unit_state.without_speculative()
{
let retval = #[hdl(sim)]
ret_ty.HdlSome(
return Some(
#[hdl(sim)]
UnitMOpIsNoLongerSpeculative::<_> {
id: &rob.mop.id,
config: self.config,
},
);
return retval; // separate variable to work around rust-analyzer parse error
}
}
#[hdl(sim)]
ret_ty.HdlNone()
None
}
#[hdl]
fn get_unit_mop_other_units_cant_cause_cancels_before(
&self,
unit_index: usize,
) -> Option<SimValue<UnitMOpOtherUnitsCantCauseCancelsBefore<C>>> {
if self.is_canceling() {
return None;
}
for rob in self.rob.renamed() {
if rob.unit_index == unit_index
&& rob.other_units_cant_cause_cancels_before
&& rob.is_speculative
&& !rob.sent_other_units_cant_cause_cancels_before
{
return Some(
#[hdl(sim)]
UnitMOpOtherUnitsCantCauseCancelsBefore::<_> {
id: &rob.mop.id,
config: self.config,
},
);
}
}
None
}
#[hdl]
fn unit_output_ready(&mut self, output_ready: SimValue<UnitOutputReady<C>>) {
@ -1310,6 +1362,8 @@ impl<C: PhantomConstCpuConfig> RenameExecuteRetireState<C> {
all_prior_mops_finished_and_or_caused_cancel: _,
output,
caused_cancel,
other_units_cant_cause_cancels_before: _,
sent_other_units_cant_cause_cancels_before: _,
} = rob;
assert!(output.is_none());
assert!(caused_cancel.is_none());
@ -1345,6 +1399,8 @@ impl<C: PhantomConstCpuConfig> RenameExecuteRetireState<C> {
all_prior_mops_finished_and_or_caused_cancel: _,
output,
caused_cancel,
other_units_cant_cause_cancels_before: _,
sent_other_units_cant_cause_cancels_before: _,
} = self.rob.renamed_by_id_mut(&id);
assert!(caused_cancel.is_none());
let cancel_after_retire;
@ -1459,6 +1515,8 @@ impl<C: PhantomConstCpuConfig> RenameExecuteRetireState<C> {
all_prior_mops_finished_and_or_caused_cancel: _,
output,
caused_cancel,
other_units_cant_cause_cancels_before: _,
sent_other_units_cant_cause_cancels_before: _,
} = renamed_entry
{
if caused_cancel.is_some() {
@ -1584,6 +1642,8 @@ impl<C: PhantomConstCpuConfig> RenameExecuteRetireState<C> {
all_prior_mops_finished_and_or_caused_cancel: _,
output: _,
caused_cancel,
other_units_cant_cause_cancels_before: _,
sent_other_units_cant_cause_cancels_before: _,
} in renamed_entries
{
assert_eq!(mop_in_unit_state, MOpInUnitState::FinishedAndOrCausedCancel);
@ -1618,24 +1678,24 @@ impl<C: PhantomConstCpuConfig> RenameExecuteRetireState<C> {
};
}
for renamed in self.rob.renamed_mut() {
let can_cause_cancel = match renamed.mop_in_unit_state {
MOpInUnitState::NotYetEnqueued => true,
MOpInUnitState::InputsNotReadySpeculative { can_cause_cancel } => can_cause_cancel,
MOpInUnitState::InputsReady {
speculative: _,
can_cause_cancel,
} => can_cause_cancel,
MOpInUnitState::OutputReady {
speculative: _,
can_cause_cancel,
} => can_cause_cancel,
MOpInUnitState::FinishedAndOrCausedCancel => renamed.caused_cancel.is_some(),
};
renamed.is_speculative = false;
if can_cause_cancel {
if renamed.can_cause_cancel() {
break;
}
}
let mut unit_that_can_cause_cancel = None;
for renamed in self.rob.renamed_mut() {
if unit_that_can_cause_cancel.is_none_or(|v| v == renamed.unit_index) {
renamed.other_units_cant_cause_cancels_before = true;
}
if renamed.can_cause_cancel() {
let unit_that_can_cause_cancel =
*unit_that_can_cause_cancel.get_or_insert(renamed.unit_index);
if unit_that_can_cause_cancel != renamed.unit_index {
break;
}
}
}
for renamed in self.rob.renamed_mut() {
let RobEntry {
is_register_fence,
@ -1647,6 +1707,8 @@ impl<C: PhantomConstCpuConfig> RenameExecuteRetireState<C> {
all_prior_mops_finished_and_or_caused_cancel,
output: _,
caused_cancel: _,
other_units_cant_cause_cancels_before: _,
sent_other_units_cant_cause_cancels_before: _,
} = &renamed;
if *is_register_fence {
if !*all_prior_mops_finished_and_or_caused_cancel || *is_speculative {
@ -1671,6 +1733,8 @@ impl<C: PhantomConstCpuConfig> RenameExecuteRetireState<C> {
all_prior_mops_finished_and_or_caused_cancel: _,
output: _,
caused_cancel: Some(caused_cancel),
other_units_cant_cause_cancels_before: _,
sent_other_units_cant_cause_cancels_before: _,
}) = first_renamed
&& !*caused_cancel.cancel_after_retire
{
@ -1719,6 +1783,7 @@ async fn rename_execute_retire_run(
enqueue,
inputs_ready,
is_no_longer_speculative,
other_units_cant_cause_cancels_before,
cant_cause_cancel: _,
output_ready: _,
finish_cause_cancel: _,
@ -1747,6 +1812,11 @@ async fn rename_execute_retire_run(
state.get_unit_mop_is_no_longer_speculative(unit_index),
)
.await;
sim.write(
other_units_cant_cause_cancels_before,
state.get_unit_mop_other_units_cant_cause_cancels_before(unit_index),
)
.await;
sim.write(unit_outputs_ready, !is_canceling).await;
}
sim.wait_for_clock_edge(cd.clk).await;
@ -1767,6 +1837,7 @@ async fn rename_execute_retire_run(
enqueue,
inputs_ready,
is_no_longer_speculative,
other_units_cant_cause_cancels_before,
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -1788,6 +1859,8 @@ async fn rename_execute_retire_run(
all_prior_mops_finished_and_or_caused_cancel: _,
output,
caused_cancel,
other_units_cant_cause_cancels_before: _,
sent_other_units_cant_cause_cancels_before: _,
} = state.rob.renamed_by_id_mut(&enqueue.mop.id);
assert!(output.is_none());
assert!(caused_cancel.is_none());
@ -1809,6 +1882,8 @@ async fn rename_execute_retire_run(
all_prior_mops_finished_and_or_caused_cancel: _,
output,
caused_cancel,
other_units_cant_cause_cancels_before: _,
sent_other_units_cant_cause_cancels_before: _,
} = state.rob.renamed_by_id_mut(&inputs_ready.mop.id);
assert!(*done_waiting_for_register_fences);
assert!(output.is_none());
@ -1832,11 +1907,37 @@ async fn rename_execute_retire_run(
all_prior_mops_finished_and_or_caused_cancel: _,
output: _,
caused_cancel: _,
other_units_cant_cause_cancels_before: _,
sent_other_units_cant_cause_cancels_before: _,
} = state.rob.renamed_by_id_mut(&is_no_longer_speculative.id);
*mop_in_unit_state = mop_in_unit_state
.without_speculative()
.expect("UnitMOpIsNoLongerSpeculative is known to be valid");
}
#[hdl(sim)]
if let HdlSome(other_units_cant_cause_cancels_before) = sim
.read_past(other_units_cant_cause_cancels_before, cd.clk)
.await
{
assert!(!state.is_canceling());
let RobEntry {
is_register_fence: _,
done_waiting_for_register_fences: _,
mop: _,
unit_index: _,
mop_in_unit_state: _,
is_speculative: _,
all_prior_mops_finished_and_or_caused_cancel: _,
output: _,
caused_cancel: _,
other_units_cant_cause_cancels_before,
sent_other_units_cant_cause_cancels_before,
} = state
.rob
.renamed_by_id_mut(&other_units_cant_cause_cancels_before.id);
assert!(*other_units_cant_cause_cancels_before);
*sent_other_units_cant_cause_cancels_before = true;
}
if sim.read_past_bool(unit_outputs_ready, cd.clk).await {
#[hdl(sim)]
if let HdlSome(cant_cause_cancel) = sim.read_past(cant_cause_cancel, cd.clk).await {
@ -1853,6 +1954,8 @@ async fn rename_execute_retire_run(
all_prior_mops_finished_and_or_caused_cancel: _,
output: _,
caused_cancel,
other_units_cant_cause_cancels_before: _,
sent_other_units_cant_cause_cancels_before: _,
} = state.rob.renamed_by_id_mut(&id);
assert!(caused_cancel.is_none());
*mop_in_unit_state = mop_in_unit_state
@ -1959,6 +2062,7 @@ pub fn rename_execute_retire(config: PhantomConst<CpuConfig>) {
enqueue,
inputs_ready,
is_no_longer_speculative,
other_units_cant_cause_cancels_before,
cant_cause_cancel: _,
output_ready: _,
finish_cause_cancel: _,
@ -1992,6 +2096,12 @@ pub fn rename_execute_retire(config: PhantomConst<CpuConfig>) {
(is_no_longer_speculative.ty()).HdlNone(),
)
.await;
sim.write(
other_units_cant_cause_cancels_before,
#[hdl(sim)]
(other_units_cant_cause_cancels_before.ty()).HdlNone(),
)
.await;
sim.write(unit_outputs_ready, false).await;
}
},

View file

@ -40,6 +40,8 @@ struct RobEntryDebugState<C: PhantomConstGet<CpuConfig>> {
all_prior_mops_finished_and_or_caused_cancel: Bool,
output: HdlOption<NextPcPredictorOp<C>>,
caused_cancel: HdlOption<UnitCausedCancel<C>>,
other_units_cant_cause_cancels_before: Bool,
sent_other_units_cant_cause_cancels_before: Bool,
}
impl<C: PhantomConstCpuConfig> SimValueDefault for RobEntryDebugState<C> {
@ -55,6 +57,8 @@ impl<C: PhantomConstCpuConfig> SimValueDefault for RobEntryDebugState<C> {
all_prior_mops_finished_and_or_caused_cancel: _,
output,
caused_cancel,
other_units_cant_cause_cancels_before: _,
sent_other_units_cant_cause_cancels_before: _,
} = self;
#[hdl(sim)]
Self {
@ -69,6 +73,8 @@ impl<C: PhantomConstCpuConfig> SimValueDefault for RobEntryDebugState<C> {
output.HdlNone(),
caused_cancel: #[hdl(sim)]
caused_cancel.HdlNone(),
other_units_cant_cause_cancels_before: false,
sent_other_units_cant_cause_cancels_before: false,
}
}
}
@ -87,6 +93,8 @@ pub(crate) struct RobEntry<C: PhantomConstCpuConfig> {
pub(crate) all_prior_mops_finished_and_or_caused_cancel: bool,
pub(crate) output: Option<SimValue<NextPcPredictorOp<C>>>,
pub(crate) caused_cancel: Option<SimValue<UnitCausedCancel<C>>>,
pub(crate) other_units_cant_cause_cancels_before: bool,
pub(crate) sent_other_units_cant_cause_cancels_before: bool,
}
impl<C: PhantomConstCpuConfig> RobEntry<C> {
@ -105,6 +113,8 @@ impl<C: PhantomConstCpuConfig> RobEntry<C> {
all_prior_mops_finished_and_or_caused_cancel: false,
output: None,
caused_cancel: None,
other_units_cant_cause_cancels_before: false,
sent_other_units_cant_cause_cancels_before: false,
}
}
fn dest_reg(&self) -> Option<&SimValue<PRegNum<C>>> {
@ -131,6 +141,8 @@ impl<C: PhantomConstCpuConfig> RobEntry<C> {
all_prior_mops_finished_and_or_caused_cancel,
output,
caused_cancel,
other_units_cant_cause_cancels_before,
sent_other_units_cant_cause_cancels_before,
} = self;
let ret_ty = RobEntryDebugState[config];
#[hdl(sim)]
@ -144,6 +156,8 @@ impl<C: PhantomConstCpuConfig> RobEntry<C> {
all_prior_mops_finished_and_or_caused_cancel,
output: output.into_sim_value_with_type(ret_ty.output),
caused_cancel: caused_cancel.into_sim_value_with_type(ret_ty.caused_cancel),
other_units_cant_cause_cancels_before,
sent_other_units_cant_cause_cancels_before,
}
}
#[hdl]
@ -173,6 +187,21 @@ impl<C: PhantomConstCpuConfig> RobEntry<C> {
}
}
}
pub(crate) fn can_cause_cancel(&self) -> bool {
match self.mop_in_unit_state {
MOpInUnitState::NotYetEnqueued => true,
MOpInUnitState::InputsNotReadySpeculative { can_cause_cancel } => can_cause_cancel,
MOpInUnitState::InputsReady {
speculative: _,
can_cause_cancel,
} => can_cause_cancel,
MOpInUnitState::OutputReady {
speculative: _,
can_cause_cancel,
} => can_cause_cancel,
MOpInUnitState::FinishedAndOrCausedCancel => self.caused_cancel.is_some(),
}
}
}
#[hdl]

View file

@ -204,6 +204,7 @@ fn connect_to_unit_nop<C: Type + PhantomConstGet<CpuConfig>>(
enqueue,
inputs_ready,
is_no_longer_speculative,
other_units_cant_cause_cancels_before,
cant_cause_cancel: _,
output_ready: _,
finish_cause_cancel: _,
@ -218,6 +219,10 @@ fn connect_to_unit_nop<C: Type + PhantomConstGet<CpuConfig>>(
is_no_longer_speculative,
is_no_longer_speculative.ty().HdlNone(),
);
connect(
other_units_cant_cause_cancels_before,
other_units_cant_cause_cancels_before.ty().HdlNone(),
);
connect(unit_outputs_ready, false);
connect(cancel_all.data, HdlNone());
}
@ -506,6 +511,7 @@ impl<C: PhantomConstCpuConfig, MaxMOpCount: Size> DecodeAndRunSingleInsnState<C,
enqueue,
inputs_ready,
is_no_longer_speculative,
other_units_cant_cause_cancels_before,
cant_cause_cancel: _, // we don't track if it can cause a cancel
output_ready,
finish_cause_cancel,
@ -513,6 +519,10 @@ impl<C: PhantomConstCpuConfig, MaxMOpCount: Size> DecodeAndRunSingleInsnState<C,
cancel_all,
config: _,
} = to_unit;
connect(
other_units_cant_cause_cancels_before,
other_units_cant_cause_cancels_before.ty().HdlNone(),
);
connect(unit_outputs_ready, true);
connect(cancel_all.data, HdlNone());
#[hdl]

View file

@ -1260,6 +1260,7 @@ pub fn alu_branch(
enqueue,
inputs_ready,
is_no_longer_speculative: _, // we don't care about being speculative for these instructions
other_units_cant_cause_cancels_before: _, // we don't care about other instructions being able to cause cancels
cant_cause_cancel,
output_ready,
finish_cause_cancel,

View file

@ -13,7 +13,7 @@ use crate::{
rename_execute_retire::{
ExecuteToUnitInterface, GlobalState, MOpId, MOpInstance, NextPcPredictorOp, UnitEnqueue,
UnitFinishCauseCancel, UnitInputsReady, UnitMOpCantCauseCancel,
UnitMOpIsNoLongerSpeculative, UnitOutputReady,
UnitMOpIsNoLongerSpeculative, UnitMOpOtherUnitsCantCauseCancelsBefore, UnitOutputReady,
},
unit::{DynUnit, DynUnitWrapper, RenamedMOpFilter, UnitIO, UnitKind, UnitMOp, UnitTrait},
};
@ -53,6 +53,8 @@ pub struct DCacheStart<C: PhantomConstGet<CpuConfig>> {
}
#[hdl]
/// All errors here cause asynchronous error interrupts, so anything requiring precise exceptions (e.g. page
/// faults) must happen before the D-cache.
pub enum DCacheFinishStatus {
/// The operation finished successfully
Success,
@ -116,7 +118,7 @@ pub struct LoadStoreToDCacheInterface<C: PhantomConstGet<CpuConfig>> {
/// Operations started through `start` must maintain sequential consistency -- so earlier operations
/// can't appear to have happened after later operations.
pub start: ReadyValid<DCacheStart<C>>,
/// operations must finish in the same order they started.
/// Operations must finish in the same order they started.
#[hdl(flip)]
pub finish: ReadyValid<DCacheFinish<C>>,
/// It's valid for `start_speculative_load.ready` to be `false` at any time (or even always)
@ -200,9 +202,7 @@ struct Op<C: PhantomConstCpuConfig> {
pc: SimValue<UInt<64>>,
size_in_bytes: u8,
mop: SimValue<LoadStoreMOp<PRegNum<C>, PRegNum<C>>>,
/// earlier instructions can cause a cancel, so this instruction is still speculative.
/// not to be confused with this instruction being able to cause a cancel.
is_speculative: bool,
other_units_cant_cause_cancels_before: bool,
src_values: Option<[SimValue<TraceAsString<PRegValue>>; COMMON_MOP_SRC_LEN]>,
dest_value: Option<SimValue<TraceAsString<PRegValue>>>,
sent_cant_cause_cancel: bool,
@ -218,15 +218,15 @@ impl<C: PhantomConstCpuConfig> fmt::Display for Op<C> {
pc,
size_in_bytes,
mop,
is_speculative,
other_units_cant_cause_cancels_before,
src_values,
dest_value,
sent_cant_cause_cancel,
sent_output_ready,
state,
} = self;
if *is_speculative {
f.write_str("(s)")?;
if *other_units_cant_cause_cancels_before {
f.write_str("(occcb)")?;
}
if *sent_cant_cause_cancel {
f.write_str("(sccc)")?;
@ -262,7 +262,7 @@ impl<C: PhantomConstCpuConfig> Op<C> {
pc,
size_in_bytes,
mop,
is_speculative: true,
other_units_cant_cause_cancels_before: false,
src_values: None,
dest_value: None,
sent_cant_cause_cancel: false,
@ -300,16 +300,12 @@ impl<C: PhantomConstCpuConfig> Op<C> {
}
}
fn can_cause_cancel(&self) -> bool {
if self.is_speculative {
return true;
}
match self.state {
OpState::InputNotReady
| OpState::StartedSpeculativeLoad
| OpState::FinishedSpeculativeLoad
| OpState::StartedLoadStore => true,
OpState::FinishedSpeculativeLoad | OpState::FinishedLoadStore => {
self.dest_value.is_none()
}
OpState::FinishedLoadStore => self.dest_value.is_none(),
}
}
}
@ -384,9 +380,12 @@ impl<C: PhantomConstCpuConfig> LoadStoreState<C> {
filter,
}
}
fn try_op_by_id(&mut self, id: &<MOpId as Type>::SimValue) -> Option<&mut Op<C>> {
self.ops.iter_mut().find(|op| *op.id == *id)
}
#[track_caller]
fn op_by_id(&mut self, id: &<MOpId as Type>::SimValue) -> &mut Op<C> {
match self.ops.iter_mut().find(|op| *op.id == *id) {
match self.try_op_by_id(id) {
Some(op) => op,
None => panic!("can't find load_store Op with id {id:?}"),
}
@ -439,7 +438,17 @@ impl<C: PhantomConstCpuConfig> LoadStoreState<C> {
) {
#[hdl(sim)]
let UnitMOpIsNoLongerSpeculative::<_> { id, config: _ } = is_no_longer_speculative;
self.op_by_id(&id).is_speculative = false;
self.op_by_id(&id).other_units_cant_cause_cancels_before = true;
}
#[hdl]
fn from_execute_other_units_cant_cause_cancels_before(
&mut self,
other_units_cant_cause_cancels_before: SimValue<UnitMOpOtherUnitsCantCauseCancelsBefore<C>>,
) {
#[hdl(sim)]
let UnitMOpOtherUnitsCantCauseCancelsBefore::<_> { id, config: _ } =
other_units_cant_cause_cancels_before;
self.op_by_id(&id).other_units_cant_cause_cancels_before = true;
}
#[hdl]
fn from_execute_cant_cause_cancel(&self) -> Option<SimValue<UnitMOpCantCauseCancel<C>>> {
@ -518,14 +527,14 @@ impl<C: PhantomConstCpuConfig> LoadStoreState<C> {
pc: _,
size_in_bytes: _,
mop: _,
is_speculative,
other_units_cant_cause_cancels_before,
src_values: _,
dest_value,
sent_cant_cause_cancel: _,
sent_output_ready,
state,
} = self.ops.front()?;
if *is_speculative {
if !*other_units_cant_cause_cancels_before {
return None;
}
let retval_ty = UnitFinishCauseCancel[self.config];
@ -809,25 +818,35 @@ impl<C: PhantomConstCpuConfig> LoadStoreState<C> {
}
#[hdl]
fn step(&mut self) {
if self.canceling {
let Self {
global_state: _,
ops,
d_cache_start,
d_cache_start_speculative_load,
canceling,
config,
unit_index: _,
filter: _,
} = self;
if *canceling {
return self.canceling_step();
}
self.d_cache_start = None;
self.d_cache_start_speculative_load = None;
*d_cache_start = None;
*d_cache_start_speculative_load = None;
let store_queue_capacity = 4; // TODO: make configurable
struct StoreQueueEntry {
access_range: AddressRange,
data: [u8; MAX_LOAD_STORE_SIZE],
}
let mut store_queue = Vec::<StoreQueueEntry>::with_capacity(store_queue_capacity);
for op in &mut self.ops {
for op in ops {
let access_range = op.access_range();
let Op {
ref id,
pc: _,
size_in_bytes: _,
ref mop,
is_speculative,
other_units_cant_cause_cancels_before,
ref src_values,
ref mut dest_value,
sent_cant_cause_cancel: _,
@ -871,21 +890,23 @@ impl<C: PhantomConstCpuConfig> LoadStoreState<C> {
let mask = std::array::from_fn(|i| i < size.get() as usize);
match state {
OpState::InputNotReady
if is_speculative && !blocking_store && is_cacheable =>
if !other_units_cant_cause_cancels_before
&& !blocking_store
&& is_cacheable =>
{
self.d_cache_start_speculative_load.get_or_insert_with(|| {
d_cache_start_speculative_load.get_or_insert_with(|| {
#[hdl(sim)]
DCacheStartSpeculativeLoad::<_> {
id,
address,
mask,
config: self.config,
config,
}
});
}
OpState::InputNotReady | OpState::FinishedSpeculativeLoad => {
if !is_speculative && dest_value.is_none() {
self.d_cache_start.get_or_insert_with(|| {
if other_units_cant_cause_cancels_before && dest_value.is_none() {
d_cache_start.get_or_insert_with(|| {
#[hdl(sim)]
DCacheStart::<_> {
id,
@ -896,7 +917,7 @@ impl<C: PhantomConstCpuConfig> LoadStoreState<C> {
),
address,
data_and_mask: mask.map(|v| v.then_some(0)),
config: self.config,
config,
}
});
}
@ -912,7 +933,7 @@ impl<C: PhantomConstCpuConfig> LoadStoreState<C> {
pc: _,
size_in_bytes: _,
mop: _,
is_speculative,
other_units_cant_cause_cancels_before,
ref src_values,
ref dest_value,
sent_cant_cause_cancel: _,
@ -939,8 +960,8 @@ impl<C: PhantomConstCpuConfig> LoadStoreState<C> {
}
match state {
OpState::InputNotReady => {
if !is_speculative {
self.d_cache_start.get_or_insert_with(|| {
if other_units_cant_cause_cancels_before {
d_cache_start.get_or_insert_with(|| {
#[hdl(sim)]
DCacheStart::<_> {
id,
@ -951,7 +972,7 @@ impl<C: PhantomConstCpuConfig> LoadStoreState<C> {
),
address,
data_and_mask,
config: self.config,
config,
}
});
}
@ -988,6 +1009,7 @@ async fn load_store_impl(
enqueue,
inputs_ready: _,
is_no_longer_speculative: _,
other_units_cant_cause_cancels_before: _,
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -1042,6 +1064,7 @@ async fn load_store_impl(
enqueue,
inputs_ready,
is_no_longer_speculative,
other_units_cant_cause_cancels_before,
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -1066,6 +1089,15 @@ async fn load_store_impl(
{
state.from_execute_is_no_longer_speculative(is_no_longer_speculative);
}
#[hdl(sim)]
if let HdlSome(other_units_cant_cause_cancels_before) = sim
.read_past(other_units_cant_cause_cancels_before, cd.clk)
.await
{
state.from_execute_other_units_cant_cause_cancels_before(
other_units_cant_cause_cancels_before,
);
}
if sim.read_past_bool(unit_outputs_ready, cd.clk).await {
#[hdl(sim)]
if let HdlSome(cant_cause_cancel) = sim.read_past(cant_cause_cancel, cd.clk).await {
@ -1221,6 +1253,7 @@ pub fn load_store(
enqueue,
inputs_ready: _,
is_no_longer_speculative: _,
other_units_cant_cause_cancels_before: _,
cant_cause_cancel,
output_ready,
finish_cause_cancel,

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1275,6 +1275,13 @@ $var wire 16 gDmEE id $end
$var string 1 l(Ah_ config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 ;aq90 \$tag $end
$scope struct HdlSome $end
$var wire 16 l{J$] id $end
$var string 1 Nix(+ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 zJgj& \$tag $end
$scope struct HdlSome $end
@ -14589,6 +14596,13 @@ $var wire 16 ~w1^> id $end
$var string 1 %RV:C config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #<FC> \$tag $end
$scope struct HdlSome $end
$var wire 16 z[},} id $end
$var string 1 UnOX` config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 &KsMs \$tag $end
$scope struct HdlSome $end
@ -15210,6 +15224,13 @@ $var wire 16 [hMz. id $end
$var string 1 }!B*c config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #5`o3 \$tag $end
$scope struct HdlSome $end
$var wire 16 gqr/^ id $end
$var string 1 `haz~ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 0X}tP \$tag $end
$scope struct HdlSome $end
@ -15421,6 +15442,13 @@ $var wire 16 ']_J^ id $end
$var string 1 lUFJg config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 \1bYR \$tag $end
$scope struct HdlSome $end
$var wire 16 }r^J= id $end
$var string 1 ,1@Ze config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 `A[2< \$tag $end
$scope struct HdlSome $end
@ -17229,6 +17257,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) qtNE\
b0 gDmEE
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) l(Ah_
sHdlNone\x20(0) ;aq90
b0 l{J$]
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) Nix(+
sHdlNone\x20(0) zJgj&
b0 <~R^D
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) '}m>.
@ -23167,6 +23198,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) Vy"k\
b0 ~w1^>
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) %RV:C
sHdlNone\x20(0) #<FC>
b0 z[},}
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) UnOX`
sHdlNone\x20(0) &KsMs
b0 |]Zt8
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) z6!=|
@ -23577,6 +23611,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) 05GRu
b0 [hMz.
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) }!B*c
sHdlNone\x20(0) #5`o3
b0 gqr/^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) `haz~
sHdlNone\x20(0) 0X}tP
b0 vxQK:
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) +4v<h
@ -23656,6 +23693,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) C2t\%
b0 ']_J^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) lUFJg
sHdlNone\x20(0) \1bYR
b0 }r^J=
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) ,1@Ze
sHdlNone\x20(0) `A[2<
b0 19hEe
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) |6GEC

View file

@ -1275,6 +1275,13 @@ $var wire 16 gDmEE id $end
$var string 1 l(Ah_ config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 ;aq90 \$tag $end
$scope struct HdlSome $end
$var wire 16 l{J$] id $end
$var string 1 Nix(+ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 zJgj& \$tag $end
$scope struct HdlSome $end
@ -14164,6 +14171,13 @@ $var wire 16 ~w1^> id $end
$var string 1 %RV:C config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #<FC> \$tag $end
$scope struct HdlSome $end
$var wire 16 z[},} id $end
$var string 1 UnOX` config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 &KsMs \$tag $end
$scope struct HdlSome $end
@ -14785,6 +14799,13 @@ $var wire 16 [hMz. id $end
$var string 1 }!B*c config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #5`o3 \$tag $end
$scope struct HdlSome $end
$var wire 16 gqr/^ id $end
$var string 1 `haz~ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 0X}tP \$tag $end
$scope struct HdlSome $end
@ -14996,6 +15017,13 @@ $var wire 16 ']_J^ id $end
$var string 1 lUFJg config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 \1bYR \$tag $end
$scope struct HdlSome $end
$var wire 16 }r^J= id $end
$var string 1 ,1@Ze config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 `A[2< \$tag $end
$scope struct HdlSome $end
@ -16636,6 +16664,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) qtNE\
b0 gDmEE
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) l(Ah_
sHdlNone\x20(0) ;aq90
b0 l{J$]
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) Nix(+
sHdlNone\x20(0) zJgj&
b0 <~R^D
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) '}m>.
@ -22489,6 +22520,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) Vy"k\
b0 ~w1^>
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) %RV:C
sHdlNone\x20(0) #<FC>
b0 z[},}
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) UnOX`
sHdlNone\x20(0) &KsMs
b0 |]Zt8
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) z6!=|
@ -22899,6 +22933,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) 05GRu
b0 [hMz.
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) }!B*c
sHdlNone\x20(0) #5`o3
b0 gqr/^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) `haz~
sHdlNone\x20(0) 0X}tP
b0 vxQK:
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) +4v<h
@ -22978,6 +23015,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) C2t\%
b0 ']_J^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) lUFJg
sHdlNone\x20(0) \1bYR
b0 }r^J=
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) ,1@Ze
sHdlNone\x20(0) `A[2<
b0 19hEe
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) |6GEC

View file

@ -1275,6 +1275,13 @@ $var wire 16 gDmEE id $end
$var string 1 l(Ah_ config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 ;aq90 \$tag $end
$scope struct HdlSome $end
$var wire 16 l{J$] id $end
$var string 1 Nix(+ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 zJgj& \$tag $end
$scope struct HdlSome $end
@ -14203,6 +14210,13 @@ $var wire 16 ~w1^> id $end
$var string 1 %RV:C config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #<FC> \$tag $end
$scope struct HdlSome $end
$var wire 16 z[},} id $end
$var string 1 UnOX` config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 &KsMs \$tag $end
$scope struct HdlSome $end
@ -14824,6 +14838,13 @@ $var wire 16 [hMz. id $end
$var string 1 }!B*c config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #5`o3 \$tag $end
$scope struct HdlSome $end
$var wire 16 gqr/^ id $end
$var string 1 `haz~ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 0X}tP \$tag $end
$scope struct HdlSome $end
@ -15035,6 +15056,13 @@ $var wire 16 ']_J^ id $end
$var string 1 lUFJg config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 \1bYR \$tag $end
$scope struct HdlSome $end
$var wire 16 }r^J= id $end
$var string 1 ,1@Ze config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 `A[2< \$tag $end
$scope struct HdlSome $end
@ -16638,6 +16666,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) qtNE\
b0 gDmEE
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) l(Ah_
sHdlNone\x20(0) ;aq90
b0 l{J$]
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) Nix(+
sHdlNone\x20(0) zJgj&
b0 <~R^D
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) '}m>.
@ -22488,6 +22519,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) Vy"k\
b0 ~w1^>
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) %RV:C
sHdlNone\x20(0) #<FC>
b0 z[},}
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) UnOX`
sHdlNone\x20(0) &KsMs
b0 |]Zt8
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) z6!=|
@ -22898,6 +22932,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) 05GRu
b0 [hMz.
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) }!B*c
sHdlNone\x20(0) #5`o3
b0 gqr/^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) `haz~
sHdlNone\x20(0) 0X}tP
b0 vxQK:
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) +4v<h
@ -22977,6 +23014,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) C2t\%
b0 ']_J^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) lUFJg
sHdlNone\x20(0) \1bYR
b0 }r^J=
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) ,1@Ze
sHdlNone\x20(0) `A[2<
b0 19hEe
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) |6GEC

View file

@ -1275,6 +1275,13 @@ $var wire 16 gDmEE id $end
$var string 1 l(Ah_ config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 ;aq90 \$tag $end
$scope struct HdlSome $end
$var wire 16 l{J$] id $end
$var string 1 Nix(+ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 zJgj& \$tag $end
$scope struct HdlSome $end
@ -14203,6 +14210,13 @@ $var wire 16 ~w1^> id $end
$var string 1 %RV:C config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #<FC> \$tag $end
$scope struct HdlSome $end
$var wire 16 z[},} id $end
$var string 1 UnOX` config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 &KsMs \$tag $end
$scope struct HdlSome $end
@ -14824,6 +14838,13 @@ $var wire 16 [hMz. id $end
$var string 1 }!B*c config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #5`o3 \$tag $end
$scope struct HdlSome $end
$var wire 16 gqr/^ id $end
$var string 1 `haz~ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 0X}tP \$tag $end
$scope struct HdlSome $end
@ -15035,6 +15056,13 @@ $var wire 16 ']_J^ id $end
$var string 1 lUFJg config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 \1bYR \$tag $end
$scope struct HdlSome $end
$var wire 16 }r^J= id $end
$var string 1 ,1@Ze config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 `A[2< \$tag $end
$scope struct HdlSome $end
@ -16638,6 +16666,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) qtNE\
b0 gDmEE
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) l(Ah_
sHdlNone\x20(0) ;aq90
b0 l{J$]
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) Nix(+
sHdlNone\x20(0) zJgj&
b0 <~R^D
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) '}m>.
@ -22488,6 +22519,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) Vy"k\
b0 ~w1^>
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) %RV:C
sHdlNone\x20(0) #<FC>
b0 z[},}
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) UnOX`
sHdlNone\x20(0) &KsMs
b0 |]Zt8
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) z6!=|
@ -22898,6 +22932,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) 05GRu
b0 [hMz.
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) }!B*c
sHdlNone\x20(0) #5`o3
b0 gqr/^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) `haz~
sHdlNone\x20(0) 0X}tP
b0 vxQK:
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) +4v<h
@ -22977,6 +23014,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) C2t\%
b0 ']_J^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) lUFJg
sHdlNone\x20(0) \1bYR
b0 }r^J=
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) ,1@Ze
sHdlNone\x20(0) `A[2<
b0 19hEe
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) |6GEC

View file

@ -1275,6 +1275,13 @@ $var wire 16 gDmEE id $end
$var string 1 l(Ah_ config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 ;aq90 \$tag $end
$scope struct HdlSome $end
$var wire 16 l{J$] id $end
$var string 1 Nix(+ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 zJgj& \$tag $end
$scope struct HdlSome $end
@ -14181,6 +14188,13 @@ $var wire 16 ~w1^> id $end
$var string 1 %RV:C config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #<FC> \$tag $end
$scope struct HdlSome $end
$var wire 16 z[},} id $end
$var string 1 UnOX` config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 &KsMs \$tag $end
$scope struct HdlSome $end
@ -14802,6 +14816,13 @@ $var wire 16 [hMz. id $end
$var string 1 }!B*c config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #5`o3 \$tag $end
$scope struct HdlSome $end
$var wire 16 gqr/^ id $end
$var string 1 `haz~ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 0X}tP \$tag $end
$scope struct HdlSome $end
@ -15013,6 +15034,13 @@ $var wire 16 ']_J^ id $end
$var string 1 lUFJg config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 \1bYR \$tag $end
$scope struct HdlSome $end
$var wire 16 }r^J= id $end
$var string 1 ,1@Ze config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 `A[2< \$tag $end
$scope struct HdlSome $end
@ -16660,6 +16688,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) qtNE\
b0 gDmEE
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) l(Ah_
sHdlNone\x20(0) ;aq90
b0 l{J$]
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) Nix(+
sHdlNone\x20(0) zJgj&
b0 <~R^D
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) '}m>.
@ -22508,6 +22539,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) Vy"k\
b0 ~w1^>
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) %RV:C
sHdlNone\x20(0) #<FC>
b0 z[},}
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) UnOX`
sHdlNone\x20(0) &KsMs
b0 |]Zt8
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) z6!=|
@ -22918,6 +22952,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) 05GRu
b0 [hMz.
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) }!B*c
sHdlNone\x20(0) #5`o3
b0 gqr/^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) `haz~
sHdlNone\x20(0) 0X}tP
b0 vxQK:
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) +4v<h
@ -22997,6 +23034,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) C2t\%
b0 ']_J^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) lUFJg
sHdlNone\x20(0) \1bYR
b0 }r^J=
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) ,1@Ze
sHdlNone\x20(0) `A[2<
b0 19hEe
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) |6GEC

View file

@ -1275,6 +1275,13 @@ $var wire 16 gDmEE id $end
$var string 1 l(Ah_ config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 ;aq90 \$tag $end
$scope struct HdlSome $end
$var wire 16 l{J$] id $end
$var string 1 Nix(+ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 zJgj& \$tag $end
$scope struct HdlSome $end
@ -14202,6 +14209,13 @@ $var wire 16 ~w1^> id $end
$var string 1 %RV:C config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #<FC> \$tag $end
$scope struct HdlSome $end
$var wire 16 z[},} id $end
$var string 1 UnOX` config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 &KsMs \$tag $end
$scope struct HdlSome $end
@ -14823,6 +14837,13 @@ $var wire 16 [hMz. id $end
$var string 1 }!B*c config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #5`o3 \$tag $end
$scope struct HdlSome $end
$var wire 16 gqr/^ id $end
$var string 1 `haz~ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 0X}tP \$tag $end
$scope struct HdlSome $end
@ -15034,6 +15055,13 @@ $var wire 16 ']_J^ id $end
$var string 1 lUFJg config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 \1bYR \$tag $end
$scope struct HdlSome $end
$var wire 16 }r^J= id $end
$var string 1 ,1@Ze config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 `A[2< \$tag $end
$scope struct HdlSome $end
@ -16637,6 +16665,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) qtNE\
b0 gDmEE
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) l(Ah_
sHdlNone\x20(0) ;aq90
b0 l{J$]
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) Nix(+
sHdlNone\x20(0) zJgj&
b0 <~R^D
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) '}m>.
@ -22486,6 +22517,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) Vy"k\
b0 ~w1^>
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) %RV:C
sHdlNone\x20(0) #<FC>
b0 z[},}
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) UnOX`
sHdlNone\x20(0) &KsMs
b0 |]Zt8
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) z6!=|
@ -22896,6 +22930,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) 05GRu
b0 [hMz.
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) }!B*c
sHdlNone\x20(0) #5`o3
b0 gqr/^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) `haz~
sHdlNone\x20(0) 0X}tP
b0 vxQK:
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) +4v<h
@ -22975,6 +23012,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) C2t\%
b0 ']_J^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) lUFJg
sHdlNone\x20(0) \1bYR
b0 }r^J=
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) ,1@Ze
sHdlNone\x20(0) `A[2<
b0 19hEe
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) |6GEC

View file

@ -1275,6 +1275,13 @@ $var wire 16 gDmEE id $end
$var string 1 l(Ah_ config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 ;aq90 \$tag $end
$scope struct HdlSome $end
$var wire 16 l{J$] id $end
$var string 1 Nix(+ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 zJgj& \$tag $end
$scope struct HdlSome $end
@ -14202,6 +14209,13 @@ $var wire 16 ~w1^> id $end
$var string 1 %RV:C config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #<FC> \$tag $end
$scope struct HdlSome $end
$var wire 16 z[},} id $end
$var string 1 UnOX` config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 &KsMs \$tag $end
$scope struct HdlSome $end
@ -14823,6 +14837,13 @@ $var wire 16 [hMz. id $end
$var string 1 }!B*c config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #5`o3 \$tag $end
$scope struct HdlSome $end
$var wire 16 gqr/^ id $end
$var string 1 `haz~ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 0X}tP \$tag $end
$scope struct HdlSome $end
@ -15034,6 +15055,13 @@ $var wire 16 ']_J^ id $end
$var string 1 lUFJg config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 \1bYR \$tag $end
$scope struct HdlSome $end
$var wire 16 }r^J= id $end
$var string 1 ,1@Ze config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 `A[2< \$tag $end
$scope struct HdlSome $end
@ -16629,6 +16657,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) qtNE\
b0 gDmEE
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) l(Ah_
sHdlNone\x20(0) ;aq90
b0 l{J$]
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) Nix(+
sHdlNone\x20(0) zJgj&
b0 <~R^D
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) '}m>.
@ -22478,6 +22509,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) Vy"k\
b0 ~w1^>
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) %RV:C
sHdlNone\x20(0) #<FC>
b0 z[},}
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) UnOX`
sHdlNone\x20(0) &KsMs
b0 |]Zt8
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) z6!=|
@ -22888,6 +22922,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) 05GRu
b0 [hMz.
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) }!B*c
sHdlNone\x20(0) #5`o3
b0 gqr/^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) `haz~
sHdlNone\x20(0) 0X}tP
b0 vxQK:
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) +4v<h
@ -22967,6 +23004,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) C2t\%
b0 ']_J^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) lUFJg
sHdlNone\x20(0) \1bYR
b0 }r^J=
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) ,1@Ze
sHdlNone\x20(0) `A[2<
b0 19hEe
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) |6GEC

View file

@ -1275,6 +1275,13 @@ $var wire 16 gDmEE id $end
$var string 1 l(Ah_ config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 ;aq90 \$tag $end
$scope struct HdlSome $end
$var wire 16 l{J$] id $end
$var string 1 Nix(+ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 zJgj& \$tag $end
$scope struct HdlSome $end
@ -14589,6 +14596,13 @@ $var wire 16 ~w1^> id $end
$var string 1 %RV:C config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #<FC> \$tag $end
$scope struct HdlSome $end
$var wire 16 z[},} id $end
$var string 1 UnOX` config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 &KsMs \$tag $end
$scope struct HdlSome $end
@ -15210,6 +15224,13 @@ $var wire 16 [hMz. id $end
$var string 1 }!B*c config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 #5`o3 \$tag $end
$scope struct HdlSome $end
$var wire 16 gqr/^ id $end
$var string 1 `haz~ config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 0X}tP \$tag $end
$scope struct HdlSome $end
@ -15421,6 +15442,13 @@ $var wire 16 ']_J^ id $end
$var string 1 lUFJg config $end
$upscope $end
$upscope $end
$scope struct other_units_cant_cause_cancels_before $end
$var string 1 \1bYR \$tag $end
$scope struct HdlSome $end
$var wire 16 }r^J= id $end
$var string 1 ,1@Ze config $end
$upscope $end
$upscope $end
$scope struct cant_cause_cancel $end
$var string 1 `A[2< \$tag $end
$scope struct HdlSome $end
@ -17229,6 +17257,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) qtNE\
b0 gDmEE
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) l(Ah_
sHdlNone\x20(0) ;aq90
b0 l{J$]
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) Nix(+
sHdlNone\x20(0) zJgj&
b0 <~R^D
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) '}m>.
@ -23167,6 +23198,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) Vy"k\
b0 ~w1^>
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) %RV:C
sHdlNone\x20(0) #<FC>
b0 z[},}
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) UnOX`
sHdlNone\x20(0) &KsMs
b0 |]Zt8
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) z6!=|
@ -23577,6 +23611,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) 05GRu
b0 [hMz.
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) }!B*c
sHdlNone\x20(0) #5`o3
b0 gqr/^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) `haz~
sHdlNone\x20(0) 0X}tP
b0 vxQK:
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) +4v<h
@ -23656,6 +23693,9 @@ sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out
sHdlNone\x20(0) C2t\%
b0 ']_J^
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) lUFJg
sHdlNone\x20(0) \1bYR
b0 }r^J=
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) ,1@Ze
sHdlNone\x20(0) `A[2<
b0 19hEe
sPhantomConst({\"units\":[{\"kind\":\"AluBranch\",\"max_in_flight\":null}],\"out_reg_num_width\":4,\"fetch_width\":1,\"max_branches_per_fetch\":1,\"max_fetches_in_flight\":16,\"log2_fetch_width_in_bytes\":3,\"log2_cache_line_size_in_bytes\":6,\"log2_l1_i_cache_line_count\":8,\"l1_i_cache_max_misses_in_flight\":2,\"default_unit_max_in_flight\":8,\"rob_size\":20}) |6GEC

View file

@ -12,7 +12,8 @@ use cpu::{
rename_execute_retire::{
ExecuteToUnitInterface, GlobalState, MOpId, MOpInstance, NextPcPredictorOp,
UnitCausedCancel, UnitEnqueue, UnitFinishCauseCancel, UnitInputsReady,
UnitMOpCantCauseCancel, UnitMOpIsNoLongerSpeculative, UnitOutputReady,
UnitMOpCantCauseCancel, UnitMOpIsNoLongerSpeculative,
UnitMOpOtherUnitsCantCauseCancelsBefore, UnitOutputReady,
},
unit::{
UnitKind,
@ -1401,6 +1402,7 @@ struct Insn<C: PhantomConstCpuConfig> {
mop: SimValue<MOpInstance<LoadStoreMOp<PRegNum<C>, PRegNum<C>>>>,
sent_inputs_ready: bool,
sent_is_no_longer_speculative: bool,
sent_other_units_cant_cause_cancels_before: bool,
caused_cancel_before_retire: bool,
cant_cause_cancel: bool,
output: Option<SimValue<TraceAsString<PRegValue>>>,
@ -1415,6 +1417,7 @@ impl<C: PhantomConstCpuConfig> fmt::Display for Insn<C> {
mop,
sent_inputs_ready,
sent_is_no_longer_speculative,
sent_other_units_cant_cause_cancels_before,
caused_cancel_before_retire,
cant_cause_cancel,
output,
@ -1432,6 +1435,9 @@ impl<C: PhantomConstCpuConfig> fmt::Display for Insn<C> {
if *sent_is_no_longer_speculative {
write!(f, " (sinls)")?;
}
if *sent_other_units_cant_cause_cancels_before {
write!(f, " (socccb)")?;
}
if *caused_cancel_before_retire {
write!(f, " (ccbr)")?;
}
@ -1612,6 +1618,7 @@ impl<C: PhantomConstCpuConfig> LoadStoreTesterState<C> {
},
sent_inputs_ready: false,
sent_is_no_longer_speculative: false,
sent_other_units_cant_cause_cancels_before: false,
caused_cancel_before_retire: false,
cant_cause_cancel: false,
output: None,
@ -1859,6 +1866,7 @@ impl<C: PhantomConstCpuConfig> LoadStoreTesterState<C> {
mop,
sent_inputs_ready,
sent_is_no_longer_speculative: _,
sent_other_units_cant_cause_cancels_before: _,
caused_cancel_before_retire: _,
cant_cause_cancel: _,
output: _,
@ -1929,6 +1937,7 @@ impl<C: PhantomConstCpuConfig> LoadStoreTesterState<C> {
mop,
sent_inputs_ready: _,
sent_is_no_longer_speculative,
sent_other_units_cant_cause_cancels_before: _,
caused_cancel_before_retire,
cant_cause_cancel,
output: _,
@ -1964,8 +1973,60 @@ impl<C: PhantomConstCpuConfig> LoadStoreTesterState<C> {
if self.canceling {
return;
}
Self::insn_by_id(&mut self.insns, &is_no_longer_speculative.id)
.sent_is_no_longer_speculative = true;
let insn = Self::insn_by_id(&mut self.insns, &is_no_longer_speculative.id);
insn.sent_is_no_longer_speculative = true;
}
#[hdl]
fn to_load_store_other_units_cant_cause_cancels_before(
&self,
) -> Option<SimValue<UnitMOpOtherUnitsCantCauseCancelsBefore<C>>> {
if self.canceling {
return None;
}
let mut is_speculative = false;
for insn in &self.insns[self.enqueued.clone()] {
let Insn {
cycles_after_start_to_cancel,
mop,
sent_inputs_ready: _,
sent_is_no_longer_speculative: _,
sent_other_units_cant_cause_cancels_before,
caused_cancel_before_retire,
cant_cause_cancel,
output: _,
finished,
} = insn;
if cycles_after_start_to_cancel.is_some() {
return None;
}
if !*sent_other_units_cant_cause_cancels_before && is_speculative {
return Some(
#[hdl(sim)]
UnitMOpOtherUnitsCantCauseCancelsBefore::<_> {
id: &mop.id,
config: self.config,
},
);
}
if *finished && !*caused_cancel_before_retire {
continue;
}
if !*cant_cause_cancel {
is_speculative = true;
}
}
None
}
#[hdl]
fn handle_to_load_store_other_units_cant_cause_cancels_before(
&mut self,
other_units_cant_cause_cancels_before: SimValue<UnitMOpOtherUnitsCantCauseCancelsBefore<C>>,
) {
if self.canceling {
return;
}
Self::insn_by_id(&mut self.insns, &other_units_cant_cause_cancels_before.id)
.sent_other_units_cant_cause_cancels_before = true;
}
#[hdl]
fn handle_to_load_store_cant_cause_cancel(
@ -2071,6 +2132,7 @@ impl<C: PhantomConstCpuConfig> LoadStoreTesterState<C> {
mop: _,
sent_inputs_ready,
sent_is_no_longer_speculative,
sent_other_units_cant_cause_cancels_before,
caused_cancel_before_retire,
cant_cause_cancel,
output,
@ -2078,6 +2140,7 @@ impl<C: PhantomConstCpuConfig> LoadStoreTesterState<C> {
} = insn;
*sent_inputs_ready = false;
*sent_is_no_longer_speculative = false;
*sent_other_units_cant_cause_cancels_before = false;
*caused_cancel_before_retire = false;
*cant_cause_cancel = false;
*output = None;
@ -2095,6 +2158,7 @@ impl<C: PhantomConstCpuConfig> LoadStoreTesterState<C> {
mop: _,
sent_inputs_ready: _,
sent_is_no_longer_speculative: _,
sent_other_units_cant_cause_cancels_before: _,
caused_cancel_before_retire: _,
cant_cause_cancel: _,
output: _,
@ -2110,6 +2174,7 @@ impl<C: PhantomConstCpuConfig> LoadStoreTesterState<C> {
mop: _,
sent_inputs_ready: _,
sent_is_no_longer_speculative: _,
sent_other_units_cant_cause_cancels_before: _,
caused_cancel_before_retire,
cant_cause_cancel: _,
output: _,
@ -2149,6 +2214,7 @@ async fn load_store_tester_impl<C: PhantomConstCpuConfig>(
enqueue,
inputs_ready,
is_no_longer_speculative,
other_units_cant_cause_cancels_before,
cant_cause_cancel: _,
output_ready: _,
finish_cause_cancel: _,
@ -2168,6 +2234,11 @@ async fn load_store_tester_impl<C: PhantomConstCpuConfig>(
state.to_load_store_is_no_longer_speculative(),
)
.await;
sim.write(
other_units_cant_cause_cancels_before,
state.to_load_store_other_units_cant_cause_cancels_before(),
)
.await;
} else {
sim.write(enqueue.data, enqueue.ty().data.HdlNone()).await;
sim.write(inputs_ready, inputs_ready.ty().HdlNone()).await;
@ -2176,6 +2247,11 @@ async fn load_store_tester_impl<C: PhantomConstCpuConfig>(
is_no_longer_speculative.ty().HdlNone(),
)
.await;
sim.write(
other_units_cant_cause_cancels_before,
other_units_cant_cause_cancels_before.ty().HdlNone(),
)
.await;
}
sim.write(cancel_all.data, state.to_load_store_cancel_all())
.await;
@ -2190,6 +2266,7 @@ async fn load_store_tester_impl<C: PhantomConstCpuConfig>(
enqueue,
inputs_ready,
is_no_longer_speculative,
other_units_cant_cause_cancels_before,
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -2213,6 +2290,15 @@ async fn load_store_tester_impl<C: PhantomConstCpuConfig>(
{
state.handle_to_load_store_is_no_longer_speculative(is_no_longer_speculative);
}
#[hdl(sim)]
if let HdlSome(other_units_cant_cause_cancels_before) = sim
.read_past(other_units_cant_cause_cancels_before, cd.clk)
.await
{
state.handle_to_load_store_other_units_cant_cause_cancels_before(
other_units_cant_cause_cancels_before,
);
}
if sim.read_past_bool(unit_outputs_ready, cd.clk).await {
#[hdl(sim)]
if let HdlSome(cant_cause_cancel) = sim.read_past(cant_cause_cancel, cd.clk).await {
@ -2293,6 +2379,7 @@ fn load_store_tester(config: PhantomConst<CpuConfig>) {
enqueue,
inputs_ready,
is_no_longer_speculative,
other_units_cant_cause_cancels_before,
cant_cause_cancel: _,
output_ready: _,
finish_cause_cancel: _,
@ -2318,6 +2405,11 @@ fn load_store_tester(config: PhantomConst<CpuConfig>) {
is_no_longer_speculative.ty().HdlNone(),
)
.await;
sim.write(
other_units_cant_cause_cancels_before,
other_units_cant_cause_cancels_before.ty().HdlNone(),
)
.await;
sim.write(unit_outputs_ready, false).await;
sim.write(cancel_all.data, HdlNone()).await;
sim.write(test_passed, false).await;

View file

@ -20,8 +20,9 @@ use cpu::{
ExecuteToUnitInterface, GlobalState, MOpId, MOpInstance, NextPcPredictorOp,
PostDecodeOutputInterface, RenamedMOp, RetireToNextPcInterface,
RetireToNextPcInterfaceInner, UnitCausedCancel, UnitEnqueue, UnitFinishCauseCancel,
UnitInputsReady, UnitMOpCantCauseCancel, UnitMOpIsNoLongerSpeculative, UnitOutputReady,
rename_execute_retire, to_unit_interfaces::ExecuteToUnitInterfaces,
UnitInputsReady, UnitMOpCantCauseCancel, UnitMOpIsNoLongerSpeculative,
UnitMOpOtherUnitsCantCauseCancelsBefore, UnitOutputReady, rename_execute_retire,
to_unit_interfaces::ExecuteToUnitInterfaces,
},
unit::{UnitKind, UnitMOp},
util::array_vec::ArrayVec,
@ -2468,6 +2469,14 @@ impl<C: PhantomConstCpuConfig, E: MockExecutionStateTrait> MockUnitState<C, E> {
_is_no_longer_speculative: SimValue<UnitMOpIsNoLongerSpeculative<C>>,
) {
}
#[hdl]
fn handle_mop_other_units_cant_cause_cancels_before(
&mut self,
_other_units_cant_cause_cancels_before: SimValue<
UnitMOpOtherUnitsCantCauseCancelsBefore<C>,
>,
) {
}
fn cancel_all(&mut self) {
let Self {
global_state: _,
@ -2508,6 +2517,7 @@ fn mock_unit<#[hdl(skip)] E: MockExecutionStateTrait>(
enqueue,
inputs_ready: _,
is_no_longer_speculative: _,
other_units_cant_cause_cancels_before: _,
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -2586,6 +2596,7 @@ fn mock_unit<#[hdl(skip)] E: MockExecutionStateTrait>(
enqueue,
inputs_ready: _,
is_no_longer_speculative: _,
other_units_cant_cause_cancels_before: _,
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -2612,6 +2623,7 @@ fn mock_unit<#[hdl(skip)] E: MockExecutionStateTrait>(
enqueue: _, // we ignore enqueues since we don't need to track order for these instructions
inputs_ready,
is_no_longer_speculative,
other_units_cant_cause_cancels_before,
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -2630,6 +2642,15 @@ fn mock_unit<#[hdl(skip)] E: MockExecutionStateTrait>(
{
state.handle_mop_is_no_longer_speculative(is_no_longer_speculative);
}
#[hdl(sim)]
if let HdlSome(other_units_cant_cause_cancels_before) = sim
.read_past(other_units_cant_cause_cancels_before, cd.clk)
.await
{
state.handle_mop_other_units_cant_cause_cancels_before(
other_units_cant_cause_cancels_before,
);
}
if sim.read_past_bool(unit_outputs_ready, cd.clk).await {
#[hdl(sim)]
if let HdlSome(cant_cause_cancel) =
@ -2680,6 +2701,7 @@ fn mock_combinational_unit<#[hdl(skip)] E: MockExecutionStateTrait>(
enqueue,
inputs_ready: _,
is_no_longer_speculative: _,
other_units_cant_cause_cancels_before: _,
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -2724,6 +2746,7 @@ fn mock_combinational_unit<#[hdl(skip)] E: MockExecutionStateTrait>(
enqueue,
inputs_ready,
is_no_longer_speculative: _, // we don't care about being speculative for these instructions
other_units_cant_cause_cancels_before: _, // we don't care about being speculative for these instructions
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -2984,6 +3007,23 @@ impl<C: PhantomConstCpuConfig> MockL2RegFileUnitState<C> {
} = self.op_by_id_mut(&id);
}
#[hdl]
fn handle_mop_other_units_cant_cause_cancels_before(
&mut self,
other_units_cant_cause_cancels_before: SimValue<UnitMOpOtherUnitsCantCauseCancelsBefore<C>>,
) {
#[hdl(sim)]
let UnitMOpOtherUnitsCantCauseCancelsBefore::<_> { id, config: _ } =
other_units_cant_cause_cancels_before;
let MockL2RegFileOp {
mop: _,
src_values: _,
dest_value: _,
sent_cant_cause_cancel: _,
sent_output_ready: _,
config: _,
} = self.op_by_id_mut(&id);
}
#[hdl]
fn peek_mop_cant_cause_cancel(&self) -> SimValue<HdlOption<UnitMOpCantCauseCancel<C>>> {
let ret_ty = HdlOption[UnitMOpCantCauseCancel[self.config]];
for MockL2RegFileOp {
@ -3160,6 +3200,7 @@ fn mock_l2_reg_file_unit(config: PhantomConst<CpuConfig>, unit_index: usize) {
enqueue,
inputs_ready: _,
is_no_longer_speculative: _,
other_units_cant_cause_cancels_before: _,
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -3222,6 +3263,7 @@ fn mock_l2_reg_file_unit(config: PhantomConst<CpuConfig>, unit_index: usize) {
enqueue,
inputs_ready: _,
is_no_longer_speculative: _,
other_units_cant_cause_cancels_before: _,
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -3246,6 +3288,7 @@ fn mock_l2_reg_file_unit(config: PhantomConst<CpuConfig>, unit_index: usize) {
enqueue,
inputs_ready,
is_no_longer_speculative,
other_units_cant_cause_cancels_before,
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -3270,6 +3313,15 @@ fn mock_l2_reg_file_unit(config: PhantomConst<CpuConfig>, unit_index: usize) {
{
state.handle_mop_is_no_longer_speculative(is_no_longer_speculative);
}
#[hdl(sim)]
if let HdlSome(other_units_cant_cause_cancels_before) = sim
.read_past(other_units_cant_cause_cancels_before, cd.clk)
.await
{
state.handle_mop_other_units_cant_cause_cancels_before(
other_units_cant_cause_cancels_before,
);
}
if sim.read_past_bool(unit_outputs_ready, cd.clk).await {
#[hdl(sim)]
if let HdlSome(cant_cause_cancel) =
@ -3631,6 +3683,27 @@ impl<'a, C: PhantomConstCpuConfig> MockLoadStoreUnitState<'a, C> {
*is_speculative = false;
}
#[hdl]
fn handle_mop_other_units_cant_cause_cancels_before(
&mut self,
other_units_cant_cause_cancels_before: SimValue<UnitMOpOtherUnitsCantCauseCancelsBefore<C>>,
) {
#[hdl(sim)]
let UnitMOpOtherUnitsCantCauseCancelsBefore::<_> { id, config: _ } =
other_units_cant_cause_cancels_before;
let MockLoadStoreOp {
mop: _,
is_speculative: _,
src_values: _,
dest_value: _,
cycles_left: _,
ran_nonspeculatively: _,
sent_cant_cause_cancel: _,
sent_output_ready: _,
config: _,
} = self.op_by_id_mut(&id);
// TODO
}
#[hdl]
fn peek_mop_cant_cause_cancel(&self) -> SimValue<HdlOption<UnitMOpCantCauseCancel<C>>> {
let ret_ty = HdlOption[UnitMOpCantCauseCancel[self.config]];
for MockLoadStoreOp {
@ -3843,6 +3916,7 @@ fn mock_load_store_unit<#[hdl(skip)] MI: MakeInsns>(
enqueue,
inputs_ready: _,
is_no_longer_speculative: _,
other_units_cant_cause_cancels_before: _,
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -3923,6 +3997,7 @@ fn mock_load_store_unit<#[hdl(skip)] MI: MakeInsns>(
enqueue,
inputs_ready: _,
is_no_longer_speculative: _,
other_units_cant_cause_cancels_before: _,
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -3949,6 +4024,7 @@ fn mock_load_store_unit<#[hdl(skip)] MI: MakeInsns>(
enqueue,
inputs_ready,
is_no_longer_speculative,
other_units_cant_cause_cancels_before,
cant_cause_cancel,
output_ready,
finish_cause_cancel,
@ -3972,6 +4048,15 @@ fn mock_load_store_unit<#[hdl(skip)] MI: MakeInsns>(
{
state.handle_mop_is_no_longer_speculative(is_no_longer_speculative);
}
#[hdl(sim)]
if let HdlSome(other_units_cant_cause_cancels_before) = sim
.read_past(other_units_cant_cause_cancels_before, cd.clk)
.await
{
state.handle_mop_other_units_cant_cause_cancels_before(
other_units_cant_cause_cancels_before,
);
}
if sim.read_past_bool(unit_outputs_ready, cd.clk).await {
#[hdl(sim)]
if let HdlSome(cant_cause_cancel) =