1. m2sPipe(data插入寄存器打断)
电路图:
时序图:
可以看到折叠气泡时如果流水线上正好有气泡,b.ready 为0 时 不会传导给 a.ready, 流水线继续。
但是如果不折叠气泡,b.ready为0时,不管流水线有没有气泡,都会传导给a.ready, 导致流水线要保持hold一拍。
{signal: [
["折叠气泡",
{wave: 'P...................', name: 'clk'},
{wave: '0.1.01...01....0....', name: 'a.valid[I]', node:'....a',},
{wave: 'x.22x3.22x22222x....', name: 'a.data[I]',data:["a","b","c","d","e","f","g","h","i","g"]},
{wave: '1.....01............', name: 'a.ready[O]', node:'......b...f',},{},
{wave: '0..1.01...01....0...', name: 'b.valid[O]', node:'.....c',},
{wave: 'x..22x3.22x22222x...', name: 'b.data[O]',data:["a","b","c","d","e","f","g","h","i","g"]},
{wave: '1.....01..01........', name: 'b.ready[I]', node:'......d...e',}, {},
],
["不折叠气泡",
{wave: '0.1.01...01.....0...', name: 'a.valid[I]', node:'....z',},
{wave: 'x.22x3.22x2.2222x...', name: 'a.data[I]',data:["a","b","c","d","e","f","g","h","i","g"]},
{wave: '1.....01..01........', name: 'a.ready[O]', node:'......x...y',},{},
{wave: '0..1.01...0.1....0..', name: 'b.valid[O]', node:'.....g',},
{wave: 'x..22x3.22x.22222x..', name: 'b.data[O]',data:["a","b","c","d","e","f","g","h","i","g"]},
{wave: '1.....01..01........', name: 'b.ready[I]', node:'......h...i',},
],
],
edge: ['a~>c ',"d->b","e=>f","i->n"]
}
2. s2mPipe(ready信号插入寄存器打断)
电路图:
时序图
{signal: [
{wave: 'P........................', name: 'clk'},
{wave: '0.1.............0.10.....', name: 'this.valid[I]'},
{wave: 'x.22234.252...22x.2x.....', name: 'this.data[I]',data:["a","b","c","d","e","f","g","h","i","g"], node:'.....c',},
{wave: '0.1...01..0..1..0.10.....', name: 'this.ready[O]', node:'......a',},{},
{wave: '0.....10..1..0...........', name: 'TmplockValid'},
{wave: 'z.....3z..5..z...........', name: 'TmplockData',data:["d","g","c",],node:'......d',},{},
{wave: '0.1.............0.10.....', name: 'that.valid[O]'},
{wave: 'x.2223.425...222x.2x.....', name: 'that.data[O]',data:["a","b","c","d","e","f","g","h","i","g"]},
{wave: '0.1..01..0..1......0.....', name: 'that.ready[I]', node:'.....b',},
],
edge: ['b~>a ready Delay',"c->d","h->m","i->n"]
}