neurosim / DNN_NeuroSim_V1.3

Benchmark framework of compute-in-memory based accelerators for deep neural network (inference engine focused)
62 stars 36 forks source link

SAR ADC 面积估计 #17

Closed zhangfeixiang222 closed 2 years ago

zhangfeixiang222 commented 2 years ago

hi: 最近在看您的NeuroSim-v1.3,在评估SarADC面积的部分有个地方不太懂,所以想咨询一下, 在SarADC.cpp中有这样一句代码:areaUnit = (hNmos wNmos) (269+(log2(levelOutput)-1)109) + (hPmos wPmos) (209+(log2(levelOutput)-1)73); 有两个问题:

  1. 269,109,209,73这四个参数代表了nmos、pmos的个数吗?是固定的吗?
  2. levelOutput由 SarADC::Initialize的第二个参数_levelOutput传入,该函数在SubArray.cpp的241行sarADC.Initialize(numCol/numColMuxed, pow(2, avgWeightBit), clkFreq, numReadCellPerOperationNeuro)所调用,也就是说levelOutput=pow(2, avgWeightBit),而在ProcessingUnit.cpp中可以看到subArray->avgWeightBit = param->cellBit,综上:areaUnit和cellbit成正比,我的理解是ADC的面积大小应该是和ADC的量化精度有关系的,所以不太理解为什么该部分的代码。
neurosim commented 2 years ago
  1. 代表的是NMOS/PMOS的width(比如269倍最小width), 是固定的。
  2. SubArray.cpp的241行是用于sequential read mode, 每次只读一行,因此精度最多到pow(2, avgWeightBit),所以这里ADC的精度这样设定。不过确实可能直接用levelOutput由用户设定更为合理。SubArray.cpp的283行, parallel mode (默认模式)的 SarADC.Initialize就是levelOutput作为Input.