merge of prims
This commit is contained in:
parent
8f67c42bdb
commit
0ade5522a2
@ -78,8 +78,8 @@ namespace tmpl {
|
|||||||
[(&i:M: d.d[i].t | d.d[i].f)];
|
[(&i:M: d.d[i].t | d.d[i].f)];
|
||||||
self := 0;
|
self := 0;
|
||||||
(;i:M: [ d.d[i].t -> self := self | (1 << i)
|
(;i:M: [ d.d[i].t -> self := self | (1 << i)
|
||||||
[] else -> skip
|
[] else -> skip
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ namespace tmpl {
|
|||||||
|
|
||||||
|
|
||||||
BUF_X1 reset_buf(.a=reset_B, .y=_reset_BX,.vdd=supply.vdd,.vss=supply.vss);
|
BUF_X1 reset_buf(.a=reset_B, .y=_reset_BX,.vdd=supply.vdd,.vss=supply.vss);
|
||||||
sigbuf<N> reset_bufarray(.in=_reset_BX, .out=_reset_BXX);
|
sigbuf<N> reset_bufarray(.in=_reset_BX, .out=_reset_BXX);
|
||||||
|
|
||||||
//validity
|
//validity
|
||||||
bool _in_v;
|
bool _in_v;
|
||||||
@ -430,6 +430,7 @@ namespace tmpl {
|
|||||||
sigbuf<N> c_buf_d_inv(.in=cond_inv_f, .out=_c_d_buf, .supply=supply);
|
sigbuf<N> c_buf_d_inv(.in=cond_inv_f, .out=_c_d_buf, .supply=supply);
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
vtree<N> vc(.in=in.d,.out=_in_v,.supply=supply);
|
vtree<N> vc(.in=in.d,.out=_in_v,.supply=supply);
|
||||||
|
|
||||||
A_2C_B_X1 c_el(.c1=_c_v, .c2=_in_v, .y=_in_c_v_,.vdd=supply.vdd,.vss=supply.vss);
|
A_2C_B_X1 c_el(.c1=_c_v, .c2=_in_v, .y=_in_c_v_,.vdd=supply.vdd,.vss=supply.vss);
|
||||||
@ -844,57 +845,12 @@ defproc slice_data(avMx1of2<N> in; avMx1of2<std::min(N1,N)-std::max(N0,0)> out;
|
|||||||
// {N0 >= 0 : "N0 can be minimum 0!"};
|
// {N0 >= 0 : "N0 can be minimum 0!"};
|
||||||
// {N1 <= N : "N1 can be maximum N"};
|
// {N1 <= N : "N1 can be maximum N"};
|
||||||
|
|
||||||
export template<pint N; pint CONDITION_BIT>
|
|
||||||
defproc demux_bit (avMx1of2<N+1> in; avMx1of2<N> out1; avMx1of2<N> out2; bool? reset_B; power supply)
|
|
||||||
{
|
|
||||||
demux<N> demux(.reset_B = reset_B, .out1=out1, .out2=out2);
|
|
||||||
pint _N1, _N0;
|
pint _N1, _N0;
|
||||||
export template<pint N; pint CONDITION_BIT>
|
|
||||||
defproc demux_bit (avMx1of2<N+1> in; avMx1of2<N> out1; avMx1of2<N> out2; bool? reset_B; power supply)
|
|
||||||
{
|
|
||||||
demux<N> demux(.reset_B = reset_B, .out1=out1, .out2=out2);
|
|
||||||
|
|
||||||
in.d.d[CONDITION_BIT].f = demux.cond.d.d[0].f;
|
|
||||||
in.d.d[CONDITION_BIT].t = demux.cond.d.d[0].t;
|
|
||||||
_N1 = std::min(N1,N);
|
_N1 = std::min(N1,N);
|
||||||
_N0 = std::max(N0,0);
|
_N0 = std::max(N0,0);
|
||||||
in.d.d[CONDITION_BIT].f = demux.cond.d.d[0].f;
|
|
||||||
in.d.d[CONDITION_BIT].t = demux.cond.d.d[0].t;
|
|
||||||
|
|
||||||
in.v = demux.in.v;
|
|
||||||
in.a = demux.in.a;
|
|
||||||
BUF_X1 ack_buf(.a = out.a, .y = in.a, .vss = supply.vss, .vdd = supply.vdd);
|
BUF_X1 ack_buf(.a = out.a, .y = in.a, .vss = supply.vss, .vdd = supply.vdd);
|
||||||
in.v = demux.in.v;
|
|
||||||
in.a = demux.in.a;
|
|
||||||
|
|
||||||
|
|
||||||
(i:0..CONDITION_BIT:
|
|
||||||
in.d.d[i].f = demux.in.d.d[i].f;
|
|
||||||
in.d.d[i].t = demux.in.d.d[i].t;)
|
|
||||||
|
|
||||||
(i:CONDITION_BIT..N-1:
|
|
||||||
in.d.d[i].f = demux.in.d.d[i].f;
|
|
||||||
in.d.d[i].t = demux.in.d.d[i].t;)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
export template<pint N>
|
|
||||||
defproc demux_bit_msb (avMx1of2<N+1> in; avMx1of2<N> out1; avMx1of2<N> out2; bool? reset_B; power supply)
|
|
||||||
{
|
|
||||||
demux<N> demux(.reset_B = reset_B, .out1=out1, .out2=out2);
|
|
||||||
|
|
||||||
in.d.d[N+1].f = demux.cond.d.d[0].f;
|
|
||||||
in.d.d[N+1].t = demux.cond.d.d[0].t;
|
|
||||||
|
|
||||||
in.v = demux.in.v;
|
|
||||||
in.a = demux.in.a;
|
|
||||||
|
|
||||||
|
|
||||||
(i:0..N:
|
|
||||||
in.d.d[i].f = demux.in.d.d[i].f;
|
|
||||||
in.d.d[i].t = demux.in.d.d[i].t;)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
vtree<N> in_vt(.in = in.d, .out = in.v, .supply = supply);
|
vtree<N> in_vt(.in = in.d, .out = in.v, .supply = supply);
|
||||||
(i:_N1-_N0:
|
(i:_N1-_N0:
|
||||||
@ -905,6 +861,16 @@ defproc slice_data(avMx1of2<N> in; avMx1of2<std::min(N1,N)-std::max(N0,0)> out;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export template<pint N; pint CONDITION_BIT>
|
||||||
|
defproc demux_bit (avMx1of2<N+1> in; avMx1of2<N> out1; avMx1of2<N> out2; bool? reset_B; power supply)
|
||||||
|
{
|
||||||
|
demux<N> demux(.reset_B = reset_B, .out1=out1, .out2=out2);
|
||||||
|
|
||||||
|
in.d.d[CONDITION_BIT].f = demux.cond.d.d[0].f;
|
||||||
|
in.d.d[CONDITION_BIT].t = demux.cond.d.d[0].t;
|
||||||
|
|
||||||
|
in.v = demux.in.v;
|
||||||
|
in.a = demux.in.a;
|
||||||
|
|
||||||
|
|
||||||
(i:0..CONDITION_BIT:
|
(i:0..CONDITION_BIT:
|
||||||
@ -935,4 +901,6 @@ defproc slice_data(avMx1of2<N> in; avMx1of2<std::min(N1,N)-std::max(N0,0)> out;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user