manta/dev/ethernet_interface/index.html

1824 lines
66 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Manta Documentation">
<meta name="author" content="Fischer Moseley">
<link rel="canonical" href="https://fischermoseley.github.io/manta/dev/ethernet_interface/">
<link rel="prev" href="../uart_interface/">
<link rel="icon" href="../assets/logo_ray_only_with_shadow.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.11">
<title>Ethernet Interface - Manta Documentation</title>
<link rel="stylesheet" href="../assets/stylesheets/main.4af4bdda.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../assets/_mkdocstrings.css">
<link rel="stylesheet" href="../stylesheets/extra.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#overview" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<div data-md-color-scheme="default" data-md-component="outdated" hidden>
<aside class="md-banner md-banner--warning">
<div class="md-banner__inner md-grid md-typeset">
You're not viewing the latest version.
<a href="../..">
<strong>Click here to go to latest.</strong>
</a>
</div>
<script>var el=document.querySelector("[data-md-component=outdated]"),base=new URL(".."),outdated=__md_get("__outdated",sessionStorage,base);!0===outdated&&el&&(el.hidden=!1)</script>
</aside>
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="Manta Documentation" class="md-header__button md-logo" aria-label="Manta Documentation" data-md-component="logo">
<img src="../assets/logo_minimal_border.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Manta Documentation
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Ethernet Interface
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="blue" data-md-color-accent="custom" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="custom" aria-label="Switch to system preference" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Switch to system preference" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m14.3 16-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9zM20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12zm-9.15 3.96h2.3L12 9z"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<div class="md-header__source">
<a href="https://github.com/fischermoseley/manta/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
</div>
<div class="md-source__repository">
fischermoseley/manta
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="Manta Documentation" class="md-nav__button md-logo" aria-label="Manta Documentation" data-md-component="logo">
<img src="../assets/logo_minimal_border.png" alt="logo">
</a>
Manta Documentation
</label>
<div class="md-nav__source">
<a href="https://github.com/fischermoseley/manta/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
</div>
<div class="md-source__repository">
fischermoseley/manta
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../installation/" class="md-nav__link">
<span class="md-ellipsis">
Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../getting_started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../use_cases/" class="md-nav__link">
<span class="md-ellipsis">
Use Cases
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../architecture/" class="md-nav__link">
<span class="md-ellipsis">
Architecture
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../similar_tools/" class="md-nav__link">
<span class="md-ellipsis">
Similar Tools
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="">
<span class="md-ellipsis">
Cores
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Cores
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../io_core/" class="md-nav__link">
<span class="md-ellipsis">
IO Core
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../logic_analyzer_core/" class="md-nav__link">
<span class="md-ellipsis">
Logic Analyzer Core
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../memory_core/" class="md-nav__link">
<span class="md-ellipsis">
Memory Core
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" checked>
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="">
<span class="md-ellipsis">
Interfaces
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Interfaces
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../uart_interface/" class="md-nav__link">
<span class="md-ellipsis">
UART Interface
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Ethernet Interface
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Ethernet Interface
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#overview" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#configuration" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
<nav class="md-nav" aria-label="Configuration">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#verilog-based-workflows" class="md-nav__link">
<span class="md-ellipsis">
Verilog-Based Workflows
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#amaranth-native-designs" class="md-nav__link">
<span class="md-ellipsis">
Amaranth-Native Designs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#manta.EthernetInterface" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;EthernetInterface
</span>
</a>
<nav class="md-nav" aria-label=" EthernetInterface">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#manta.EthernetInterface.set_mii_phy_io" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;set_mii_phy_io
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#manta.EthernetInterface.set_rmii_phy_io" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;set_rmii_phy_io
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#manta.EthernetInterface.set_gmii_phy_io" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;set_gmii_phy_io
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#manta.EthernetInterface.set_rgmii_phy_io" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;set_rgmii_phy_io
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#manta.EthernetInterface.set_sgmii_phy_io" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;set_sgmii_phy_io
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_9" >
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="">
<span class="md-ellipsis">
For Developers
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
For Developers
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="https://github.com/fischermoseley/manta/milestones" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#overview" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#configuration" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
<nav class="md-nav" aria-label="Configuration">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#verilog-based-workflows" class="md-nav__link">
<span class="md-ellipsis">
Verilog-Based Workflows
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#amaranth-native-designs" class="md-nav__link">
<span class="md-ellipsis">
Amaranth-Native Designs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#manta.EthernetInterface" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;EthernetInterface
</span>
</a>
<nav class="md-nav" aria-label=" EthernetInterface">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#manta.EthernetInterface.set_mii_phy_io" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;set_mii_phy_io
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#manta.EthernetInterface.set_rmii_phy_io" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;set_rmii_phy_io
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#manta.EthernetInterface.set_gmii_phy_io" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;set_gmii_phy_io
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#manta.EthernetInterface.set_rgmii_phy_io" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;set_rgmii_phy_io
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#manta.EthernetInterface.set_sgmii_phy_io" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;set_sgmii_phy_io
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>Ethernet Interface</h1>
<h2 id="overview">Overview</h2>
<p>For applications where UART is too slow or isn't available, Manta provides the option to run over Ethernet. This is done via UDP, so the FPGA can be anywhere on the same network as the host machine - as opposed to MAC-based Ethernet interfaces, which usually require a point-to-point network connection between the FPGA and the host. Although UDP does not guarantee reliable, in-order packet delivery, this generally tends to be the case on uncongested networks. In the future, Manta will enforce this at the <a href="https://github.com/fischermoseley/manta/issues/10">application layer</a>.</p>
<div class="admonition info">
<p class="admonition-title">Not every device is supported!</p>
<p>Internally, the Ethernet Interface uses <a href="https://github.com/enjoy-digital/liteeth">LiteEth</a> to generate cross-platform RTL for the FPGA. As a result, the supported devices are loosely restricted to those <a href="https://github.com/enjoy-digital/liteeth?tab=readme-ov-file#-features">supported by LiteEth</a>. If a device you'd like to use isn't on the list, the community would love your help.</p>
</div>
<p>Both the <a href="../use_cases">Use Cases</a> page and the repository's <a href="https://github.com/fischermoseley/manta/tree/main/examples">examples</a> folder contain examples of the Ethernet Interface for your reference.</p>
<h2 id="configuration">Configuration</h2>
<h3 id="verilog-based-workflows">Verilog-Based Workflows</h3>
<p>The UART interface is used by adding a <code>ethernet</code> entry at the bottom of the configuration file. This is best shown by example:</p>
<p><div class="language-yaml highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nt">ethernet</span><span class="p">:</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="w"> </span><span class="nt">phy</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">LiteEthPHYRMII</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span><span class="nt">vendor</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">xilinx</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="w"> </span><span class="nt">toolchain</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">vivado</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="w"> </span><span class="nt">clk_freq</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">50e6</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="w"> </span><span class="nt">refclk_freq</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">50e6</span>
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a>
</span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="w"> </span><span class="nt">fpga_ip_addr</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;192.168.0.110&quot;</span>
</span><span id="__span-0-10"><a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="w"> </span><span class="nt">host_ip_addr</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;192.168.0.100&quot;</span>
</span></code></pre></div>
Inside this configuration, the following parameters may be set:</p>
<ul>
<li>
<p><code>phy</code> <em>(required)</em>: The name of the LiteEth PHY class to use. Select the appropriate one from <a href="https://github.com/enjoy-digital/liteeth/blob/b4e28506238c5340f2ade7899c2223424cabd410/liteeth/phy/__init__.py#L25-L45">this list</a> for your FPGA vendor and family.</p>
</li>
<li>
<p><code>vendor</code> <em>(required)</em>: The vendor of your FPGA. Currently only values of <code>xilinx</code> and <code>lattice</code> are supported. This is used to generate (currently unused) timing constraints files.</p>
</li>
<li>
<p><code>toolchain</code> <em>(required)</em>: The toolchain being used. Currently only values of <code>vivado</code> and <code>diamond</code> are supported.</p>
</li>
<li>
<p><code>clk_freq</code> <em>(required)</em>: The frequency of the clock provided to the Manta module on the FPGA, in Hertz (Hz).</p>
</li>
<li>
<p><code>refclk_freq</code> <em>(required)</em>: The frequency of the reference clock to be provided to the Ethernet PHY, in Hertz (Hz). This frequency must match the MII variant used by the PHY, and speed it is being operated at. For instance, a RGMII PHY may be operated at either 125MHz in Gigabit mode, or 25MHz in 100Mbps mode.</p>
</li>
<li>
<p><code>fpga_ip_addr</code> <em>(required)</em>: The IP address the FPGA will attempt to claim. Upon power-on, the FPGA will issue a DHCP request for this IP address. Ping this address after power-on to check if this request was successful, or check your router for a list of connected devices.</p>
</li>
<li>
<p><code>host_ip_addr</code> <em>(required)</em>: The IP address of the host machine, which the FPGA will send packets back to.</p>
</li>
<li>
<p><code>udp_port</code> <em>(optional)</em>: The UDP port to communicate over. Defaults to 2001.</p>
</li>
</ul>
<p>Lastly, any additional arguments provided in the <code>ethernet</code> section of the config file will be passed to the LiteEth standalone core generator. As a result, the <a href="https://github.com/enjoy-digital/liteeth/tree/master/examples">examples</a> provided by LiteEth may be of some service to you if you're bringing up a different FPGA!</p>
<div class="admonition warning">
<p class="admonition-title">LiteEth doesn't always generate its own <code>refclk</code>!</p>
<p>Although LitEth is built on Migen and LiteX which support PLLs and other clock generation primitives, I haven't seen it instantiate one to synthesize a suitable <code>refclk</code> at the appropriate frequency from the input clock. As a result, for now it's recommended to generate your <code>refclk</code> outside Manta, and then use it to clock your Manta instance.</p>
</div>
<h3 id="amaranth-native-designs">Amaranth-Native Designs</h3>
<p>Since Amaranth modules are Python objects, the configuration of the IO Core is given by the arguments given during initialization. See the documentation for the <code>EthernetInterface</code> <a href="#manta.EthernetInterface">class constructor</a> below, as well as the Amaranth <a href="https://github.com/fischermoseley/manta/tree/main/examples/amaranth">examples</a> in the repo.</p>
<div class="admonition note">
<p class="admonition-title">Don't use <code>.eq()</code> when connecting to PHY IO pins!</p>
<p>The <code>EthernetInterface</code> has its own class methods for connecting to the IO pins routed to the PHY. This is necessary as some variations of the Media-Independent Interface used by Ethernet PHYs include bidirectional (ie, <code>inout</code>) signals, which require some special provisions in Amaranth. As a result these methods is used to connect the <code>EthernetInterface</code> to the Ethernet PHY, instead of using Amaranth's <code>.eq()</code>, as is done on the UARTInterface.</p>
</div>
<p>For more information on the connections between your PHY and FPGA, please reference your PHY's datasheet, your development board's schematic, or <a href="https://wikipedia.org/wiki/Media-independent_interface">Wikipedia</a> for more information.</p>
<div class="doc doc-object doc-class">
<h3 id="manta.EthernetInterface" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">manta.EthernetInterface</span>
</h3>
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">EthernetInterface</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">phy</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> <span class="n">clk_freq</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> <span class="n">fpga_ip_addr</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a> <span class="n">host_ip_addr</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a> <span class="n">udp_port</span><span class="o">=</span><span class="mi">2001</span><span class="p">,</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="p">)</span>
</span></code></pre></div>
<div class="doc doc-contents first">
<p>A synthesizable module for Ethernet (UDP) communication between a host
machine and the FPGA.</p>
<p>This function is the main mechanism for configuring an Ethernet
Interface in an Amaranth-native design.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<ul>
<li class="doc-section-item field-body">
<b><code>phy</code></b>
(<code><span title="str">str</span></code>)
<div class="doc-md-description">
<p>The name of the LiteEth PHY class to use. Select the
appropriate one from <a href="https://github.com/enjoy-digital/liteeth/blob/main/liteeth/phy/__init__.py#L25-L45">this list</a>
for your FPGA vendor and family.</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>clk_freq</code></b>
(<code><span title="int">int</span> | <span title="float">float</span></code>)
<div class="doc-md-description">
<p>The frequency of the clock provided to the
Manta module on the FPGA, in Hertz (Hz).</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>fpga_ip_addr</code></b>
(<code><span title="str">str</span></code>)
<div class="doc-md-description">
<p>The IP address the FPGA will attempt to claim.
Upon power-on, the FPGA will issue a DHCP request for this IP
address. Ping this address after power-on to check if this
request was successful, or check your router for a list of
connected devices.</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>host_ip_addr</code></b>
(<code><span title="str">str</span></code>)
<div class="doc-md-description">
<p>The IP address of the host machine, which the
FPGA will send packets back to.</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>udp_port</code></b>
(<code><span title="Optional">Optional</span>[<span title="int">int</span>]</code>, default:
<code>2001</code>
)
<div class="doc-md-description">
<p>The UDP port to communicate over.</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>**kwargs</code></b>
<div class="doc-md-description">
<p>Any additional keyword arguments to this function will
be passed to the LiteEth RTL generator. Some examples are
provided below:</p>
<ul>
<li>
<p>mac_address (int): A 48-bit integer representing the MAC
address the FPGA will assume. If not provided, an address
within the <a href="https://en.wikipedia.org/wiki/MAC_address#Ranges_of_group_and_locally_administered_addresses">Locally Administered, Administratively Assigned group</a>
will be randomly generated.</p>
</li>
<li>
<p>vendor (str): The vendor of your FPGA. Currently only values
of <code>xilinx</code> and <code>lattice</code> are supported. This is used to
generate (currently unused) timing constraints files.</p>
</li>
<li>
<p>toolchain (str): The toolchain being used. Currently only
values of <code>vivado</code> and <code>diamond</code> are supported.</p>
</li>
<li>
<p>refclk_freq (int | float): The frequency of the reference
clock to be provided to the Ethernet PHY, in Hertz (Hz).
This frequency must match the MII variant used by the PHY,
and speed it is being operated at. For instance, a RGMII
PHY may be operated at either 125MHz in Gigabit mode, or
25MHz in 100Mbps mode.</p>
</li>
</ul>
</div>
</li>
</ul>
<div class="doc doc-children">
<div class="doc doc-object doc-function">
<h4 id="manta.EthernetInterface.set_mii_phy_io" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">set_mii_phy_io</span>
</h4>
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">set_mii_phy_io</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">mii_clocks_tx</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> <span class="n">mii_clocks_rx</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> <span class="n">mii_rst_n</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a> <span class="n">mii_mdio</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a> <span class="n">mii_mdc</span><span class="p">,</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a> <span class="n">mii_rx_dv</span><span class="p">,</span>
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a> <span class="n">mii_rx_er</span><span class="p">,</span>
</span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a> <span class="n">mii_rx_data</span><span class="p">,</span>
</span><span id="__span-0-10"><a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a> <span class="n">mii_tx_en</span><span class="p">,</span>
</span><span id="__span-0-11"><a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a> <span class="n">mii_tx_data</span><span class="p">,</span>
</span><span id="__span-0-12"><a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a> <span class="n">mii_col</span><span class="p">,</span>
</span><span id="__span-0-13"><a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a> <span class="n">mii_crs</span><span class="p">,</span>
</span><span id="__span-0-14"><a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a><span class="p">)</span>
</span></code></pre></div>
<div class="doc doc-contents ">
<p>Sets the signals used to connect to a MII PHY in an Amarnath-native
design.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<ul>
<li class="doc-section-item field-body">
<b><code>mii_clocks_tx</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Transmit Clock</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>mii_clocks_rx</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Receive Clock</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>mii_rst_n</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>PHY Reset</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>mii_mdio</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Management Data</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>mii_mdc</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Management Data Clock</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>mii_rx_dv</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Receive Data Valid</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>mii_rx_er</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Receive Error</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>mii_rx_data</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Receive Data</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>mii_tx_en</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Transmit Enable</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>mii_tx_data</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Transmit Data</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>mii_col</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Collision Detect</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>mii_crs</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Carrier Sense</p>
</div>
</li>
</ul>
</div>
</div>
<div class="doc doc-object doc-function">
<h4 id="manta.EthernetInterface.set_rmii_phy_io" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">set_rmii_phy_io</span>
</h4>
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">set_rmii_phy_io</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">rmii_clocks_ref_clk</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> <span class="n">rmii_rst_n</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> <span class="n">rmii_rx_data</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a> <span class="n">rmii_crs_dv</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a> <span class="n">rmii_tx_en</span><span class="p">,</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a> <span class="n">rmii_tx_data</span><span class="p">,</span>
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a> <span class="n">rmii_mdc</span><span class="p">,</span>
</span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a> <span class="n">rmii_mdio</span><span class="p">,</span>
</span><span id="__span-0-10"><a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="p">)</span>
</span></code></pre></div>
<div class="doc doc-contents ">
<p>Sets the signals used to connect to a RMII PHY in an Amarnath-native
design.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<ul>
<li class="doc-section-item field-body">
<b><code>rmii_clocks_ref_clk</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Reference Clock</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rmii_rst_n</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>PHY Reset</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rmii_rx_data</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Receive Data</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rmii_crs_dv</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Carrier Sense and Receive Data Valid, multiplexed</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rmii_tx_en</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Transmit Enable</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rmii_tx_data</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Transmit Data</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rmii_mdc</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Management Data Clock</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rmii_mdio</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Management Data</p>
</div>
</li>
</ul>
</div>
</div>
<div class="doc doc-object doc-function">
<h4 id="manta.EthernetInterface.set_gmii_phy_io" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">set_gmii_phy_io</span>
</h4>
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">set_gmii_phy_io</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">gmii_clocks_tx</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> <span class="n">gmii_clocks_gtx</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> <span class="n">gmii_clocks_rx</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a> <span class="n">gmii_rst_n</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a> <span class="n">gmii_int_n</span><span class="p">,</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a> <span class="n">gmii_mdio</span><span class="p">,</span>
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a> <span class="n">gmii_mdc</span><span class="p">,</span>
</span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a> <span class="n">gmii_rx_dv</span><span class="p">,</span>
</span><span id="__span-0-10"><a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a> <span class="n">gmii_rx_er</span><span class="p">,</span>
</span><span id="__span-0-11"><a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a> <span class="n">gmii_rx_data</span><span class="p">,</span>
</span><span id="__span-0-12"><a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a> <span class="n">gmii_tx_en</span><span class="p">,</span>
</span><span id="__span-0-13"><a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a> <span class="n">gmii_tx_er</span><span class="p">,</span>
</span><span id="__span-0-14"><a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a> <span class="n">gmii_tx_data</span><span class="p">,</span>
</span><span id="__span-0-15"><a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a> <span class="n">gmii_col</span><span class="p">,</span>
</span><span id="__span-0-16"><a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a> <span class="n">gmii_crs</span><span class="p">,</span>
</span><span id="__span-0-17"><a id="__codelineno-0-17" name="__codelineno-0-17" href="#__codelineno-0-17"></a><span class="p">)</span>
</span></code></pre></div>
<div class="doc doc-contents ">
<p>Sets the signals used to connect to a GMII PHY in an Amarnath-native
design.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<ul>
<li class="doc-section-item field-body">
<b><code>gmii_clocks_tx</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Clock for 10/100 Mbit/s signals.</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>gmii_clocks_gtx</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Clock for gigabit transmit signals</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>gmii_clocks_rx</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Received Clock signal</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>gmii_rst_n</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>PHY Reset</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>gmii_int_n</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>PHY Interrupt</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>gmii_mdio</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Management Data</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>gmii_mdc</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Management Data Clock</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>gmii_rx_dv</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Receive Data Valid</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>gmii_rx_er</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Receive Error</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>gmii_rx_data</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Receive Data</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>gmii_tx_en</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Transmit Enable</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>gmii_tx_er</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Transmit Error</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>gmii_tx_data</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Transmit Data</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>gmii_col</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Collision Detect</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>gmii_crs</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Carrier Sense</p>
</div>
</li>
</ul>
</div>
</div>
<div class="doc doc-object doc-function">
<h4 id="manta.EthernetInterface.set_rgmii_phy_io" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">set_rgmii_phy_io</span>
</h4>
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">set_rgmii_phy_io</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">rgmii_clocks_tx</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> <span class="n">rgmii_clocks_rx</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> <span class="n">rgmii_rst_n</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a> <span class="n">rgmii_int_n</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a> <span class="n">rgmii_mdio</span><span class="p">,</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a> <span class="n">rgmii_mdc</span><span class="p">,</span>
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a> <span class="n">rgmii_rx_ctl</span><span class="p">,</span>
</span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a> <span class="n">rgmii_rx_data</span><span class="p">,</span>
</span><span id="__span-0-10"><a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a> <span class="n">rgmii_tx_ctl</span><span class="p">,</span>
</span><span id="__span-0-11"><a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a> <span class="n">rgmii_tx_data</span><span class="p">,</span>
</span><span id="__span-0-12"><a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a><span class="p">)</span>
</span></code></pre></div>
<div class="doc doc-contents ">
<p>Sets the signals used to connect to a RGMII PHY in an Amarnath-native
design.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<ul>
<li class="doc-section-item field-body">
<b><code>rgmii_clocks_tx</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Transmit Clock</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rgmii_clocks_rx</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Receive Clock</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rgmii_rst_n</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>PHY Reset</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rgmii_int_n</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>PHY Interrupt</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rgmii_mdio</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Management Data</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rgmii_mdc</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Management Data Clock</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rgmii_rx_ctl</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Receive Error and Receive Data Valid, multiplexed</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rgmii_rx_data</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Receive Data</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rgmii_tx_ctl</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Transmit Enable and Transmit Error, multiplexed</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>rgmii_tx_data</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Transmit Data</p>
</div>
</li>
</ul>
</div>
</div>
<div class="doc doc-object doc-function">
<h4 id="manta.EthernetInterface.set_sgmii_phy_io" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">set_sgmii_phy_io</span>
</h4>
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">set_sgmii_phy_io</span><span class="p">(</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">sgmii_refclk</span><span class="p">,</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> <span class="n">sgmii_rst</span><span class="p">,</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> <span class="n">sgmii_txp</span><span class="p">,</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a> <span class="n">sgmii_txn</span><span class="p">,</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a> <span class="n">sgmii_rxp</span><span class="p">,</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a> <span class="n">sgmii_rxn</span><span class="p">,</span>
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a> <span class="n">sgmii_link_up</span><span class="p">,</span>
</span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="p">)</span>
</span></code></pre></div>
<div class="doc doc-contents ">
<p>Sets the signals used to connect to a SGMII PHY in an Amarnath-native
design.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<ul>
<li class="doc-section-item field-body">
<b><code>sgmii_refclk</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Reference Clock</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>sgmii_rst</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>PHY Reset</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>sgmii_txp</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Transmit Data (Differential)</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>sgmii_txn</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Transmit Data (Differential)</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>sgmii_rxp</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Receive Data (Differential)</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>sgmii_rxn</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Receive Data (Differential)</p>
</div>
</li>
<li class="doc-section-item field-body">
<b><code>sgmii_link_up</code></b>
(<code><span title="amaranth.hdl.IOPort">IOPort</span></code>)
<div class="doc-md-description">
<p>Link Status</p>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["content.code.copy", "content.code.annotate", "navigation.sections", "navigation.expand"], "search": "../assets/javascripts/workers/search.f8cc74c7.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
<script src="../assets/javascripts/bundle.c8b220af.min.js"></script>
<script src="../javascripts/mathjax.js"></script>
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</body>
</html>