Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: azonenberg/starshipraider
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 343bd83fdea4
Choose a base ref
...
head repository: azonenberg/starshipraider
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 87d75b807be3
Choose a head ref
  • 2 commits
  • 9 files changed
  • 1 contributor

Commits on Jul 4, 2020

  1. Copy the full SHA
    32bf9fb View commit details
  2. Copy the full SHA
    87d75b8 View commit details
3 changes: 3 additions & 0 deletions firmware/MEAD/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
*.o
*.elf
*.bin
16 changes: 16 additions & 0 deletions firmware/MEAD/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
CFLAGS=-g -mcpu=cortex-m0 -DSTM32F031 -Os
CXXFLAGS=$(CFLAGS) --std=c++17 -fno-exceptions -fno-rtti -g --specs=nano.specs \
-I../stm32-cpp/devices/inc/ \
-I../stm32-cpp/src/
CC=arm-none-eabi-gcc
CXX=arm-none-eabi-g++
all:
$(CXX) *.cpp -c $(CXXFLAGS)
$(CC) ../stm32-cpp/src/cpu/*.S -c $(CFLAGS)
$(CXX) ../stm32-cpp/src/newlib-stubs/*.cpp -c $(CXXFLAGS)
$(CXX) ../stm32-cpp/src/peripheral/*.cpp -c $(CXXFLAGS)
# $(CXX) ../stm32-cpp/src/util/*.cpp -c $(CXXFLAGS)
$(CXX) ../stm32-cpp/devices/src/stm32f031.cpp -c $(CXXFLAGS)
$(CXX) $(CXXFLAGS) *.o -Wl,-T ../stm32-cpp/devices/link/stm32f031.ld -o firmware.elf
arm-none-eabi-objcopy -O binary --only-section=.text --only-section=.data firmware.elf firmware.bin
./imagesize.sh
32 changes: 32 additions & 0 deletions firmware/MEAD/imagesize.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/bin/bash

LINE=`ls -lh firmware.bin | cut -d ' ' -f 5`
echo "Flash memory usage: $LINE";

STACKSTART=$(arm-none-eabi-objdump -t firmware.elf | grep __end | cut -d ' ' -f 1);
STACKEND=$(arm-none-eabi-objdump -t firmware.elf | grep __stack | cut -d ' ' -f 1);
DSTACKSTART=$(echo "obase=10;ibase=16;${STACKSTART^^}" | bc);
DSTACKEND=$(echo "obase=10;ibase=16;${STACKEND^^}" | bc);
STACKSIZE=$(expr $DSTACKEND - $DSTACKSTART);
#STACKKB=$(expr $STACKSIZE / 1024);
echo "Stack size: $STACKSIZE bytes";

DATASTART=$(arm-none-eabi-objdump -t firmware.elf | grep __data_start | cut -d ' ' -f 1);
DATAEND=$(arm-none-eabi-objdump -t firmware.elf | grep __data_end | cut -d ' ' -f 1);
DDATASTART=$(echo "obase=10;ibase=16;${DATASTART^^}" | bc);
DDATAEND=$(echo "obase=10;ibase=16;${DATAEND^^}" | bc);
DATASIZE=$(expr $DDATAEND - $DDATASTART);
DATAKB=$(expr $DATASIZE / 1024);
echo "Global data size: $DATASIZE bytes";

BSSSTART=$(arm-none-eabi-objdump -t firmware.elf | grep __bss_start | cut -d ' ' -f 1);
BSSEND=$(arm-none-eabi-objdump -t firmware.elf | grep __bss_end | cut -d ' ' -f 1);
DBSSSTART=$(echo "obase=10;ibase=16;${BSSSTART^^}" | bc);
DBSSEND=$(echo "obase=10;ibase=16;${BSSEND^^}" | bc);
BSSSIZE=$(expr $DBSSEND - $DBSSSTART);
BSSKB=$(expr $BSSSIZE / 1024);
echo "Global BSS size: $BSSSIZE bytes";

GLOBALSIZE=$(expr $DATASIZE + $BSSSIZE);
GLOBALKB=$(expr $GLOBALSIZE / 1024);
echo "Total global size: $GLOBALSIZE bytes";
104 changes: 104 additions & 0 deletions firmware/MEAD/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
/***********************************************************************************************************************
* *
* STARSHIPRAIDER v0.1 *
* *
* Copyright (c) 2020 Andrew D. Zonenberg *
* All rights reserved. *
* *
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the *
* following conditions are met: *
* *
* * Redistributions of source code must retain the above copyright notice, this list of conditions, and the *
* following disclaimer. *
* *
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the *
* following disclaimer in the documentation and/or other materials provided with the distribution. *
* *
* * Neither the name of the author nor the names of any contributors may be used to endorse or promote products *
* derived from this software without specific prior written permission. *
* *
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL *
* THE AUTHORS BE HELD LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR *
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE *
* POSSIBILITY OF SUCH DAMAGE. *
* *
***********************************************************************************************************************/

