Skip to content

Commit f150f63

Browse files
add docs and fix reuse_1
1 parent d76030a commit f150f63

File tree

1 file changed

+56
-10
lines changed

1 file changed

+56
-10
lines changed

std/delay_lines.act

Lines changed: 56 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ namespace std {
2727
export namespace delay_elements {
2828

2929
// Symmetric Delay Elements -----------------------
30+
31+
/*
32+
Simple delay buffer consisting of two inverters
33+
*/
3034
export defproc delay_buffer (bool? in; bool! out)
3135
{
3236
std::cells::INVX1 invs[2];
@@ -39,6 +43,10 @@ namespace std {
3943
}
4044
}
4145

46+
/*
47+
Delay buffer consisting of two weak-inverters in series.
48+
L : Length of weak transistors
49+
*/
4250
export template <pint L>
4351
defproc weak_delay_buffer (bool? in; bool! out) {
4452
bool x;
@@ -54,8 +62,27 @@ namespace std {
5462
// Symmetric Delay Elements -----------------------
5563

5664
// Asymmetric Delay Elements ----------------------
65+
// Asymmetric : Different propagation delays for rising edge (1) and falling edge (0)
66+
/*
67+
Recursive asymmetric delay lines that use themselves to create long delays.
68+
REC: Recursion level
69+
L : Length of weak transistors
70+
Base case: two asymmetric inverters in series
71+
Recursive step: insert REC-1 of the correct type on the slow path to make it even slower
72+
Has additional transistor to prevent transient short and reduce power consumption
73+
*/
74+
/*
75+
Fast-0, Slow-1
76+
Delay of rising edge - high
77+
Delay of falling edge - 2 transitions
78+
*/
5779
export template <pint REC, L> defproc fast0_slow1_rec (bool? in; bool! out);
5880

81+
/*
82+
Fast-1, Slow-0
83+
Delay of falling edge - high
84+
Delay of rising edge - 2 transitions
85+
*/
5986
export template <pint REC, L> defproc fast1_slow0_rec (bool? in; bool! out);
6087

6188
export template <pint REC, L>
@@ -100,18 +127,28 @@ namespace std {
100127
}
101128
}
102129

130+
/*
131+
Meta-elements that use a symmetric delay line twice (0-delay + 1-delay)
132+
to simulate an asymmetric delay line.
133+
The symmetric delay line component must be connected between dl_in and dl_out.
134+
Slow rising edge (1) and fast falling edge (0).
135+
*/
136+
/*
137+
Delay of rising edge - (0-delay + 1-delay) of symm. DL + 5 transitions
138+
Delay of falling edge - 2 transitions
139+
*/
103140
export defproc reuse_1 (bool? in; bool! out; bool! dl_in; bool? dl_out) {
104-
std::cells::XOR2X1 xor;
105-
bool a, b, _i;
106-
_i = xor.A;
107-
a = xor.B;
108-
xor.Y = dl_in;
109-
b = dl_out;
141+
bool x, y, _y;
142+
y = dl_in;
143+
std::cells::NOR2X1 nor;
144+
nor.A = dl_out;
145+
nor.B = x;
146+
nor.Y = out;
110147
prs {
111-
b & in #> a-
112-
a -> out-
113-
~a & ~b -> out+
114-
in => _i-
148+
_y => y-
149+
Reset | in & x -> _y-
150+
~Reset & ~x -> _y+
151+
dl_out & in #> x-
115152
}
116153
spec {
117154
timing in+ : out+ < in-
@@ -140,6 +177,10 @@ namespace std {
140177
}
141178
}
142179

180+
/*
181+
Delay of rising edge - (0-delay + 1-delay) of symm. DL + 7 transitions
182+
Delay of falling edge - 2 transitions
183+
*/
143184
export defproc reuse_2 (bool? in; bool! out; bool! dl_in; bool? dl_out) {
144185
bool x, _x, do;
145186

@@ -177,6 +218,11 @@ namespace std {
177218
}
178219

179220
export namespace delay_lines {
221+
/*
222+
Chains of delay elements.
223+
N : number of elements in series.
224+
For other parameters specific to each, see the delay elements above.
225+
*/
180226

181227
// Symmetric Delay Lines -----------------------
182228
export template <pint N>

0 commit comments

Comments
 (0)