Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(atoll): implement first cut ATOLL implementation #357

Merged
merged 58 commits into from
Jan 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
697f730
wip: atoll API
rahulk29 Dec 23, 2023
1357844
wip
rahulk29 Dec 24, 2023
7d838ea
base api
rohanku Dec 24, 2023
303b635
basic port extraction
rahulk29 Dec 27, 2023
88c5368
fix integer division rounding issues
rahulk29 Dec 28, 2023
cfc2191
fix lints
rahulk29 Dec 28, 2023
2aeb8df
expose vec of net IDs from AtollAbstract
rahulk29 Dec 28, 2023
72fae21
api for coordinate conversions
rahulk29 Dec 28, 2023
f033124
feat(lvs-matching): LVS matching via AtollTile trait (#356)
rohanku Dec 28, 2023
27b2841
remove nx, ny from routing grid
rahulk29 Dec 29, 2023
180f421
Merge remote-tracking branch 'origin/atoll-api' into abstract
rahulk29 Dec 29, 2023
350cb20
feat(atoll): convert between physical/lcm units
rahulk29 Dec 30, 2023
565f116
add sky130 pmos tile
rahulk29 Dec 30, 2023
f25b0dd
correct nsdm/psdm/nwell dimensions, add pmos tile to sky130 atoll
rahulk29 Dec 31, 2023
78ab8c4
feat(bbox): implement LayerBbox trait
rahulk29 Dec 31, 2023
1e3d42b
add track and grid helper functions for atoll
rahulk29 Dec 31, 2023
b0231d7
feat(atoll): use virtual layer for tile outline
rahulk29 Dec 31, 2023
60230a0
format
rahulk29 Dec 31, 2023
943de4d
fix lints
rahulk29 Dec 31, 2023
4019d4d
fix(atoll): extend gate pin of mos tile to grid
rahulk29 Dec 31, 2023
62a9514
routing api (#359)
rohanku Dec 31, 2023
86c5219
initial dijkstra router impl
rahulk29 Jan 2, 2024
84acd2f
fix router bugs
rahulk29 Jan 2, 2024
b141210
fix route drawing logic (#360)
rohanku Jan 2, 2024
ca4ed8e
iterative dijkstra
rahulk29 Jan 2, 2024
5a599d5
Merge branch 'abstract' of github.com:ucb-substrate/substrate2 into a…
rahulk29 Jan 2, 2024
6e754a6
debug router
rahulk29 Jan 2, 2024
f7ff06f
fix track dir bug in router
rahulk29 Jan 2, 2024
9ae51a1
hacky fix to force router to not assume same root net means connected
rahulk29 Jan 2, 2024
e90727c
format
rahulk29 Jan 2, 2024
557989b
fix incorrect uniform tracks test
rahulk29 Jan 2, 2024
04fb311
add alignment
rohanku Jan 2, 2024
b9b33e6
Merge branch 'abstract' of github.com:ucb-substrate/substrate2 into a…
rohanku Jan 2, 2024
6ccab18
fix bug in router cost function
rahulk29 Jan 2, 2024
76d8396
remove nondeterminism of router
rohanku Jan 2, 2024
f3b9f3b
remove debug abstract
rohanku Jan 2, 2024
8931a19
feat(atoll): add sky130 ntap/ptap atoll tiles
rahulk29 Jan 2, 2024
690d40a
work on correct abstract merge
rohanku Jan 2, 2024
eb4c268
Merge branch 'abstract' of github.com:ucb-substrate/substrate2 into a…
rahulk29 Jan 2, 2024
c8ca4ed
Merge branch 'abstract' of github.com:ucb-substrate/substrate2 into a…
rohanku Jan 2, 2024
4d33700
fix drc errors in mos tile
rahulk29 Jan 2, 2024
7e9bce8
make signals public
rohanku Jan 2, 2024
7813ca8
Merge branch 'abstract' of github.com:ucb-substrate/substrate2 into a…
rohanku Jan 2, 2024
0880c30
adjust li expansion to fix drc errors
rahulk29 Jan 2, 2024
ca13a65
remove pwell from nmos
rohanku Jan 2, 2024
564a061
Merge branch 'abstract' of github.com:ucb-substrate/substrate2 into a…
rohanku Jan 2, 2024
73a08b8
revert to using pwell pin
rohanku Jan 2, 2024
08f8248
fix router interlayer transitions (ilts)
rahulk29 Jan 3, 2024
5db2a0e
add mechanism for matching nets to port geometry
rohanku Jan 3, 2024
a14058d
Merge branch 'abstract' of github.com:ucb-substrate/substrate2 into a…
rohanku Jan 3, 2024
69ac838
fix router bugs
rahulk29 Jan 3, 2024
0a28cd0
Merge branch 'abstract' of github.com:ucb-substrate/substrate2 into a…
rahulk29 Jan 3, 2024
4985a8a
fix tap nwell
rohanku Jan 3, 2024
a79a4de
add connected instantiation
rohanku Jan 3, 2024
ba739bb
fix lint errors
rohanku Jan 4, 2024
cf9fea7
tweak costs, fix docs
rahulk29 Jan 4, 2024
64a40a2
Merge branch 'abstract' of github.com:ucb-substrate/substrate2 into a…
rahulk29 Jan 4, 2024
7575442
fix broken docs links in atoll
rahulk29 Jan 5, 2024
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
68 changes: 59 additions & 9 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 8 additions & 15 deletions codegen/src/block/layout.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ use darling::ast::{Fields, Style};
use darling::{ast, FromDeriveInput, FromField, FromMeta, FromVariant};
use proc_macro2::TokenStream;
use quote::{format_ident, quote, ToTokens};
use syn::parse_quote;

use crate::substrate_ident;
use type_dispatch::derive::{add_trait_bounds, struct_body};
Expand Down Expand Up @@ -93,8 +92,7 @@ fn transform_field_decl(_idx: usize, field: &DataField) -> TokenStream {
ref attrs,
} = field;
let substrate = substrate_ident();
let field_ty =
quote!(#substrate::geometry::transform::Transformed<'__substrate_derive_lifetime, #ty>);
let field_ty = quote!(#substrate::geometry::transform::Transformed<#ty>);

match ident {
Some(ident) => {
Expand Down Expand Up @@ -151,12 +149,7 @@ impl ToTokens for DataInputReceiver {
quote!(#substrate::geometry::transform::HasTransformedView),
);

let lifetime: syn::GenericParam = parse_quote!('__substrate_derive_lifetime);
let mut ref_generics = generics.clone();
ref_generics.params.push(lifetime.clone());

let (imp, ty, wher) = generics.split_for_impl();
let (_ref_imp, ref_ty, _ref_wher) = ref_generics.split_for_impl();
let transformed_ident = format_ident!("{}TransformedView", ident);

let expanded = match data {
Expand All @@ -179,15 +172,15 @@ impl ToTokens for DataInputReceiver {

quote! {
#(#attrs)*
#vis struct #transformed_ident #ref_generics #body
#vis struct #transformed_ident #generics #body

impl #imp #substrate::geometry::transform::HasTransformedView for #ident #ty #wher {
type TransformedView<#lifetime> = #transformed_ident #ref_ty;
type TransformedView = #transformed_ident #ty;

fn transformed_view(
&self,
__substrate_derive_transformation: #substrate::geometry::transform::Transformation,
) -> Self::TransformedView<'_> {
) -> Self::TransformedView {
#retval
}
}
Expand All @@ -200,16 +193,16 @@ impl ToTokens for DataInputReceiver {
.map(|v| transform_variant_match_arm(transformed_ident.clone(), v));
quote! {
#(#attrs)*
#vis enum #transformed_ident #ref_generics {
#vis enum #transformed_ident #generics {
#( #decls )*
}
impl #imp #substrate::geometry::transform::HasTransformedView for #ident #ty #wher {
type TransformedView<#lifetime> = #transformed_ident #ref_ty;
type TransformedView = #transformed_ident #ty;

fn transformed_view(
&self,
__substrate_derive_transformation: #substrate::geometry::transform::Transformation,
) -> Self::TransformedView<'_> {
) -> Self::TransformedView {
match self {
#(#arms)*
}
Expand Down Expand Up @@ -277,7 +270,7 @@ impl ToTokens for HasLayoutInputReceiver {
fn layout(
&self,
io: &mut <<Self as #substrate::block::Block>::Io as #substrate::io::layout::HardwareType>::Builder,
cell: &mut #substrate::layout::CellBuilder<#pdk, Self>,
cell: &mut #substrate::layout::CellBuilder<#pdk>,
) -> #substrate::error::Result<Self::LayoutData> {

let source = { #source };
Expand Down
24 changes: 5 additions & 19 deletions codegen/src/io.rs
Original file line number Diff line number Diff line change
Expand Up @@ -332,15 +332,6 @@ pub(crate) fn layout_io(input: &IoInputReceiver) -> TokenStream {

let substrate = substrate_ident();

let lifetime: syn::GenericParam = parse_quote!('__substrate_derive_lifetime);
let mut ref_generics = generics.clone();
ref_generics.params.push(lifetime.clone());
add_trait_bounds(
&mut ref_generics,
quote!(#substrate::io::layout::HardwareType),
);
add_trait_bounds(&mut ref_generics, quote!(::std::any::Any));

let mut lt_generics = generics.clone();
add_trait_bounds(
&mut lt_generics,
Expand All @@ -355,23 +346,18 @@ pub(crate) fn layout_io(input: &IoInputReceiver) -> TokenStream {
let mut hbf_generics = lt_generics.clone();

let mut idents = Vec::new();
for param in &ref_generics.params {
for param in &lt_generics.params {
if let syn::GenericParam::Type(ref type_param) = *param {
idents.push(type_param.ident.clone());
}
}
let ref_wher = ref_generics.make_where_clause();
for ident in idents {
ref_wher.predicates.push(
syn::parse_quote!(<#ident as substrate::io::layout::HardwareType>::Bundle: #lifetime),
);
hbf_generics.make_where_clause().predicates.push(syn::parse_quote!(<#ident as #substrate::io::layout::HardwareType>::Builder: #substrate::io::layout::HierarchicalBuildFrom<#substrate::layout::element::NamedPorts>));
}

let (hbf_imp, hbf_ty, hbf_where) = hbf_generics.split_for_impl();

let (_imp, ty, _wher) = generics.split_for_impl();
let (_ref_imp, ref_ty, _ref_wher) = ref_generics.split_for_impl();
let fields = data.as_ref().take_struct().unwrap();

if let Some(layout_type) = layout_type {
Expand Down Expand Up @@ -430,7 +416,7 @@ pub(crate) fn layout_io(input: &IoInputReceiver) -> TokenStream {
#declare <#field_ty as #substrate::io::layout::HardwareType>::Builder,
});
transformed_layout_data_fields.push(quote! {
#declare #substrate::geometry::transform::Transformed<#lifetime, <#field_ty as #substrate::io::layout::HardwareType>::Bundle>,
#declare #substrate::geometry::transform::Transformed<<#field_ty as #substrate::io::layout::HardwareType>::Bundle>,
});
flatten_port_geometry_fields.push(quote! {
<<#field_ty as #substrate::io::layout::HardwareType>::Bundle as #substrate::io::Flatten<#substrate::io::layout::PortGeometry>>::flatten(&#refer, __substrate_output_sink);
Expand Down Expand Up @@ -515,15 +501,15 @@ pub(crate) fn layout_io(input: &IoInputReceiver) -> TokenStream {
}

#(#attrs)*
#vis struct #transformed_layout_data_ident #ref_generics #transformed_layout_data_body
#vis struct #transformed_layout_data_ident #lt_generics #transformed_layout_data_body

impl #lt_any_imp #substrate::geometry::transform::HasTransformedView for #layout_data_ident #lt_any_ty #lt_any_where {
type TransformedView<#lifetime> = #transformed_layout_data_ident #ref_ty;
type TransformedView = #transformed_layout_data_ident #lt_ty;

fn transformed_view(
&self,
trans: #substrate::geometry::transform::Transformation,
) -> Self::TransformedView<'_> {
) -> Self::TransformedView {
#transformed_layout_data_ident #transformed_view_body
}
}
Expand Down
Loading
Loading