Table of Contents

This page exists to chronicle all of the insane hoops one has to jump through to get Vivado to behave.

To create a custom Board File: https://docs.amd.com/r/en-US/ug895-vivado-system-level-design-entry/Introduction?tocId=F6i4Whhu7YXEryUAukRhtg

Adding board files https://support.xilinx.com/s/article/72033?language=en_US

Some intermediate-advanced level Verilog info: https://zipcpu.com/

Examples of many common use cases in Verilog http://fpgacpu.ca/fpga/index.html

Sometimes, you'll need to configure system variables to do… things? I'm not clear on when this matters. Anyways, the appropriate command is source <path to Xilinx installation directory>/Xilinx/Vivado/2020.1/settings64.sh

Memory map for cortex-m4 style devices. Mostly helpful to have in the background.

TCL

Lingo

  • RTL - Register Transfer Level. Models a circuit in terms of digital signals between hardware registers and logical operations performed on signals.
    • RTL Attributes - Keywords for finer control. Things like telling it how to infer memory or mark for debugging.
    • e.g. (* mark_debug = “TRUE” *) tags a register / wire to follow later.
  • TCL - Tool Command Line. Scripting language often used with FPGAs. Pronounced as letters or “tickle.”
  • DSP - Digital Signal Processing. The process of manipulating incoming signals with digital circuitry, such as doing Fourier transforms, filtering, etc.
  • Microcontroller - A complete computer in a single chip. Implies CPU, memory, io, and so forth.
  • Microprocessor - Just a CPU or other data manipulation hardware in a chip.
  • Embedded system - A computer system that is part of a larger device. Think chips used in phones, cars, appliances, etc.
  • Verilog Datatypes
    • wire - an interconnect between devices. Cannot store data, must be assigned a value by something
    • reg - A register, can store data freely. Cannot directly be used as an output port, for that you need to assign a wire to the value of the register and use that.
    • logic - similar to register. However, if you try to assign it multiple values it just takes the latest one; registers are unpredictable and the output is X - unknown
  • .XDC - Xilinx Design Constraints file. Defines input/output pins and such. One for Red Pitaya is here.
  • IOB - Input Output Buffers
  • ARM - Advanced RISC Machine
  • RISC - Reduced Instruction Set Computer
  • CISC - Complex Instruction Set Computer
    • Basic difference is that CISC devices have some more specialized (but less used) commands so they can do some things in fewer clock cycles. Downside is you have to know the commands. Most modern PCs RISC based.
  • MGT Multi-Gigabit Transceiver. High speed IO.
  • BUFG - Global buffer. Near center of chip, particularly useful for high performance.
  • Fabric - Internal elements of the FPGA. Usually just the logic blocks, interconnects, and IOs.
  • LVDS - Low Voltage Differential Signal. Uses 2 pins for 1 bit of signal for better integrity.
  • PS - Processing System. Traditional computer processor.
  • PL - Programmable Logic. What you normally think of as the FPGA parts.
  • HDL - Hardware description language. Basically VHDL and Verilog.
  • BEL - Basic Element of Logic.
  • DRC - Design Rule Check. Check for sketchy shit.
  • SSN - Simultaneous Switching Noise. How much noise you're liable to pick up from nearby pins.
  • UART - Universal Asynchronous Receiver/Transmitter. Common communication protocol.
    • Packets are:
      • 1 start bit
        • always 0
      • 5-8 data bits
      • parity bit = SUM(data)%2
      • 1 or 2 stop bits
        • always 1
    • Usually sample midway though bit transmission for reliability
  • MMCM - Mixed Mode Clock Module. Lets you create clocks & set phases.
  • CMT - Clock Management Tile
  • SPI - Serial Peripheral Interface. Common communication protocol.
  • AXI - Advanced Extensible Interface
  • AMBA - Advanced Microcontroller Bus Architecture. AXI is subset of this.
  • XML - eXtensible Markup Language. Created by the SPIRIT Consortium standards organization. Hence why you may see “spirit” in the files a lot. Not haunted.
  • CDMA - Central Direct Memory Access
  • SG - Scatter Gather. Refers to being able to address non-consecutive addresses simultaneously. Often used for faster vector math.
  • HP - High Performance. Counterpart to General Purpose. Relevant for interconnects (AXI) that need to be fast.
  • 0x - Indicates that following number is in hexadecimal.
  • CIC - Cascaded Integrator Comb. Flavor of low-pass filter? The integrators average things, like you'd expect, and the comb parts add a time-delayed version of the signal to itself (A-la CFD circuitry?).

AXI

Types of AXI interfaces:

  • Full - single address/data burst
    • 5 channels:
      • read addr
      • read data
      • write addr
      • write data
      • write response
  • Lite - single address / data, no burst.
    • Same channels, only 32 bit width transfer.
    • Need AXI_Interconnect to talk with AXI4 base
    • 1 signal gets you 1 response I think.
  • Streaming - Data only and burst transfer (fifo?)
    • Write only basically

https://digilent.com/blog/fpga-for-beginners-glossary-and-setup/