Sorting Accelerator on FPGA

CSE 293 - Verilog to Silicon

Arian Heidari, Sean Li, Gary Mejia, Mitchell Tansey

March 14, 2025

Overview of Project

  • Sorting algoritms are everywhere
    • Sorting task by priority
    • Sorting names in a roster
  • Simple enough to implement in software
    • At best most sorts have an O(nlog(n)) runtime
    • Can we do better in hardware?

Architecture

Use PicoRV32 softcore to load memory for external sorter core to sort on

Hardware - ULX3S Development Board

Available on crowdsupply.com

Specification

  • FPGA: Lattice ECP5
    • LFE5U-85F-6BG381C (84 K LUT)
    • LFE5U-45F-6BG381C (44 K LUT)
    • LFE5U-12F-6BG381C (12 K LUT)
  • USB: FTDI FT231XS (500 kbit JTAG and 3 Mbit USB-serial)
  • RAM: 32 MB SDRAM 166 MHz
  • Flash: 4-16 MB Quad-SPI Flash for FPGA config and user data storage
  • LEDs: 11 (8 user LEDs, 2 USB LEDs, 1 Wi-Fi LED)
  • Buttons: 7 (4 direction, 2 fire, 1 power button)
  • Wi-Fi & Bluetooth: ESP32-WROOM-32 supports a standalone JTAG web interface over Wi-Fi

Tool Flow

  • YosysHQ’s OSS CAD Suite on Github Codespaces
    • Yosys for Synthesis
    • nextpnr-ecp5 for place and route
    • ecppack for bitstream generation
    • ecppll for PLL configuration
    • fujproj/openFPGALoader for programming
    • Verilator for simulation and linting
    • GTKWave for waveform viewing

Components in Detail

PicoRV32

  • A Size-Optimized RISC-V CPU
    • Supports RV32IMC Instruction Set
    • Single Cycle
    • AXI Lite Interface Supported
    • PCPI Interface to interact with external cores
  • Available from YosysHQ’s picorv32 repo

Purpose of CPU

  • CPU is to load the sorter’s memory with integers
  • After sorter signals that it is done, CPU “prints” out the array
    • CPU will just write to memory mapped IO to a UART module

Pico Co-Processor Interface

  • Checks this bus upon receiving an unsupported instruction
    • Sends this instruction to the sorter to begin sorting
    • Receives an instruction back to signal sorter is sorting or done
    • Requires C code to inline an instruction for sorting instead of compiling a function
  • Created new instruction: 0x0x81FF8FB3
    • rd,rs1 and are rs2 are all 1’s
    • opcode is 0b0110011
      • same as all R type instructions in RISCV32IM
    • Fucnction7 field is 0b1000000 instead of 0b0000001

Main C Program - Bubble Sort

#include "firmware/firmware.h"

#define ARRAY_SIZE 64
//array held in speacial mem section of ram
int arr[ARRAY_SIZE] __attribute__((section(".sorter_section")));

// Function to swap two integers
void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

void bubbleSort(int arr[], int n) {
    int i, j;
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                swap(&arr[j], &arr[j + 1]);
            }
        }
    }
}

// Main function
void main() {
    print_str("Sorting 64 elements\n");
    for (int i = 0; i < ARRAY_SIZE; i++) {
        arr[i] = (ARRAY_SIZE - i);  // Reverse order for worst-case scenario
    }
    bubbleSort(arr, ARRAY_SIZE);
    //call the uart module here for all items in the
    print_str("Sorted the Array:\n");
    for(int i = 0; i < ARRAY_SIZE; i++) {
    print_dec(arr[i]);
    print_chr(',');
    }
    print_chr(']');
    asm volatile(".word 0x81FF8FB3");
    print_str("\nProgram Terminated...\n");
}

Library - “stdio.h”

#include "firmware.h"

#define OUTPORT 0x1100BEE0

void print_chr(char ch)
{
    *((volatile uint32_t*)OUTPORT) = ch;
}

void print_str(const char *p)
{
    while (*p != 0)
        *((volatile uint32_t*)OUTPORT) = *(p++);
}
void print_dec(unsigned int val)
{
    char buffer[10];
    char *p = buffer;
    while (val || p == buffer) {
        *(p++) = (int)(val % 10);
        val = (int)(val / 10);
    }
    while (p != buffer) {
        *((volatile uint32_t*)OUTPORT) = '0' + *(--p);
    }
}
void print_hex(unsigned int val, int digits)
{
    for (int i = (4*digits)-4; i >= 0; i -= 4)
        *((volatile uint32_t*)OUTPORT) = "0123456789ABCDEF"[(val >> i) % 16];
}

Bootloading and Compiler Infrastructure

  • Requires a basic bootloader
    • Just an assembly file that sets all registers to 0, initializes SP, jumps to main and ebreak
    • Uses RISCV32I GCC cross compiler
    • Print functionality is memory mapped IO
    • Custom Linker Script to denote memory regions of binary

Bootloader

start:
    addi x1, zero, 0
    addi x2, zero, 0
    addi x3, zero, 0
    addi x4, zero, 0
    addi x5, zero, 0
    addi x6, zero, 0
    addi x7, zero, 0
    addi x8, zero, 0
    addi x9, zero, 0
    addi x10, zero, 0
    addi x11, zero, 0
    addi x12, zero, 0
    addi x13, zero, 0
    addi x14, zero, 0
    addi x15, zero, 0
    addi x16, zero, 0
    addi x17, zero, 0
    addi x18, zero, 0
    addi x19, zero, 0
    addi x20, zero, 0
    addi x21, zero, 0
    addi x22, zero, 0
    addi x23, zero, 0
    addi x24, zero, 0
    addi x25, zero, 0
    addi x26, zero, 0
    addi x27, zero, 0
    addi x28, zero, 0
    addi x29, zero, 0
    addi x30, zero, 0
    addi x31, zero, 0
    /* set stack pointer */
    li sp,0x01005000
    /* call hello C code */
    jal main
    NOP
    ebreak

Memory Regions

MEMORY {
    code : ORIGIN = 0x00000000, LENGTH = 0x00001000
    main_mem : ORIGIN = 0x01001000, LENGTH = 0x00004000
    sorter_mem : ORIGIN = 0x10005000, LENGTH = 0x00004000
}

SECTIONS {
    .text :
    {
        . = ALIGN(4);
        *(.text)
        *(.text*)
        *(.rodata)
        *(.rodata*)
        *(.srodata)
        *(.srodata*)
        . = ALIGN(4);
        _etext = .;
        _sidata = _etext;
    } >code
    .data : AT ( 0x1000 )
    {
        . = ALIGN(4);
        _sdata = .;
        _ram_start = .;
        . = ALIGN(4);
        *(.data)
        *(.data*)
        *(.sdata)
        *(.sdata*)
        . = ALIGN(4);
        _edata = .;
    } >main_mem
    .bss :
    {
        . = ALIGN(4);
        _sbss = .;
        *(.bss)
        *(.bss*)
        *(.sbss)
        *(.sbss*)
        *(COMMON)
        . = ALIGN(4);
        _ebss = .;
    } >main_mem
    .sorter_section : AT ( 0x5000 )
    {
        KEEP(*(.sorter_section))
    } >sorter_mem
}

ELF Dump Contents

firmware/firmware.elf:     file format elf32-littleriscv


Disassembly of section .text:

