(no commit message)
[libreriscv.git] / shakti / m_class / pinmux.mdwn
index 693d5e779f520513ae1ca38905edf4912b159b53..f55c32ef495d3952f5f519cc0400cf4f548ccab3 100644 (file)
@@ -6,8 +6,90 @@
   is a Watchdog Timer and others.
 * <https://github.com/sifive/freedom/blob/master/src/main/scala/everywhere/e300artydevkit/Platform.scala>
   Pinmux ("IOF") for multiplexing several I/O functions onto a single pin
+* <https://bitbucket.org/casl/pinmux.git> - implementation by Shakti RISE Group
 
-Complex!  Covered in [[pinouts]].  The general idea is to target several
+Surprisingly complex!  
+
+# Requirements
+
+"to create a general-purpose libre-licensed pinmux
+module that can be used with a wide range of interfaces that have
+Open-Drain, Push-Push *and bi-directional* capabilities, as well as
+optional pull-up and pull-down resistors, in an IDENTICAL fashion to
+that of ALL major well-known embedded SoCs from ST Micro, Cypress,
+Texas Instruments, NXP, Rockchip, Allwinner and many many others".
+
+* The IO pad shall have pull-up enable, pull-down enable, variable
+  frequency de-bounce (schmidt trigger), tri-state capability, 
+  variable current drive (on input), Open Drain and CMOS Push-Push.
+* Certain functions shall have the ability to control whether
+  IO pads will be input or output (not the GPIO registers).
+* Number of wires shall be minimised especially in cases where
+  the IO pad (puen, oe) need to change under the control of the
+  function (not the GPIO registers).
+* The amount of latency (gates in between I/O pad and function)
+  shall be minimised
+* There shall be no short-circuits created by multiple input
+  pins trying to drive the same input function
+* There shall be no short-circuits even when functions control
+  when the IO pad is an input.
+
+## Analysis
+
+Questions:
+
+* Can damage occur (to the ASIC) by outputs being short-circuited to outputs
+  in any way?
+  A partial analysis showed that because outputs are one-to-many, there should
+  not be a possibility for that to occur.  However what if a function is
+  bi-directional?
+* Is de-bouncing always needed on every input?  Is it ok for de-bouncing
+  to be only done on EINT?
+* Can the input mux be turned round and "selector" logic added so that
+  there is no possibility of damage to inputs?
+
+# Images
+
+* [[mygpiomux.jpg]]
+
+# GSoC2018
+
+Introductions:
+
+* Luke Kenneth Casson Leighton (lkcl) - reverse-engineer, software libre
+  advocate, assembly-level programming and disassembly, python, c, c++,
+  gate-level circuit and ASIC design, PCB design and assembly, 3D CAD design,
+  lots of different stuff.  Guardian of the EOMA68 Certification Mark,
+  and currently responsible for coordinating the design of a fully Libre
+  RISC-V SoC in collaboration with the RISE Group, IIT Madras, Shakti Project.
+  not much experience at verilog (have done a couple of tutorials).
+* Xing GUO(xing) - undergraduate (3rd year) from Southeast
+  University, EE student, C/C++, Python, Verilog, assembly (not very proficient), 
+  Haskell (not very proficient). RTL design, server maintenance.
+  E-mail: higuoxing at gmail dot com, Github: [Higuoxing](https://github.com/higuoxing) some of my projects are there :)
+* Aurojyoti Das(auro) - graduate student (MSc Electrical - Microelectronics) 
+  at TU Delft, Netherlands. C/C++, Verilog, VHDL, SystemVerilog, RTL Design, 
+  Logic Verification, Python/Perl/Shell scripting, Analog IC Design (currently learning) 
+  
+Hardware available:
+
+* lkcl: ZC706
+* xing: zynq-7020 and Xilinx XC7A100T-484
+
+# Discussion and Links
+
+* <https://elinux.org/images/b/b6/Pin_Control_Subsystem_Overview.pdf>
+* <https://lists.librecores.org/pipermail/discussion/2018-February/thread.html>
+* <https://lists.librecores.org/pipermail/discussion/2018-January/000404.html>
+
+# Some Useful Resource
+* <https://github.com/ucb-bar/generator-bootcamp> Interactive tutorial on Scala and Chisel (best one, take it, trust me!)
+* <https://docs.scala-lang.org/tour/tour-of-scala.html> A brief Scala tutorial
+* <https://github.com/ucb-bar/chisel-tutorial> A brief Chisel tutorial
+
+# Pinouts Specification
+
+Covered in [[pinouts]].  The general idea is to target several
 distinct applications and, by trial-and-error, create a pinmux table that
 successfully covers all the target scenarios by providing absolutely all
 required functions for each and every target.  A few general rules: