nac3artiq: refactor timeline functions

This commit is contained in:
Sebastien Bourdeauducq 2021-10-02 23:35:28 +08:00
parent c5e731f16d
commit c429a86586
1 changed files with 103 additions and 101 deletions

View File

@ -163,19 +163,11 @@ impl Nac3 {
}
}
#[pymethods]
impl Nac3 {
#[new]
fn new(isa: &str) -> PyResult<Self> {
let isa = match isa {
"riscv" => Isa::RiscV,
"cortexa9" => Isa::CortexA9,
_ => return Err(exceptions::PyValueError::new_err("invalid ISA")),
};
let primitive: PrimitiveStore = TopLevelComposer::make_primitives().0;
let mut builtins = vec![];
if isa == Isa::RiscV {
builtins.push((
// ARTIQ timeline control with now-pinning optimization.
// This is a bit of mess due to endianness issues.
// Modify gateware to make `now` little-endian, since we don't have OpenRISC anymore?
fn timeline_builtins(primitive: &PrimitiveStore) -> Vec<(StrRef, FunSignature, Arc<GenCall>)> {
vec![(
"now_mu".into(),
FunSignature {
args: vec![],
@ -197,8 +189,7 @@ impl Nac3 {
}
}
)))
));
builtins.push((
),(
"at_mu".into(),
FunSignature {
args: vec![FuncArg {
@ -232,8 +223,7 @@ impl Nac3 {
}
}
)))
));
builtins.push((
),(
"delay_mu".into(),
FunSignature {
args: vec![FuncArg {
@ -272,8 +262,20 @@ impl Nac3 {
}
}
)))
));
}
)]
}
#[pymethods]
impl Nac3 {
#[new]
fn new(isa: &str) -> PyResult<Self> {
let isa = match isa {
"riscv" => Isa::RiscV,
"cortexa9" => Isa::CortexA9,
_ => return Err(exceptions::PyValueError::new_err("invalid ISA")),
};
let primitive: PrimitiveStore = TopLevelComposer::make_primitives().0;
let builtins = if isa == Isa::RiscV { timeline_builtins(&primitive) } else { vec![] };
let (composer, builtins_def, builtins_ty) = TopLevelComposer::new(builtins);
Ok(Nac3 {
isa,