Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion lambdalib/analoglib/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
from .la_pll.la_pll import PLL
from .la_ring.la_ring import Ring

__all__ = ['PLL']
__all__ = ['PLL',
'Ring'
]
17 changes: 17 additions & 0 deletions lambdalib/analoglib/la_ring/la_ring.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from lambdalib.lambdalib import Lambda
from lambdalib.stdlib import Inv
from lambdalib.stdlib import Nand2

class Ring(Lambda):
def __init__(self):
name = 'la_ring'
super().__init__(name, __file__)

# deps
self.add_depfileset(Inv(), depfileset='rtl', fileset='rtl')
self.add_depfileset(Nand2(), depfileset='rtl', fileset='rtl')


if __name__ == "__main__":
d = Ring()
d.write_fileset(f"{d.name}.f", fileset="rtl")
37 changes: 37 additions & 0 deletions lambdalib/analoglib/la_ring/rtl/la_ring.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/**************************************************************************
* Function: Generic Ring Oscillator
* Copyright: Lambda Project Authors. All rights Reserved.
* License: MIT (see LICENSE file in Lambda repository)
*************************************************************************/
module la_ring #(parameter PROP = "", // cell property (vt, strength, ..)
parameter N = 7 // number of stages (must be odd #)
)
(
input en,
output out
);

wire [N-1:0] stage;

genvar i;
generate
for (i = 0; i < N; i = i + 1) begin : gen_stages
if (i == 0)
la_nand2 #(.PROP(PROP)) i0 (.a(stage[N-1]), .b(en), .z(stage[i]));
else
la_inv #(.PROP(PROP)) i0 (.a(stage[i-1]), .z(stage[i]));
end
endgenerate

assign out = stage[N-1];

// ERROR CHECKING
initial begin
if (N % 2 == 0) begin
$display("ERROR: Ring oscillator stages set to %0d. Must be odd for oscillation.", N);
$finish;
end
end


endmodule
Loading