#include <stm32fxxx.h>
#include <peripheral/UART.h>
#include <peripheral/GPIO.h>
#include <peripheral/SPI.h>
/*
#include "SCPIParser.h"
#include "LTC2664.h"
#include "ADL5205.h"
*/

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Entry point

//UART stuff
UART* g_uart;

//When possible, long-lived stuff here should be declared static.
//This puts them in .bss instead of stack, and enables better accounting of memory usage
//on the (heavily limited) STM32F031 on the characterization board.
int main()
{
//Initialize the PLL
//CPU clock = AHB clock = APB clock = 48 MHz
RCCHelper::InitializePLLFromInternalOscillator(2, 12, 1, 1);

//Initialize the UART
static GPIOPin uart_tx(&GPIOA, 9, GPIOPin::MODE_PERIPHERAL, 1);
static GPIOPin uart_rx(&GPIOA, 10, GPIOPin::MODE_PERIPHERAL, 1);
static UART uart(&USART1, &USART1, 417);
g_uart = &uart;

//Enable RXNE interrupt vector (IRQ27)
//TODO: better contants here
volatile uint32_t* NVIC_ISER0 = (volatile uint32_t*)(0xe000e100);
*NVIC_ISER0 = 0x8000000;


//Set up SPI bus at 12 MHz (APB/4)
static GPIOPin spi_sck( &GPIOB, 3, GPIOPin::MODE_PERIPHERAL, 0);
static GPIOPin spi_miso(&GPIOB, 4, GPIOPin::MODE_PERIPHERAL, 0);
static GPIOPin spi_mosi(&GPIOB, 5, GPIOPin::MODE_PERIPHERAL, 0);
static SPI spi(&SPI1, true, 4);

//Set up timer


//Set up LCD
/*
g_uart->Printf("Turning on LCD\n");
static GPIOPin lcd_cs(&GPIOA, 0, GPIOPin::MODE_OUTPUT);
static GPIOPin lcd_rst(&GPIOA, 2, GPIOPin::MODE_OUTPUT);
static GPIOPin lcd_ctl_data(&GPIOA, 3, GPIOPin::MODE_OUTPUT);
lcd_cs.Set(1);
*/

/*
//Reset LCD
lcd_rst.Set(0);
for(int i=0; i<50; i++)
lcd_rst.Set(0);
for(int i=0; i<50; i++)
lcd_rst.Set(1);
//Set everything on
lcd_cs.Set(0);
spi.BlockingWrite(0xa4);
spi.WaitForWrites();
lcd_cs.Set(1);
*/
//Wait forever
while(1)
{}

return 0;
}
277 changes: 277 additions & 0 deletions firmware/MEAD/vectors.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,277 @@
/***********************************************************************************************************************
* *
* STARSHIPRAIDER v0.1 *
* *
* Copyright (c) 2020 Andrew D. Zonenberg *
* All rights reserved. *
* *
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the *
* following conditions are met: *
* *
* * Redistributions of source code must retain the above copyright notice, this list of conditions, and the *
* following disclaimer. *
* *
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the *
* following disclaimer in the documentation and/or other materials provided with the distribution. *
* *
* * Neither the name of the author nor the names of any contributors may be used to endorse or promote products *
* derived from this software without specific prior written permission. *
* *
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL *
* THE AUTHORS BE HELD LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR *
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE *
* POSSIBILITY OF SUCH DAMAGE. *
* *
***********************************************************************************************************************/

