update to new scala/chisel/Mem
This commit is contained in:
		@@ -252,9 +252,7 @@ class rocketDpathRegfile extends Component
 | 
				
			|||||||
  override val io = new ioRegfile();
 | 
					  override val io = new ioRegfile();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val regfile = Mem(32){ Bits(width=64) }
 | 
					  val regfile = Mem(32){ Bits(width=64) }
 | 
				
			||||||
  regfile.setReadLatency(0);
 | 
					  when (io.w0.en) { regfile(io.w0.addr) := io.w0.data }
 | 
				
			||||||
  regfile.setTarget('inst);
 | 
					 | 
				
			||||||
  regfile.write(io.w0.addr, io.w0.data, io.w0.en);
 | 
					 | 
				
			||||||
  io.r0.data := Mux((io.r0.addr === UFix(0, 5)) || !io.r0.en, Bits(0, 64), regfile(io.r0.addr));
 | 
					  io.r0.data := Mux((io.r0.addr === UFix(0, 5)) || !io.r0.en, Bits(0, 64), regfile(io.r0.addr));
 | 
				
			||||||
  io.r1.data := Mux((io.r1.addr === UFix(0, 5)) || !io.r1.en, Bits(0, 64), regfile(io.r1.addr));
 | 
					  io.r1.data := Mux((io.r1.addr === UFix(0, 5)) || !io.r1.en, Bits(0, 64), regfile(io.r1.addr));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,7 +74,8 @@ class rocketDTLB(entries: Int) extends Component
 | 
				
			|||||||
  val bad_va = r_cpu_req_vpn(VPN_BITS) != r_cpu_req_vpn(VPN_BITS-1);
 | 
					  val bad_va = r_cpu_req_vpn(VPN_BITS) != r_cpu_req_vpn(VPN_BITS-1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val tag_cam = new rocketCAM(entries, ASID_BITS+VPN_BITS);
 | 
					  val tag_cam = new rocketCAM(entries, ASID_BITS+VPN_BITS);
 | 
				
			||||||
  val tag_ram = Mem(entries, io.ptw.resp_val, r_refill_waddr.toUFix, io.ptw.resp_ppn);
 | 
					  val tag_ram = Mem(entries) { io.ptw.resp_ppn.clone }
 | 
				
			||||||
 | 
					  when (io.ptw.resp_val) { tag_ram(r_refill_waddr) := io.ptw.resp_ppn }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  val lookup_tag = Cat(r_cpu_req_asid, r_cpu_req_vpn);
 | 
					  val lookup_tag = Cat(r_cpu_req_asid, r_cpu_req_vpn);
 | 
				
			||||||
  tag_cam.io.clear      := io.invalidate;
 | 
					  tag_cam.io.clear      := io.invalidate;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -464,9 +464,8 @@ class rocketFPU(sfma_latency: Int, dfma_latency: Int) extends Component
 | 
				
			|||||||
  val fsr_exc = Reg() { Bits(width = 5) }
 | 
					  val fsr_exc = Reg() { Bits(width = 5) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // regfile
 | 
					  // regfile
 | 
				
			||||||
  val regfile = Mem(32, load_wb, load_wb_tag, load_wb_data_recoded);
 | 
					  val regfile = Mem(32) { Bits(width = 65) }
 | 
				
			||||||
  regfile.setReadLatency(0);
 | 
					  when (load_wb) { regfile(load_wb_tag) := load_wb_data_recoded }
 | 
				
			||||||
  regfile.setTarget('inst);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val ex_rs1 = regfile.read(ex_reg_inst(26,22))
 | 
					  val ex_rs1 = regfile.read(ex_reg_inst(26,22))
 | 
				
			||||||
  val ex_rs2 = regfile.read(ex_reg_inst(21,17))
 | 
					  val ex_rs2 = regfile.read(ex_reg_inst(21,17))
 | 
				
			||||||
@@ -591,7 +590,7 @@ class rocketFPU(sfma_latency: Int, dfma_latency: Int) extends Component
 | 
				
			|||||||
             Mux(wsrc === UFix(2), fastpipe.io.exc_d,
 | 
					             Mux(wsrc === UFix(2), fastpipe.io.exc_d,
 | 
				
			||||||
             fastpipe.io.exc_s)))
 | 
					             fastpipe.io.exc_s)))
 | 
				
			||||||
  val waddr = winfo(0).toUFix >> UFix(2)
 | 
					  val waddr = winfo(0).toUFix >> UFix(2)
 | 
				
			||||||
  regfile.write(waddr(4,0), wdata, wen(0))
 | 
					  when (wen(0)) { regfile(waddr(4,0)) := wdata }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  when (wb_reg_valid && wb_ctrl.toint || wen(0)) {
 | 
					  when (wb_reg_valid && wb_ctrl.toint || wen(0)) {
 | 
				
			||||||
    fsr_exc := fsr_exc |
 | 
					    fsr_exc := fsr_exc |
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -97,10 +97,10 @@ class rocketICache(sets: Int, assoc: Int, co: CoherencePolicyWithUncached) exten
 | 
				
			|||||||
  for (i <- 0 until assoc)
 | 
					  for (i <- 0 until assoc)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    val repl_me = (repl_way === UFix(i))
 | 
					    val repl_me = (repl_way === UFix(i))
 | 
				
			||||||
    val tag_array = Mem(sets){ r_cpu_miss_tag }
 | 
					    val tag_array = Mem(sets){ Bits(width = tagbits) }
 | 
				
			||||||
    tag_array.setReadLatency(1);
 | 
					    val tag_rdata = Reg() { Bits(width = tagbits) }
 | 
				
			||||||
    tag_array.setTarget('inst);
 | 
					    when (tag_we && repl_me) { tag_array(tag_addr) := r_cpu_miss_tag }
 | 
				
			||||||
    val tag_rdata = tag_array.rw(tag_addr, r_cpu_miss_tag, tag_we && repl_me);
 | 
					    .otherwise { tag_rdata := tag_array(tag_addr) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // valid bit array
 | 
					    // valid bit array
 | 
				
			||||||
    val vb_array = Reg(resetVal = Bits(0, sets));
 | 
					    val vb_array = Reg(resetVal = Bits(0, sets));
 | 
				
			||||||
@@ -115,10 +115,10 @@ class rocketICache(sets: Int, assoc: Int, co: CoherencePolicyWithUncached) exten
 | 
				
			|||||||
    val hit = valid && (tag_rdata === r_cpu_hit_addr(tagmsb,taglsb))
 | 
					    val hit = valid && (tag_rdata === r_cpu_hit_addr(tagmsb,taglsb))
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // data array
 | 
					    // data array
 | 
				
			||||||
    val data_array = Mem(sets*REFILL_CYCLES){ io.mem.xact_rep.bits.data }
 | 
					    val data_array = Mem(sets*REFILL_CYCLES){ io.mem.xact_rep.bits.data.clone }
 | 
				
			||||||
    data_array.setReadLatency(1);
 | 
					    val data_out = Reg(){ io.mem.xact_rep.bits.data.clone }
 | 
				
			||||||
    data_array.setTarget('inst);
 | 
					    when (io.mem.xact_rep.valid && repl_me) { data_array(data_addr) := io.mem.xact_rep.bits.data }
 | 
				
			||||||
    val data_out = data_array.rw(data_addr, io.mem.xact_rep.bits.data, io.mem.xact_rep.valid && repl_me)
 | 
					    .otherwise { data_out := data_array(data_addr) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    data_mux.io.sel(i) := hit
 | 
					    data_mux.io.sel(i) := hit
 | 
				
			||||||
    data_mux.io.in(i) := (data_out >> word_shift)(databits-1,0);
 | 
					    data_mux.io.in(i) := (data_out >> word_shift)(databits-1,0);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,23 +21,24 @@ class ioCAM(entries: Int, addr_bits: Int, tag_bits: Int) extends Bundle {
 | 
				
			|||||||
class rocketCAM(entries: Int, tag_bits: Int) extends Component {
 | 
					class rocketCAM(entries: Int, tag_bits: Int) extends Component {
 | 
				
			||||||
  val addr_bits = ceil(log(entries)/log(2)).toInt;
 | 
					  val addr_bits = ceil(log(entries)/log(2)).toInt;
 | 
				
			||||||
  val io = new ioCAM(entries, addr_bits, tag_bits);
 | 
					  val io = new ioCAM(entries, addr_bits, tag_bits);
 | 
				
			||||||
  val cam_tags = Mem(entries, io.write, io.write_addr, io.write_tag);
 | 
					  val cam_tags = Vec(entries) { Reg() { Bits(width = tag_bits) } }
 | 
				
			||||||
  val mux = (new Mux1H(entries)) { Bits(width = addr_bits) }
 | 
					  val mux = (new Mux1H(entries)) { Bits(width = addr_bits) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val vb_array = Reg(resetVal = Bits(0, entries));
 | 
					  val vb_array = Reg(resetVal = Bits(0, entries));
 | 
				
			||||||
 | 
					  when (io.write) {
 | 
				
			||||||
 | 
					    vb_array := vb_array.bitSet(io.write_addr, Bool(true));
 | 
				
			||||||
 | 
					    cam_tags(io.write_addr) := io.write_tag
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  when (io.clear) {
 | 
					  when (io.clear) {
 | 
				
			||||||
    vb_array := Bits(0, entries);
 | 
					    vb_array := Bits(0, entries);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  .elsewhen (io.clear_hit) {
 | 
					  .elsewhen (io.clear_hit) {
 | 
				
			||||||
    vb_array := vb_array & ~mux.io.sel.toBits
 | 
					    vb_array := vb_array & ~mux.io.sel.toBits
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  .elsewhen (io.write) {
 | 
					 | 
				
			||||||
    vb_array := vb_array.bitSet(io.write_addr, Bool(true));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  var l_hit = Bool(false)
 | 
					  var l_hit = Bool(false)
 | 
				
			||||||
  for (i <- 0 to entries-1) {
 | 
					  for (i <- 0 to entries-1) {
 | 
				
			||||||
    val my_hit = vb_array(UFix(i)).toBool && (cam_tags(UFix(i)) === io.tag)
 | 
					    val my_hit = vb_array(UFix(i)).toBool && (cam_tags(i) === io.tag)
 | 
				
			||||||
    l_hit = l_hit || my_hit
 | 
					    l_hit = l_hit || my_hit
 | 
				
			||||||
    mux.io.in(i) := Bits(i)
 | 
					    mux.io.in(i) := Bits(i)
 | 
				
			||||||
    mux.io.sel(i) := my_hit
 | 
					    mux.io.sel(i) := my_hit
 | 
				
			||||||
@@ -136,7 +137,8 @@ class rocketITLB(entries: Int) extends Component
 | 
				
			|||||||
  val bad_va = r_cpu_req_vpn(VPN_BITS) != r_cpu_req_vpn(VPN_BITS-1);
 | 
					  val bad_va = r_cpu_req_vpn(VPN_BITS) != r_cpu_req_vpn(VPN_BITS-1);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  val tag_cam = new rocketCAM(entries, ASID_BITS+VPN_BITS);
 | 
					  val tag_cam = new rocketCAM(entries, ASID_BITS+VPN_BITS);
 | 
				
			||||||
  val tag_ram = Mem(entries, io.ptw.resp_val, r_refill_waddr.toUFix, io.ptw.resp_ppn);
 | 
					  val tag_ram = Mem(entries) { io.ptw.resp_ppn.clone }
 | 
				
			||||||
 | 
					  when (io.ptw.resp_val) { tag_ram(r_refill_waddr) := io.ptw.resp_ppn }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  val lookup_tag = Cat(r_cpu_req_asid, r_cpu_req_vpn);
 | 
					  val lookup_tag = Cat(r_cpu_req_asid, r_cpu_req_vpn);
 | 
				
			||||||
  tag_cam.io.clear      := io.cpu.invalidate;
 | 
					  tag_cam.io.clear      := io.cpu.invalidate;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -321,9 +321,8 @@ class MSHRFile(co: CoherencePolicy) extends Component {
 | 
				
			|||||||
  val sdq_rdy = !sdq_val.andR
 | 
					  val sdq_rdy = !sdq_val.andR
 | 
				
			||||||
  val (req_read, req_write) = cpuCmdToRW(io.req.bits.cmd)
 | 
					  val (req_read, req_write) = cpuCmdToRW(io.req.bits.cmd)
 | 
				
			||||||
  val sdq_enq = io.req.valid && io.req.ready && req_write
 | 
					  val sdq_enq = io.req.valid && io.req.ready && req_write
 | 
				
			||||||
  val sdq = Mem(NSDQ, sdq_enq, sdq_alloc_id, io.req.bits.data)
 | 
					  val sdq = Mem(NSDQ) { io.req.bits.data.clone }
 | 
				
			||||||
  sdq.setReadLatency(1);
 | 
					  when (sdq_enq) { sdq(sdq_alloc_id) := io.req.bits.data }
 | 
				
			||||||
  sdq.setTarget('inst)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val tag_mux = (new Mux1H(NMSHR)){ Bits(width = TAG_BITS) }
 | 
					  val tag_mux = (new Mux1H(NMSHR)){ Bits(width = TAG_BITS) }
 | 
				
			||||||
  val wb_probe_mux = (new Mux1H(NMSHR)) { new WritebackReq }
 | 
					  val wb_probe_mux = (new Mux1H(NMSHR)) { new WritebackReq }
 | 
				
			||||||
@@ -406,7 +405,9 @@ class MSHRFile(co: CoherencePolicy) extends Component {
 | 
				
			|||||||
  val sdq_free = replay.valid && replay.ready && replay_write
 | 
					  val sdq_free = replay.valid && replay.ready && replay_write
 | 
				
			||||||
  sdq_val := sdq_val & ~((UFix(1) << replay.bits.sdq_id) & Fill(sdq_free, NSDQ)) | 
 | 
					  sdq_val := sdq_val & ~((UFix(1) << replay.bits.sdq_id) & Fill(sdq_free, NSDQ)) | 
 | 
				
			||||||
             PriorityEncoderOH(~sdq_val(NSDQ-1,0)) & Fill(NSDQ, sdq_enq && io.req.bits.tag_miss)
 | 
					             PriorityEncoderOH(~sdq_val(NSDQ-1,0)) & Fill(NSDQ, sdq_enq && io.req.bits.tag_miss)
 | 
				
			||||||
  io.data_req.bits.data := sdq.read(Mux(replay.valid && !replay.ready, replay.bits.sdq_id, replay_arb.io.out.bits.sdq_id))
 | 
					  val sdq_rdata = Reg() { io.req.bits.data.clone }
 | 
				
			||||||
 | 
					  sdq_rdata := sdq(Mux(replay.valid && !replay.ready, replay.bits.sdq_id, replay_arb.io.out.bits.sdq_id))
 | 
				
			||||||
 | 
					  io.data_req.bits.data := sdq_rdata
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  io.cpu_resp_val := Reg(replay.valid && replay.ready && replay_read, resetVal = Bool(false))
 | 
					  io.cpu_resp_val := Reg(replay.valid && replay.ready && replay_read, resetVal = Bool(false))
 | 
				
			||||||
  io.cpu_resp_tag := Reg(replay.bits.cpu_tag)
 | 
					  io.cpu_resp_tag := Reg(replay.bits.cpu_tag)
 | 
				
			||||||
@@ -602,18 +603,23 @@ class MetaDataArray(lines: Int) extends Component {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val permissions_array = Mem(lines){ UFix(width = 2) }
 | 
					  val permissions_array = Mem(lines){ UFix(width = 2) }
 | 
				
			||||||
  permissions_array.write(io.state_req.bits.idx, io.state_req.bits.data.state, io.state_req.valid && io.state_req.bits.rw)
 | 
					 | 
				
			||||||
  permissions_array.write(io.req.bits.idx, io.req.bits.data.state, io.req.valid && io.req.bits.rw)
 | 
					 | 
				
			||||||
  val raddr = Reg() { Bits() }
 | 
					  val raddr = Reg() { Bits() }
 | 
				
			||||||
  when (io.req.valid && !io.req.bits.rw) { raddr := io.req.bits.idx }
 | 
					  when (io.state_req.valid && io.state_req.bits.rw) {
 | 
				
			||||||
  val permissions_rdata1 = permissions_array.read(raddr)
 | 
					    permissions_array(io.state_req.bits.idx) := io.state_req.bits.data.state
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  when (io.req.valid) {
 | 
				
			||||||
 | 
					    when (io.req.bits.rw) { permissions_array(io.req.bits.idx) := io.req.bits.data.state }
 | 
				
			||||||
 | 
					    .otherwise { raddr := io.req.bits.idx }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val tag_array = Mem(lines){ Bits(width=TAG_BITS) }
 | 
					  val tag_array = Mem(lines){ Bits(width=TAG_BITS) }
 | 
				
			||||||
  tag_array.setReadLatency(1);
 | 
					  val tag_rdata = Reg() { Bits() }
 | 
				
			||||||
  tag_array.setTarget('inst)
 | 
					  when (io.req.valid) {
 | 
				
			||||||
  val tag_rdata = tag_array.rw(io.req.bits.idx, io.req.bits.data.tag, io.req.valid && io.req.bits.rw, cs = io.req.valid)
 | 
					    when (io.req.bits.rw) { tag_array(io.req.bits.idx) := io.req.bits.data.tag }
 | 
				
			||||||
 | 
					    .otherwise { tag_rdata := tag_array(io.req.bits.idx) }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  io.resp.state := permissions_rdata1.toUFix
 | 
					  io.resp.state := permissions_array(raddr)
 | 
				
			||||||
  io.resp.tag   := tag_rdata
 | 
					  io.resp.tag   := tag_rdata
 | 
				
			||||||
  io.req.ready  := Bool(true)
 | 
					  io.req.ready  := Bool(true)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -652,12 +658,15 @@ class DataArray(lines: Int) extends Component {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val wmask = FillInterleaved(8, io.req.bits.wmask)
 | 
					  val wmask = FillInterleaved(8, io.req.bits.wmask)
 | 
				
			||||||
 | 
					  val addr = Cat(io.req.bits.idx, io.req.bits.offset)
 | 
				
			||||||
 | 
					  val rdata = Reg() { Bits() }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val array = Mem(lines*REFILL_CYCLES){ Bits(width=MEM_DATA_BITS) }
 | 
					  val array = Mem(lines*REFILL_CYCLES){ Bits(width=MEM_DATA_BITS) }
 | 
				
			||||||
  array.setReadLatency(1);
 | 
					  when (io.req.valid) {
 | 
				
			||||||
  array.setTarget('inst)
 | 
					    when (io.req.bits.rw) { array.write(addr, io.req.bits.data, wmask) }
 | 
				
			||||||
  val addr = Cat(io.req.bits.idx, io.req.bits.offset)
 | 
					    .otherwise { rdata := array(addr) }
 | 
				
			||||||
  val rdata = array.rw(addr, io.req.bits.data, io.req.valid && io.req.bits.rw, wmask, cs = io.req.valid)
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  io.resp := rdata
 | 
					  io.resp := rdata
 | 
				
			||||||
  io.req.ready := Bool(true)
 | 
					  io.req.ready := Bool(true)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,9 +50,12 @@ class queue[T <: Data](entries: Int, pipe: Boolean = false, flushable: Boolean =
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  val ram = Vec(entries) { Reg() { data } }
 | 
				
			||||||
 | 
					  when (do_enq) { ram(enq_ptr) := io.enq.bits }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  io.deq.valid :=  maybe_full || enq_ptr != deq_ptr
 | 
					  io.deq.valid :=  maybe_full || enq_ptr != deq_ptr
 | 
				
			||||||
  io.enq.ready := !maybe_full || enq_ptr != deq_ptr || (if (pipe) io.deq.ready else Bool(false))
 | 
					  io.enq.ready := !maybe_full || enq_ptr != deq_ptr || (if (pipe) io.deq.ready else Bool(false))
 | 
				
			||||||
  io.deq.bits <> Mem(entries, do_enq, enq_ptr, io.enq.bits).read(deq_ptr)
 | 
					  io.deq.bits <> ram(deq_ptr)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
object Queue
 | 
					object Queue
 | 
				
			||||||
@@ -76,8 +79,11 @@ class pipereg[T <: Data]()(data: => T) extends Component
 | 
				
			|||||||
  //  bits := io.enq.bits
 | 
					  //  bits := io.enq.bits
 | 
				
			||||||
  //}
 | 
					  //}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  val reg = Reg() { io.enq.bits.clone }
 | 
				
			||||||
 | 
					  when (io.enq.valid) { reg := io.enq.bits }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  io.deq.valid := Reg(io.enq.valid, resetVal = Bool(false))
 | 
					  io.deq.valid := Reg(io.enq.valid, resetVal = Bool(false))
 | 
				
			||||||
  io.deq.bits <> Mem(1, io.enq.valid, UFix(0), io.enq.bits).read(UFix(0))
 | 
					  io.deq.bits <> reg
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
object Pipe
 | 
					object Pipe
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,7 @@ package rocket
 | 
				
			|||||||
import Chisel._
 | 
					import Chisel._
 | 
				
			||||||
import Node._;
 | 
					import Node._;
 | 
				
			||||||
import Constants._;
 | 
					import Constants._;
 | 
				
			||||||
 | 
					import collection.mutable._
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ioTop(htif_width: Int) extends Bundle  {
 | 
					class ioTop(htif_width: Int) extends Bundle  {
 | 
				
			||||||
  val debug   = new ioDebug();
 | 
					  val debug   = new ioDebug();
 | 
				
			||||||
@@ -82,28 +83,31 @@ class Top extends Component
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
object top_main {
 | 
					object top_main {
 | 
				
			||||||
  def main(args: Array[String]): Unit = { 
 | 
					  def main(args: Array[String]): Unit = { 
 | 
				
			||||||
    val design_args = args.slice(5, 10)
 | 
					    val top = args(0)
 | 
				
			||||||
    var i = 0
 | 
					    val chiselArgs = ArrayBuffer[String]()
 | 
				
			||||||
    while (i < design_args.length) {
 | 
					
 | 
				
			||||||
      val arg = design_args(i)
 | 
					    var i = 1
 | 
				
			||||||
 | 
					    while (i < args.length) {
 | 
				
			||||||
 | 
					      val arg = args(i)
 | 
				
			||||||
      arg match {
 | 
					      arg match {
 | 
				
			||||||
        case "--NUM_PVFB" => {
 | 
					        case "--NUM_PVFB" => {
 | 
				
			||||||
          hwacha.Constants.NUM_PVFB = design_args(i+1).toInt
 | 
					          hwacha.Constants.NUM_PVFB = args(i+1).toInt
 | 
				
			||||||
          i += 1
 | 
					          i += 1
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        case "--WIDTH_PVFB" => {
 | 
					        case "--WIDTH_PVFB" => {
 | 
				
			||||||
          hwacha.Constants.WIDTH_PVFB = design_args(i+1).toInt
 | 
					          hwacha.Constants.WIDTH_PVFB = args(i+1).toInt
 | 
				
			||||||
          hwacha.Constants.DEPTH_PVFB = design_args(i+1).toInt
 | 
					          hwacha.Constants.DEPTH_PVFB = args(i+1).toInt
 | 
				
			||||||
          i += 1
 | 
					          i += 1
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        case "--CG" => {
 | 
					        case "--CG" => {
 | 
				
			||||||
          hwacha.Constants.coarseGrained = true
 | 
					          hwacha.Constants.coarseGrained = true
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        case any => println("UNKNOWN: " + arg)
 | 
					        case any => chiselArgs += arg
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      println(arg)
 | 
					 | 
				
			||||||
      i += 1
 | 
					      i += 1
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    chiselMain(args.slice(1,5), () => Class.forName(args(0)).newInstance.asInstanceOf[Component])
 | 
					    println(chiselArgs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    chiselMain(chiselArgs.toArray, () => Class.forName(top).newInstance.asInstanceOf[Component])
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user