00000000 <start>:
   0:   00000093            li  ra,0
   4:   00000113            li  sp,0
   8:   00000193            li  gp,0
   c:   00000213            li  tp,0
  10:   00000293            li  t0,0
  14:   00000313            li  t1,0
  18:   00000393            li  t2,0
  1c:   00000413            li  s0,0
  20:   00000493            li  s1,0
  24:   00000513            li  a0,0
  28:   00000593            li  a1,0
  2c:   00000613            li  a2,0
  30:   00000693            li  a3,0
  34:   00000713            li  a4,0
  38:   00000793            li  a5,0
  3c:   00000813            li  a6,0
  40:   00000893            li  a7,0
  44:   00000913            li  s2,0
  48:   00000993            li  s3,0
  4c:   00000a13            li  s4,0
  50:   00000a93            li  s5,0
  54:   00000b13            li  s6,0
  58:   00000b93            li  s7,0
  5c:   00000c13            li  s8,0
  60:   00000c93            li  s9,0
  64:   00000d13            li  s10,0
  68:   00000d93            li  s11,0
  6c:   00000e13            li  t3,0
  70:   00000e93            li  t4,0
  74:   00000f13            li  t5,0
  78:   00000f93            li  t6,0
  7c:   01005137            lui sp,0x1005
  80:   224000ef            jal ra,2a4 <main>
  84:   00000013            nop
  88:   00100073            ebreak

0000008c <print_chr>:
  8c:   1100c737            lui a4,0x1100c
  90:   eef70793            addi    a5,a4,-273 # 1100beef <arr+0x1006eef>
  94:   0ff57693            andi    a3,a0,255
  98:   eef74603            lbu a2,-273(a4)
  9c:   eed707a3            sb  a3,-273(a4)
  a0:   ef074703            lbu a4,-272(a4)
  a4:   000780a3            sb  zero,1(a5)
  a8:   0027c703            lbu a4,2(a5)
  ac:   00078123            sb  zero,2(a5)
  b0:   01855513            srli    a0,a0,0x18
  b4:   0037c703            lbu a4,3(a5)
  b8:   00a781a3            sb  a0,3(a5)
  bc:   00008067            ret

000000c0 <print_str>:
  c0:   00054703            lbu a4,0(a0)
  c4:   02070e63            beqz    a4,100 <print_str+0x40>
  c8:   1100c6b7            lui a3,0x1100c
  cc:   00150513            addi    a0,a0,1
  d0:   0ff77613            andi    a2,a4,255
  d4:   eef6c583            lbu a1,-273(a3) # 1100beef <arr+0x1006eef>
  d8:   eec687a3            sb  a2,-273(a3)
  dc:   ef06c603            lbu a2,-272(a3)
  e0:   ee068823            sb  zero,-272(a3)
  e4:   ef16c603            lbu a2,-271(a3)
  e8:   ee0688a3            sb  zero,-271(a3)
  ec:   01875713            srli    a4,a4,0x18
  f0:   ef26c603            lbu a2,-270(a3)
  f4:   eee68923            sb  a4,-270(a3)
  f8:   00054703            lbu a4,0(a0)
  fc:   fc0718e3            bnez    a4,cc <print_str+0xc>
 100:   00008067            ret

00000104 <print_dec>:
 104:   ff010113            addi    sp,sp,-16 # 1004ff0 <_edata+0x3ff0>
 108:   00410793            addi    a5,sp,4
 10c:   00078613            mv  a2,a5
 110:   00a00713            li  a4,10
 114:   0140006f            j   128 <print_dec+0x24>
 118:   00178793            addi    a5,a5,1
 11c:   02e576b3            remu    a3,a0,a4
 120:   fed78fa3            sb  a3,-1(a5)
 124:   02e55533            divu    a0,a0,a4
 128:   fe0518e3            bnez    a0,118 <print_dec+0x14>
 12c:   fec786e3            beq a5,a2,118 <print_dec+0x14>
 130:   1100c637            lui a2,0x1100c
 134:   00410513            addi    a0,sp,4
 138:   fff78793            addi    a5,a5,-1
 13c:   0007c703            lbu a4,0(a5)
 140:   03070713            addi    a4,a4,48
 144:   0ff77593            andi    a1,a4,255
 148:   eef64803            lbu a6,-273(a2) # 1100beef <arr+0x1006eef>
 14c:   eeb607a3            sb  a1,-273(a2)
 150:   00875593            srli    a1,a4,0x8
 154:   ef064803            lbu a6,-272(a2)
 158:   eeb60823            sb  a1,-272(a2)
 15c:   ef164583            lbu a1,-271(a2)
 160:   ee0608a3            sb  zero,-271(a2)
 164:   01875713            srli    a4,a4,0x18
 168:   ef264583            lbu a1,-270(a2)
 16c:   eee60923            sb  a4,-270(a2)
 170:   fca794e3            bne a5,a0,138 <print_dec+0x34>
 174:   01010113            addi    sp,sp,16
 178:   00008067            ret

0000017c <swap>:
 17c:   fd010113            addi    sp,sp,-48
 180:   02812623            sw  s0,44(sp)
 184:   03010413            addi    s0,sp,48
 188:   fca42e23            sw  a0,-36(s0)
 18c:   fcb42c23            sw  a1,-40(s0)
 190:   fdc42783            lw  a5,-36(s0)
 194:   0007a783            lw  a5,0(a5)
 198:   fef42623            sw  a5,-20(s0)
 19c:   fd842783            lw  a5,-40(s0)
 1a0:   0007a703            lw  a4,0(a5)
 1a4:   fdc42783            lw  a5,-36(s0)
 1a8:   00e7a023            sw  a4,0(a5)
 1ac:   fd842783            lw  a5,-40(s0)
 1b0:   fec42703            lw  a4,-20(s0)
 1b4:   00e7a023            sw  a4,0(a5)
 1b8:   00000013            nop
 1bc:   02c12403            lw  s0,44(sp)
 1c0:   03010113            addi    sp,sp,48
 1c4:   00008067            ret

000001c8 <bubbleSort>:
 1c8:   fd010113            addi    sp,sp,-48
 1cc:   02112623            sw  ra,44(sp)
 1d0:   02812423            sw  s0,40(sp)
 1d4:   03010413            addi    s0,sp,48
 1d8:   fca42e23            sw  a0,-36(s0)
 1dc:   fcb42c23            sw  a1,-40(s0)
 1e0:   fe042623            sw  zero,-20(s0)
 1e4:   09c0006f            j   280 <bubbleSort+0xb8>
 1e8:   fe042423            sw  zero,-24(s0)
 1ec:   0700006f            j   25c <bubbleSort+0x94>
 1f0:   fe842783            lw  a5,-24(s0)
 1f4:   00279793            slli    a5,a5,0x2
 1f8:   fdc42703            lw  a4,-36(s0)
 1fc:   00f707b3            add a5,a4,a5
 200:   0007a703            lw  a4,0(a5)
 204:   fe842783            lw  a5,-24(s0)
 208:   00178793            addi    a5,a5,1
 20c:   00279793            slli    a5,a5,0x2
 210:   fdc42683            lw  a3,-36(s0)
 214:   00f687b3            add a5,a3,a5
 218:   0007a783            lw  a5,0(a5)
 21c:   02e7da63            bge a5,a4,250 <bubbleSort+0x88>
 220:   fe842783            lw  a5,-24(s0)
 224:   00279793            slli    a5,a5,0x2
 228:   fdc42703            lw  a4,-36(s0)
 22c:   00f706b3            add a3,a4,a5
 230:   fe842783            lw  a5,-24(s0)
 234:   00178793            addi    a5,a5,1
 238:   00279793            slli    a5,a5,0x2
 23c:   fdc42703            lw  a4,-36(s0)
 240:   00f707b3            add a5,a4,a5
 244:   00078593            mv  a1,a5
 248:   00068513            mv  a0,a3
 24c:   f31ff0ef            jal ra,17c <swap>
 250:   fe842783            lw  a5,-24(s0)
 254:   00178793            addi    a5,a5,1
 258:   fef42423            sw  a5,-24(s0)
 25c:   fd842703            lw  a4,-40(s0)
 260:   fec42783            lw  a5,-20(s0)
 264:   40f707b3            sub a5,a4,a5
 268:   fff78793            addi    a5,a5,-1
 26c:   fe842703            lw  a4,-24(s0)
 270:   f8f740e3            blt a4,a5,1f0 <bubbleSort+0x28>
 274:   fec42783            lw  a5,-20(s0)
 278:   00178793            addi    a5,a5,1
 27c:   fef42623            sw  a5,-20(s0)
 280:   fd842783            lw  a5,-40(s0)
 284:   fff78793            addi    a5,a5,-1
 288:   fec42703            lw  a4,-20(s0)
 28c:   f4f74ee3            blt a4,a5,1e8 <bubbleSort+0x20>
 290:   00000013            nop
 294:   02c12083            lw  ra,44(sp)
 298:   02812403            lw  s0,40(sp)
 29c:   03010113            addi    sp,sp,48
 2a0:   00008067            ret