#include <stdint.h>
#include <stm32fxxx.h>
#include <peripheral/UART.h>

typedef void(*fnptr)();

extern uint32_t __end;

//prototypes
extern "C" void _start();
void MMUFault_Handler();
void UsageFault_Handler();
void BusFault_Handler();
void HardFault_Handler();
void NMI_Handler();

extern UART* g_uart;
void USART1_Handler();

void defaultISR();

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Interrupt vector table

fnptr __attribute__((section(".vector"))) vectorTable[] =
{
(fnptr)&__end, //stack
_start, //reset
NMI_Handler, //NMI
HardFault_Handler, //hardfault
MMUFault_Handler, //mmufault
BusFault_Handler, //busfault
UsageFault_Handler, //usagefault
defaultISR, //reserved_7
defaultISR, //reserved_8
defaultISR, //reserved_9
defaultISR, //reserved_10
defaultISR, //svcall
defaultISR, //debug
defaultISR, //reserved_13
defaultISR, //pend_sv
defaultISR, //systick
defaultISR, //irq0 WWDG
defaultISR, //irq1 comparator
defaultISR, //irq2 RTC/EXTI
defaultISR, //irq3 flash
defaultISR, //irq4 RCC
defaultISR, //irq5 EXTI_1_0
defaultISR, //irq6 EXTI_3_2
defaultISR, //irq7 EXTI_15_4
defaultISR, //irq8 TSC
defaultISR, //irq9 DMA_CH1
defaultISR, //irq10 DMA_CH2_3
defaultISR, //irq11 DMA_CH4_7
defaultISR, //irq12 ADC_COMP
defaultISR, //irq13 TIM1_BRK_UP
defaultISR, //irq14 TIM1_CC
defaultISR, //irq15 TIM2
defaultISR, //irq16 TIM3
defaultISR, //irq17 TIM6_DAC
defaultISR, //irq18 TIM7
defaultISR, //irq19 TIM14
defaultISR, //irq20 TIM15
defaultISR, //irq21 TIM16
defaultISR, //irq22 TIM17
defaultISR, //irq23 I2C1
defaultISR, //irq24 I2C2
defaultISR, //irq25 SPI1
defaultISR, //irq26 SPI2
USART1_Handler, //irq27 USART1
defaultISR, //irq28 USART2
defaultISR, //irq29 USART3_8
defaultISR, //irq30
defaultISR, //irq31
defaultISR, //irq32
defaultISR, //irq33
defaultISR, //irq34
defaultISR, //irq35
defaultISR, //irq36
defaultISR, //irq37
defaultISR, //irq38
defaultISR, //irq39
defaultISR, //irq40
defaultISR, //irq41
defaultISR, //irq42
defaultISR, //irq43
defaultISR, //irq44
defaultISR, //irq45
defaultISR, //irq46
defaultISR, //irq47
defaultISR, //irq48
defaultISR, //irq49
defaultISR, //irq50
defaultISR, //irq51
defaultISR, //irq52
defaultISR, //irq53
defaultISR, //irq54
defaultISR, //irq55
defaultISR, //irq56
defaultISR, //irq57
defaultISR, //irq58
defaultISR, //irq59
defaultISR, //irq60
defaultISR, //irq61
defaultISR, //irq62
defaultISR, //irq63
defaultISR, //irq64
defaultISR, //irq65
defaultISR, //irq66
defaultISR, //irq67
defaultISR, //irq68
defaultISR, //irq69
defaultISR, //irq70
defaultISR, //irq71
defaultISR, //irq72
defaultISR, //irq73
defaultISR, //irq74
defaultISR, //irq75
defaultISR, //irq76
defaultISR, //irq77
defaultISR, //irq78
defaultISR, //irq79
defaultISR, //irq80
defaultISR, //irq81
defaultISR, //irq82
defaultISR, //irq83
defaultISR, //irq84
defaultISR, //irq85
defaultISR, //irq86
defaultISR, //irq87
defaultISR, //irq88
defaultISR, //irq89
defaultISR, //irq90
defaultISR, //irq91
defaultISR, //irq92
defaultISR, //irq93
defaultISR, //irq94
defaultISR, //irq95
defaultISR, //irq96
defaultISR, //irq97
defaultISR, //irq98
defaultISR, //irq99
defaultISR, //irq100
defaultISR, //irq101
defaultISR, //irq102
defaultISR, //irq103
defaultISR, //irq104
defaultISR, //irq105
defaultISR, //irq106
defaultISR, //irq107
defaultISR, //irq108
defaultISR //irq109
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Stub for unused interrupts

void defaultISR()
{
//g_platform.m_cliUart.PrintString("Unused interrupt vector called\n");
while(1)
{}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Exception vectors

void NMI_Handler()
{
//g_platform.m_cliUart.PrintString("NMI\n");
while(1)
{}
}

void HardFault_Handler()
{
/*
uint32_t* msp;
asm volatile("mrs %[result], MSP" : [result]"=r"(msp));
msp += 12; //locals/alignment
uint32_t r0 = msp[0];
uint32_t r1 = msp[1];
uint32_t r2 = msp[2];
uint32_t r3 = msp[3];
uint32_t r12 = msp[4];
uint32_t lr = msp[5];
uint32_t pc = msp[6];
uint32_t xpsr = msp[7];
g_platform.m_cliUart.Printf("Hard fault\n");
g_platform.m_cliUart.Printf(" HFSR = %08x\n", *(volatile uint32_t*)(0xe000ed2C));
g_platform.m_cliUart.Printf(" MMFAR = %08x\n", *(volatile uint32_t*)(0xe000ed34));
g_platform.m_cliUart.Printf(" BFAR = %08x\n", *(volatile uint32_t*)(0xe000ed38));
g_platform.m_cliUart.Printf(" CFSR = %08x\n", *(volatile uint32_t*)(0xe000ed28));
g_platform.m_cliUart.Printf(" UFSR = %08x\n", *(volatile uint16_t*)(0xe000ed2a));
g_platform.m_cliUart.Printf(" DFSR = %08x\n", *(volatile uint32_t*)(0xe000ed30));
g_platform.m_cliUart.Printf(" MSP = %08x\n", msp);
g_platform.m_cliUart.Printf(" r0 = %08x\n", r0);
g_platform.m_cliUart.Printf(" r1 = %08x\n", r1);
g_platform.m_cliUart.Printf(" r2 = %08x\n", r2);
g_platform.m_cliUart.Printf(" r3 = %08x\n", r3);
g_platform.m_cliUart.Printf(" r12 = %08x\n", r12);
g_platform.m_cliUart.Printf(" lr = %08x\n", lr);
g_platform.m_cliUart.Printf(" pc = %08x\n", pc);
g_platform.m_cliUart.Printf(" xpsr = %08x\n", xpsr);
g_platform.m_cliUart.Printf(" Stack:\n");
for(int i=0; i<16; i++)
g_platform.m_cliUart.Printf(" %08x\n", msp[i]);
*/
while(1)
{}
}

void BusFault_Handler()
{
//g_platform.m_cliUart.PrintString("Bus fault\n");
while(1)
{}
}

void UsageFault_Handler()
{
//g_platform.m_cliUart.PrintString("Usage fault\n");
while(1)
{}
}

void MMUFault_Handler()
{
//g_platform.m_cliUart.PrintString("MMU fault\n");
while(1)
{}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Interrupt handlers for peripherals

void __attribute__((isr)) USART1_Handler()
{
//Check why we got the IRQ.
//For now, ignore anything other than "data ready"
if(0 == (USART1.ISR & USART_ISR_RXNE))
return;

//rx data? Shove it in the fifo
g_uart->OnIRQRxData(USART1.RDR);
}
4 changes: 4 additions & 0 deletions rtl/MEAD/mead-bringup/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
*.cache
*.hw
*.ip_user_files
*.runs
31 changes: 31 additions & 0 deletions rtl/MEAD/mead-bringup/mead-bringup.srcs/constrs_1/new/top.xdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property PACKAGE_PIN H12 [get_ports {led[3]}]
set_property PACKAGE_PIN H13 [get_ports {led[2]}]
set_property PACKAGE_PIN J16 [get_ports {led[1]}]
set_property PACKAGE_PIN J15 [get_ports {led[0]}]
set_property PACKAGE_PIN T4 [get_ports {probe_p[7]}]
set_property PACKAGE_PIN R2 [get_ports {probe_p[6]}]
set_property PACKAGE_PIN P4 [get_ports {probe_p[5]}]
set_property PACKAGE_PIN N1 [get_ports {probe_p[4]}]
set_property PACKAGE_PIN M5 [get_ports {probe_p[3]}]
set_property PACKAGE_PIN N3 [get_ports {probe_p[2]}]
set_property PACKAGE_PIN L4 [get_ports {probe_p[1]}]
set_property PACKAGE_PIN M2 [get_ports {probe_p[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports clk_25mhz]
set_property PACKAGE_PIN E12 [get_ports clk_25mhz]
set_property PACKAGE_PIN E16 [get_ports presence_detect]
set_property PACKAGE_PIN F14 [get_ports power_en]
set_property PACKAGE_PIN F13 [get_ports uart_rx]
set_property PACKAGE_PIN G16 [get_ports uart_tx]

create_clock -period 40.000 -name clk_25mhz -waveform {0.000 20.000} [get_ports clk_25mhz]

set_property IOSTANDARD LVCMOS33 [get_ports power_en]
set_property IOSTANDARD LVCMOS33 [get_ports presence_detect]
set_property IOSTANDARD LVCMOS33 [get_ports uart_rx]
set_property IOSTANDARD LVCMOS33 [get_ports uart_tx]

set_property PULLUP true [get_ports presence_detect]
101 changes: 101 additions & 0 deletions rtl/MEAD/mead-bringup/mead-bringup.srcs/sources_1/new/top.sv
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
`timescale 1ns/1ps
`default_nettype none

module top(
input wire clk_25mhz,

input wire[7:0] probe_p,
input wire[7:0] probe_n,

inout wire uart_tx,
input wire uart_rx,

input wire presence_detect,
output logic power_en = 0,

output logic[3:0] led = 0
);

assign uart_tx = 1'bz;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Input buffers

wire[7:0] probe;
DifferentialInputBuffer #(
.WIDTH(8),
.IOSTANDARD("LVDS_25"),
.ODT(1),
.OPTIMIZE("SPEED")
) probe_ibuf (
.pad_in_p(probe_p),
.pad_in_n(probe_n),
.fabric_out(probe)
);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Synchronize async inputs

wire present_n;

ThreeStageSynchronizer #(
.INIT(0),
.IN_REG(0)
) sync_present(
.clk_in(clk_25mhz),
.din(presence_detect),
.clk_out(clk_25mhz),
.dout(present_n)
);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Probe power hotswap

//Wait about 670ms after mate before applying power
logic[22:0] count = 0;

enum logic[1:0]
{
STATE_OFF,
STATE_TURNING_ON,
STATE_ON
} state = STATE_OFF;

always_ff @(posedge clk_25mhz) begin

case(state)

STATE_OFF: begin

if(!present_n) begin
led[0] <= 1;
count <= 1;
state <= STATE_TURNING_ON;
end

end //end STATE_OFF

STATE_TURNING_ON: begin
count <= count + 1;

if(count == 0) begin
led[1] <= 1;
power_en <= 1;
state <= STATE_ON;
end

end //end STATE_TURNING_ON

STATE_ON: begin
if(present_n) begin
led <= 0;
power_en <= 0;
state <= STATE_OFF;
end
end //end STATE_ON

endcase

end

endmodule
208 changes: 208 additions & 0 deletions rtl/MEAD/mead-bringup/mead-bringup.xpr
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Product Version: Vivado v2019.2 (64-bit) -->
<!-- -->
<!-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved. -->

<Project Version="7" Minor="44" Path="/nfs4/home/azonenberg/code/starshipraider/rtl/MEAD/mead-bringup/mead-bringup.xpr">
<DefaultLaunch Dir="$PRUNDIR"/>
<Configuration>
<Option Name="Id" Val="07381f72cb384d01b3f5c979936f790c"/>
<Option Name="Part" Val="xc7a100tftg256-1"/>
<Option Name="CompiledLibDir" Val="$PCACHEDIR/compile_simlib"/>
<Option Name="CompiledLibDirXSim" Val=""/>
<Option Name="CompiledLibDirModelSim" Val="$PCACHEDIR/compile_simlib/modelsim"/>
<Option Name="CompiledLibDirQuesta" Val="$PCACHEDIR/compile_simlib/questa"/>
<Option Name="CompiledLibDirIES" Val="$PCACHEDIR/compile_simlib/ies"/>
<Option Name="CompiledLibDirXcelium" Val="$PCACHEDIR/compile_simlib/xcelium"/>
<Option Name="CompiledLibDirVCS" Val="$PCACHEDIR/compile_simlib/vcs"/>
<Option Name="CompiledLibDirRiviera" Val="$PCACHEDIR/compile_simlib/riviera"/>
<Option Name="CompiledLibDirActivehdl" Val="$PCACHEDIR/compile_simlib/activehdl"/>
<Option Name="BoardPart" Val=""/>
<Option Name="ActiveSimSet" Val="sim_1"/>
<Option Name="DefaultLib" Val="xil_defaultlib"/>
<Option Name="ProjectType" Val="Default"/>
<Option Name="IPOutputRepo" Val="$PCACHEDIR/ip"/>
<Option Name="IPCachePermission" Val="read"/>
<Option Name="IPCachePermission" Val="write"/>
<Option Name="EnableCoreContainer" Val="FALSE"/>
<Option Name="CreateRefXciForCoreContainers" Val="FALSE"/>
<Option Name="IPUserFilesDir" Val="$PIPUSERFILESDIR"/>
<Option Name="IPStaticSourceDir" Val="$PIPUSERFILESDIR/ipstatic"/>
<Option Name="EnableBDX" Val="FALSE"/>
<Option Name="WTXSimLaunchSim" Val="0"/>
<Option Name="WTModelSimLaunchSim" Val="0"/>
<Option Name="WTQuestaLaunchSim" Val="0"/>
<Option Name="WTIesLaunchSim" Val="0"/>
<Option Name="WTVcsLaunchSim" Val="0"/>
<Option Name="WTRivieraLaunchSim" Val="0"/>
<Option Name="WTActivehdlLaunchSim" Val="0"/>
<Option Name="WTXSimExportSim" Val="0"/>
<Option Name="WTModelSimExportSim" Val="0"/>
<Option Name="WTQuestaExportSim" Val="0"/>
<Option Name="WTIesExportSim" Val="0"/>
<Option Name="WTVcsExportSim" Val="0"/>
<Option Name="WTRivieraExportSim" Val="0"/>
<Option Name="WTActivehdlExportSim" Val="0"/>
<Option Name="GenerateIPUpgradeLog" Val="TRUE"/>
<Option Name="XSimRadix" Val="hex"/>
<Option Name="XSimTimeUnit" Val="ns"/>
<Option Name="XSimArrayDisplayLimit" Val="1024"/>
<Option Name="XSimTraceLimit" Val="65536"/>
<Option Name="SimTypes" Val="rtl"/>
<Option Name="SimTypes" Val="bfm"/>
<Option Name="SimTypes" Val="tlm"/>
<Option Name="SimTypes" Val="tlm_dpi"/>
<Option Name="MEMEnableMemoryMapGeneration" Val="TRUE"/>
<Option Name="DcpsUptoDate" Val="TRUE"/>
</Configuration>
<FileSets Version="1" Minor="31">
<FileSet Name="sources_1" Type="DesignSrcs" RelSrcDir="$PSRCDIR/sources_1">
<Filter Type="Srcs"/>
<File Path="$PPRDIR/../../antikernel-ipcores/device_abstraction/DifferentialInputBuffer.sv">
<FileInfo>
<Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="implementation"/>
<Attr Name="UsedIn" Val="simulation"/>
</FileInfo>
</File>
<File Path="$PPRDIR/../../antikernel-ipcores/clock/crossing/ThreeStageSynchronizer.sv">
<FileInfo>
<Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="implementation"/>
<Attr Name="UsedIn" Val="simulation"/>
</FileInfo>
</File>
<File Path="$PSRCDIR/sources_1/new/top.sv">
<FileInfo>
<Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="implementation"/>
<Attr Name="UsedIn" Val="simulation"/>
</FileInfo>
</File>
<Config>
<Option Name="DesignMode" Val="RTL"/>
<Option Name="TopModule" Val="top"/>
<Option Name="TopAutoSet" Val="TRUE"/>
</Config>
</FileSet>
<FileSet Name="constrs_1" Type="Constrs" RelSrcDir="$PSRCDIR/constrs_1">
<Filter Type="Constrs"/>
<File Path="$PSRCDIR/constrs_1/new/top.xdc">
<FileInfo>
<Attr Name="UsedIn" Val="synthesis"/>
<Attr Name="UsedIn" Val="implementation"/>
</FileInfo>
</File>
<Config>
<Option Name="TargetConstrsFile" Val="$PSRCDIR/constrs_1/new/top.xdc"/>
<Option Name="ConstrsType" Val="XDC"/>
</Config>
</FileSet>
<FileSet Name="sim_1" Type="SimulationSrcs" RelSrcDir="$PSRCDIR/sim_1">
<Config>
<Option Name="DesignMode" Val="RTL"/>
<Option Name="TopModule" Val="top"/>
<Option Name="TopLib" Val="xil_defaultlib"/>
<Option Name="TopAutoSet" Val="TRUE"/>
<Option Name="TransportPathDelay" Val="0"/>
<Option Name="TransportIntDelay" Val="0"/>
<Option Name="SelectedSimModel" Val="rtl"/>
<Option Name="SrcSet" Val="sources_1"/>
</Config>
</FileSet>
<FileSet Name="utils_1" Type="Utils" RelSrcDir="$PSRCDIR/utils_1">
<Filter Type="Utils"/>
<Config>
<Option Name="TopAutoSet" Val="TRUE"/>
</Config>
</FileSet>
</FileSets>
<Simulators>
<Simulator Name="XSim">
<Option Name="Description" Val="Vivado Simulator"/>
<Option Name="CompiledLib" Val="0"/>
</Simulator>
<Simulator Name="ModelSim">
<Option Name="Description" Val="ModelSim Simulator"/>
</Simulator>
<Simulator Name="Questa">
<Option Name="Description" Val="Questa Advanced Simulator"/>
</Simulator>
<Simulator Name="IES">
<Option Name="Description" Val="Incisive Enterprise Simulator (IES)"/>
</Simulator>
<Simulator Name="Xcelium">
<Option Name="Description" Val="Xcelium Parallel Simulator"/>
</Simulator>
<Simulator Name="VCS">
<Option Name="Description" Val="Verilog Compiler Simulator (VCS)"/>
</Simulator>
<Simulator Name="Riviera">
<Option Name="Description" Val="Riviera-PRO Simulator"/>
</Simulator>
</Simulators>
<Runs Version="1" Minor="11">
<Run Id="synth_1" Type="Ft3:Synth" SrcSet="sources_1" Part="xc7a100tftg256-1" ConstrsSet="constrs_1" Description="Vivado Synthesis Defaults" AutoIncrementalCheckpoint="false" WriteIncrSynthDcp="false" State="current" Dir="$PRUNDIR/synth_1" IncludeInArchive="true">
<Strategy Version="1" Minor="2">
<StratHandle Name="Vivado Synthesis Defaults" Flow="Vivado Synthesis 2019">
<Desc>Vivado Synthesis Defaults</Desc>
</StratHandle>
<Step Id="synth_design"/>
</Strategy>
<GeneratedRun Dir="$PRUNDIR" File="gen_run.xml"/>
<ReportStrategy Name="Vivado Synthesis Default Reports" Flow="Vivado Synthesis 2019"/>
<Report Name="ROUTE_DESIGN.REPORT_METHODOLOGY" Enabled="1"/>
<RQSFiles/>
</Run>
<Run Id="impl_1" Type="Ft2:EntireDesign" Part="xc7a100tftg256-1" ConstrsSet="constrs_1" Description="Default settings for Implementation." AutoIncrementalCheckpoint="false" WriteIncrSynthDcp="false" State="current" Dir="$PRUNDIR/impl_1" SynthRun="synth_1" IncludeInArchive="true" GenFullBitstream="true">
<Strategy Version="1" Minor="2">
<StratHandle Name="Vivado Implementation Defaults" Flow="Vivado Implementation 2019">
<Desc>Default settings for Implementation.</Desc>
</StratHandle>
<Step Id="init_design"/>
<Step Id="opt_design"/>
<Step Id="power_opt_design"/>
<Step Id="place_design"/>
<Step Id="post_place_power_opt_design"/>
<Step Id="phys_opt_design" EnableStepBool="1"/>
<Step Id="route_design"/>
<Step Id="post_route_phys_opt_design"/>
<Step Id="write_bitstream"/>
</Strategy>
<GeneratedRun Dir="$PRUNDIR" File="gen_run.xml"/>
<ReportStrategy Name="Vivado Implementation Default Reports" Flow="Vivado Implementation 2019"/>
<Report Name="ROUTE_DESIGN.REPORT_METHODOLOGY" Enabled="1"/>
<RQSFiles/>
</Run>
</Runs>
<Board/>
<DashboardSummary Version="1" Minor="0">
<Dashboards>
<Dashboard Name="default_dashboard">
<Gadgets>
<Gadget Name="drc_1" Type="drc" Version="1" Row="2" Column="0">
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_drc_0 "/>
</Gadget>
<Gadget Name="methodology_1" Type="methodology" Version="1" Row="2" Column="1">
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_methodology_0 "/>
</Gadget>
<Gadget Name="power_1" Type="power" Version="1" Row="1" Column="0">
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_power_0 "/>
</Gadget>
<Gadget Name="timing_1" Type="timing" Version="1" Row="0" Column="1">
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_timing_summary_0 "/>
</Gadget>
<Gadget Name="utilization_1" Type="utilization" Version="1" Row="0" Column="0">
<GadgetParam Name="REPORTS" Type="string_list" Value="synth_1#synth_1_synth_report_utilization_0 "/>
<GadgetParam Name="RUN.STEP" Type="string" Value="synth_design"/>
<GadgetParam Name="RUN.TYPE" Type="string" Value="synthesis"/>
</Gadget>
<Gadget Name="utilization_2" Type="utilization" Version="1" Row="1" Column="1">
<GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_place_report_utilization_0 "/>
</Gadget>
</Gadgets>
</Dashboard>
<CurrentDashboard>default_dashboard</CurrentDashboard>
</Dashboards>
</DashboardSummary>
</Project>