@@ -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