000002a4 <main>:
 2a4:   fe010113            addi    sp,sp,-32
 2a8:   00112e23            sw  ra,28(sp)
 2ac:   00812c23            sw  s0,24(sp)
 2b0:   02010413            addi    s0,sp,32
 2b4:   fe042623            sw  zero,-20(s0)
 2b8:   0340006f            j   2ec <main+0x48>
 2bc:   00001737            lui a4,0x1
 2c0:   fec42783            lw  a5,-20(s0)
 2c4:   40f70733            sub a4,a4,a5
 2c8:   100057b7            lui a5,0x10005
 2cc:   fec42683            lw  a3,-20(s0)
 2d0:   00269693            slli    a3,a3,0x2
 2d4:   00078793            mv  a5,a5
 2d8:   00f687b3            add a5,a3,a5
 2dc:   00e7a023            sw  a4,0(a5) # 10005000 <arr>
 2e0:   fec42783            lw  a5,-20(s0)
 2e4:   00178793            addi    a5,a5,1
 2e8:   fef42623            sw  a5,-20(s0)
 2ec:   fec42703            lw  a4,-20(s0)
 2f0:   000017b7            lui a5,0x1
 2f4:   fcf744e3            blt a4,a5,2bc <main+0x18>
 2f8:   000015b7            lui a1,0x1
 2fc:   100057b7            lui a5,0x10005
 300:   00078513            mv  a0,a5
 304:   ec5ff0ef            jal ra,1c8 <bubbleSort>
 308:   00000013            nop
 30c:   01c12083            lw  ra,28(sp)
 310:   01812403            lw  s0,24(sp)
 314:   02010113            addi    sp,sp,32
 318:   00008067            ret

Sorter

  • Has both PCPI and AXI Lite interfaces
  • Accepts data from sorting memory until local memory is full, sorts local memory, then returns the sorted output in from largest to smallest

Abstracting For Loops and Cycle Delays

  • Some familiar statements are unsuitable for HDL:
    • For loops are unideal as they replicate the code block, which become increasingly intensive as the range increases
    • Local memory accesses are done in a pipeline (utilizing Ethan’s pipelined_mem.sv), and are available only after 2 clock cycles
  • Counters act as an effective abstraction of for loops and delays, without encountering the corresponding pitfalls

Sorting RTL

For Loop Example:

always_comb begin
    for_i_addr_d = for_i_addr_q;
    for_j_addr_d = for_j_addr_q;

    if (for_i_addr_d != (DATA_ENTRIES) && (i_en)) begin
        if (for_j_addr_q != (DATA_ENTRIES-1) && (j_en)) begin
            if (for_j_addr_q < for_i_addr_q) begin // New BS Line
                for_j_addr_d = for_i_addr_q + 1;
            end else begin
                for_j_addr_d = for_j_addr_q + 1;
            end
        end else begin
            if (for_i_addr_q == (DATA_ENTRIES - 1))
                for_i_addr_d = '0;
            else
                for_i_addr_d = for_i_addr_q + 1;
            if ((for_i_addr_q + 2) == (DATA_ENTRIES)) begin
                for_j_addr_d = for_i_addr_q + 1;
            end else if ((for_i_addr_q + 1) == (DATA_ENTRIES)) begin
                for_j_addr_d = '0;
            end else begin
                for_j_addr_d = for_i_addr_q + 2;
            end
        end
    end else begin
        for_i_addr_d = for_i_addr_q;
        for_j_addr_d = for_j_addr_q;
    end
end

Sorter Simulations

Sorting Memory with Insertion Sort

Sorter Output Simulation

Output of Sorter

Memory

AXI Lite RAM

  • Taken from Alex Forencich’s verilog-axi repo
  • Standard RAM module with AXI Lite signal handling
    • This handles proper communication of memory from Pico
  • Used for general CPU main memory and shared sorter memory

AXI Lite ROM

  • Modified AXI Lite RAM module to use $readmemh function
  • Acts as instruction memory for the Pico
  • Does not synthesize to BRAM on ECP5

Communication

AXI Stream FIFO

  • Taken from Alex Forencich’s verilog-axis repo
  • Acts as the stdout buffer
  • Since it is AXI Stream it can not give backpressure to the CPU
    • As a result we do not know the maximum about of chars the fifo can hold

AXI Lite UART Module

  • Taken from Alex Forencich’s verilog-uart repo
  • AXI Stream interface that directly interfaces with the stdout buffer FIFO
  • Acts as stdout for our design
How the PicoSOC Design uses UART

AXI Lite Interconnect

  • Taken from Alex Forencich’s verilog-axi repo
  • Act as a multiplexor or demultiplexor for AXI Lite signals
  • Pico communications with 3 different AXI Lite Peripherals
    • This requires a 1 to 3 Interconnect
  • Sorter RAM has two different users - sorter and Pico
    • This requires a 2 to 1 Interconnect
  • Provided Python script generates the appriopriate wrapper module for each use case

Outcomes

Verification

task run_until_ebreak;
    while (~|led[7:6]) begin
        @(posedge clk_i);
    end
    if (led[7]) begin
        peek_memory_bus();
        $error("Trap is illegally found!");
    end else begin
        $info("Ebreak found, main is returning/terminating properly");
        @(posedge clk_i); //simulate one more cycle to see the proper trap behavior
    end
endtask

Specifications

  • Max Clock Frequency - 75.30MHz
    • We run at 50MHz
  • Memories are at 16KB
    • FIFO has a capicity of 256B
  • Sorter not yet implemented due to time constraints
    • Sorts 64 elements

Ulitization Report

Info: Device utilisation:
Info:             TRELLIS_IO:      11/    365     3%
Info:                   DCCA:       1/     56     1%
Info:                 DP16KD:      97/    208    46%
Info:             MULT18X18D:       0/    156     0%
Info:                 ALU54B:       0/     78     0%
Info:                EHXPLLL:       1/      4    25%
Info:                EXTREFB:       0/      2     0%
Info:                   DCUA:       0/      2     0%
Info:              PCSCLKDIV:       0/      2     0%
Info:                IOLOGIC:       0/    224     0%
Info:               SIOLOGIC:       0/    141     0%
Info:                    GSR:       0/      1     0%
Info:                  JTAGG:       0/      1     0%
Info:                   OSCG:       0/      1     0%
Info:                  SEDGA:       0/      1     0%
Info:                    DTR:       0/      1     0%
Info:                USRMCLK:       0/      1     0%
Info:                CLKDIVF:       0/      4     0%
Info:              ECLKSYNCB:       0/     10     0%
Info:                DLLDELD:       0/      8     0%
Info:                 DDRDLL:       0/      4     0%
Info:                DQSBUFM:       0/     14     0%
Info:        TRELLIS_ECLKBUF:       0/      8     0%
Info:           ECLKBRIDGECS:       0/      2     0%
Info:                   DCSC:       0/      2     0%
Info:             TRELLIS_FF:    1324/  83640     1%
Info:           TRELLIS_COMB:    3448/  83640     4%
Info:           TRELLIS_RAMW:      32/  10455     0%

Slack Histogram

