首页 > 解决方案 > Chisel - 内存初始化

问题描述

在凿子中初始化内存的最佳方法是实现一个for循环来写入它吗?

is(s_multiplier){
      when(ready){state := s_ready}
      // Initialization of C memory to 0
      for(i <- 0 to matrixSize - 1){
        for(j <- 0 to matrixSize - 1){
          memC.write(i + j, 0.asSInt((2 * cellSize).W))
        }
      }

标签: memorychisel

解决方案


使用 for 循环的缺点是上述代码将尝试在一个时钟周期内执行嵌套的 for 循环,这是不切实际的,因为通常最好的情况是每个时钟周期执行一次写入或使用突发模式机制。我建议将 i 和 j 替换为在时钟滴答声中递增的计数器,并保持 s_multiplier 状态,直到你填满你的矩阵。

is(s_multiplier){
  when(ready){state := s_ready}
  // Initialization of C memory to 0
  when(counti <= matrixSize -1){ //Initialize counti and countj to 0
    when(countj <= matrixSize - 1){
      memC.write(counti + countj, 0.asSInt((2 * cellSize).W))
      countj := countj + 1.U
    }
    counti <= counti + 1.U
    state := s_multiplier
  }. otherwise{state := S_go_to_some_other_state}

推荐阅读