cmtc 0.1.2

The cmtc compiler providing cmtir-based passes to generate backends including FIRRTL, SystemVerilog and simulators.
Documentation
use cmtc::*;
use cmtrs::stl::*;
use cmtrs::*;

itfc_declare! {
  struct MemTest {
    mem: itfc Mem1r1wxk
  }
}

#[module]
fn test_mem1r1wx8() -> MemTest {
  let dt = Type::UInt(32);
  let at = Type::UInt(5);
  
  let io = io! { mem: mem1r1wxk(&dt, &at, 12, 8) };

  let _do_write = always! {
    () {
      io.mem.write(0, 1.lit(&dt), 0.lit(&at));
      io.mem.write(1, 2.lit(&dt), 1.lit(&at));
      io.mem.write(2, 3.lit(&dt), 2.lit(&at));
      io.mem.write(3, 4.lit(&dt), 3.lit(&at));
      io.mem.write(4, 5.lit(&dt), 4.lit(&at));
      io.mem.write(5, 6.lit(&dt), 5.lit(&at));
      io.mem.write(6, 7.lit(&dt), 6.lit(&at));
      io.mem.write(7, 8.lit(&dt), 7.lit(&at));
    }
  };

}


pub fn main() -> anyhow::Result<()> {
  let dt = Type::UInt(32);
  let at = Type::UInt(4);
  let depth = 12;

  let mem1r1wx4 = mem1r1wxk(&dt, &at, depth, 4);
  elaborate(mem1r1wx4, sv_config("mem1r1wx4.sv"))?;

  let test_mem1r1wx8 = test_mem1r1wx8();
  elaborate(test_mem1r1wx8, sv_config("mem1r1wx8_wrapped.sv"))?;

  let mem1r1w2dx4 = mem1r1w2dxk(&dt, &at, 8, 2, 4);
  elaborate(mem1r1w2dx4, sv_config("mem1r1w2dx4.sv"))?;

  Ok(())
}