diff --git a/ips/hw/scalp_axi4lite/component.xml b/ips/hw/scalp_axi4lite/component.xml new file mode 100644 index 0000000000000000000000000000000000000000..dc75ae12cd0da396e207cdceaf7110006698ca1b --- /dev/null +++ b/ips/hw/scalp_axi4lite/component.xml @@ -0,0 +1,928 @@ +<?xml version="1.0" encoding="UTF-8"?> +<spirit:component xmlns:xilinx="http://www.xilinx.com" xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <spirit:vendor>hepia.hesge.ch</spirit:vendor> + <spirit:library>user</spirit:library> + <spirit:name>scalp_axi4lite</spirit:name> + <spirit:version>1.0</spirit:version> + <spirit:busInterfaces> + <spirit:busInterface> + <spirit:name>InterruptxSI</spirit:name> + <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="interrupt" spirit:version="1.0"/> + <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="interrupt_rtl" spirit:version="1.0"/> + <spirit:slave/> + <spirit:portMaps> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>INTERRUPT</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>InterruptxSI</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>InterruptxSO</spirit:name> + <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="interrupt" spirit:version="1.0"/> + <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="interrupt_rtl" spirit:version="1.0"/> + <spirit:master/> + <spirit:portMaps> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>INTERRUPT</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>InterruptxSO</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>SAxiClkxCI</spirit:name> + <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/> + <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/> + <spirit:slave/> + <spirit:portMaps> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>CLK</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiClkxCI</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + <spirit:parameters> + <spirit:parameter> + <spirit:name>FREQ_HZ</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.SAXICLKXCI.FREQ_HZ"/> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_RESET</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.SAXICLKXCI.ASSOCIATED_RESET">SAxiResetxRANI</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_BUSIF</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.SAXICLKXCI.ASSOCIATED_BUSIF">SAXILitexDIO</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>SAxiResetxRANI</spirit:name> + <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset" spirit:version="1.0"/> + <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset_rtl" spirit:version="1.0"/> + <spirit:slave/> + <spirit:portMaps> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>RST</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiResetxRANI</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + <spirit:parameters> + <spirit:parameter> + <spirit:name>NUM_READ_OUTSTANDING</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.SAXIRESETXRANI.NUM_READ_OUTSTANDING"/> + </spirit:parameter> + <spirit:parameter> + <spirit:name>NUM_WRITE_OUTSTANDING</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.SAXIRESETXRANI.NUM_WRITE_OUTSTANDING"/> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>SAXILitexDIO</spirit:name> + <spirit:busType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="aximm" spirit:version="1.0"/> + <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="aximm_rtl" spirit:version="1.0"/> + <spirit:slave> + <spirit:memoryMapRef spirit:memoryMapRef="SAXILitexDIO"/> + </spirit:slave> + <spirit:portMaps> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARADDR</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiARAddrxDI</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>BVALID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiBValidxSO</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>RREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiRReadyxSI</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>BREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiBReadyxSI</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWVALID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiAWValidxSI</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiAWReadyxSO</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>WDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiWDataxDI</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>RRESP</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiRRespxDO</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>RVALID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiRValidxSO</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>AWADDR</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiAWAddrxDI</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiARReadyxSO</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>WVALID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiWValidxSI</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>WREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiWReadyxSO</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>ARVALID</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiARValidxSI</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>WSTRB</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiWStrbxDI</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>BRESP</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiBRespxDO</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>RDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>SAxiRDataxDO</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + <spirit:parameters> + <spirit:parameter> + <spirit:name>NUM_READ_OUTSTANDING</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.SAXILITEXDIO.NUM_READ_OUTSTANDING"/> + </spirit:parameter> + <spirit:parameter> + <spirit:name>NUM_WRITE_OUTSTANDING</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.SAXILITEXDIO.NUM_WRITE_OUTSTANDING"/> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + </spirit:busInterfaces> + <spirit:memoryMaps> + <spirit:memoryMap> + <spirit:name>SAXILitexDIO</spirit:name> + <spirit:addressBlock> + <spirit:name>SAXILiteAddr</spirit:name> + <spirit:displayName>SAXILiteAddr</spirit:displayName> + <spirit:baseAddress spirit:format="long">0</spirit:baseAddress> + <spirit:range spirit:format="long">4096</spirit:range> + <spirit:width spirit:format="long">0</spirit:width> + </spirit:addressBlock> + </spirit:memoryMap> + </spirit:memoryMaps> + <spirit:model> + <spirit:views> + <spirit:view> + <spirit:name>xilinx_anylanguagesynthesis</spirit:name> + <spirit:displayName>Synthesis</spirit:displayName> + <spirit:envIdentifier>:vivado.xilinx.com:synthesis</spirit:envIdentifier> + <spirit:language>VHDL-2008</spirit:language> + <spirit:modelName>scalp_axi4lite</spirit:modelName> + <spirit:fileSetRef> + <spirit:localName>xilinx_anylanguagesynthesis_view_fileset</spirit:localName> + </spirit:fileSetRef> + <spirit:parameters> + <spirit:parameter> + <spirit:name>viewChecksum</spirit:name> + <spirit:value>53aa3a87</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:view> + <spirit:view> + <spirit:name>xilinx_anylanguagebehavioralsimulation</spirit:name> + <spirit:displayName>Simulation</spirit:displayName> + <spirit:envIdentifier>:vivado.xilinx.com:simulation</spirit:envIdentifier> + <spirit:language>VHDL-2008</spirit:language> + <spirit:modelName>scalp_axi4lite</spirit:modelName> + <spirit:fileSetRef> + <spirit:localName>xilinx_anylanguagebehavioralsimulation_view_fileset</spirit:localName> + </spirit:fileSetRef> + <spirit:parameters> + <spirit:parameter> + <spirit:name>viewChecksum</spirit:name> + <spirit:value>53aa3a87</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:view> + <spirit:view> + <spirit:name>xilinx_xpgui</spirit:name> + <spirit:displayName>UI Layout</spirit:displayName> + <spirit:envIdentifier>:vivado.xilinx.com:xgui.ui</spirit:envIdentifier> + <spirit:fileSetRef> + <spirit:localName>xilinx_xpgui_view_fileset</spirit:localName> + </spirit:fileSetRef> + <spirit:parameters> + <spirit:parameter> + <spirit:name>viewChecksum</spirit:name> + <spirit:value>e83bd4c5</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:view> + </spirit:views> + <spirit:ports> + <spirit:port> + <spirit:name>SAxiClkxCI</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiResetxRANI</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiAWAddrxDI</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_AXI4_AWADDR_SIZE')) - 1)">31</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic_vector</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiAWValidxSI</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiAWReadyxSO</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiWDataxDI</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_AXI4_WDATA_SIZE')) - 1)">31</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic_vector</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiWStrbxDI</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_AXI4_WSTRB_SIZE')) - 1)">3</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic_vector</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiWValidxSI</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiWReadyxSO</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiBRespxDO</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_AXI4_BRESP_SIZE')) - 1)">1</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic_vector</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiBValidxSO</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiBReadyxSI</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiARAddrxDI</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_AXI4_ARADDR_SIZE')) - 1)">31</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic_vector</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiARValidxSI</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiARReadyxSO</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiRDataxDO</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_AXI4_RDATA_SIZE')) - 1)">31</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic_vector</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiRRespxDO</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_AXI4_RRESP_SIZE')) - 1)">1</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic_vector</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiRValidxSO</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>SAxiRReadyxSI</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>WrDataxDO</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_AXI4_DATA_SIZE')) - 1)">31</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic_vector</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>WrAddrxDO</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_AXI4_ADDR_SIZE')) - 1)">11</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic_vector</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>WrValidxSO</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>RdDataxDI</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_AXI4_DATA_SIZE')) - 1)">31</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic_vector</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>RdAddrxDO</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_AXI4_ADDR_SIZE')) - 1)">11</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic_vector</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>RdValidxSO</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>InterruptxSI</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>InterruptxSO</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + </spirit:ports> + <spirit:modelParameters> + <spirit:modelParameter xsi:type="spirit:nameValueTypeType" spirit:dataType="integer"> + <spirit:name>C_AXI4_ARADDR_SIZE</spirit:name> + <spirit:displayName>C Axi4 Araddr Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_AXI4_ARADDR_SIZE">32</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_AXI4_RDATA_SIZE</spirit:name> + <spirit:displayName>C Axi4 Rdata Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_AXI4_RDATA_SIZE">32</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_AXI4_RRESP_SIZE</spirit:name> + <spirit:displayName>C Axi4 Rresp Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_AXI4_RRESP_SIZE">2</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_AXI4_AWADDR_SIZE</spirit:name> + <spirit:displayName>C Axi4 Awaddr Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_AXI4_AWADDR_SIZE">32</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_AXI4_WDATA_SIZE</spirit:name> + <spirit:displayName>C Axi4 Wdata Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_AXI4_WDATA_SIZE">32</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_AXI4_WSTRB_SIZE</spirit:name> + <spirit:displayName>C Axi4 Wstrb Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_AXI4_WSTRB_SIZE">4</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_AXI4_BRESP_SIZE</spirit:name> + <spirit:displayName>C Axi4 Bresp Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_AXI4_BRESP_SIZE">2</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_AXI4_DATA_SIZE</spirit:name> + <spirit:displayName>C Axi4 Data Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_AXI4_DATA_SIZE">32</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="integer"> + <spirit:name>C_AXI4_ADDR_SIZE</spirit:name> + <spirit:displayName>C Axi4 Addr Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_AXI4_ADDR_SIZE">12</spirit:value> + </spirit:modelParameter> + </spirit:modelParameters> + </spirit:model> + <spirit:fileSets> + <spirit:fileSet> + <spirit:name>xilinx_anylanguagesynthesis_view_fileset</spirit:name> + <spirit:file> + <spirit:name>src/hdl/scalp_axi4lite_wr_chan.vhd</spirit:name> + <spirit:userFileType>vhdlSource-2008</spirit:userFileType> + </spirit:file> + <spirit:file> + <spirit:name>src/hdl/scalp_axi4lite_rd_chan.vhd</spirit:name> + <spirit:userFileType>vhdlSource-2008</spirit:userFileType> + </spirit:file> + <spirit:file> + <spirit:name>src/hdl/scalp_axi4lite.vhd</spirit:name> + <spirit:userFileType>vhdlSource-2008</spirit:userFileType> + <spirit:userFileType>CHECKSUM_d16a227c</spirit:userFileType> + </spirit:file> + </spirit:fileSet> + <spirit:fileSet> + <spirit:name>xilinx_anylanguagebehavioralsimulation_view_fileset</spirit:name> + <spirit:file> + <spirit:name>src/hdl/scalp_axi4lite_wr_chan.vhd</spirit:name> + <spirit:userFileType>vhdlSource-2008</spirit:userFileType> + </spirit:file> + <spirit:file> + <spirit:name>src/hdl/scalp_axi4lite_rd_chan.vhd</spirit:name> + <spirit:userFileType>vhdlSource-2008</spirit:userFileType> + </spirit:file> + <spirit:file> + <spirit:name>src/hdl/scalp_axi4lite.vhd</spirit:name> + <spirit:userFileType>vhdlSource-2008</spirit:userFileType> + </spirit:file> + </spirit:fileSet> + <spirit:fileSet> + <spirit:name>xilinx_xpgui_view_fileset</spirit:name> + <spirit:file> + <spirit:name>xgui/scalp_axi4lite_v1_0.tcl</spirit:name> + <spirit:fileType>tclSource</spirit:fileType> + <spirit:userFileType>CHECKSUM_e83bd4c5</spirit:userFileType> + <spirit:userFileType>XGUI_VERSION_2</spirit:userFileType> + </spirit:file> + </spirit:fileSet> + </spirit:fileSets> + <spirit:description>scalp_axi4lite_v1_0</spirit:description> + <spirit:parameters> + <spirit:parameter> + <spirit:name>C_AXI4_ARADDR_SIZE</spirit:name> + <spirit:displayName>C Axi4 Araddr Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_AXI4_ARADDR_SIZE">32</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_AXI4_RDATA_SIZE</spirit:name> + <spirit:displayName>C Axi4 Rdata Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_AXI4_RDATA_SIZE">32</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_AXI4_RRESP_SIZE</spirit:name> + <spirit:displayName>C Axi4 Rresp Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_AXI4_RRESP_SIZE">2</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_AXI4_AWADDR_SIZE</spirit:name> + <spirit:displayName>C Axi4 Awaddr Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_AXI4_AWADDR_SIZE">32</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_AXI4_WDATA_SIZE</spirit:name> + <spirit:displayName>C Axi4 Wdata Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_AXI4_WDATA_SIZE">32</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_AXI4_WSTRB_SIZE</spirit:name> + <spirit:displayName>C Axi4 Wstrb Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_AXI4_WSTRB_SIZE">4</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_AXI4_BRESP_SIZE</spirit:name> + <spirit:displayName>C Axi4 Bresp Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_AXI4_BRESP_SIZE">2</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_AXI4_DATA_SIZE</spirit:name> + <spirit:displayName>C Axi4 Data Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_AXI4_DATA_SIZE">32</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>C_AXI4_ADDR_SIZE</spirit:name> + <spirit:displayName>C Axi4 Addr Size</spirit:displayName> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.C_AXI4_ADDR_SIZE">12</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>Component_Name</spirit:name> + <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.Component_Name" spirit:order="1">scalp_axi4lite_v1_0</spirit:value> + </spirit:parameter> + </spirit:parameters> + <spirit:vendorExtensions> + <xilinx:coreExtensions> + <xilinx:supportedFamilies> + <xilinx:family xilinx:lifeCycle="Production">virtex7</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">qvirtex7</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">kintex7</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">kintex7l</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">qkintex7</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">qkintex7l</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">akintex7</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">artix7</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">artix7l</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">aartix7</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">qartix7</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">zynq</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">qzynq</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">azynq</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">spartan7</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">aspartan7</xilinx:family> + <xilinx:family xilinx:lifeCycle="Production">zynquplus</xilinx:family> + </xilinx:supportedFamilies> + <xilinx:taxonomies> + <xilinx:taxonomy>/UserIP</xilinx:taxonomy> + </xilinx:taxonomies> + <xilinx:displayName>scalp_axi4lite_v1_0</xilinx:displayName> + <xilinx:definitionSource>package_project</xilinx:definitionSource> + <xilinx:vendorDisplayName>Hepia</xilinx:vendorDisplayName> + <xilinx:coreRevision>3</xilinx:coreRevision> + <xilinx:coreCreationDateTime>2020-11-08T08:07:27Z</xilinx:coreCreationDateTime> + <xilinx:tags> + <xilinx:tag xilinx:name="ui.data.coregen.dd@661d7be7_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3770d293_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3cc08629_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6240ef7c_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@764d61c8_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@aef162c_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1c43130f_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3eec6f10_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1d4f5d63_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@49aa5b16_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5a240335_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2156f73b_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@79bed42d_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@72efab1d_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@faf7bca_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@23701745_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3a3abac8_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@34f89f4b_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@2491e005_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@6116b0c5_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@762651b1_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@fd2a4ec_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@34a6c4db_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@35397440_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1cd58fe8_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@44302d14_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4e21b898_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@1d0bb718_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@7dcc405a_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@8c0afdb_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@4ec6e2b5_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@5f71c732_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + <xilinx:tag xilinx:name="ui.data.coregen.dd@3ea4c95a_ARCHIVE_LOCATION">/home/jo/Documents/Projets/Hepia/scalp_firmware/ips/hw/scalp_axi4lite</xilinx:tag> + </xilinx:tags> + </xilinx:coreExtensions> + <xilinx:packagingInfo> + <xilinx:xilinxVersion>2019.2</xilinx:xilinxVersion> + <xilinx:checksum xilinx:scope="busInterfaces" xilinx:value="b913313a"/> + <xilinx:checksum xilinx:scope="memoryMaps" xilinx:value="5bb05b05"/> + <xilinx:checksum xilinx:scope="fileGroups" xilinx:value="4322a235"/> + <xilinx:checksum xilinx:scope="ports" xilinx:value="302dc023"/> + <xilinx:checksum xilinx:scope="hdlParameters" xilinx:value="2709f17e"/> + <xilinx:checksum xilinx:scope="parameters" xilinx:value="cedefa4e"/> + </xilinx:packagingInfo> + </spirit:vendorExtensions> +</spirit:component> diff --git a/ips/hw/scalp_axi4lite/src/hdl/scalp_axi4lite.vhd b/ips/hw/scalp_axi4lite/src/hdl/scalp_axi4lite.vhd new file mode 100644 index 0000000000000000000000000000000000000000..f74e046ec75fdb58d551695957655cc3dcf89d97 --- /dev/null +++ b/ips/hw/scalp_axi4lite/src/hdl/scalp_axi4lite.vhd @@ -0,0 +1,229 @@ +---------------------------------------------------------------------------------- +-- _ _ +-- | |_ ___ _ __(_)__ _ +-- | ' \/ -_) '_ \ / _` | +-- |_||_\___| .__/_\__,_| +-- |_| +-- +---------------------------------------------------------------------------------- +-- +-- Company: hepia +-- Author: Joachim Schmidt <joachim.schmidt@hesge.ch +-- +-- Module Name: scalp_axi4lite - arch +-- Target Device: SCALP xc7z015clg485-2 +-- Tool version: 2019.2 +-- Description: scalp_axi4lite +-- +-- Last update: 2020-11-08 +-- +--------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use ieee.std_logic_unsigned.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_misc.all; + +library UNISIM; +use UNISIM.VCOMPONENTS.all; + +entity scalp_axi4lite is + + generic ( + C_AXI4_ARADDR_SIZE : integer := 32; + C_AXI4_RDATA_SIZE : integer := 32; + C_AXI4_RRESP_SIZE : integer := 2; + C_AXI4_AWADDR_SIZE : integer := 32; + C_AXI4_WDATA_SIZE : integer := 32; + C_AXI4_WSTRB_SIZE : integer := 4; + C_AXI4_BRESP_SIZE : integer := 2; + C_AXI4_DATA_SIZE : integer := 32; + C_AXI4_ADDR_SIZE : integer := 12); + + port ( + -- Clock and Reset + SAxiClkxCI : in std_logic; + SAxiResetxRANI : in std_logic; + -- Write Channel + -- Write Address Channel + SAxiAWAddrxDI : in std_logic_vector((C_AXI4_AWADDR_SIZE - 1) downto 0); + SAxiAWValidxSI : in std_logic; + SAxiAWReadyxSO : out std_logic; + -- Write Data Channel + SAxiWDataxDI : in std_logic_vector((C_AXI4_WDATA_SIZE - 1) downto 0); + SAxiWStrbxDI : in std_logic_vector((C_AXI4_WSTRB_SIZE - 1) downto 0); + SAxiWValidxSI : in std_logic; + SAxiWReadyxSO : out std_logic; + -- Write Response Channel + SAxiBRespxDO : out std_logic_vector((C_AXI4_BRESP_SIZE - 1) downto 0); + SAxiBValidxSO : out std_logic; + SAxiBReadyxSI : in std_logic; + -- Read Channel + -- Read Address Channel + SAxiARAddrxDI : in std_logic_vector((C_AXI4_ARADDR_SIZE - 1) downto 0); + SAxiARValidxSI : in std_logic; + SAxiARReadyxSO : out std_logic; + -- Read Data Channel + SAxiRDataxDO : out std_logic_vector((C_AXI4_RDATA_SIZE - 1) downto 0); + SAxiRRespxDO : out std_logic_vector((C_AXI4_RRESP_SIZE - 1) downto 0); + SAxiRValidxSO : out std_logic; + SAxiRReadyxSI : in std_logic; + -- Signal for Writing in a Register Bank + WrDataxDO : out std_logic_vector((C_AXI4_DATA_SIZE - 1) downto 0); + WrAddrxDO : out std_logic_vector((C_AXI4_ADDR_SIZE - 1) downto 0); + WrValidxSO : out std_logic; + -- Signal for Reading in a Register Bank + RdDataxDI : in std_logic_vector((C_AXI4_DATA_SIZE - 1) downto 0); + RdAddrxDO : out std_logic_vector((C_AXI4_ADDR_SIZE - 1) downto 0); + RdValidxSO : out std_logic; + -- Interrupt Interface + InterruptxSI : in std_logic; + InterruptxSO : out std_logic); + +end scalp_axi4lite; + + +architecture arch of scalp_axi4lite is + + -- Components + component scalp_axi4lite_wr_chan is + generic ( + C_AXI4_AWADDR_SIZE : integer; + C_AXI4_WDATA_SIZE : integer; + C_AXI4_WSTRB_SIZE : integer; + C_AXI4_BRESP_SIZE : integer; + C_AXI4_DATA_SIZE : integer; + C_AXI4_ADDR_SIZE : integer); + port ( + -- Clock and Reset + SAxiClkxCI : in std_logic; + SAxiResetxRANI : in std_logic; + -- Write Address Channel + SAxiAWAddrxDI : in std_logic_vector((C_AXI4_AWADDR_SIZE - 1) downto 0); + SAxiAWValidxSI : in std_logic; + SAxiAWReadyxSO : out std_logic; + -- Write Data Channel + SAxiWDataxDI : in std_logic_vector((C_AXI4_WDATA_SIZE - 1) downto 0); + SAxiWStrbxDI : in std_logic_vector((C_AXI4_WSTRB_SIZE - 1) downto 0); + SAxiWValidxSI : in std_logic; + SAxiWReadyxSO : out std_logic; + -- Write Response Channel + SAxiBRespxDO : out std_logic_vector((C_AXI4_BRESP_SIZE - 1) downto 0); + SAxiBValidxSO : out std_logic; + SAxiBReadyxSI : in std_logic; + -- Signal for Writing in a Register Bank + DataxDO : out std_logic_vector((C_AXI4_DATA_SIZE - 1) downto 0); + AddrxDO : out std_logic_vector((C_AXI4_ADDR_SIZE - 1) downto 0); + ValidxSO : out std_logic); + end component scalp_axi4lite_wr_chan; + + component scalp_axi4lite_rd_chan is + generic ( + C_AXI4_ARADDR_SIZE : integer; + C_AXI4_RDATA_SIZE : integer; + C_AXI4_RRESP_SIZE : integer; + C_AXI4_DATA_SIZE : integer; + C_AXI4_ADDR_SIZE : integer); + port ( + SAxiClkxCI : in std_logic; + SAxiResetxRANI : in std_logic; + SAxiARAddrxDI : in std_logic_vector((C_AXI4_ARADDR_SIZE - 1) downto 0); + SAxiARValidxSI : in std_logic; + SAxiARReadyxSO : out std_logic; + SAxiRDataxDO : out std_logic_vector((C_AXI4_RDATA_SIZE - 1) downto 0); + SAxiRRespxDO : out std_logic_vector((C_AXI4_RRESP_SIZE - 1) downto 0); + SAxiRValidxSO : out std_logic; + SAxiRReadyxSI : in std_logic; + DataxDI : in std_logic_vector((C_AXI4_DATA_SIZE - 1) downto 0); + AddrxDO : out std_logic_vector((C_AXI4_ADDR_SIZE - 1) downto 0); + ValidxSO : out std_logic); + end component scalp_axi4lite_rd_chan; + +begin -- architecture rtl + + -- Asynchronous statements + + assert C_AXI4_RDATA_SIZE = C_AXI4_DATA_SIZE + report "RDATA and DATA vectors must be the same" severity failure; + + assert C_AXI4_ARADDR_SIZE >= C_AXI4_ADDR_SIZE + report "ARADDR and ADDR vectors must be the same" severity failure; + + assert C_AXI4_WDATA_SIZE = C_AXI4_DATA_SIZE + report "WDATA and DATA vectors must be the same" severity failure; + + assert C_AXI4_AWADDR_SIZE >= C_AXI4_ADDR_SIZE + report "AWADDR and ADDR vectors must be the same" severity failure; + + InterruptxB : block is + begin -- block InterruptxB + + InterruptxSO <= InterruptxSI; + + end block InterruptxB; + + -- Synchronous statements + + ScalpAxi4LitexB : block is + begin -- block ScalpAxi4LitexB + + ScalpAxi4LiteWrChanxI : entity work.scalp_axi4lite_wr_chan + generic map ( + C_AXI4_AWADDR_SIZE => C_AXI4_AWADDR_SIZE, + C_AXI4_WDATA_SIZE => C_AXI4_WDATA_SIZE, + C_AXI4_WSTRB_SIZE => C_AXI4_WSTRB_SIZE, + C_AXI4_BRESP_SIZE => C_AXI4_BRESP_SIZE, + C_AXI4_DATA_SIZE => C_AXI4_DATA_SIZE, + C_AXI4_ADDR_SIZE => C_AXI4_ADDR_SIZE) + port map ( + -- Clock and Reset + SAxiClkxCI => SAxiClkxCI, + SAxiResetxRANI => SAxiResetxRANI, + -- Write Address Channel + SAxiAWAddrxDI => SAxiAWAddrxDI, + SAxiAWValidxSI => SAxiAWValidxSI, + SAxiAWReadyxSO => SAxiAWReadyxSO, + -- Write Data Channel + SAxiWDataxDI => SAxiWDataxDI, + SAxiWStrbxDI => SAxiWStrbxDI, + SAxiWValidxSI => SAxiWValidxSI, + SAxiWReadyxSO => SAxiWReadyxSO, + -- Write Response Channel + SAxiBRespxDO => SAxiBRespxDO, + SAxiBValidxSO => SAxiBValidxSO, + SAxiBReadyxSI => SAxiBReadyxSI, + -- Signal for Writing in a Register Bank + DataxDO => WrDataxDO, + AddrxDO => WrAddrxDO, + ValidxSO => WrValidxSO); + + ScalpAxi4LiteRdChanxI : entity work.scalp_axi4lite_rd_chan + generic map ( + C_AXI4_ARADDR_SIZE => C_AXI4_ARADDR_SIZE, + C_AXI4_RDATA_SIZE => C_AXI4_RDATA_SIZE, + C_AXI4_RRESP_SIZE => C_AXI4_RRESP_SIZE, + C_AXI4_DATA_SIZE => C_AXI4_DATA_SIZE, + C_AXI4_ADDR_SIZE => C_AXI4_ADDR_SIZE) + port map ( + -- Clock and Reset + SAxiClkxCI => SAxiClkxCI, + SAxiResetxRANI => SAxiResetxRANI, + -- Read Address Channel + SAxiARAddrxDI => SAxiARAddrxDI, + SAxiARValidxSI => SAxiARValidxSI, + SAxiARReadyxSO => SAxiARReadyxSO, + -- Read Data Channel + SAxiRDataxDO => SAxiRDataxDO, + SAxiRRespxDO => SAxiRRespxDO, + SAxiRValidxSO => SAxiRValidxSO, + SAxiRReadyxSI => SAxiRReadyxSI, + -- Signal for Reading in a Register Bank + DataxDI => RdDataxDI, + AddrxDO => RdAddrxDO, + ValidxSO => RdValidxSO); + + end block ScalpAxi4LitexB; + +end arch; diff --git a/ips/hw/scalp_axi4lite/src/hdl/scalp_axi4lite_rd_chan.vhd b/ips/hw/scalp_axi4lite/src/hdl/scalp_axi4lite_rd_chan.vhd new file mode 100644 index 0000000000000000000000000000000000000000..4026e86a3041a527bb53bd4a8972de40cf493fec --- /dev/null +++ b/ips/hw/scalp_axi4lite/src/hdl/scalp_axi4lite_rd_chan.vhd @@ -0,0 +1,198 @@ +---------------------------------------------------------------------------------- +-- _ _ +-- | |_ ___ _ __(_)__ _ +-- | ' \/ -_) '_ \ / _` | +-- |_||_\___| .__/_\__,_| +-- |_| +-- +---------------------------------------------------------------------------------- +-- +-- Company: hepia +-- Author: Joachim Schmidt <joachim.schmidt@hesge.ch> +-- +-- Module Name: scalp_axi4lite_rd_chan - behavioural +-- Target Device: All +-- Tool version: 2019.2 +-- Description: AXI4 Lite Read Channel Slave Side +-- +-- Last update: 2020-11-08 +-- +--------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use ieee.std_logic_unsigned.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_misc.all; + +library UNISIM; +use UNISIM.VCOMPONENTS.all; + +entity scalp_axi4lite_rd_chan is + + generic ( + C_AXI4_ARADDR_SIZE : integer := 32; + C_AXI4_RDATA_SIZE : integer := 32; + C_AXI4_RRESP_SIZE : integer := 2; + C_AXI4_DATA_SIZE : integer := 32; + C_AXI4_ADDR_SIZE : integer := 12); + + port ( + -- Clock and Reset + SAxiClkxCI : in std_logic; + SAxiResetxRANI : in std_logic; + -- Read Address Channel + SAxiARAddrxDI : in std_logic_vector((C_AXI4_ARADDR_SIZE - 1) downto 0); + SAxiARValidxSI : in std_logic; + SAxiARReadyxSO : out std_logic; + -- Read Data Channel + SAxiRDataxDO : out std_logic_vector((C_AXI4_RDATA_SIZE - 1) downto 0); + SAxiRRespxDO : out std_logic_vector((C_AXI4_RRESP_SIZE - 1) downto 0); + SAxiRValidxSO : out std_logic; + SAxiRReadyxSI : in std_logic; + -- Signal for Reading in a Register Bank + DataxDI : in std_logic_vector((C_AXI4_DATA_SIZE - 1) downto 0); + AddrxDO : out std_logic_vector((C_AXI4_ADDR_SIZE - 1) downto 0); + ValidxSO : out std_logic); + +end entity scalp_axi4lite_rd_chan; + +architecture behavioural of scalp_axi4lite_rd_chan is + + -- Constants + constant C_AXI4_RRESP_OKAY : std_logic_vector((C_AXI4_RRESP_SIZE - 1) downto 0) := "00"; + constant C_AXI4_RRESP_EXOKAY : std_logic_vector((C_AXI4_RRESP_SIZE - 1) downto 0) := "01"; + constant C_AXI4_RRESP_SLVERR : std_logic_vector((C_AXI4_RRESP_SIZE - 1) downto 0) := "10"; + constant C_AXI4_RRESP_DECERR : std_logic_vector((C_AXI4_RRESP_SIZE - 1) downto 0) := "11"; + + -- Signals + signal SAxiARReadyxS : std_logic := '0'; + signal SAxiRValidxS : std_logic := '0'; + -- signal SAxiRDataxD : std_logic_vector((C_AXI4_RDATA_SIZE - 1) downto 0) := (others => '0'); + -- signal SAxiRRespxD : std_logic_vector((C_AXI4_RRESP_SIZE - 1) downto 0) := C_AXI4_RRESP_OKAY; + +begin -- architecture behavioural + + -- Asynchronous statements + + assert C_AXI4_RDATA_SIZE = C_AXI4_DATA_SIZE + report "RDATA and DATA vectors must be the same" severity failure; + + assert C_AXI4_ARADDR_SIZE >= C_AXI4_ADDR_SIZE + report "ARADDR and ADDR vectors must be the same" severity failure; + + -- DebugxB : block is + + -- -- Debug Signals + -- signal DebugSAxiARAddrxD : std_logic_vector((C_AXI4_ARADDR_SIZE - 1) downto 0) := (others => '0'); + -- signal DebugSAxiARValidxS : std_logic := '0'; + -- signal DebugSAxiARReadyxS : std_logic := '0'; + -- signal DebugSAxiRDataxD : std_logic_vector((C_AXI4_RDATA_SIZE - 1) downto 0) := (others => '0'); + -- signal DebugSAxiRRespxD : std_logic_vector((C_AXI4_RRESP_SIZE - 1) downto 0) := (others => '0'); + -- signal DebugSAxiRValidxS : std_logic := '0'; + -- signal DebugSAxiRReadyxS : std_logic := '0'; + -- signal DebugRdDataxD : std_logic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0'); + -- signal DebugRdAddrxD : std_logic_vector((C_AXI4_ADDR_SIZE - 1) downto 0) := (others => '0'); + -- signal DebugRdValidxS : std_logic := '0'; + + -- -- Debug Attributes + -- -- Attributes Declaration + -- attribute keep : string; + -- attribute mark_debug : string; + -- -- Attributes Specification + -- attribute keep of DebugSAxiARAddrxD : signal is "true"; + -- attribute mark_debug of DebugSAxiARAddrxD : signal is "true"; + -- attribute keep of DebugSAxiARValidxS : signal is "true"; + -- attribute mark_debug of DebugSAxiARValidxS : signal is "true"; + -- attribute keep of DebugSAxiARReadyxS : signal is "true"; + -- attribute mark_debug of DebugSAxiARReadyxS : signal is "true"; + -- attribute keep of DebugSAxiRDataxD : signal is "true"; + -- attribute mark_debug of DebugSAxiRDataxD : signal is "true"; + -- attribute keep of DebugSAxiRRespxD : signal is "true"; + -- attribute mark_debug of DebugSAxiRRespxD : signal is "true"; + -- attribute keep of DebugSAxiRValidxS : signal is "true"; + -- attribute mark_debug of DebugSAxiRValidxS : signal is "true"; + -- attribute keep of DebugSAxiRReadyxS : signal is "true"; + -- attribute mark_debug of DebugSAxiRReadyxS : signal is "true"; + -- attribute keep of DebugRdDataxD : signal is "true"; + -- attribute mark_debug of DebugRdDataxD : signal is "true"; + -- attribute keep of DebugRdAddrxD : signal is "true"; + -- attribute mark_debug of DebugRdAddrxD : signal is "true"; + -- attribute keep of DebugRdValidxS : signal is "true"; + -- attribute mark_debug of DebugRdValidxS : signal is "true"; + + -- begin -- block DebugxB + + -- DebugSAxiARAddrxAS : DebugSAxiARAddrxD <= SAxiARAddrxDI; + -- DebugSAxiARValidxAS : DebugSAxiARValidxS <= SAxiARValidxSI; + -- DebugSAxiARReadyxAS : DebugSAxiARReadyxS <= SAxiARReadyxS; + -- DebugSAxiRDataxAS : DebugSAxiRDataxD <= DataxDI; + -- DebugSAxiRRespxAS : DebugSAxiRRespxD <= C_AXI4_RRESP_OKAY; + -- DebugSAxiRValidxAS : DebugSAxiRValidxS <= SAxiRValidxS; + -- DebugSAxiRReadyxAS : DebugSAxiRReadyxS <= SAxiRReadyxSI; + -- DebugDataxAS : DebugRdDataxD <= DataxDI; + -- DebugAddrxAS : DebugRdAddrxD((C_AXI4_ADDR_SIZE - 1) downto 0) <= SAxiARAddrxDI((C_AXI4_ADDR_SIZE - 1) downto 0); + -- DebugValidxAS : DebugRdValidxS <= SAxiARValidxSI; + + -- end block DebugxB; + + IOEntityxB : block is + begin -- block IOEntityxB + + SAxiARReadyxAS : SAxiARReadyxSO <= SAxiARReadyxS; + SAxiRValidxAS : SAxiRValidxSO <= SAxiRValidxS; + SAxiRDataxAS : SAxiRDataxDO <= DataxDI; + ValidxAS : ValidxSO <= SAxiARValidxSI; -- + --SAxiRValidxS; + AddrxAS : AddrxDO((C_AXI4_ADDR_SIZE - 1) downto 0) <= SAxiARAddrxDI((C_AXI4_ADDR_SIZE - 1) downto 0); + SAxiRRespxAS : SAxiRRespxDO <= C_AXI4_RRESP_OKAY; + + end block IOEntityxB; + + -- Synchronous statements + + ReadAddrChanxP : process (SAxiClkxCI, SAxiResetxRANI) is + + variable StateAfterResetxS : boolean := true; + + begin -- process ReadAddrChanxP + if SAxiResetxRANI = '0' then + SAxiARReadyxS <= '0'; + StateAfterResetxS := true; + elsif rising_edge(SAxiClkxCI) then + if StateAfterResetxS = true then + SAxiARReadyxS <= '1'; + StateAfterResetxS := false; + else + SAxiARReadyxS <= SAxiARReadyxS; + end if; + + if SAxiARValidxSI = '1' then + SAxiARReadyxS <= '0'; + end if; + + if SAxiARReadyxS <= '0' and SAxiRReadyxSI = '1' then + SAxiARReadyxS <= '1'; + end if; + end if; + end process ReadAddrChanxP; + + ReadDataChanxP : process (SAxiClkxCI, SAxiResetxRANI) is + begin -- process ReadDataChanxP + if SAxiResetxRANI = '0' then + SAxiRValidxS <= '0'; + elsif rising_edge(SAxiClkxCI) then + SAxiRValidxS <= SAxiRValidxS; + + if SAxiARValidxSI = '1' and SAxiARReadyxS = '1' then + SAxiRValidxS <= '1'; + end if; + + if SAxiRValidxS = '1' and SAxiRReadyxSI = '1' then + SAxiRValidxS <= '0'; + end if; + end if; + end process ReadDataChanxP; + +end architecture behavioural; diff --git a/ips/hw/scalp_axi4lite/src/hdl/scalp_axi4lite_wr_chan.vhd b/ips/hw/scalp_axi4lite/src/hdl/scalp_axi4lite_wr_chan.vhd new file mode 100644 index 0000000000000000000000000000000000000000..4f0a870578789d61b67acd2fde17cccd706929bb --- /dev/null +++ b/ips/hw/scalp_axi4lite/src/hdl/scalp_axi4lite_wr_chan.vhd @@ -0,0 +1,247 @@ +---------------------------------------------------------------------------------- +-- _ _ +-- | |_ ___ _ __(_)__ _ +-- | ' \/ -_) '_ \ / _` | +-- |_||_\___| .__/_\__,_| +-- |_| +-- +---------------------------------------------------------------------------------- +-- +-- Company: hepia +-- Author: Joachim Schmidt <joachim.schmidt@hesge.ch> +-- +-- Module Name: scalp_axi4lite_wr_chan - behavioural +-- Target Device: All +-- Tool version: 2019.2 +-- Description: AXI4 Lite Write Channel Slave Side +-- +-- Last update: 2020-11-08 +-- +--------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use ieee.std_logic_unsigned.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_misc.all; + +library UNISIM; +use UNISIM.VCOMPONENTS.all; + +entity scalp_axi4lite_wr_chan is + + generic ( + C_AXI4_AWADDR_SIZE : integer := 32; + C_AXI4_WDATA_SIZE : integer := 32; + C_AXI4_WSTRB_SIZE : integer := 4; + C_AXI4_BRESP_SIZE : integer := 2; + C_AXI4_DATA_SIZE : integer := 32; + C_AXI4_ADDR_SIZE : integer := 12); + + port ( + -- Clock and Reset + SAxiClkxCI : in std_logic; + SAxiResetxRANI : in std_logic; + -- Write Address Channel + SAxiAWAddrxDI : in std_logic_vector((C_AXI4_AWADDR_SIZE - 1) downto 0); + SAxiAWValidxSI : in std_logic; + SAxiAWReadyxSO : out std_logic; + -- Write Data Channel + SAxiWDataxDI : in std_logic_vector((C_AXI4_WDATA_SIZE - 1) downto 0); + SAxiWStrbxDI : in std_logic_vector((C_AXI4_WSTRB_SIZE - 1) downto 0); + SAxiWValidxSI : in std_logic; + SAxiWReadyxSO : out std_logic; + -- Write Response Channel + SAxiBRespxDO : out std_logic_vector((C_AXI4_BRESP_SIZE - 1) downto 0); + SAxiBValidxSO : out std_logic; + SAxiBReadyxSI : in std_logic; + -- Signal for Writing in a Register Bank + DataxDO : out std_logic_vector((C_AXI4_DATA_SIZE - 1) downto 0); + AddrxDO : out std_logic_vector((C_AXI4_ADDR_SIZE - 1) downto 0); + ValidxSO : out std_logic); + +end entity scalp_axi4lite_wr_chan; + +architecture behavioural of scalp_axi4lite_wr_chan is + + -- Constants + constant C_AXI4_BRESP_OKAY : std_logic_vector((C_AXI4_BRESP_SIZE - 1) downto 0) := "00"; + constant C_AXI4_BRESP_EXOKAY : std_logic_vector((C_AXI4_BRESP_SIZE - 1) downto 0) := "01"; + constant C_AXI4_BRESP_SLVERR : std_logic_vector((C_AXI4_BRESP_SIZE - 1) downto 0) := "10"; + constant C_AXI4_BRESP_DECERR : std_logic_vector((C_AXI4_BRESP_SIZE - 1) downto 0) := "11"; + + -- Signals + -- signal SAxiBRespxD : std_logic_vector((C_AXI4_BRESP_SIZE - 1) downto 0) := (others => '0'); + signal SAxiBValidxS : std_logic := '0'; + signal SAxiWReadyxS : std_logic := '0'; + signal SAxiAWReadyxS : std_logic := '0'; + signal AddrxDN : std_logic_vector((C_AXI4_ADDR_SIZE - 1) downto 0) := (others => '0'); + signal AddrxDP : std_logic_vector((C_AXI4_ADDR_SIZE - 1) downto 0) := (others => '0'); + +begin -- architecture behavioural + + -- Asynchronous statements + + assert C_AXI4_WDATA_SIZE = C_AXI4_DATA_SIZE + report "WDATA and DATA vectors must be the same" severity failure; + + assert C_AXI4_AWADDR_SIZE >= C_AXI4_ADDR_SIZE + report "AWADDR and ADDR vectors must be the same" severity failure; + + -- DebugxB : block is + + -- -- Debug Signals + -- signal DebugSAxiAWAddrxD : std_logic_vector((C_AXI4_AWADDR_SIZE - 1) downto 0) := (others => '0'); + -- signal DebugSAxiAWValidxS : std_logic := '0'; + -- signal DebugSAxiAWReadyxS : std_logic := '0'; + -- signal DebugSAxiWDataxD : std_logic_vector((C_AXI4_WDATA_SIZE - 1) downto 0) := (others => '0'); + -- signal DebugSAxiWStrbxD : std_logic_vector((C_AXI4_WSTRB_SIZE - 1) downto 0) := (others => '0'); + -- signal DebugSAxiWValidxS : std_logic := '0'; + -- signal DebugSAxiWReadyxS : std_logic := '0'; + -- signal DebugSAxiBRespxD : std_logic_vector((C_AXI4_BRESP_SIZE - 1) downto 0) := (others => '0'); + -- signal DebugSAxiBValidxS : std_logic := '0'; + -- signal DebugSAxiBReadyxS : std_logic := '0'; + -- signal DebugWrDataxD : std_logic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0'); + -- signal DebugWrAddrxD : std_logic_vector((C_AXI4_ADDR_SIZE - 1) downto 0) := (others => '0'); + -- signal DebugWrValidxS : std_logic := '0'; + + -- -- Debug Attributes + -- -- Attributes Declaration + -- attribute keep : string; + -- attribute mark_debug : string; + -- -- Attributes Specification + -- attribute keep of DebugSAxiAWAddrxD : signal is "true"; + -- attribute mark_debug of DebugSAxiAWAddrxD : signal is "true"; + -- attribute keep of DebugSAxiAWValidxS : signal is "true"; + -- attribute mark_debug of DebugSAxiAWValidxS : signal is "true"; + -- attribute keep of DebugSAxiAWReadyxS : signal is "true"; + -- attribute mark_debug of DebugSAxiAWReadyxS : signal is "true"; + -- attribute keep of DebugSAxiWDataxD : signal is "true"; + -- attribute mark_debug of DebugSAxiWDataxD : signal is "true"; + -- attribute keep of DebugSAxiWStrbxD : signal is "true"; + -- attribute mark_debug of DebugSAxiWStrbxD : signal is "true"; + -- attribute keep of DebugSAxiWValidxS : signal is "true"; + -- attribute mark_debug of DebugSAxiWValidxS : signal is "true"; + -- attribute keep of DebugSAxiWReadyxS : signal is "true"; + -- attribute mark_debug of DebugSAxiWReadyxS : signal is "true"; + -- attribute keep of DebugSAxiBRespxD : signal is "true"; + -- attribute mark_debug of DebugSAxiBRespxD : signal is "true"; + -- attribute keep of DebugSAxiBValidxS : signal is "true"; + -- attribute mark_debug of DebugSAxiBValidxS : signal is "true"; + -- attribute keep of DebugSAxiBReadyxS : signal is "true"; + -- attribute mark_debug of DebugSAxiBReadyxS : signal is "true"; + -- attribute keep of DebugWrDataxD : signal is "true"; + -- attribute mark_debug of DebugWrDataxD : signal is "true"; + -- attribute keep of DebugWrAddrxD : signal is "true"; + -- attribute mark_debug of DebugWrAddrxD : signal is "true"; + -- attribute keep of DebugWrValidxS : signal is "true"; + -- attribute mark_debug of DebugWrValidxS : signal is "true"; + + -- begin -- block DebugxB + + -- DebugSAxiAWAddrxAS : DebugSAxiAWAddrxD <= SAxiAWAddrxDI; + -- DebugSAxiAWValidxAS : DebugSAxiAWValidxS <= SAxiAWValidxSI; + -- DebugSAxiAWReadyxAS : DebugSAxiAWReadyxS <= SAxiAWReadyxS; + -- DebugSAxiWDataxAS : DebugSAxiWDataxD <= SAxiWDataxDI; + -- DebugSAxiWStrbxAS : DebugSAxiWStrbxD <= SAxiWStrbxDI; + -- DebugSAxiWValidxAS : DebugSAxiWValidxS <= SAxiWValidxSI; + -- DebugSAxiWReadyxAS : DebugSAxiWReadyxS <= SAxiWReadyxS; + -- DebugSAxiBRespxAS : DebugSAxiBRespxD <= C_AXI4_BRESP_OKAY; + -- DebugSAxiBValidxAS : DebugSAxiBValidxS <= SAxiBValidxS; + -- DebugSAxiBReadyxAS : DebugSAxiBReadyxS <= SAxiBReadyxSI; + -- DebugWrDataxAS : DebugWrDataxD <= SAxiWDataxDI; + -- DebugWrAddrxAS : DebugWrAddrxD((C_AXI4_ADDR_SIZE - 1) downto 0) <= AddrxDP((C_AXI4_ADDR_SIZE - 1) downto 0); + -- DebugWrValidxAS : DebugWrValidxS <= SAxiWValidxSI; + + -- end block DebugxB; + + IOEntityxB : block is + begin -- block IOEntityxB + + SAxiBRespxAS : SAxiBRespxDO <= C_AXI4_BRESP_OKAY; + SAxiBValidxAS : SAxiBValidxSO <= SAxiBValidxS; + SAxiWReadyxAS : SAxiWReadyxSO <= SAxiWReadyxS; + SAxiAWReadyxAS : SAxiAWReadyxSO <= SAxiAWReadyxS; + ValidxAS : ValidxSO <= SAxiWValidxSI; + DataxAS : DataxDO <= SAxiWDataxDI; + AddrOutxAS : AddrxDO <= AddrxDP; + AddrxAS : AddrxDN((C_AXI4_ADDR_SIZE - 1) downto 0) <= SAxiAWAddrxDI((C_AXI4_ADDR_SIZE - 1) downto 0) when + SAxiAWValidxSI = '1' else + AddrxDP((C_AXI4_ADDR_SIZE - 1) downto 0); + -- AddrxAS : AddrxDO((C_AXI4_ADDR_SIZE - 1) downto 0) <= SAxiAWAddrxDI((C_AXI4_ADDR_SIZE - 1) downto 0); + + end block IOEntityxB; + + -- Synchronous statements + + AddrRegxP : process (SAxiClkxCI, SAxiResetxRANI) is + begin -- process AddrRegxP + if SAxiResetxRANI = '0' then + AddrxDP <= (others => '0'); + elsif rising_edge(SAxiClkxCI) then + AddrxDP <= AddrxDN; + end if; + end process AddrRegxP; + + WriteAddrChanxP : process (SAxiClkxCI, SAxiResetxRANI) is + + variable StateAfterResetxS : boolean := true; + + begin -- process WriteAddrChanxP + if SAxiResetxRANI = '0' then + SAxiAWReadyxS <= '0'; + StateAfterResetxS := true; + elsif rising_edge(SAxiClkxCI) then + if StateAfterResetxS = true then + SAxiAWReadyxS <= '1'; + StateAfterResetxS := false; + else + SAxiAWReadyxS <= SAxiAWReadyxS; + end if; + + if SAxiAWValidxSI = '1' then + SAxiAWReadyxS <= '0'; + end if; + + if SAxiWValidxSI = '1' then + SAxiAWReadyxS <= '1'; + end if; + end if; + end process WriteAddrChanxP; + + WriteDataChanxP : process (SAxiClkxCI, SAxiResetxRANI) is + begin -- process WriteDataChanxP + if SAxiResetxRANI = '0' then + SAxiWReadyxS <= '0'; + elsif rising_edge(SAxiClkxCI) then + SAxiWReadyxS <= SAxiWReadyxS; + + if SAxiAWValidxSI = '1' and SAxiAWReadyxS = '1' then + SAxiWReadyxS <= '1'; + end if; + + if SAxiWValidxSI = '1' and SAxiWReadyxS = '1' then + SAxiWReadyxS <= '0'; + end if; + end if; + end process WriteDataChanxP; + + WriteRespChanxP : process (SAxiClkxCI, SAxiResetxRANI) is + begin -- process WriteRespChanxP + if SAxiResetxRANI = '0' then + SAxiBValidxS <= '0'; + elsif rising_edge(SAxiClkxCI) then + SAxiBValidxS <= SAxiBValidxS; + + if SAxiWValidxSI = '1' and SAxiWReadyxS = '1' then + SAxiBValidxS <= '1'; + end if; + + if SAxiBValidxS = '1' and SAxiBReadyxSI = '1' then + SAxiBValidxS <= '0'; + end if; + end if; + end process WriteRespChanxP; + +end architecture behavioural; diff --git a/ips/hw/scalp_axi4lite/src/sim/tb_scalp_axi4lite.vhd b/ips/hw/scalp_axi4lite/src/sim/tb_scalp_axi4lite.vhd new file mode 100644 index 0000000000000000000000000000000000000000..5a61f73d0e6b2f574a90b47a60b2894baf64072b --- /dev/null +++ b/ips/hw/scalp_axi4lite/src/sim/tb_scalp_axi4lite.vhd @@ -0,0 +1,34 @@ +---------------------------------------------------------------------------------- +-- _ _ +-- | |_ ___ _ __(_)__ _ +-- | ' \/ -_) '_ \ / _` | +-- |_||_\___| .__/_\__,_| +-- |_| +-- +---------------------------------------------------------------------------------- +-- +-- Company: hepia +-- Author: Joachim Schmidt <joachim.schmidt@hesge.ch +-- +-- Module Name: tb_scalp_axi4lite - arch +-- Target Device: SCALP xc7z015clg485-2 +-- Tool version: 2019.2 +-- Description: Testbench for scalp_axi4lite +-- +-- Last update: 2020-11-08 07:53:10 +-- +--------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity tb_scalp_axi4lite is +end tb_scalp_axi4lite; + + +architecture behavioral of tb_scalp_axi4lite is + +begin + +end behavioral; diff --git a/ips/hw/scalp_axi4lite/xgui/scalp_axi4lite_v1_0.tcl b/ips/hw/scalp_axi4lite/xgui/scalp_axi4lite_v1_0.tcl new file mode 100644 index 0000000000000000000000000000000000000000..f9f3a79fd14cd78e3e92794c9f24aa9217fd2090 --- /dev/null +++ b/ips/hw/scalp_axi4lite/xgui/scalp_axi4lite_v1_0.tcl @@ -0,0 +1,145 @@ +# Definitional proc to organize widgets for parameters. +proc init_gui { IPINST } { + ipgui::add_param $IPINST -name "Component_Name" + #Adding Page + set Page_0 [ipgui::add_page $IPINST -name "Page 0"] + ipgui::add_param $IPINST -name "C_AXI4_ADDR_SIZE" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_AXI4_ARADDR_SIZE" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_AXI4_AWADDR_SIZE" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_AXI4_BRESP_SIZE" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_AXI4_DATA_SIZE" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_AXI4_RDATA_SIZE" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_AXI4_RRESP_SIZE" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_AXI4_WDATA_SIZE" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_AXI4_WSTRB_SIZE" -parent ${Page_0} + + +} + +proc update_PARAM_VALUE.C_AXI4_ADDR_SIZE { PARAM_VALUE.C_AXI4_ADDR_SIZE } { + # Procedure called to update C_AXI4_ADDR_SIZE when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_AXI4_ADDR_SIZE { PARAM_VALUE.C_AXI4_ADDR_SIZE } { + # Procedure called to validate C_AXI4_ADDR_SIZE + return true +} + +proc update_PARAM_VALUE.C_AXI4_ARADDR_SIZE { PARAM_VALUE.C_AXI4_ARADDR_SIZE } { + # Procedure called to update C_AXI4_ARADDR_SIZE when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_AXI4_ARADDR_SIZE { PARAM_VALUE.C_AXI4_ARADDR_SIZE } { + # Procedure called to validate C_AXI4_ARADDR_SIZE + return true +} + +proc update_PARAM_VALUE.C_AXI4_AWADDR_SIZE { PARAM_VALUE.C_AXI4_AWADDR_SIZE } { + # Procedure called to update C_AXI4_AWADDR_SIZE when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_AXI4_AWADDR_SIZE { PARAM_VALUE.C_AXI4_AWADDR_SIZE } { + # Procedure called to validate C_AXI4_AWADDR_SIZE + return true +} + +proc update_PARAM_VALUE.C_AXI4_BRESP_SIZE { PARAM_VALUE.C_AXI4_BRESP_SIZE } { + # Procedure called to update C_AXI4_BRESP_SIZE when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_AXI4_BRESP_SIZE { PARAM_VALUE.C_AXI4_BRESP_SIZE } { + # Procedure called to validate C_AXI4_BRESP_SIZE + return true +} + +proc update_PARAM_VALUE.C_AXI4_DATA_SIZE { PARAM_VALUE.C_AXI4_DATA_SIZE } { + # Procedure called to update C_AXI4_DATA_SIZE when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_AXI4_DATA_SIZE { PARAM_VALUE.C_AXI4_DATA_SIZE } { + # Procedure called to validate C_AXI4_DATA_SIZE + return true +} + +proc update_PARAM_VALUE.C_AXI4_RDATA_SIZE { PARAM_VALUE.C_AXI4_RDATA_SIZE } { + # Procedure called to update C_AXI4_RDATA_SIZE when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_AXI4_RDATA_SIZE { PARAM_VALUE.C_AXI4_RDATA_SIZE } { + # Procedure called to validate C_AXI4_RDATA_SIZE + return true +} + +proc update_PARAM_VALUE.C_AXI4_RRESP_SIZE { PARAM_VALUE.C_AXI4_RRESP_SIZE } { + # Procedure called to update C_AXI4_RRESP_SIZE when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_AXI4_RRESP_SIZE { PARAM_VALUE.C_AXI4_RRESP_SIZE } { + # Procedure called to validate C_AXI4_RRESP_SIZE + return true +} + +proc update_PARAM_VALUE.C_AXI4_WDATA_SIZE { PARAM_VALUE.C_AXI4_WDATA_SIZE } { + # Procedure called to update C_AXI4_WDATA_SIZE when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_AXI4_WDATA_SIZE { PARAM_VALUE.C_AXI4_WDATA_SIZE } { + # Procedure called to validate C_AXI4_WDATA_SIZE + return true +} + +proc update_PARAM_VALUE.C_AXI4_WSTRB_SIZE { PARAM_VALUE.C_AXI4_WSTRB_SIZE } { + # Procedure called to update C_AXI4_WSTRB_SIZE when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_AXI4_WSTRB_SIZE { PARAM_VALUE.C_AXI4_WSTRB_SIZE } { + # Procedure called to validate C_AXI4_WSTRB_SIZE + return true +} + + +proc update_MODELPARAM_VALUE.C_AXI4_ARADDR_SIZE { MODELPARAM_VALUE.C_AXI4_ARADDR_SIZE PARAM_VALUE.C_AXI4_ARADDR_SIZE } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_AXI4_ARADDR_SIZE}] ${MODELPARAM_VALUE.C_AXI4_ARADDR_SIZE} +} + +proc update_MODELPARAM_VALUE.C_AXI4_RDATA_SIZE { MODELPARAM_VALUE.C_AXI4_RDATA_SIZE PARAM_VALUE.C_AXI4_RDATA_SIZE } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_AXI4_RDATA_SIZE}] ${MODELPARAM_VALUE.C_AXI4_RDATA_SIZE} +} + +proc update_MODELPARAM_VALUE.C_AXI4_RRESP_SIZE { MODELPARAM_VALUE.C_AXI4_RRESP_SIZE PARAM_VALUE.C_AXI4_RRESP_SIZE } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_AXI4_RRESP_SIZE}] ${MODELPARAM_VALUE.C_AXI4_RRESP_SIZE} +} + +proc update_MODELPARAM_VALUE.C_AXI4_AWADDR_SIZE { MODELPARAM_VALUE.C_AXI4_AWADDR_SIZE PARAM_VALUE.C_AXI4_AWADDR_SIZE } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_AXI4_AWADDR_SIZE}] ${MODELPARAM_VALUE.C_AXI4_AWADDR_SIZE} +} + +proc update_MODELPARAM_VALUE.C_AXI4_WDATA_SIZE { MODELPARAM_VALUE.C_AXI4_WDATA_SIZE PARAM_VALUE.C_AXI4_WDATA_SIZE } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_AXI4_WDATA_SIZE}] ${MODELPARAM_VALUE.C_AXI4_WDATA_SIZE} +} + +proc update_MODELPARAM_VALUE.C_AXI4_WSTRB_SIZE { MODELPARAM_VALUE.C_AXI4_WSTRB_SIZE PARAM_VALUE.C_AXI4_WSTRB_SIZE } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_AXI4_WSTRB_SIZE}] ${MODELPARAM_VALUE.C_AXI4_WSTRB_SIZE} +} + +proc update_MODELPARAM_VALUE.C_AXI4_BRESP_SIZE { MODELPARAM_VALUE.C_AXI4_BRESP_SIZE PARAM_VALUE.C_AXI4_BRESP_SIZE } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_AXI4_BRESP_SIZE}] ${MODELPARAM_VALUE.C_AXI4_BRESP_SIZE} +} + +proc update_MODELPARAM_VALUE.C_AXI4_DATA_SIZE { MODELPARAM_VALUE.C_AXI4_DATA_SIZE PARAM_VALUE.C_AXI4_DATA_SIZE } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_AXI4_DATA_SIZE}] ${MODELPARAM_VALUE.C_AXI4_DATA_SIZE} +} + +proc update_MODELPARAM_VALUE.C_AXI4_ADDR_SIZE { MODELPARAM_VALUE.C_AXI4_ADDR_SIZE PARAM_VALUE.C_AXI4_ADDR_SIZE } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_AXI4_ADDR_SIZE}] ${MODELPARAM_VALUE.C_AXI4_ADDR_SIZE} +} + diff --git a/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/.prompt_colors.tcl b/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/.prompt_colors.tcl new file mode 100644 index 0000000000000000000000000000000000000000..31e5e7af324ac7b91dd55417af70d75e3674c389 --- /dev/null +++ b/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/.prompt_colors.tcl @@ -0,0 +1,37 @@ +################################################################################## +# _ _ +# | |_ ___ _ __(_)__ _ +# | ' \/ -_) '_ \ / _` | +# |_||_\___| .__/_\__,_| +# |_| +# +################################################################################## +# +# Company: hepia +# Author: Joachim Schmidt <joachim.schmidt@hesge.ch +# +# Project Name: scalp_axi4lite +# Target Device: SCALP xc7z015clg485-2 +# Tool version: 2019.2 +# Description: Console color print utility +# +# Last update: 2020-11-08 07:53:10 +# +################################################################################## + +# Text attributes +set RESET [exec tput sgr0] +set BOLD [exec tput bold] +set ITALIC [exec tput sitm] +set BLINK [exec tput blink] +set HIGHL [exec tput smso] + +# Text colors +set RED [exec tput setaf 1] +set GREEN [exec tput setaf 2] +set YELLOW [exec tput setaf 3] +set BLUE [exec tput setaf 4] +set MAGENTA [exec tput setaf 5] +set CYAN [exec tput setaf 6] +set WHITE [exec tput setaf 7] + diff --git a/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/clean_prj_scalp_axi4lite.sh b/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/clean_prj_scalp_axi4lite.sh new file mode 100755 index 0000000000000000000000000000000000000000..54e86880630f0d8bf3678e8c7d345dcfe9a79d58 --- /dev/null +++ b/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/clean_prj_scalp_axi4lite.sh @@ -0,0 +1,40 @@ +#!/bin/sh + +################################################################################## +# _ _ +# | |_ ___ _ __(_)__ _ +# | ' \/ -_) '_ \ / _` | +# |_||_\___| .__/_\__,_| +# |_| +# +################################################################################## +# +# Company: hepia +# Author: Joachim Schmidt <joachim.schmidt@hesge.ch +# +# Project Name: scalp_axi4lite +# Target Device: SCALP xc7z015clg485-2 +# Tool version: 2019.2 +# Description: Cleanup project directory +# +# Last update: 2020-11-08 07:53:10 +# +################################################################################## + +echo "> Cleanup project directory..." + +PRJ_DIR=.. + +# Clean current directory +rm -rf ${PRJ_DIR}/.Xil/ 2> /dev/null + +# Remove generated project directory +rm -rf ${PRJ_DIR}/scalp_axi4lite/ 2> /dev/null + +# Clean app directory +rm ${PRJ_DIR}/app/*.h 2> /dev/null +rm ${PRJ_DIR}/app/*.c 2> /dev/null +rm ${PRJ_DIR}/app/*.html 2> /dev/null + +echo "> Done" + diff --git a/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/create_prj_scalp_axi4lite.sh b/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/create_prj_scalp_axi4lite.sh new file mode 100755 index 0000000000000000000000000000000000000000..fa8771ec9a21eb56366fe91a9468a51ade133473 --- /dev/null +++ b/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/create_prj_scalp_axi4lite.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +################################################################################## +# _ _ +# | |_ ___ _ __(_)__ _ +# | ' \/ -_) '_ \ / _` | +# |_||_\___| .__/_\__,_| +# |_| +# +################################################################################## +# +# Company: hepia +# Author: Joachim Schmidt <joachim.schmidt@hesge.ch +# +# Project Name: scalp_axi4lite +# Target Device: SCALP xc7z015clg485-2 +# Tool version: 2019.2 +# Description: Create Vivado project +# +# Last update: 2020-11-08 07:53:10 +# +################################################################################## + +echo "> Create Vivado project..." +vivado -nojournal -nolog -mode tcl -source create_prj_scalp_axi4lite.tcl -notrace +echo "> Done" + diff --git a/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/create_prj_scalp_axi4lite.tcl b/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/create_prj_scalp_axi4lite.tcl new file mode 100644 index 0000000000000000000000000000000000000000..8e711e5c569f8db9d35bf52a13cd19925c8df7d8 --- /dev/null +++ b/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/create_prj_scalp_axi4lite.tcl @@ -0,0 +1,154 @@ +################################################################################## +# _ _ +# | |_ ___ _ __(_)__ _ +# | ' \/ -_) '_ \ / _` | +# |_||_\___| .__/_\__,_| +# |_| +# +################################################################################## +# +# Company: hepia +# Author: Joachim Schmidt <joachim.schmidt@hesge.ch +# +# Project Name: scalp_axi4lite +# Target Device: SCALP xc7z015clg485-2 +# Tool version: 2019.2 +# Description: TCL script for re-creating Vivado project 'scalp_axi4lite' +# +# Last update: 2020-11-08 07:53:10 +# +################################################################################## + +# Include files +source utils.tcl + +set PRJ_DIR ".." +set prj_name "scalp_axi4lite" +set PKG_DIR "${PRJ_DIR}/../../../../../packages" +set SOC_DIR "${PRJ_DIR}/../../../../../soc/" + +# Set project type +set PRJ_TYPE "COMP_PRJ_TYPE" + +# Create a variable to store the start time +set start_time [clock format [clock seconds] -format {%b. %d, %Y %I:%M:%S %p}] + +# Set the original project directory path for adding/importing sources in the new project +set src_dir "${PRJ_DIR}/../src" +set ip_dir "${PRJ_DIR}/../../../../../ips/hw" +set comp_dir "${ip_dir}/$prj_name" +set comp_src_dir "${comp_dir}/src" +set pkg_src_dir "${PKG_DIR}/hw" +set soc_src_dir "${SOC_DIR}/hw" +print_status "Set directory paths" "OK" + +# Create the project +create_project $prj_name ${PRJ_DIR}/$prj_name -part xc7z015clg485-2 +#set_property board_part SCALP [current_project] +set_property target_language VHDL [current_project] +print_status "Create project" "OK" + +# Map the IP Repository so that custom IP is included +set_property ip_repo_paths $ip_dir [current_fileset] +update_ip_catalog + +#---------------------------------------------------------------- +# Add project sources +#---------------------------------------------------------------- + +if {$PRJ_TYPE == "DESIGN_PRJ_TYPE"} { + # add HDL sources + set vhdl_src_file_list [findFiles $src_dir/hdl *.vhd] + set verilog_src_file_list [findFiles $src_dir/hdl *.v] + set hdl_src_file_list [list {*}$vhdl_src_file_list {*}$verilog_src_file_list] + add_files -norecurse $hdl_src_file_list + # add the constraints file (XDC) + add_files -fileset constrs_1 -norecurse $src_dir/constrs/${prj_name}.xdc + set_property is_enabled true [get_files $src_dir/constrs/${prj_name}.xdc] + + # add IPs source file + + #read_ip $src_dir/custom_ip/ip_0/ip_0.xci +} elseif {$PRJ_TYPE == "COMP_PRJ_TYPE"} { + # components sources are stored in an external directory + # add the project component + set vhdl_src_file_list [findFiles $comp_src_dir/hdl *.vhd] + set verilog_src_file_list [findFiles $comp_src_dir/hdl *.v] + set hdl_src_file_list [list {*}$vhdl_src_file_list {*}$verilog_src_file_list] + add_files -norecurse $hdl_src_file_list + # add IPs source file + #read_ip $comp_src_dir/ip_core/ip_0/ip_0.xci + + # add IP-XACT source file + #add_files -norecurse $comp_dir/component.xml +} +print_status "Add project sources" "OK" + +foreach j $vhdl_src_file_list { + set_property file_type {VHDL 2008} [get_files $j] + print_status "VHDL 2008 mode configured for the file $j" "OK" +} +print_status "VHDL 2008 mode configured for project sources" "OK" + +#---------------------------------------------------------------- +# Add constraints files +#---------------------------------------------------------------- + + +# Set packages libraries if any +#set_property library library_name [get_files $src_dir/hdl/package_name.vhd] +#update_compile_order -fileset sources_1 + +# Create the IP Integrator portion of the design +#create_bd_design "axi_design" +#update_compile_order -fileset sources_1 + +# launch the TCL script to generate the IPI design +source $src_dir/ipi_tcl/${prj_name}_ipi.tcl +print_status "Add IPI design" "OK" + +# Set the top level design +set_property top $prj_name [current_fileset] +update_compile_order -fileset sources_1 + +# Add testbench sources +if {$PRJ_TYPE == "DESIGN_PRJ_TYPE"} { + set vhdl_sim_file_list [findFiles $src_dir/sim *.vhd] + set verilog_sim_file_list [findFiles $src_dir/sim *.v] +} elseif {$PRJ_TYPE == "COMP_PRJ_TYPE"} { + set vhdl_sim_file_list [findFiles $comp_src_dir/sim *.vhd] + set verilog_sim_file_list [findFiles $comp_src_dir/sim *.v] +} +set hdl_sim_file_list [list {*}$vhdl_sim_file_list {*}$verilog_sim_file_list] +add_files -fileset sim_1 -norecurse $hdl_sim_file_list +update_compile_order -fileset sim_1 +print_status "Add testbench sources" "OK" + +foreach j $vhdl_sim_file_list { + set_property file_type {VHDL 2008} [get_files $j] + print_status "VHDL 2008 mode configured for the file $j" "OK" +} +print_status "VHDL 2008 mode configured for testbench sources" "OK" + +# Add packages sources + set vhdl_pkg_file_list [findFiles ${PRJ_DIR}/../../../../../packages/hw/axi4_pkg/src/hdl *.vhd] + add_files -norecurse $vhdl_pkg_file_list + foreach j $vhdl_pkg_file_list { + set_property file_type {VHDL 2008} [get_files $j] + print_status "VHDL 2008 mode configured for the file $j" "OK" + set_property is_enabled true [get_files $j] + } +print_status "Add packages sources" "OK" +print_status "VHDL 2008 mode configured for packages sources" "OK" + +# Add SoC wrapper sources files + + +# Set the completion time +set end_time [clock format [clock seconds] -format {%b. %d, %Y %I:%M:%S %p}] + +# Display the start and end time to the screen +puts $start_time +puts $end_time + +exit diff --git a/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/open_prj_scalp_axi4lite.sh b/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/open_prj_scalp_axi4lite.sh new file mode 100755 index 0000000000000000000000000000000000000000..89d4f931e1669d1c147971aa3dd222025005e4a1 --- /dev/null +++ b/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/open_prj_scalp_axi4lite.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +################################################################################## +# _ _ +# | |_ ___ _ __(_)__ _ +# | ' \/ -_) '_ \ / _` | +# |_||_\___| .__/_\__,_| +# |_| +# +################################################################################## +# +# Company: hepia +# Author: Joachim Schmidt <joachim.schmidt@hesge.ch +# +# Project Name: scalp_axi4lite +# Target Device: SCALP xc7z015clg485-2 +# Tool version: 2019.2 +# Description: Create Vivado project +# +# Last update: 2020-11-08 07:53:10 +# +################################################################################## + +echo "> Open Vivado GUI..." +vivado -nojournal -nolog -notrace ../scalp_axi4lite/scalp_axi4lite.xpr diff --git a/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/utils.tcl b/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/utils.tcl new file mode 100644 index 0000000000000000000000000000000000000000..2d0fe9da1538bfc51e14bae8747a5a73fddea192 --- /dev/null +++ b/ips/vivado/scalp_axi4lite/2019.2/lin64/.scripts/utils.tcl @@ -0,0 +1,62 @@ +################################################################################## +# _ _ +# | |_ ___ _ __(_)__ _ +# | ' \/ -_) '_ \ / _` | +# |_||_\___| .__/_\__,_| +# |_| +# +################################################################################## +# +# Company: hepia +# Author: Joachim Schmidt <joachim.schmidt@hesge.ch +# +# Project Name: scalp_axi4lite +# Target Device: SCALP xc7z015clg485-2 +# Tool version: 2019.2 +# Description: Project management utilities +# +# Last update: 2020-11-08 07:53:10 +# +################################################################################## + +# findFiles +# basedir - the directory to start looking in +# pattern - A pattern, as defined by the glob command, that the files must match +proc findFiles { basedir pattern } { + + # Fix the directory name, this ensures the directory name is in the + # native format for the platform and contains a final directory seperator + set basedir [string trimright [file join [file normalize $basedir] { }]] + set fileList {} + + # Look in the current directory for matching files, -type {f r} + # means ony readable normal files are looked at, -nocomplain stops + # an error being thrown if the returned list is empty + foreach fileName [glob -nocomplain -type {f r} -path $basedir $pattern] { + lappend fileList $fileName + } + + # Now look for any sub direcories in the current directory + foreach dirName [glob -nocomplain -type {d r} -path $basedir *] { + # Recusively call the routine on the sub directory and append any + # new files to the results + set subDirList [findFiles $dirName $pattern] + if { [llength $subDirList] > 0 } { + foreach subDirFile $subDirList { + lappend fileList $subDirFile + } + } + } + return $fileList +} + + +# Print a progress status +# str The string describing the current status +# status The status as a string (eg. "OK", "FAILED") +proc print_status {str status} { + set MAX_STR_LENGTH 70 + source .prompt_colors.tcl + puts "${CYAN}>${YELLOW} $str [string repeat " " [expr {$MAX_STR_LENGTH - [string length $str]}]]\[${GREEN}${status}${YELLOW}\]${RESET}" +} + diff --git a/ips/vivado/scalp_axi4lite/2019.2/lin64/setup.sh b/ips/vivado/scalp_axi4lite/2019.2/lin64/setup.sh new file mode 100755 index 0000000000000000000000000000000000000000..0575831366048a7bdaf72497c36445d46b50a549 --- /dev/null +++ b/ips/vivado/scalp_axi4lite/2019.2/lin64/setup.sh @@ -0,0 +1,30 @@ +################################################################################## +# _ _ +# | |_ ___ _ __(_)__ _ +# | ' \/ -_) '_ \ / _` | +# |_||_\___| .__/_\__,_| +# |_| +# +################################################################################## +# +# Company: hepia +# Author: Joachim Schmidt <joachim.schmidt@hesge.ch +# +# Project Name: scalp_axi4lite +# Target Device: SCALP xc7z015clg485-2 +# Tool version: 2019.2 +# Description: TCL script creating aliases for Vivado project management scripts +# +# Last update: 2020-11-08 07:53:10 +# +################################################################################## + +# Create aliases +alias create_project='cd .scripts && ./create_prj_scalp_axi4lite.sh && cd ..' +alias clean_project='cd .scripts && ./clean_prj_scalp_axi4lite.sh && cd ..' +alias export_hw='cd .scripts && ./export_hw_scalp_axi4lite.sh && cd ..' +alias gen_bitstream='cd .scripts && ./gen_bitstream_scalp_axi4lite.sh && cd ..' +alias load_bitstream='cd .scripts && ./load_bitstream_scalp_axi4lite.sh && cd ..' +alias gen_sw_apps='cd .scripts && ./gen_sw_apps_scalp_axi4lite.sh && cd ..' +alias load_sw_app='cd .scripts && ./load_sw_app_scalp_axi4lite.sh && cd ..' +alias open_gui='cd .scripts && ./open_prj_scalp_axi4lite.sh && cd ..'