Info: Slack histogram:
Info:  legend: * represents 11 endpoint(s)
Info:          + represents [1,11) endpoint(s)
Info: [  6719,   7336) |+
Info: [  7336,   7953) |+
Info: [  7953,   8570) |+
Info: [  8570,   9187) |*+
Info: [  9187,   9804) |*+
Info: [  9804,  10421) |*+
Info: [ 10421,  11038) |**+
Info: [ 11038,  11655) |************+
Info: [ 11655,  12272) |*************+
Info: [ 12272,  12889) |**********+
Info: [ 12889,  13506) |*****************+
Info: [ 13506,  14123) |******************************+
Info: [ 14123,  14740) |******************************+
Info: [ 14740,  15357) |**************************************+
Info: [ 15357,  15974) |****************************************************+
Info: [ 15974,  16591) |************************************************************
Info: [ 16591,  17208) |************************************************+
Info: [ 17208,  17825) |******************************************************+
Info: [ 17825,  18442) |***********************+
Info: [ 18442,  19059) |*********+

Challenges

Sorter

  • Creating a sorting algorithm without for loops, function calls, or direct array manipulation
    • Incomplete conditions between for loops and sorter
  • Timing between state machine and pipelined memory
  • Read validity for sorting algorithm
  • Data validity for AXIL
  • Termination of states too early
  • Memory overwriting itself with ’x
  • Pipelined memory read/write calls; read_valid_o and request_valid_i
  • AXIL Interface (overlapping vs mutually exclusive signals)

Original Design

ESP32 as hardcore with SDRAM as shared memory, AXI Stream as main communication interface

Why ESP32 Failed

  • Requires either a vendor specific bitstream and passthru logic to bypass the FTDI chip from programming the FPGA and target the ESP32
    • This is required as there is only 1 FTDI chip onboard
    • Documentation hazy on whether this another IP or required to be our top module
  • Unclear which pins are even connected to the FPGA to use for UART communication between the ESP32
  • ESP-IDF does not seem to target the ESP32 but the Arduino IDE does
    • Unclear if the Arduino Serial library is using the pins we want

Passthru RTL - VHDL

-- (c)EMARD
-- License=BSD

-- module to bypass user input and usbserial to esp32 wifi

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

use work.f32c_pack.all;

library ecp5u;
use ecp5u.components.all;

entity ulx3s_passthru_wifi is
  generic
  (
    C_dummy_constant: integer := 0
  );
  port
  (
  clk_25mhz: in std_logic;  -- main clock input from 25MHz clock source must be lowercase

  -- UART0 (FTDI USB slave serial)
  ftdi_rxd: out   std_logic;
  ftdi_txd: in    std_logic;
  -- FTDI additional signaling
  ftdi_ndtr: inout  std_logic;
  ftdi_ndsr: inout  std_logic;
  ftdi_nrts: inout  std_logic;
  ftdi_txden: inout std_logic;

  -- UART1 (WiFi serial)
  wifi_rxd: out   std_logic;
  wifi_txd: in    std_logic;
  -- WiFi additional signaling
  wifi_en, wifi_gpio0, wifi_gpio2, wifi_gpio5, wifi_gpio16, wifi_gpio17: inout  std_logic := 'Z'; -- '0' will disable wifi by default

  -- Onboard blinky
  led: out std_logic_vector(7 downto 0);
  btn: in std_logic_vector(6 downto 0);
  sw: in std_logic_vector(0 to 3);
  oled_csn, oled_clk, oled_mosi, oled_dc, oled_resn: out std_logic;

  -- GPIO (some are shared with wifi and adc)
  gp, gn: inout std_logic_vector(27 downto 0) := (others => 'Z');

  -- SHUTDOWN: logic '1' here will shutdown power on PCB >= v1.7.5
  shutdown: out std_logic := '0';

  -- Audio jack 3.5mm
  audio_l, audio_r, audio_v: inout std_logic_vector(3 downto 0) := (others => 'Z');

  -- Digital Video (differential outputs)
  --gpdi_dp, gpdi_dn: out std_logic_vector(2 downto 0);
  --gpdi_clkp, gpdi_clkn: out std_logic;

  -- Flash ROM (SPI0)
  --flash_miso   : in      std_logic;
  --flash_mosi   : out     std_logic;
  --flash_clk    : out     std_logic;
  --flash_csn    : out     std_logic;
  flash_holdn, flash_wpn: out std_logic := '1';

  -- SD card (SPI1)
  sd_d: inout std_logic_vector(3 downto 0); -- wifi_gpio 13,12,4,2
  sd_cmd: in std_logic; -- wifi_gpio15
  sd_clk: in std_logic; -- wifi_gpio14
  sd_cdn, sd_wp: in std_logic;

  user_programn: out std_logic -- setting this low will skip to next multiboot image
  );
end;

architecture Behavioral of ulx3s_passthru_wifi is
  signal S_prog_in, R_prog_in, S_prog_out: std_logic_vector(1 downto 0);
  signal R_spi_miso: std_logic_vector(7 downto 0);
  signal S_oled_csn: std_logic;
  constant C_prog_release_timeout: integer := 17; -- default 17 2^n * 25MHz timeout for initialization phase
  signal R_prog_release: std_logic_vector(C_prog_release_timeout downto 0) := (others => '1'); -- timeout that holds lines for reliable entering programming mode
  signal R_progn: std_logic_vector(7 downto 0) := (others => '0');
begin

  -- TX/RX passthru
