Posts

Showing posts from September, 2022

Chisel Language II

Image
  本文归纳总结于Chisel的官方tutorial:https://mybinder.org/v2/gh/freechipsproject/chisel-bootcamp/master 3 Generators     3.1 Parameters Chisel提供了一个非常强大的自定义硬件生成器的功能,这一节的主要知识便是如何去正确传递参数值来实现自定义hardware。     3.1.1 参数传递 import chisel3._ import chisel3.util._ class ParameterizedWidthAdder ( in0Width : Int , in1Width : Int , sumWidth : Int ) extends Module {   require(in0Width >= 0 )   require(in1Width >= 0 )   require(sumWidth >= 0 )   val io = IO ( new Bundle {     val in0 = Input ( UInt (in0Width. W ))     val in1 = Input ( UInt (in1Width. W ))     val sum = Output ( UInt (sumWidth. W ))   })   // a +& b includes the carry, a + b does not   io.sum := io.in0 +& io.in1 } object ParameterizedWidthAdder   extends App {   ( new chisel3.stage. ChiselStage ).emitVerilog( new ParameterizedWidthAdder ( 1 , 4 , 6 ))     println(getVerilogString ( new ParameterizedWidthAdder ( 1 , 4 , 6 ) )) }    以上代码可以生成一个自定义的位数的adder,如在生产的verilog中使用了1位的io.in0,4位的io.in1和6位的sum。其中+&

HSPICE 使用技巧

 SPICE Simulation是国际会议/论文中,对于Cell library的评价里十分重要的一环。    对于SPICE Simulation来说,delay和power的measurement会比使用liberty file在design compiler中得到更准确的数值,并且可以自己设定温度来得到不同的结果。   以下是测量delay和power的思路:   Delay分为rise delay和fall delay,二者值并不相同,由于transition time的设置不一样,所以delay的测定也会不同。在transition time一定的情况下,通常delay由rise和fall的平均值决定。而propagation delay的测定,是由输入点的50%电压到输出点的50%电压,50%的电压是在上升还是在下降是取决于具体的cell,比如如果是inverter,那么就是输入上升沿的50%到输出下降沿的50%的delay就是fall delay, 反之就是rise delay。   具体代码可以是: .meas tran tfall trig v(in) val= 'supply/2' rise=1 +                targ v(out) val= 'supply/2' fall=1 .meas tran trise trig v(in) val= 'supply/2' fall=2 +                targ v(out) val= 'supply/2' rise=2   而Power也分为dynamic power和static power。测量Total power的方法比较简单,由于一般cell的Vdd是固定不变的,那么只需测量在单位周期内,流过Vdd的平均电流即可,代码是: .measure tran iavg avg i(vdd) from=0 to= 'tcyc*3'   以上代码中,为了得到更准确的数值,我采取了三倍周期的测量时间。 将Iavg和Vdd相乘便可以得到Total power。   对于leakage power来说,测量十分简单,只需将输入pin端的所有信号都取消,只带有Vdd电压去测量T

STA分析:CRPR/CPPR

 待更新

STA分析:Setup与Hold

 待更新