--  ftdi_rxd <= wifi_txd;
--  wifi_rxd <= ftdi_txd;

  ftdi_rxd <= wifi_txd when sw(0)='1' else wifi_gpio17;
  wifi_rxd <= ftdi_txd when sw(0)='1' else '1';
  wifi_gpio16 <=   '1' when sw(0)='1' else ftdi_txd;

  -- Programming logic
  -- SERIAL  ->  ESP32
  -- DTR RTS -> EN IO0
  --  1   1     1   1
  --  0   0     1   1
  --  1   0     0   1
  --  0   1     1   0
  S_prog_in(1) <= ftdi_ndtr;
  S_prog_in(0) <= ftdi_nrts;
  S_prog_out <= "01" when S_prog_in = "10" else
                "10" when S_prog_in = "01" else
                "11";
  wifi_en <= S_prog_out(1);
  wifi_gpio0 <= S_prog_out(0) and btn(0); -- holding BTN0 will hold gpio0 LOW, signal for ESP32 to take control
  --sd_d(0) <= '0' when wifi_gpio0 = '0' else 'Z'; -- gpio2 together with gpio0 to 0
  --sd_d(2) <= '0' when wifi_gpio0 = '0' else 'Z'; -- wifi gpio12
  sd_d(0) <= S_prog_out(0) when R_prog_release(R_prog_release'high) = '0' else
             -- '1' when R_prog_release(R_prog_release'high) = '0' else
             R_spi_miso(0) when S_oled_csn = '0' else -- SPI reading buttons with OLED CSn
             'Z'; -- gpio2 to 0 during programming init
  -- sd_d(2) <= '0' when (S_prog_in(0) xor S_prog_in(1)) = '1' else 'Z'; -- wifi gpio12
  -- sd_d(2) <= '0' when R_prog_release(R_prog_release'high) = '0' else 'Z'; -- wifi gpio12
  -- sd_d(3) <= '1' when R_prog_release(R_prog_release'high) = '0' else 'Z';
  -- sd_clk <= clk_25mhz when R_prog_release(R_prog_release'high) = '0' else 'Z';
  -- permanent flashing mode
  -- wifi_en <= ftdi_nrts;
  -- wifi_gpio0 <= ftdi_ndtr;

  S_oled_csn <= '1'; -- wifi_gpio17;
  oled_csn <= S_oled_csn;
  oled_clk <= sd_clk; -- wifi_gpio14
  oled_mosi <= sd_cmd; -- wifi_gpio15
  oled_dc <= '1'; -- wifi_gpio16;
  oled_resn <= gp(11); -- wifi_gpio25

  -- show OLED signals on the LEDs
  -- show SD signals on the LEDs
  -- led(7 downto 0) <= S_oled_csn & R_spi_miso(0) & sd_clk & sd_d(2) & sd_d(3) & sd_cmd & sd_d(0) & sd_d(1); -- beautiful but makes core unreliable
  led(7) <= wifi_gpio5; -- for boards without D22 soldered
  led(6) <= S_prog_out(1); -- green LED indicates ESP32 disabled
  led(5) <= not R_prog_release(R_prog_release'high); -- ESP32 programming start: blinks too short to be visible
  --led(3) <= sd_d(3); -- sd_d(3) is sd_cs, pullup=NONE in constraints otherwise SD card will prevents esp32 from entering programming mode...
  --led(2) <= sd_d(2);
  --led(1) <= sd_d(1);
  --led(0) <= sd_d(0);

  -- programming release counter
  process(clk_25MHz)
  begin
      if rising_edge(clk_25MHz) then
        R_prog_in <= S_prog_in;
        if S_prog_out = "01" and R_prog_in = "11" then
          R_prog_release <= (others => '0');
        else
          if R_prog_release(R_prog_release'high) = '0' then
            R_prog_release <= R_prog_release + 1;
          end if;
        end if;
      end if;
  end process;

  -- if user presses BTN0 and BTN1 then pull down PROGRAMN for multiboot
  process(clk_25MHz)
  begin
    if rising_edge(clk_25MHz) then
      if btn(0) = '0' and btn(1) = '1' then
        R_progn <= R_progn + 1; -- BTN0 BTN1 are pressed
      else
        R_progn <= (others => '0'); -- BTN0 BTN1 are not pressed
      end if;
    end if;
  end process;
  user_programn <= not R_progn(R_progn'high);

end Behavioral;

Passthru RTL - Verilog

// (c)EMARD
// License=BSD

// Module to bypass user input and USB serial to ESP32 WiFi

module ulx3s (
    input wire clk_25mhz,  // Main clock input (25MHz)
    input wire reset_ni,

    // UART0 (FTDI USB slave serial)
    output reg ftdi_rxd,
    input wire ftdi_txd,

    // FTDI additional signaling
    inout wire ftdi_ndtr,
    // inout wire ftdi_ndsr,
    inout wire ftdi_nrts,
    inout wire ftdi_txden,

    // UART1 (WiFi serial)
    output reg wifi_rxd,
    input wire wifi_txd,

    // WiFi additional signaling
    inout wire wifi_en,
    inout wire wifi_gpio0,
    // inout wire wifi_gpio2,
    inout wire wifi_gpio5,
    inout wire wifi_gpio16,
    inout wire wifi_gpio17,

    // Onboard blinky
    output reg [7:0] led,
    input wire [6:1] btn,
    input wire [3:0] sw,
    output reg oled_csn,
    output reg oled_clk,
    output reg oled_mosi,
    output reg oled_dc,
    output reg oled_resn,

    // GPIO (some shared with WiFi and ADC)
    inout wire [27:0] gp,
    inout wire [27:0] gn,

    // SHUTDOWN: logic '1' here will shut down power on PCB >= v1.7.5
    output reg shutdown,

    // Audio jack 3.5mm
    inout wire [3:0] audio_l,
    inout wire [3:0] audio_r,
    inout wire [3:0] audio_v,

    // Flash ROM (SPI0)
    output reg flash_holdn,
    output reg flash_wpn,

    // SD card (SPI1)
    inout wire [3:0] sd_d,
    input wire sd_cmd,  // WiFi GPIO15
    input wire sd_clk,  // WiFi GPIO14
    input wire sd_cdn,
    input wire sd_wp,

    output reg user_programn // setting this low will skip to next multiboot image
);

// Internal registers
reg [1:0] S_prog_in, R_prog_in, S_prog_out;
reg [7:0] R_spi_miso;
reg S_oled_csn;
reg [17:0] R_prog_release; // Timeout counter
reg [7:0] R_progn;

// TX/RX passthru logic
always @(*) begin
    ftdi_rxd = wifi_txd;
end

// Programming logic
always @(*) begin
    S_prog_in = {ftdi_ndtr, ftdi_nrts};
    case (S_prog_in)
        2'b10: S_prog_out = 2'b01;
        2'b01: S_prog_out = 2'b10;
        default: S_prog_out = 2'b11;
    endcase

    wifi_en = S_prog_out[1];
    wifi_gpio0 = S_prog_out[0] & btn[0]; // Hold BTN0 to keep gpio0 LOW
    sd_d[0] = (R_prog_release[17] == 0) ? S_prog_out[0] : 1'bz;
end

// OLED connection
always @(*) begin
    S_oled_csn = 1;
    oled_csn = S_oled_csn;
    oled_clk = sd_clk;
    oled_mosi = sd_cmd;
    oled_dc = 1;
    oled_resn = gp[11];
end

// LED control signals
always @(*) begin
    led[7] = wifi_gpio5;
    led[6] = S_prog_out[1]; // Green LED when ESP32 disabled
    led[5] = ~R_prog_release[17]; // Indicate ESP32 programming start
end

// Programming release counter
always @(posedge clk_25mhz) begin
    R_prog_in <= S_prog_in;
    if (S_prog_out == 2'b01 && R_prog_in == 2'b11) begin
        R_prog_release <= 0;
    end else if (R_prog_release[17] == 0) begin
        R_prog_release <= R_prog_release + 1;
    end
end

// Multiboot selection via button press
always @(posedge clk_25mhz) begin
    if (btn[0] == 0 && btn[1] == 1) begin
        R_progn <= R_progn + 1;
    end else begin
        R_progn <= 0;
    end
end

wire clk;

(* FREQUENCY_PIN_CLKI="25" *)
(* FREQUENCY_PIN_CLKOP="32.256" *)
(* ICP_CURRENT="12" *) (* LPF_RESISTOR="8" *) (* MFG_ENABLE_FILTEROPAMP="1" *) (* MFG_GMCREF_SEL="2" *)
EHXPLLL #(
        .PLLRST_ENA("DISABLED"),
        .INTFB_WAKE("DISABLED"),
        .STDBY_ENABLE("DISABLED"),
        .DPHASE_SOURCE("DISABLED"),
        .OUTDIVIDER_MUXA("DIVA"),
        .OUTDIVIDER_MUXB("DIVB"),
        .OUTDIVIDER_MUXC("DIVC"),
        .OUTDIVIDER_MUXD("DIVD"),
        .CLKI_DIV(7),               //Refclk divisor
        .CLKOP_ENABLE("ENABLED"),
        .CLKOP_DIV(19),              //clkout0 divisor
        .CLKOP_CPHASE(2),
        .CLKOP_FPHASE(0),
        .FEEDBK_PATH("CLKOP"),
        .CLKFB_DIV(9)   //Feedback Divisor
    ) pll (
        .RST(1'b0),
        .STDBY(1'b0),
        .CLKI(clk_25mhz),
        .CLKOP(clk),
        .CLKFB(clk),
        .CLKINTFB(),
        .PHASESEL0(1'b0),
        .PHASESEL1(1'b0),
        .PHASEDIR(1'b1),
        .PHASESTEP(1'b1),
        .PHASELOADREG(1'b1),
        .PLLWAKESYNC(1'b0),
        .ENCLKOP(1'b0),
        .LOCK(locked)
    );

top top_inst (.clk(clk), .rst(!reset_ni), .rx_i(ftdi_rxd), .tx_o(ftdi_txd));

assign led[2] = !ftdi_rxd;
assign led[4] = !sw[0];
assign led[5] = 1;
// assign led[2] = !btn[0];
// assign wifi_en = 1;
assign user_programn = ~R_progn[7];

endmodule

Why AXI Stream Failed

  • Memories are not streamable targets
  • AXI Stream has no destination
    • The other end of the wire is the destination
  • With a read and write port it is unclear who asserts ready
  • AXI Lite scales better due to interconnect support
    • Want to add another module? -> Just make a new address for it

Why SDRAM Failed

  • Specifications for SDRAM configurations were vague and inconsistent
  • Would require a CDC FIFO for safe data transfer to and from PicoRV32
  • Would have to add on AXI Lite to interface with most components of the system
  • Verification difficulties
    • Verilog models are available for the specific memory but require industry tools to run as these are protected Verilog files (.vp)
    • Simulated using Cadence Xcelium

Verilog Protected File Example

/***********************************************************************************************
|*Company             : Winbond Electronics Corp. ("WINBOND")
|*Model Type          : Verilog Model
|*Product             : SDRAM
|*Part Number         : W9825G6KH
|*Memory spec         : 4M x 4 Banks x 16 Bits
|*CAS Latency option  : CL2, CL3
|*AC Characteristics  : -5,-6I-6J-6L,-75-75J-75L
|*Burst Length option : BL1, BL2,BL4, BL8, full page
|$Revision            : 2.1
|$Date                : 2016/9/7
|                     : 2022/9/6
|                     : 2022/9/20
|*Revision History    : 1.0: Initial creation
|                     :    : a. To add the Debug flag for message display
|                     :      b. To modify the Dq_reg
|                     :
|                     :      add the Debug falg for all display
|                     : 2.0 : To make the model to be a general model
|                     : 2.1 : to change trrd checking from time to clk cntr
|*notes               : The generated from golden model
|*release date        : 2022_11_09
***********************************************************************************************
|*Disclaimer :
|This model software code and all related notes or documentation (collectively "Software") is
|provided "AS IS" without warranty of any kind. You bear the risk of using it.
|Winbond Electronics Corp.("WINBOND") hereunder DISCLAIMS ALL WARRANTIES EXPRESS OR IMPLIED,
|INCLUDING BUT NOT LIMITED TO, NONINFRINGEMENT OF THIRD PARTY RIGHTS, AND ANY IMPLIED WARRANTIES
|OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE. WINBOND DOES NOT WARRANT THAT THE
|OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE. FURTHERMORE, WINBOND DOES NOT MAKE
|ANY WARRANTIES REGARDING THE USE OR THE RESULTS OF THE USE OF THE SOFTWARE IN TERMS OF ITS
|CORRECTNESS, ACCURACY, RELIABILITY, OR OTHERWISE. IN NO EVENT SHALL WINBOND, ITS SUBSIDIARY
|COMPANIES OR THEIR SUPPLIERS BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, INCIDENTAL,
|OR SPECIAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS,
|BUSINESS INTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF YOUR USE OF OR INABILITY TO USE THE
|SOFTWARE, EVEN IF WINBOND HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|*Copyright :
|Copyright C 2022 Winbond Electronics Corp. All rights reserved.°®
***********************************************************************************************/

/**********************************************************************************************
|     file structure:
|       include: Config-AC.v (file that contains all AC/DC parameters used by the model)
|       Codes  : protected Verilog model file by ncverilog   DRAM functions and IO timing checking
**********************************************************************************************/


/**********************************************************************************************
|Getting Started to use the model:
|
|
|Defining the SPEC. Grade:
|----------------------------
| You have to simulate with NC-Verilog compiler.
| If you want to simulate verilog behavioral model,
|
|   - Speed , Please comfirm with our Datasheet to define your condition.
|       -5,-6I-6J-6L,-75-75J-75L
|
|       For Example , if your sample is -6 and running under CL=3 , set condition as below...
|       -6 CL3      ( 6.0ns@CL3  )  ->   +T6CL3
|
|       For Example , if your sample is -6 and running under CL=2 , set condition as below...
|       -6 CL2      ( 10ns@CL2  )   ->   +T6CL2
|
|       others situation refer to above descrption.
|
|   - Burst Length
|       BL = 1      ->  BL1
|       BL = 2      ->  BL2
|       BL = 4      ->  BL4
|       BL = 8      ->  BL8
|
| EX} ncverilog +access+rwc +define+T6CL3+BL4 W9825G6KH.nc.vp W9825G6KH_sim.v
|
|   ( Please refer to datasheet and select the correct one which you want ... )
| then set following option(+define) for products in verilog command line.
|
|
**********************************************************************************************/


`timescale 1ns / 1ps

module W9825G6KH (
    Dq,
    Addr,
    Bs,
    Clk,
    Cke,
    Cs_n,
    Ras_n,
    Cas_n,
    We_n,
    Dqm
    );


`include "Config-AC.v"

    inout     [data_bits - 1 : 0] Dq;
    input     [row_bits - 1 : 0]  Addr;  //Address for tRC
    input                  [1 : 0] Bs;    //bank select
    input                          Clk;
    input                          Cke;
    input                          Cs_n;
    input                          Ras_n;
    input                          Cas_n;
    input                          We_n;
    input            [dm_bits-1 :0] Dqm;



    reg       [data_bits - 1 : 0] Bank0 [0 : mem_sizes-1];
    reg       [data_bits - 1 : 0] Bank1 [0 : mem_sizes-1];
    reg       [data_bits - 1 : 0] Bank2 [0 : mem_sizes-1];
    reg       [data_bits - 1 : 0] Bank3 [0 : mem_sizes-1];

    reg                    [1 : 0] Bank_addr [0:3];        // Bank Address
    reg        [col_bits - 1 : 0] Col_addr  [0:3];        // Column Address
    reg                    [3:0]   cmd [0:3];              // cmd Operation
    reg                    [dm_bits-1:0]   Dqm_reg0, Dqm_reg1;     // DQM Operation
    reg       [row_bits - 1 : 0] B0_row_addr, B1_row_addr, B2_row_addr, B3_row_addr;

    reg       [mode_addr_bits - 1 : 0] Mode_reg;
    reg       [data_bits - 1 : 0] Dq_reg, Dq_dqm;
    reg        [col_bits - 1 : 0] Col_temp, Burst_cnt;

    reg       Act_b0, Act_b1, Act_b2, Act_b3;   // Bank Activate
    reg       Pc_b0, Pc_b1, Pc_b2, Pc_b3;       // Bank Precharge

    reg         [1:0]   Bank_prech     [0:3];   // Precharge cmd
    reg                 A10_prech      [0:3];   // Addr[10] = 1 (All banks)
    reg                 Auto_prech     [0:3];   // RW Auto Precharge (Bank)
    reg                 RD_prech       [0:3];   // R  Auto Precharge
    reg                 WR_prech       [0:3];   // W  Auto Precharge
    reg                 RW_INT_rd      [0:3];   // RW Interrupt Read with Auto Precharge
    reg                 RW_INT_wr      [0:3];   // RW Interrupt Write with Auto Precharge
    reg         [1:0]   RW_INT_bank         ;   // RW Interrupt Bank

    integer RW_INT_cnt [3:0];   // RW Interrupt Counter
    integer prech_cnt  [3:0];   // RW Auto Precharge Counter
    integer MRD_chk;            // MRS to next command Counter

    reg     Din_en;
    reg     Din_en_chk;
    reg     Dout_en;
    reg     [1:0] Bank, Prev_bank;
    reg     [row_bits - 1 : 0] Row;
    reg     [col_bits - 1 : 0] Col, Col_brst;
// Internal system clock
    reg   CkeZ, Sys_clk;
    reg    dout_hiz_flag;


//pragma protect begin_protected
//pragma protect key_keyowner=Cadence Design Systems.
//pragma protect key_keyname=CDS_KEY
//pragma protect key_method=RC5
//pragma protect key_block
ZvjUzL2AJ4ZLbo69xbIzRwaqlDhEVowBfZVq3qRmB/obMKFLbJVHA5SvDfMxXYNS
f9kEdJuC5pxo9+ln2YKX3po3nuBJojCuzqU0AqAuuRoI1O4cBet0/bwN/qjNtXPG
FSNUZWXjazMa1fjMFQ4oYddRjq969SPFNmvAc30cyCNEcFfoFoSNhw==
//pragma protect end_key_block
//pragma protect digest_block
CYv/0RXkKPdNlH8uNxd997xwP2Y=
//pragma protect end_digest_block
//pragma protect data_block
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
wB7EP25iRNQ8rWGnqhFf+Q==
//pragma protect end_data_block
//pragma protect digest_block
NGeyEkLIL8si75TYcU4GouuEhNI=
//pragma protect end_digest_block
//pragma protect end_protected
endmodule

Config File

`define   X16


`ifdef X8
parameter  data_bits =         8        ;        // DQ I/Os
`endif

`ifdef X16
parameter  data_bits =         16       ;        // DQ I/Os
`endif


`ifdef X32
parameter  data_bits =         32       ;        // DQ I/Os
`endif


parameter  ba_bits          =    2;
parameter  mode_addr_bits   =    11;
parameter  dm_bits          =    data_bits/8;


parameter  row_bits =         13;        // Address Input
parameter  col_bits  =        9;
parameter  mem_sizes =      4194304;

parameter   tRRD_tck = 2; //tck
parameter   tRSC_tck = 2; //tck

`ifdef T5CL2
// Timing Parameters
parameter   tCK         = 10        ;   // Clock Cycle Time
parameter   tRC         = 55            ;// Ref/Act to Ref/Act Command Period
parameter   tRAS    = 40            ;// Active to Precharge Command Period
parameter   tRCD    = 15            ;// Active to Read/Write Command Delay Time
parameter   tCCD    = tCK       ;// Read/Write to Read/Write ( With different Bank) Command Period
parameter   tRP         = 15            ;// Precharge to Active Command Period
parameter   tWR     = 2*tCK ;   // Write Recovery Time
parameter   tCH     = 2         ;// Clock High-Level Width
parameter   tCL         = 2         ;// Clock Low-Level Width
parameter   tAC         = 6         ;// Access Time from CLK
parameter   tOH     = 3         ;// Output Data Hold Time
parameter   tHZ     = 6.0       ;   // Output Data High Impedance Time Max
parameter   tLZ         = 0         ;// Output Data Low Impedance Time
parameter   tSB_min = 0         ;// Power Down Mode Entry Time Min
parameter   tSB_max = 5         ;// Power Down Mode Entry Time Max
parameter   tDS         = 1.5     ;     // Data-in Setup Time
parameter   tDH     = 1.0   ;   // Data-in Hold Time
parameter   tAS         = 1.5     ;     // Addr, Bs Setup Time
parameter   tAH         = 1.0     ;     // Addr, Bs Hold Time
parameter   tCKS    = 1.5     ;     // CKE Setup Time
parameter   tCKH    = 1.0     ;     // CKE Hold  Time
parameter   tCMS    = 1.5     ;     // Command Setup Time
parameter   tCMH    = 1.0       ;   // Command Hold  Time
parameter   tREF    = 64000000; // Refresh Time
parameter   tRSC    = 2*tCK ;       // 2 * tCK
parameter   tWRa    = tWR     ; // Auto precharge mode
parameter   tWRm    = tWR     ; // Manual precharge mode
parameter   tXSR    = 70          ; // Exit self refresh to ACTIVE command
parameter   CL      = 2         ;// CAS Latency
`endif

`ifdef T5CL3
// Timing Parameters
parameter   tCK         =5.0      ;     // Clock Cycle Time
parameter   tRC         = 55            ;// Ref/Act to Ref/Act Command Period
parameter   tRAS    = 40            ;// Active to Precharge Command Period
parameter   tRCD    = 15            ;// Active to Read/Write Command Delay Time
parameter   tCCD    = tCK       ;// Read/Write to Read/Write ( With different Bank) Command Period
parameter   tRP         = 15            ;// Precharge to Active Command Period
parameter   tWR     = 2*tCK ;   // Write Recovery Time
parameter   tCH     = 2         ;// Clock High-Level Width
parameter   tCL         = 2         ;// Clock Low-Level Width
parameter   tAC         = 4.5           ;// Access Time from CLK
parameter   tOH     = 3         ;// Output Data Hold Time
parameter   tHZ     = 4.5       ;   // Output Data High Impedance Time Max
parameter   tLZ         = 0         ;// Output Data Low Impedance Time
parameter   tSB_min = 0         ;// Power Down Mode Entry Time Min
parameter   tSB_max = 5         ;// Power Down Mode Entry Time Max
parameter   tDS         = 1.5     ;     // Data-in Setup Time
parameter   tDH     = 1.0   ;   // Data-in Hold Time
parameter   tAS         = 1.5     ;     // Addr, Bs Setup Time
parameter   tAH         = 1.0     ;     // Addr, Bs Hold Time
parameter   tCKS    = 1.5     ;     // CKE Setup Time
parameter   tCKH    = 1.0     ;     // CKE Hold  Time
parameter   tCMS    = 1.5     ;     // Command Setup Time
parameter   tCMH    = 1.0       ;   // Command Hold  Time
parameter   tREF    = 64000000; // Refresh Time
parameter   tRSC    = 2*tCK ;       // 2 * tCK
parameter   tWRa    = tWR     ; // Auto precharge mode
parameter   tWRm    = tWR     ; // Manual precharge mode
parameter   tXSR    = 70          ; // Exit self refresh to ACTIVE command
parameter   CL   =  3       ;   // CAS Latency
`endif



`ifdef T6CL2
// Timing Parameters
parameter   tCK         = 7.5       ;   // Clock Cycle Time
parameter   tRC         = 60            ;// Ref/Act to Ref/Act Command Period
parameter   tRAS    = 42            ;// Active to Precharge Command Period
parameter   tRCD    = 18            ;// Active to Read/Write Command Delay Time
parameter   tCCD    = tCK       ;// Read/Write to Read/Write ( With different Bank) Command Period
parameter   tRP         = 18            ;// Precharge to Active Command Period
parameter   tWR     = 2*tCK ;   // Write Recovery Time
parameter   tCH     = 2         ;// Clock High-Level Width
parameter   tCL         = 2         ;// Clock Low-Level Width
parameter   tAC         = 5.5           ;// Access Time from CLK
parameter   tOH     = 3         ;// Output Data Hold Time
parameter   tHZ     = 6.0       ;   // Output Data High Impedance Time Max
parameter   tLZ         = 0         ;// Output Data Low Impedance Time
parameter   tSB_min = 0         ;// Power Down Mode Entry Time Min
parameter   tSB_max = 6         ;// Power Down Mode Entry Time Max
parameter   tDS         = 1.5     ;     // Data-in Setup Time
parameter   tDH     = 1.0   ;   // Data-in Hold Time
parameter   tAS         = 1.5     ;     // Addr, Bs Setup Time
parameter   tAH         = 1.0     ;     // Addr, Bs Hold Time
parameter   tCKS    = 1.5     ;     // CKE Setup Time
parameter   tCKH    = 1.0     ;     // CKE Hold  Time
parameter   tCMS    = 1.5     ;     // Command Setup Time
parameter   tCMH    = 1.0       ;   // Command Hold  Time
parameter   tREF    = 64000000; // Refresh Time
parameter   tRSC    = 2*tCK ;       // 2 * tCK
parameter   tWRa    = tWR     ; // Auto precharge mode
parameter   tWRm    = tWR     ; // Manual precharge mode
parameter   tXSR    = 72          ; // Exit self refresh to ACTIVE command
parameter   CL      = 2         ;// CAS Latency
`endif

`ifdef T6CL3
// Timing Parameters
parameter   tCK         =6.0      ;     // Clock Cycle Time
parameter   tRC         = 60            ;// Ref/Act to Ref/Act Command Period
parameter   tRAS    = 42            ;// Active to Precharge Command Period
parameter   tRCD    = 18            ;// Active to Read/Write Command Delay Time
parameter   tCCD    = tCK       ;// Read/Write to Read/Write ( With different Bank) Command Period
parameter   tRP         = 18            ;// Precharge to Active Command Period
parameter   tWR     = 2*tCK ;   // Write Recovery Time
parameter   tCH     = 2         ;// Clock High-Level Width
parameter   tCL         = 2         ;// Clock Low-Level Width
parameter   tAC         = 5.0           ;// Access Time from CLK
parameter   tOH     = 3         ;// Output Data Hold Time
parameter   tHZ     = 5.0       ;   // Output Data High Impedance Time Max
parameter   tLZ         = 0         ;// Output Data Low Impedance Time
parameter   tSB_min = 0         ;// Power Down Mode Entry Time Min
parameter   tSB_max = 6         ;// Power Down Mode Entry Time Max
parameter   tDS         = 1.5     ;     // Data-in Setup Time
parameter   tDH     = 1.0   ;   // Data-in Hold Time
parameter   tAS         = 1.5     ;     // Addr, Bs Setup Time
parameter   tAH         = 1.0     ;     // Addr, Bs Hold Time
parameter   tCKS    = 1.5     ;     // CKE Setup Time
parameter   tCKH    = 1.0     ;     // CKE Hold  Time
parameter   tCMS    = 1.5     ;     // Command Setup Time
parameter   tCMH    = 1.0       ;   // Command Hold  Time
parameter   tREF    = 64000000; // Refresh Time
parameter   tRSC    = 2*tCK ;       // 2 * tCK
parameter   tWRa    = tWR     ; // Auto precharge mode
parameter   tWRm    = tWR     ; // Manual precharge mode
parameter   tXSR    = 72          ; // Exit self refresh to ACTIVE command
parameter   CL   =  3       ;   // CAS Latency
`endif





`ifdef T75CL2
// Timing Parameters
parameter   tCK         =10     ;   // Clock Cycle Time
parameter   tRC         =65         ;// Ref/Act to Ref/Act Command Period
parameter   tRAS    =45         ;// Active to Precharge Command Period
parameter   tRCD    =20         ;// Active to Read/Write Command Delay Time
parameter   tCCD    =tCK        ;// Read/Write to Read/Write ( With different Bank) Command Period
parameter   tRP         =20         ;// Precharge to Active Command Period
parameter   tWR     =2*tCK  ;   // Write Recovery Time
parameter   tCH     = 2.5       ;   // Clock High-Level Width
parameter   tCL         = 2.5       ;   // Clock Low-Level Width
parameter   tAC          = 6        ;   // Access Time from CLK
parameter   tOH     =3          ;// Output Data Hold Time
parameter   tHZ     =6          ;// Output Data High Impedance Time Max
parameter   tLZ         =0          ;// Output Data Low Impedance Time
parameter   tSB_min =0          ;// Power Down Mode Entry Time Min
parameter   tSB_max =7.0            ;// Power Down Mode Entry Time Max
parameter   tDS         =1.5      ;     // Data-in Setup Time
parameter   tDH     =1.0    ;   // Data-in Hold Time
parameter   tAS         =1.5      ;     // Addr, Bs Setup Time
parameter   tAH         =1.0      ;     // Addr, Bs Hold Time
parameter   tCKS    =1.5      ;     // CKE Setup Time
parameter   tCKH    =1.0      ;     // CKE Hold  Time
parameter   tCMS    =1.5      ;     // Command Setup Time
parameter   tCMH    =1.0        ;   // Command Hold  Time
parameter   tREF    =64000000   ;// Refresh Time
parameter   tRSC    =2*tCK      ;   // 2 * tCK
parameter   tWRa    =tWR        ;// Auto precharge mode
parameter   tWRm    =tWR        ;// Manual precharge mode
parameter   tXSR    =75         ;// Exit self refresh to ACTIVE command
parameter   CL      =2          ;// CAS Latency
`endif

`ifdef T75CL3
// Timing Parameters
parameter   tCK         =7.5        ;   // Clock Cycle Time
parameter   tRC         =65         ;// Ref/Act to Ref/Act Command Period
parameter   tRAS    =45         ;// Active to Precharge Command Period
parameter   tRCD    =20         ;// Active to Read/Write Command Delay Time
parameter   tCCD    =tCK        ;// Read/Write to Read/Write ( With different Bank) Command Period
parameter   tRP         =20         ;// Precharge to Active Command Period
parameter   tWR     =2*tCK  ;   // Write Recovery Time
parameter   tCH     = 2.5       ;   // Clock High-Level Width
parameter   tCL         = 2.5       ;   // Clock Low-Level Width
parameter   tAC          = 5.4      ;   // Access Time from CLK
parameter   tOH     =3          ;// Output Data Hold Time
parameter   tHZ     =5.5            ;// Output Data High Impedance Time Max
parameter   tLZ         =0          ;// Output Data Low Impedance Time
parameter   tSB_min =0          ;// Power Down Mode Entry Time Min
parameter   tSB_max =7.0            ;// Power Down Mode Entry Time Max
parameter   tDS         =1.5      ;     // Data-in Setup Time
parameter   tDH     =1.0    ;   // Data-in Hold Time
parameter   tAS         =1.5      ;     // Addr, Bs Setup Time
parameter   tAH         =1.0      ;     // Addr, Bs Hold Time
parameter   tCKS    =1.5      ;     // CKE Setup Time
parameter   tCKH    =1.0      ;     // CKE Hold  Time
parameter   tCMS    =1.5      ;     // Command Setup Time
parameter   tCMH    =1.0        ;   // Command Hold  Time
parameter   tREF    =64000000   ;// Refresh Time
parameter   tRSC    =2*tCK      ;   // 2 * tCK
parameter   tWRa    =tWR        ;// Auto precharge mode
parameter   tWRm    =tWR        ;// Manual precharge mode
parameter   tXSR    =75         ;// Exit self refresh to ACTIVE command
parameter   CL      =3          ;// CAS Latency
`endif






// cmds Operation
parameter   ACT     =0;
parameter   NOP     =1;
parameter   READ    =2;
parameter   WRITE   =3;
parameter   PRECH   =4;
parameter   A_REF   =5;
parameter   BST     =6;
parameter   MRS     =7;

parameter BLE1    =3'b000;
parameter BLE2    =3'b001;
parameter BLE4    =3'b010;
parameter BLE8    =3'b011;
parameter FULL_P  =3'b111;

parameter SEQUEN  =0<<3;
parameter INTERLE =1<<3;

parameter BRBW =  0<<9;
parameter BRSW =  1<<9;



// for Debug message
parameter Debug =  1;

TCL Script

database -open waves -shm -default

#probe -create -shm -depth all sdram_tb -exclude sdram_tb.uut
#probe -create -shm sdram_tb.clk_i

#set COMMENTED_OUT {

probe -create -all -depth all -shm

probe -create -unpacked 41944304 sdram_tb.uut.Bank0
probe -create -unpacked 41944304 sdram_tb.uut.Bank1
probe -create -unpacked 41944304 sdram_tb.uut.Bank2
probe -create -unpacked 41944304 sdram_tb.uut.Bank3

#}

run

database -close waves

Commands

xrun -64bit -enable_psc_opt +access+rwc +define+T6CL3+BL8 -input setup_probe.tcl W9825G6KH.nc.vp config_pkg.sv sm.sv top.sv sdram_tb.sv

simvision waves.shm/

XCELIUM Simulations

XCELIUM SDRAM Violations

XCELIUM Waveforms

XCELIUM Generated Waveforms

Demo / Simulation

Questions and Answers

Thanks for Watching