├── README.md ├── Ultimate_Guide.pdf ├── doc ├── Abstract_LAP_Corentin_Ferry.pdf ├── Abstract_LAP_Juan_Azcarreta.pdf ├── Presentation_Juan_Azcarreta.pdf ├── Report_Corentin_Ferry.pdf ├── Report_Juan_Azcarreta.pdf ├── pyramic.png └── pyramic_layers.png ├── fpga ├── MIC_ARRAY │ ├── .gitignore │ ├── create_hw_headers.sh │ ├── create_linux_system.sh │ ├── hw │ │ ├── hdl │ │ │ ├── Beamformer_Adder.vhd │ │ │ ├── DE1_SoC_top_level.vhd │ │ │ ├── FIFO_Mic.vhd │ │ │ ├── FIFO_Streaming.vhd │ │ │ ├── LEDDriver.vhd │ │ │ ├── Output_Buffer_Driver.vhd │ │ │ ├── SPI_Controller.vhd │ │ │ ├── SPI_DMA.vhd │ │ │ ├── SPI_Slave.vhd │ │ │ ├── SPI_Streaming.vhd │ │ │ └── SPI_System.vhd │ │ ├── modelsim │ │ │ ├── SPI_system_tb.vhd │ │ │ ├── Test_full_system.mpf │ │ │ └── work │ │ │ │ └── _info │ │ └── quartus │ │ │ ├── .gitignore │ │ │ ├── Beamformer_hw.tcl │ │ │ ├── LEDDriver_hw.tcl │ │ │ ├── Output_Switcher_hw.tcl │ │ │ ├── Pyramic_Array.qpf │ │ │ ├── Pyramic_Array.qsf │ │ │ ├── Pyramic_Array.qsys │ │ │ ├── SPI_System_hw.tcl │ │ │ ├── coeff_filter │ │ │ └── pin_assignment_DE1_SoC.tcl │ └── sw │ │ └── hps │ │ ├── .gitignore │ │ ├── application │ │ ├── .gitignore │ │ ├── libpyramicio_test │ │ │ ├── Makefile │ │ │ └── main.c │ │ ├── pyramic_mic2wav │ │ │ ├── Makefile │ │ │ └── main.c │ │ ├── pyramicio │ │ │ ├── Doxyfile │ │ │ ├── Makefile │ │ │ ├── doc_main.md │ │ │ ├── html │ │ │ │ ├── annotated.html │ │ │ │ ├── bc_s.png │ │ │ │ ├── bdwn.png │ │ │ │ ├── classes.html │ │ │ │ ├── closed.png │ │ │ │ ├── doc.png │ │ │ │ ├── doxygen.css │ │ │ │ ├── doxygen.png │ │ │ │ ├── dynsections.js │ │ │ │ ├── files.html │ │ │ │ ├── folderclosed.png │ │ │ │ ├── folderopen.png │ │ │ │ ├── functions.html │ │ │ │ ├── functions_vars.html │ │ │ │ ├── globals.html │ │ │ │ ├── globals_func.html │ │ │ │ ├── index.html │ │ │ │ ├── jquery.js │ │ │ │ ├── menu.js │ │ │ │ ├── menudata.js │ │ │ │ ├── nav_f.png │ │ │ │ ├── nav_g.png │ │ │ │ ├── nav_h.png │ │ │ │ ├── open.png │ │ │ │ ├── pyramicio_8h.html │ │ │ │ ├── pyramicio_8h_source.html │ │ │ │ ├── search │ │ │ │ │ ├── all_0.html │ │ │ │ │ ├── all_0.js │ │ │ │ │ ├── all_1.html │ │ │ │ │ ├── all_1.js │ │ │ │ │ ├── all_2.html │ │ │ │ │ ├── all_2.js │ │ │ │ │ ├── all_3.html │ │ │ │ │ ├── all_3.js │ │ │ │ │ ├── all_4.html │ │ │ │ │ ├── all_4.js │ │ │ │ │ ├── all_5.html │ │ │ │ │ ├── all_5.js │ │ │ │ │ ├── all_6.html │ │ │ │ │ ├── all_6.js │ │ │ │ │ ├── classes_0.html │ │ │ │ │ ├── classes_0.js │ │ │ │ │ ├── classes_1.html │ │ │ │ │ ├── classes_1.js │ │ │ │ │ ├── classes_2.html │ │ │ │ │ ├── classes_2.js │ │ │ │ │ ├── close.png │ │ │ │ │ ├── files_0.html │ │ │ │ │ ├── files_0.js │ │ │ │ │ ├── functions_0.html │ │ │ │ │ ├── functions_0.js │ │ │ │ │ ├── mag_sel.png │ │ │ │ │ ├── nomatches.html │ │ │ │ │ ├── pages_0.html │ │ │ │ │ ├── pages_0.js │ │ │ │ │ ├── search.css │ │ │ │ │ ├── search.js │ │ │ │ │ ├── search_l.png │ │ │ │ │ ├── search_m.png │ │ │ │ │ ├── search_r.png │ │ │ │ │ ├── searchdata.js │ │ │ │ │ ├── variables_0.html │ │ │ │ │ ├── variables_0.js │ │ │ │ │ ├── variables_1.html │ │ │ │ │ ├── variables_1.js │ │ │ │ │ ├── variables_2.html │ │ │ │ │ └── variables_2.js │ │ │ │ ├── splitbar.png │ │ │ │ ├── structinputBuffer-members.html │ │ │ │ ├── structinputBuffer.html │ │ │ │ ├── structoutputBuffer-members.html │ │ │ │ ├── structoutputBuffer.html │ │ │ │ ├── structpyramic-members.html │ │ │ │ ├── structpyramic.html │ │ │ │ ├── sync_off.png │ │ │ │ ├── sync_on.png │ │ │ │ ├── tab_a.png │ │ │ │ ├── tab_b.png │ │ │ │ ├── tab_h.png │ │ │ │ ├── tab_s.png │ │ │ │ └── tabs.css │ │ │ ├── latex │ │ │ │ ├── Makefile │ │ │ │ ├── annotated.tex │ │ │ │ ├── doxygen.sty │ │ │ │ ├── files.tex │ │ │ │ ├── index.tex │ │ │ │ ├── pyramicio_8h.tex │ │ │ │ ├── refman.aux │ │ │ │ ├── refman.idx │ │ │ │ ├── refman.ilg │ │ │ │ ├── refman.ind │ │ │ │ ├── refman.log │ │ │ │ ├── refman.out │ │ │ │ ├── refman.pdf │ │ │ │ ├── refman.tex │ │ │ │ ├── refman.toc │ │ │ │ ├── structinputBuffer.tex │ │ │ │ ├── structoutputBuffer.tex │ │ │ │ └── structpyramic.tex │ │ │ ├── pyramicio.c │ │ │ └── pyramicio.h │ │ └── wav_tools │ │ │ ├── Makefile │ │ │ ├── make_wav.c │ │ │ ├── make_wav.h │ │ │ ├── read_wav.c │ │ │ └── read_wav.h │ │ └── linux │ │ ├── .gitignore │ │ └── rootfs │ │ ├── .gitignore │ │ ├── config_post_install.sh │ │ └── config_system.sh ├── README.md └── README.txt └── pcb ├── Altium_Library └── HEPIA_LSN_RB_V1.SchLib ├── MicArray Project_v3 ├── MicArray.OutJob ├── MicArrayPCBBoard_V3.PcbDoc ├── MicArrayPCB_V3.PrjPcb ├── MicArrayPCB_V3.PrjPcbStructure ├── MicArraySchem_V3.SchDoc └── Project Outputs for MicArrayPCB_V3 │ └── Design Rule Check - MicArrayPCBBoard_V3.html └── README.md /README.md: -------------------------------------------------------------------------------- 1 | Pyramic: An FPGA based compact microphone array 2 | ========================= 3 | 4 | This repository contains the design files and the documentation for the Pyramic compact microphone array. 5 | Pyramic has 48 microphones spread on 6 PCBs, each bearing 8 MEMS microphones and an ADC. This allows for 6 | flexible geometries while keeping calibration simple. The array plugs in a DE1-SoC FPGA that collects 7 | the data from the 6 ADC and can do real-time processing of the signals with output to an audio codec. 8 | Alternatively, the data can be sent to an ARM CPU that is on the same chip for further processing. 9 | 10 |

11 | 12 |

13 | 14 | Contributors 15 | ------------ 16 | 17 | Juan Azcarreta Ortiz, René Beuchat [2], Robin Scheibler [1], Francisco Rojo, Corentin Ferry [2] 18 | 19 | [1] Audiovisual Communications Laboratory ([LCAV](http://lcav.epfl.ch)) at [EPFL](http://www.epfl.ch). 20 | 21 | [2] Processor Architecture Laboratory ([LAP](http://lap.epfl.ch)) at [EPFL](http://www.epfl.ch). 22 | 23 | 24 | 25 | #### Contact 26 | 27 | [Robin Scheibler](mailto:robin[at]tmu[dot]ac[dot]jp)
28 | Tokyo Metropolitan University, TMU
29 | Ono Lab
30 | Department of Computer Science
31 | Graduate School of System Design
32 | 6-6 Asahigaoka, Hino-shi
33 | Tokyo, Japan
34 | 35 | Dependencies 36 | ------------ 37 | 38 | * The PCBs were designed in Altium. 39 | * The FPGA cores were developed using Altera's tools (the free web edition should be sufficient). The installation steps are explained in the `fpga/README.md` file. 40 | 41 | Pyramic array modular design 42 | -------------------------------- 43 | 44 | The Pyramic array is designed as a full-stack modular system. This means that different parts of the system 45 | can be accessed independently depending on the research interests of the user. The following figure summarizes the 46 | main layers of the full-stack Pyramic array model: 47 | 48 |

49 | 50 |

51 | 52 | Next, we explain where to find the different modules: 53 | 54 | * **Physical layer**: The PCB design can be found under the `pcb` folder in this github repository. 55 | * **Acquisition layer**: The FPGA design can be found in the `fpga/MIC_ARRAY/hw` folder. 56 | * **Communication layer**: The communication accross peripherals in the DE1-SoC board is controlled by a Hardcore Processor System (HPS) and the design files can be found in the `fpga/MIC_ARRAY/sw/hps` folder. The `Ultimate_Guide.pdf` explains how to connect the Pyramic array to a host computer through an Ethernet connection. 57 | * **Application layer**: The application files for the demo presented at IWAENC2018 are available [here](https://github.com/fakufaku/pyramic-demo). To compile an application project follow the steps in the following section (i.e. `From Zero to Pyramic Compilation`). 58 | * **Dataset**: Anechoic dataset available in [zenodo](https://zenodo.org/record/1209563#.W5qOkkxuKUk). 59 | 60 | From Zero to Pyramic Compilation 61 | -------------------------------- 62 | 63 | (on Ubuntu linux) 64 | 65 | The FPGA part 66 | 67 | 1. Follow `fpga/README.md` to install the Altera SoC EDS and Quartus Lite 68 | 2. Open Quartus 69 | 70 | nios_command_shell 71 | quartus & 72 | 73 | 3. Open Pyramic project: `File -> Open Project...` and select `hw/quartus/Pyramic_Array.qpf` 74 | 4. Open Qsys via Quartus by `Tools -> Qsys` 75 | 5. In Qsys, generate the HDL files `Generate -> Generate HDL...` and click `Generate` 76 | 6. Back in Quartus, compile by `Processing -> Start Compilation` 77 | 7. Generate the hardware header 78 | 79 | cd fpga/MIC_ARRAY 80 | ./create_hw_headers.sh 81 | 82 | 8. Generate `RBF` file 83 | 84 | quartus_cpf -c hw/quartus/output_files/Pyramic_Array.sof socfpga.rbf 85 | 86 | and place it at the root of the SD card 87 | 88 | Hopefully, things went smoothly. Now we can try to compile the library that lets us 89 | control Pyramic from HPS. 90 | 91 | 1. For the compilation, some additional C libraries are required 92 | 93 | sudo apt-get install libc6-dev-i386 94 | sudo apt-get install zlib1g:i386 95 | 96 | 2. Start the embedded development shell 97 | 98 | embedded_command_shell 99 | 100 | 3. Compile `libpyramicio` 101 | 102 | cd fpga/MIC_ARRAY/sw/hps/application/pyramicio 103 | make all 104 | 105 | 4. The files `pyramicio.h` and `libpyramicio.so` can be copied to the system on the DE1-SoC 106 | 107 | Academic projects 108 | --------------------- 109 | 110 | * J\. Azcarreta, R. Scheibler and R. Beuchat. *Pyramic array: An FPGA based platform for multi-channel audio acquisition*, Master Thesis, EPFL, 2016. 111 | 112 | * C\. Ferry, R. Scheibler and R. Beuchat. *Extension board for CycloneV multi microphone acquisition - signal analysis*, Semester Project, EPFL, 2017. 113 | 114 | Academic publications 115 | --------------------- 116 | 117 | If you use the Pyramic array in your own research, please cite 118 | 119 | * R\. Scheibler, J. Azcarreta, R. Beuchat, C. Ferry, *Pyramic: Full Stack Open Microphone Array Architecture and Dataset*, IWAENC, Tokyo, 2018. 120 | 121 | Below we list some publications that employ the Pyramic array: 122 | 123 | * E\. Bezzam, R. Scheibler, J. Azcarreta, H. Pan, M. Simeoni, R. Beuchat, P. Hurley, B. Bruneau and C. Ferry. *Hardware and software for reproducible research in audio array signal processing*, ICASSP 2017, New Orleans, USA, 2017. 124 | 125 | * R\. Scheibler, D. Horiike, N. Ono, *Blinkies: Sound-to-light conversion sensors and their application to 126 | speech enhancement and sound source localization*, APSIPA, 2018. 127 | 128 | 129 | Software License 130 | ---------------- 131 | 132 | Copyright (c) 2016 LCAV LAP EPFL 133 | 134 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 135 | 136 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 137 | 138 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 139 | 140 | Hardware License 141 | ---------------- 142 | 143 | Creative Commons License
Pyramic compact 147 | microphone array by LCAV, LAP, EPFL is licensed under a Creative 151 | Commons Attribution-ShareAlike 4.0 International License. 152 | -------------------------------------------------------------------------------- /Ultimate_Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/Ultimate_Guide.pdf -------------------------------------------------------------------------------- /doc/Abstract_LAP_Corentin_Ferry.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/doc/Abstract_LAP_Corentin_Ferry.pdf -------------------------------------------------------------------------------- /doc/Abstract_LAP_Juan_Azcarreta.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/doc/Abstract_LAP_Juan_Azcarreta.pdf -------------------------------------------------------------------------------- /doc/Presentation_Juan_Azcarreta.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/doc/Presentation_Juan_Azcarreta.pdf -------------------------------------------------------------------------------- /doc/Report_Corentin_Ferry.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/doc/Report_Corentin_Ferry.pdf -------------------------------------------------------------------------------- /doc/Report_Juan_Azcarreta.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/doc/Report_Juan_Azcarreta.pdf -------------------------------------------------------------------------------- /doc/pyramic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/doc/pyramic.png -------------------------------------------------------------------------------- /doc/pyramic_layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/doc/pyramic_layers.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/.gitignore: -------------------------------------------------------------------------------- 1 | sdcard/ 2 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/create_hw_headers.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | 3 | # make sure to be in the same directory as this script 4 | script_dir_abs=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) 5 | cd "${script_dir_abs}" 6 | 7 | # create target directory if not present 8 | mkdir -p sw/hps/application/hw_headers/ 9 | 10 | sopc-create-header-files \ 11 | hw/quartus/Pyramic_Array.sopcinfo \ 12 | --output-dir sw/hps/application/hw_headers/ 13 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/hw/hdl/Beamformer_Adder.vhd: -------------------------------------------------------------------------------- 1 | -- Juan Azcarreta Master Thesis 2 | -- SPI Streaming Module 3 | -- 25th June 2016 4 | -- EPFL: LCAV & LAP collaboration 5 | -- Status: Need some adjustmenst in line 86-90 (state s_beamformer) 6 | 7 | library ieee; 8 | use ieee.std_logic_1164.all; 9 | use ieee.numeric_std.all; 10 | 11 | entity Beamformer_Adder is 12 | generic( 13 | DATA_WIDTH : natural := 32 14 | ); 15 | 16 | port( 17 | clk : in std_logic; 18 | reset_n : in std_logic; 19 | -- Inputs 20 | FIR_data : in std_logic_vector((DATA_WIDTH - 1) downto 0); 21 | FIR_Valid : in std_logic; 22 | FIR_Ready : out std_logic; 23 | FIR_sop : in std_logic; 24 | FIR_eop : in std_logic; 25 | FIR_channel : in std_logic_vector(5 downto 0); 26 | 27 | -- Outputs 28 | Audio_data : out std_logic_vector((DATA_WIDTH - 1) downto 0); 29 | Audio_Valid : out std_logic; 30 | Audio_Ready : in std_logic 31 | ); 32 | 33 | end entity; 34 | 35 | architecture rtl of Beamformer_Adder is 36 | -- Mixer state machine definition 37 | type FIR_Acq_state is (s_waiting, s_acquire, s_beamformer); 38 | signal FIR_Acq : FIR_Acq_state; 39 | 40 | type FIR_Signals is array (47 downto 0) of std_logic_vector(DATA_WIDTH - 1 downto 0); 41 | signal FIR_Output : FIR_Signals; 42 | signal tmp1 : signed((DATA_WIDTH - 1) + 24 downto 0); 43 | signal tmp2 : signed((DATA_WIDTH - 1) + 24 downto 0); 44 | 45 | begin 46 | state_machine : process(reset_n, clk) 47 | begin 48 | if reset_n = '0' then 49 | FIR_Ready <= '1'; 50 | Audio_Valid <= '0'; 51 | tmp1 <= (others => '0'); 52 | tmp2 <= (others => '0'); 53 | elsif (rising_edge(clk)) then 54 | case FIR_Acq is 55 | when s_waiting => 56 | Audio_Valid <= '0'; 57 | FIR_Ready <= '1'; 58 | if FIR_sop = '1' and FIR_Valid = '1' then 59 | Fir_acq <= s_acquire; 60 | -- Get First channel 61 | FIR_Output(to_integer(unsigned(FIR_channel)))((DATA_WIDTH - 1) downto 0) <= FIR_data; 62 | end if; 63 | 64 | when s_acquire => 65 | if (FIR_eop = '0') then 66 | -- Get the rest of channels (up to 48) 67 | FIR_Output(to_integer(unsigned(FIR_channel)))((DATA_WIDTH - 1) downto 0) <= FIR_data; 68 | else 69 | -- When finish go to create beamformer 70 | FIR_Acq <= s_beamformer; 71 | FIR_Ready <= '0'; 72 | end if; 73 | when s_beamformer => 74 | -- Now we are reading just one of the channels but the final objective is to add all the channels and output them through hte codec 75 | if Audio_Ready = '1' then 76 | Audio_Valid <= '1'; 77 | -- The following line outputs the channel 2 audio data filtered: 78 | Audio_Data <= FIR_Output(2)((DATA_WIDTH - 1) downto 0); 79 | --for i in 0 to 23 loop 80 | -- tmp1 <= (tmp1 + signed(FIR_Output(i)((DATA_WIDTH - 1) DOWNTO 0)))/24; -- We split the channels in two because quartus does not allow division with large arrays of bits 81 | --end loop; 82 | --for i in 24 to 47 loop 83 | -- tmp2 <= (tmp2 + signed(FIR_Output(i)((DATA_WIDTH - 1) DOWNTO 0)))/24; 84 | --end loop; 85 | FIR_Ready <= '1'; 86 | FIR_Acq <= s_waiting; 87 | end if; 88 | 89 | when others => null; 90 | 91 | end case; 92 | end if; 93 | end process; 94 | 95 | --Audio_Data <= std_logic_vector((tmp1 + tmp2)/2)((DATA_WIDTH - 1) DOWNTO 0); 96 | end rtl; 97 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/hw/hdl/SPI_Slave.vhd: -------------------------------------------------------------------------------- 1 | -- Juan Azcarreta Master Thesis 2 | -- SPI Slave Module VHDL Description 3 | -- 17th February 2016 4 | -- EPFL: LCAV & LAP collaboration 5 | 6 | library ieee; 7 | use ieee.std_logic_1164.all; 8 | use ieee.numeric_std.all; 9 | 10 | entity SPI_Slave is 11 | port( 12 | -- Global signals 13 | Clk : in std_logic; 14 | reset_n : in std_logic; 15 | -- Signals from controller 16 | AS_Addr : in std_logic_vector(2 downto 0); 17 | AS_Write : in std_logic; 18 | AS_Read : in std_logic; 19 | AS_WriteData : in std_logic_vector(31 downto 0); 20 | AS_ReadData : out std_logic_vector(31 downto 0); 21 | -- Interface with SPI_controller and DMA 22 | RegAddStart : out std_logic_vector(31 downto 0); 23 | RegLgt : out std_logic_vector(31 downto 0); 24 | Start : out std_logic; 25 | Buffer1 : in std_logic; 26 | Buffer2 : in std_logic; 27 | DMA_Stop : in std_logic 28 | ); 29 | end SPI_Slave; 30 | 31 | architecture slave of SPI_Slave is 32 | -- signals 33 | signal sig_BaseAddress : std_logic_vector(31 downto 0); 34 | signal sig_length : std_logic_vector(31 downto 0); 35 | signal sig_Start : std_logic; 36 | 37 | begin 38 | -- processes 39 | registers : process(Clk, reset_n) 40 | begin 41 | if reset_n = '0' then 42 | sig_BaseAddress <= (others => '0'); 43 | sig_length <= (others => '0'); 44 | AS_ReadData <= (others => '0'); 45 | sig_Start <= '0'; 46 | elsif rising_edge(Clk) then 47 | --Start_n <= '1'; -- Default value 48 | -- Write in the registers 49 | if AS_Write = '1' then 50 | case AS_Addr is 51 | when "000" => sig_BaseAddress <= AS_WriteData; -- Assign starting memory address for DMA 52 | when "001" => sig_length <= AS_WriteData; -- Assign total number of samples to be sent by the DMA 53 | when "010" => sig_Start <= AS_WriteData(0); -- When asserted the proces starts running and it never stops till it is deasserdh (Otherwise the acquisition will be continuous) 54 | when others => null; 55 | end case; 56 | -- Read from the registers 57 | elsif AS_Read = '1' then 58 | AS_ReadData <= (others => '0'); 59 | case AS_Addr is 60 | when "000" => AS_ReadData <= sig_BaseAddress; 61 | when "001" => AS_ReadData <= sig_length; 62 | when "010" => AS_ReadData(0) <= sig_Start; -- When asserted the proces starts running and it never stops till it is deasserted 63 | when "011" => AS_ReadData(0) <= Buffer1; -- Should be high during first half period of the acquisition 64 | when "100" => AS_ReadData(0) <= Buffer2; -- Should be high during second half period of the acquisition 65 | when "101" => AS_ReadData(0) <= DMA_Stop; -- indicates the DMA asserts the stop signal 66 | when others => null; 67 | end case; 68 | end if; 69 | end if; 70 | end process registers; 71 | 72 | -- Set outputs 73 | RegAddStart <= sig_BaseAddress; 74 | RegLgt <= sig_length; 75 | Start <= sig_Start; 76 | end slave; 77 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/hw/hdl/SPI_Streaming.vhd: -------------------------------------------------------------------------------- 1 | -- Juan Azcarreta Master Thesis 2 | -- SPI Streaming Module 3 | -- 17th June 2016 4 | -- EPFL: LCAV & LAP collaboration 5 | 6 | library ieee; 7 | use ieee.std_logic_1164.all; 8 | use ieee.numeric_std.all; 9 | 10 | entity SPI_Streaming is 11 | generic( 12 | MICS_N : integer := 8; -- Mics per array number 13 | ARRAY_N : integer := 6 -- Arrays number 14 | ); 15 | port( 16 | -- Global signals 17 | clk : in std_logic; 18 | reset_n : in std_logic; 19 | -- DMA Control signals 20 | Streaming_Data : in std_logic_vector(31 downto 0); 21 | Streaming_Valid : in std_logic; 22 | Streaming_Ready : out std_logic; 23 | 24 | -- Avalon ST source interface Left 25 | Source_Data_Left : out std_logic_vector(21 downto 0); 26 | Source_sop_Left : out std_logic; 27 | Source_eop_Left : out std_logic; 28 | Source_Valid_Left : out std_logic; 29 | Source_Ready_Left : in std_logic; 30 | 31 | -- Avalon ST source interface Right 32 | Source_Data_Right : out std_logic_vector(21 downto 0); 33 | Source_sop_Right : out std_logic; 34 | Source_eop_Right : out std_logic; 35 | Source_Valid_Right : out std_logic; 36 | Source_Ready_Right : in std_logic 37 | ); 38 | end SPI_Streaming; 39 | 40 | architecture streaming of SPI_Streaming is 41 | -- StateM machine 42 | type state_type is (s_wait, s_transmit1, s_transmit2, s_transmit3); 43 | signal StateM : state_type; 44 | 45 | signal wrempty : std_logic; 46 | signal wrfull : std_logic; 47 | signal wrusedw : std_logic_vector(5 downto 0); 48 | signal q : std_logic_vector(15 downto 0); 49 | signal channel : integer range 0 to 47; 50 | signal rdreq : std_logic; 51 | 52 | signal Source_sop : std_logic; 53 | signal Source_eop : std_logic; 54 | signal Source_Valid : std_logic; 55 | signal Source_Ready : std_logic; 56 | signal Source_Data : std_logic_vector(21 downto 0); 57 | 58 | begin 59 | -- Create FIFO component 60 | FIFO_Streaming_inst : entity work.FIFO_Streaming 61 | port map( 62 | data => Streaming_Data, 63 | rdclk => clk, 64 | rdreq => rdreq, 65 | wrclk => clk, 66 | wrreq => Streaming_Valid, 67 | q => q, 68 | wrempty => wrempty, 69 | wrfull => wrfull, 70 | wrusedw => wrusedw 71 | ); 72 | 73 | -- processes 74 | streaming : process(clk, reset_n) 75 | begin 76 | if reset_n = '0' then 77 | channel <= 0; 78 | Source_eop <= '0'; 79 | Source_sop <= '0'; 80 | Source_Data <= (others => '0'); 81 | Source_Valid <= '0'; 82 | 83 | elsif rising_edge(clk) then 84 | case StateM is 85 | when s_wait => 86 | Source_eop <= '0'; 87 | if to_integer(unsigned(wrusedw)) >= 24 and Source_Ready = '1' then 88 | StateM <= s_transmit1; 89 | 90 | rdreq <= '1'; 91 | end if; 92 | when s_transmit1 => 93 | StateM <= s_transmit2; 94 | 95 | when s_transmit2 => 96 | -- Transmit first packet 97 | 98 | Source_Valid <= '1'; 99 | Source_sop <= '1'; 100 | -- Transmit first packet and assert Source_sop as handshake with the FIR filter 101 | Source_Data <= q & std_logic_vector(to_unsigned(channel, 6)); 102 | StateM <= s_transmit3; 103 | 104 | when s_transmit3 => 105 | Source_sop <= '0'; 106 | if Source_Ready = '1' then 107 | -- Indicate valid data 108 | if channel < ((MICS_N * ARRAY_N) - 2) then 109 | rdreq <= '1'; 110 | channel <= channel + 1; 111 | -- FIR filters IP ask to join the output signal and the # of channel in the same array 112 | Source_Data <= q & std_logic_vector(to_unsigned(channel, 6)); 113 | rdreq <= '1'; 114 | Source_Valid <= '1'; 115 | 116 | elsif channel = ((MICS_N * ARRAY_N) - 2) then 117 | -- Transmit last packet 118 | -- Along with the las packet we need to asert Source_eop soginal 119 | Source_Data <= q & std_logic_vector(to_unsigned(channel, 6)); 120 | -- Transmission finish! We tell by asserting Source_eop 121 | Source_eop <= '1'; 122 | channel <= channel + 1; 123 | Source_Valid <= '1'; 124 | 125 | else 126 | Source_eop <= '0'; 127 | channel <= 0; 128 | Source_Valid <= '0'; 129 | rdreq <= '0'; 130 | StateM <= s_wait; 131 | end if; 132 | else 133 | Source_Valid <= '0'; 134 | rdreq <= '0'; 135 | 136 | end if; 137 | when others => null; 138 | 139 | end case; 140 | end if; 141 | end process streaming; 142 | 143 | -- Transmit streaming interface signals 144 | Streaming_Ready <= not (wrfull); -- When FIFOs are not full the system is ready 145 | 146 | Source_sop_Left <= Source_sop; 147 | Source_sop_Right <= Source_sop; 148 | 149 | Source_eop_Right <= Source_eop; 150 | Source_eop_Left <= Source_eop; 151 | 152 | Source_Data_Left <= Source_Data; 153 | Source_Data_Right <= Source_Data; 154 | 155 | Source_Valid_Left <= Source_Valid; 156 | Source_Valid_Right <= Source_Valid; 157 | 158 | Source_Ready <= Source_Ready_Left and Source_Ready_Right; -- Both right and left sources need to be ready at the send time to synchronize transmissions 159 | 160 | 161 | end streaming; 162 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/hw/hdl/SPI_System.vhd: -------------------------------------------------------------------------------- 1 | -- Juan Azcarreta Master Thesis 2 | -- SPI Complete Module 3 | -- 20th February 2016 4 | -- EPFL: LCAV & LAP collaboration 5 | 6 | library ieee; 7 | use ieee.std_logic_1164.all; 8 | use ieee.numeric_std.all; 9 | use IEEE.math_real.all; 10 | library altera_mf; 11 | use altera_mf.all; 12 | 13 | entity SPI_System is 14 | port( 15 | -- Global signals 16 | clk : in std_logic; 17 | reset_n : in std_logic; 18 | 19 | -- INTERFACE with DMA 20 | AM_Addr : out std_logic_vector(31 downto 0); 21 | AM_BurstCount : out std_logic_vector(2 downto 0); 22 | AM_Write : out std_logic; 23 | AM_DataWrite : out std_logic_vector(31 downto 0); 24 | AM_ByteEnable : out std_logic_vector(3 downto 0); 25 | AM_WaitRequest : in std_logic; 26 | 27 | -- INTERFACE with ADC 28 | Reset0 : out std_logic; 29 | Reset1 : out std_logic; 30 | Reset2 : out std_logic; 31 | busy_OR0 : in std_logic; 32 | busy_OR1 : in std_logic; 33 | busy_OR2 : in std_logic; 34 | MISO_00 : in std_logic; 35 | MISO_01 : in std_logic; 36 | MISO_10 : in std_logic; 37 | MISO_11 : in std_logic; 38 | MISO_20 : in std_logic; 39 | MISO_21 : in std_logic; 40 | CONVST0 : out std_logic; 41 | CONVST1 : out std_logic; 42 | CONVST2 : out std_logic; 43 | CS0_n : out std_logic; 44 | CS1_n : out std_logic; 45 | CS2_n : out std_logic; 46 | SCLK0 : out std_logic; -- SCLK will be 12.5 MHz 47 | SCLK1 : out std_logic; -- SCLK will be 12.5 MHz, enough to respect timings 48 | SCLK2 : out std_logic; -- SCLK will be 12.5 MHz, enough to respect timings 49 | -- INTERFACE with Slave Registers 50 | AS_Addr : in std_logic_vector(2 downto 0); 51 | AS_Write : in std_logic; 52 | AS_Read : in std_logic; 53 | AS_ReadData : out std_logic_vector(31 downto 0); 54 | AS_WriteData : in std_logic_vector(31 downto 0); 55 | 56 | -- Avalon ST source interface Left 57 | Source_Data_Left : out std_logic_vector(21 downto 0); 58 | Source_sop_Left : out std_logic; 59 | Source_eop_Left : out std_logic; 60 | Source_Valid_Left : out std_logic; 61 | Source_Ready_Left : in std_logic; 62 | 63 | -- Avalon ST source interface Right 64 | Source_Data_Right : out std_logic_vector(21 downto 0); 65 | Source_sop_Right : out std_logic; 66 | Source_eop_Right : out std_logic; 67 | Source_Valid_Right : out std_logic; 68 | Source_Ready_Right : in std_logic 69 | ); 70 | end SPI_System; 71 | 72 | architecture project of SPI_System is 73 | signal Data_Available, Buffer1, Buffer2, Circular : std_logic; 74 | signal DataRd, Start, Stop : std_logic; 75 | signal Data, RegAddStart, RegLgt : std_logic_vector(31 downto 0); 76 | signal sel : std_logic_vector(2 downto 0); 77 | signal array_vector : std_logic_vector(2 downto 0); 78 | signal CS_n : std_logic; 79 | signal SCLK : std_logic; 80 | signal reset : std_logic; 81 | signal busy : std_logic; 82 | signal Streaming_Valid, Streaming_Ready : std_logic; 83 | signal Streaming_Data : std_logic_vector(31 downto 0); 84 | 85 | begin 86 | Controller : entity work.SPI_Controller 87 | port map( 88 | clk => clk, 89 | reset_n => reset_n, 90 | -- Interaction with ADC Module 91 | busy_OR0 => busy_OR0, 92 | busy_OR1 => busy_OR1, 93 | busy_OR2 => busy_OR2, 94 | MISO_00 => MISO_00, 95 | MISO_01 => MISO_01, 96 | MISO_10 => MISO_10, 97 | MISO_11 => MISO_11, 98 | MISO_20 => MISO_20, 99 | MISO_21 => MISO_21, 100 | CONVST0 => CONVST0, 101 | CONVST1 => CONVST1, 102 | CONVST2 => CONVST2, 103 | 104 | -- Interaction with DMA 105 | CS_n => CS_n, 106 | SCLK => SCLK, 107 | -- Interaction with Slave Registers 108 | reset => reset, 109 | Start => Start, 110 | -- Interface with DMA 111 | Data => Data, 112 | DataRd => DataRd, 113 | sel => sel, 114 | array_vector => array_vector, 115 | Data_Available => Data_Available, 116 | Stop => Stop 117 | ); 118 | 119 | DMA : entity work.SPI_DMA 120 | port map( 121 | clk => clk, 122 | reset_n => reset_n, 123 | AM_Addr => AM_Addr, 124 | AM_ByteEnable => AM_ByteEnable, 125 | AM_BurstCount => AM_BurstCount, 126 | AM_Write => AM_Write, 127 | AM_DataWrite => AM_DataWrite, 128 | AM_WaitRequest => AM_WaitRequest, 129 | Data => Data, 130 | Data_Available => Data_Available, 131 | DataRd => DataRd, 132 | sel => sel, 133 | array_vector => array_vector, 134 | RegAddStart => RegAddStart, 135 | RegLgt => RegLgt, 136 | Start => Start, 137 | Stop => Stop, 138 | Buffer1 => Buffer1, 139 | Buffer2 => Buffer2, 140 | Streaming_Data => Streaming_Data, 141 | Streaming_Valid => Streaming_Valid, 142 | Streaming_Ready => Streaming_Ready 143 | ); 144 | 145 | Slave : entity work.SPI_Slave 146 | port map( 147 | clk => clk, 148 | reset_n => reset_n, 149 | AS_Addr => AS_Addr, 150 | AS_Write => AS_Write, 151 | AS_Read => AS_Read, 152 | AS_WriteData => AS_WriteData, 153 | AS_ReadData => AS_ReadData, 154 | Start => Start, 155 | RegAddStart => RegAddStart, 156 | RegLgt => RegLgt, 157 | Buffer1 => Buffer1, 158 | Buffer2 => Buffer2, 159 | DMA_Stop => Stop 160 | ); 161 | 162 | Streaming : entity work.SPI_Streaming 163 | port map( 164 | -- Global signals 165 | clk => clk, 166 | reset_n => reset_n, 167 | -- DMA Control signals 168 | Streaming_Data => Streaming_Data, 169 | Streaming_Valid => Streaming_Valid, 170 | Streaming_Ready => Streaming_Ready, 171 | 172 | -- Avalon ST source interface 173 | Source_Data_Left => Source_Data_Left, 174 | Source_sop_Left => Source_sop_Left, 175 | Source_eop_Left => Source_eop_Left, 176 | Source_Valid_Left => Source_Valid_Left, 177 | Source_Ready_Left => Source_Ready_Left, 178 | 179 | -- Avalon ST source interface 180 | Source_Data_Right => Source_Data_Right, 181 | Source_sop_Right => Source_sop_Right, 182 | Source_eop_Right => Source_eop_Right, 183 | Source_Valid_Right => Source_Valid_Right, 184 | Source_Ready_Right => Source_Ready_Right 185 | ); 186 | 187 | -- SCLK 188 | SCLK0 <= SCLK; 189 | SCLK1 <= SCLK; 190 | SCLK2 <= SCLK; 191 | -- CS 192 | CS0_n <= CS_n; 193 | CS1_n <= CS_n; 194 | CS2_n <= CS_n; 195 | -- Reset 196 | Reset0 <= reset; 197 | Reset1 <= reset; 198 | Reset2 <= reset; 199 | 200 | end architecture project; 201 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/hw/modelsim/work/_info: -------------------------------------------------------------------------------- 1 | m255 2 | K3 3 | z0 4 | 13 5 | cModel Technology 6 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/hw/quartus/.gitignore: -------------------------------------------------------------------------------- 1 | .qsys_edit/ 2 | c5_pin_model_dump.txt 3 | db/ 4 | hps_isw_handoff/ 5 | hps_sdram_p0_all_pins.txt 6 | incremental_db/ 7 | output_files/ 8 | Pyramic_Array/ 9 | Pyramic_Array.sopcinfo 10 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/hw/quartus/Beamformer_hw.tcl: -------------------------------------------------------------------------------- 1 | # TCL File Generated by Component Editor 16.0 2 | # Thu Jul 28 17:41:46 CEST 2016 3 | # DO NOT MODIFY 4 | 5 | 6 | # 7 | # Beamformer "Beamformer" v1.0 8 | # 2016.07.28.17:41:46 9 | # 10 | # 11 | 12 | # 13 | # request TCL package from ACDS 16.0 14 | # 15 | package require -exact qsys 16.0 16 | 17 | 18 | # 19 | # module Beamformer 20 | # 21 | set_module_property DESCRIPTION "" 22 | set_module_property NAME Beamformer 23 | set_module_property VERSION 1.0 24 | set_module_property INTERNAL false 25 | set_module_property OPAQUE_ADDRESS_MAP true 26 | set_module_property AUTHOR "" 27 | set_module_property DISPLAY_NAME Beamformer 28 | set_module_property INSTANTIATE_IN_SYSTEM_MODULE true 29 | set_module_property EDITABLE true 30 | set_module_property REPORT_TO_TALKBACK false 31 | set_module_property ALLOW_GREYBOX_GENERATION false 32 | set_module_property REPORT_HIERARCHY false 33 | 34 | 35 | # 36 | # file sets 37 | # 38 | add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" 39 | set_fileset_property QUARTUS_SYNTH TOP_LEVEL Beamformer_Adder 40 | set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false 41 | set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false 42 | add_fileset_file Beamformer_Adder.vhd VHDL PATH ../hdl/Beamformer_Adder.vhd TOP_LEVEL_FILE 43 | 44 | 45 | # 46 | # parameters 47 | # 48 | add_parameter DATA_WIDTH NATURAL 32 "" 49 | set_parameter_property DATA_WIDTH DEFAULT_VALUE 32 50 | set_parameter_property DATA_WIDTH DISPLAY_NAME DATA_WIDTH 51 | set_parameter_property DATA_WIDTH TYPE NATURAL 52 | set_parameter_property DATA_WIDTH UNITS None 53 | set_parameter_property DATA_WIDTH ALLOWED_RANGES 0:2147483647 54 | set_parameter_property DATA_WIDTH DESCRIPTION "" 55 | set_parameter_property DATA_WIDTH HDL_PARAMETER true 56 | 57 | 58 | # 59 | # display items 60 | # 61 | 62 | 63 | # 64 | # connection point clock 65 | # 66 | add_interface clock clock end 67 | set_interface_property clock clockRate 0 68 | set_interface_property clock ENABLED true 69 | set_interface_property clock EXPORT_OF "" 70 | set_interface_property clock PORT_NAME_MAP "" 71 | set_interface_property clock CMSIS_SVD_VARIABLES "" 72 | set_interface_property clock SVD_ADDRESS_GROUP "" 73 | 74 | add_interface_port clock clk clk Input 1 75 | 76 | 77 | # 78 | # connection point reset 79 | # 80 | add_interface reset reset end 81 | set_interface_property reset associatedClock clock 82 | set_interface_property reset synchronousEdges DEASSERT 83 | set_interface_property reset ENABLED true 84 | set_interface_property reset EXPORT_OF "" 85 | set_interface_property reset PORT_NAME_MAP "" 86 | set_interface_property reset CMSIS_SVD_VARIABLES "" 87 | set_interface_property reset SVD_ADDRESS_GROUP "" 88 | 89 | add_interface_port reset reset_n reset_n Input 1 90 | 91 | 92 | # 93 | # connection point Source_Beam 94 | # 95 | add_interface Source_Beam avalon_streaming start 96 | set_interface_property Source_Beam associatedClock clock 97 | set_interface_property Source_Beam associatedReset reset 98 | set_interface_property Source_Beam dataBitsPerSymbol 8 99 | set_interface_property Source_Beam errorDescriptor "" 100 | set_interface_property Source_Beam firstSymbolInHighOrderBits true 101 | set_interface_property Source_Beam maxChannel 0 102 | set_interface_property Source_Beam readyLatency 0 103 | set_interface_property Source_Beam ENABLED true 104 | set_interface_property Source_Beam EXPORT_OF "" 105 | set_interface_property Source_Beam PORT_NAME_MAP "" 106 | set_interface_property Source_Beam CMSIS_SVD_VARIABLES "" 107 | set_interface_property Source_Beam SVD_ADDRESS_GROUP "" 108 | 109 | add_interface_port Source_Beam Audio_Ready ready Input 1 110 | add_interface_port Source_Beam Audio_Valid valid Output 1 111 | add_interface_port Source_Beam Audio_data data Output data_width 112 | 113 | 114 | # 115 | # connection point Sink_FIR 116 | # 117 | add_interface Sink_FIR avalon_streaming end 118 | set_interface_property Sink_FIR associatedClock clock 119 | set_interface_property Sink_FIR associatedReset reset 120 | set_interface_property Sink_FIR dataBitsPerSymbol 32 121 | set_interface_property Sink_FIR errorDescriptor "" 122 | set_interface_property Sink_FIR firstSymbolInHighOrderBits true 123 | set_interface_property Sink_FIR maxChannel 0 124 | set_interface_property Sink_FIR readyLatency 0 125 | set_interface_property Sink_FIR ENABLED true 126 | set_interface_property Sink_FIR EXPORT_OF "" 127 | set_interface_property Sink_FIR PORT_NAME_MAP "" 128 | set_interface_property Sink_FIR CMSIS_SVD_VARIABLES "" 129 | set_interface_property Sink_FIR SVD_ADDRESS_GROUP "" 130 | 131 | add_interface_port Sink_FIR FIR_data data Input data_width 132 | add_interface_port Sink_FIR FIR_Valid valid Input 1 133 | add_interface_port Sink_FIR FIR_Ready ready Output 1 134 | add_interface_port Sink_FIR FIR_sop startofpacket Input 1 135 | add_interface_port Sink_FIR FIR_eop endofpacket Input 1 136 | add_interface_port Sink_FIR FIR_channel channel Input 6 137 | 138 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/hw/quartus/LEDDriver_hw.tcl: -------------------------------------------------------------------------------- 1 | # TCL File Generated by Component Editor 16.0 2 | # Fri Jan 06 10:39:52 UTC 2017 3 | # DO NOT MODIFY 4 | 5 | 6 | # 7 | # LEDDriver "LED Ring Driver" v1.0 8 | # 2017.01.06.10:39:52 9 | # 10 | # 11 | 12 | # 13 | # request TCL package from ACDS 16.0 14 | # 15 | package require -exact qsys 16.0 16 | 17 | 18 | # 19 | # module LEDDriver 20 | # 21 | set_module_property DESCRIPTION "" 22 | set_module_property NAME LEDDriver 23 | set_module_property VERSION 1.0 24 | set_module_property INTERNAL false 25 | set_module_property OPAQUE_ADDRESS_MAP true 26 | set_module_property AUTHOR "" 27 | set_module_property DISPLAY_NAME "LED Ring Driver" 28 | set_module_property INSTANTIATE_IN_SYSTEM_MODULE true 29 | set_module_property EDITABLE true 30 | set_module_property REPORT_TO_TALKBACK false 31 | set_module_property ALLOW_GREYBOX_GENERATION false 32 | set_module_property REPORT_HIERARCHY false 33 | 34 | 35 | # 36 | # file sets 37 | # 38 | add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" "" 39 | set_fileset_property QUARTUS_SYNTH TOP_LEVEL LEDDriver 40 | set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false 41 | set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false 42 | add_fileset_file LEDDriver.vhd VHDL PATH ../hdl/LEDDriver.vhd TOP_LEVEL_FILE 43 | 44 | 45 | # 46 | # parameters 47 | # 48 | 49 | 50 | # 51 | # display items 52 | # 53 | 54 | 55 | # 56 | # connection point clock_sink 57 | # 58 | add_interface clock_sink clock end 59 | set_interface_property clock_sink clockRate 0 60 | set_interface_property clock_sink ENABLED true 61 | set_interface_property clock_sink EXPORT_OF "" 62 | set_interface_property clock_sink PORT_NAME_MAP "" 63 | set_interface_property clock_sink CMSIS_SVD_VARIABLES "" 64 | set_interface_property clock_sink SVD_ADDRESS_GROUP "" 65 | 66 | add_interface_port clock_sink clk clk Input 1 67 | 68 | 69 | # 70 | # connection point reset_sink 71 | # 72 | add_interface reset_sink reset end 73 | set_interface_property reset_sink associatedClock clock_sink 74 | set_interface_property reset_sink synchronousEdges DEASSERT 75 | set_interface_property reset_sink ENABLED true 76 | set_interface_property reset_sink EXPORT_OF "" 77 | set_interface_property reset_sink PORT_NAME_MAP "" 78 | set_interface_property reset_sink CMSIS_SVD_VARIABLES "" 79 | set_interface_property reset_sink SVD_ADDRESS_GROUP "" 80 | 81 | add_interface_port reset_sink nReset reset_n Input 1 82 | 83 | 84 | # 85 | # connection point LEDOut 86 | # 87 | add_interface LEDOut conduit end 88 | set_interface_property LEDOut associatedClock clock_sink 89 | set_interface_property LEDOut associatedReset "" 90 | set_interface_property LEDOut ENABLED true 91 | set_interface_property LEDOut EXPORT_OF "" 92 | set_interface_property LEDOut PORT_NAME_MAP "" 93 | set_interface_property LEDOut CMSIS_SVD_VARIABLES "" 94 | set_interface_property LEDOut SVD_ADDRESS_GROUP "" 95 | 96 | add_interface_port LEDOut LEDOut ledout Output 1 97 | 98 | 99 | # 100 | # connection point avalon_slave 101 | # 102 | add_interface avalon_slave avalon end 103 | set_interface_property avalon_slave addressUnits WORDS 104 | set_interface_property avalon_slave associatedClock clock_sink 105 | set_interface_property avalon_slave associatedReset reset_sink 106 | set_interface_property avalon_slave bitsPerSymbol 8 107 | set_interface_property avalon_slave burstOnBurstBoundariesOnly false 108 | set_interface_property avalon_slave burstcountUnits WORDS 109 | set_interface_property avalon_slave explicitAddressSpan 0 110 | set_interface_property avalon_slave holdTime 0 111 | set_interface_property avalon_slave linewrapBursts false 112 | set_interface_property avalon_slave maximumPendingReadTransactions 0 113 | set_interface_property avalon_slave maximumPendingWriteTransactions 0 114 | set_interface_property avalon_slave readLatency 0 115 | set_interface_property avalon_slave readWaitTime 1 116 | set_interface_property avalon_slave setupTime 0 117 | set_interface_property avalon_slave timingUnits Cycles 118 | set_interface_property avalon_slave writeWaitTime 0 119 | set_interface_property avalon_slave ENABLED true 120 | set_interface_property avalon_slave EXPORT_OF "" 121 | set_interface_property avalon_slave PORT_NAME_MAP "" 122 | set_interface_property avalon_slave CMSIS_SVD_VARIABLES "" 123 | set_interface_property avalon_slave SVD_ADDRESS_GROUP "" 124 | 125 | add_interface_port avalon_slave Address address Input 6 126 | add_interface_port avalon_slave Write_Enable write Input 1 127 | add_interface_port avalon_slave Write_Data writedata Input 32 128 | add_interface_port avalon_slave ChipSelect chipselect Input 1 129 | add_interface_port avalon_slave Read_Data readdata Output 32 130 | add_interface_port avalon_slave Read_Enable read Input 1 131 | set_interface_assignment avalon_slave embeddedsw.configuration.isFlash 0 132 | set_interface_assignment avalon_slave embeddedsw.configuration.isMemoryDevice 0 133 | set_interface_assignment avalon_slave embeddedsw.configuration.isNonVolatileStorage 0 134 | set_interface_assignment avalon_slave embeddedsw.configuration.isPrintableDevice 0 135 | 136 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/hw/quartus/Pyramic_Array.qpf: -------------------------------------------------------------------------------- 1 | QUARTUS_VERSION = "16.0" 2 | DATE = "00:13:12 août 02, 2016" 3 | 4 | # Revisions 5 | 6 | PROJECT_REVISION = "Pyramic_Array" 7 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/.gitignore: -------------------------------------------------------------------------------- 1 | preloader/ 2 | u-boot/ 3 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/.gitignore: -------------------------------------------------------------------------------- 1 | hw_headers/ 2 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/libpyramicio_test/Makefile: -------------------------------------------------------------------------------- 1 | TARGET = libpyramicio_test 2 | LIBS = -lpyramicio 3 | CC = arm-linux-gnueabihf-gcc 4 | CFLAGS = -g -Wall -Wextra -O0 5 | LDFLAGS = -L"../pyramicio" 6 | INCS = -I"../pyramicio" 7 | 8 | .PHONY: default all clean 9 | 10 | default: $(TARGET) 11 | all: default 12 | 13 | OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c)) 14 | HEADERS = $(wildcard *.h) 15 | 16 | %.o: %.c $(HEADERS) 17 | $(CC) $(CFLAGS) $(INCS) -c $< -o $@ 18 | 19 | .PRECIOUS: $(TARGET) $(OBJECTS) 20 | 21 | $(TARGET): $(OBJECTS) 22 | $(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $@ 23 | 24 | clean: 25 | -rm -f *.o 26 | -rm -f $(TARGET) 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/libpyramicio_test/main.c: -------------------------------------------------------------------------------- 1 | /* 2 | * main.c 3 | * 4 | * Created on: Dec 22, 2016 5 | * Author: ferry 6 | */ 7 | 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | int main(void) 15 | { 16 | struct pyramic* p = pyramicInitializePyramic(); 17 | 18 | if(p) { 19 | printf("Success in Initializing Pyramic !\n"); 20 | 21 | // Silence 22 | pyramicSelectOutputSource(p, SRC_BEAMFORMER); 23 | 24 | pyramicFixedLengthCapture(p, 5000); 25 | 26 | usleep(200); 27 | while(pyramicGetCurrentBufferHalf(p) != 0) { 28 | 29 | } 30 | printf("5s capture finished\n"); 31 | struct inputBuffer inBuf = pyramicGetInputBuffer(p, 0); // 0 for 1st half, but we can indeed get all samples 32 | struct outputBuffer outBuf = pyramicGetOutputBuffer(p, 2*inBuf.samplesPerMic); 33 | 34 | uint32_t i; 35 | for(i = 0; i < inBuf.samplesPerMic; i++) { // two halves 36 | outBuf.samples[2*i] = inBuf.samples[48*i]; // L microphone 6 37 | outBuf.samples[2*i+1] = inBuf.samples[48*i + 1]; // R 38 | } 39 | 40 | printf("Output buffer filled !\n"); 41 | pyramicSetOutputBuffer(p, outBuf); 42 | pyramicSelectOutputSource(p, SRC_MEMORY); 43 | printf("Source selected!\n"); 44 | 45 | pyramicDeinitPyramic(p); 46 | } 47 | else 48 | printf("Failed to init Pyramic !\n"); 49 | 50 | return 0; 51 | } 52 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramic_mic2wav/Makefile: -------------------------------------------------------------------------------- 1 | TARGET = pyramic_mic2wav 2 | LIBS = -lpyramicio 3 | CC = arm-linux-gnueabihf-gcc 4 | CFLAGS = -g -Wall -Wextra -O0 -std=c99 5 | LDFLAGS = -L"../pyramicio" 6 | INCS = -I"../pyramicio" -I"../wav_tools" 7 | 8 | .PHONY: default all clean 9 | 10 | default: $(TARGET) 11 | all: default 12 | 13 | OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c)) 14 | HEADERS = $(wildcard *.h) 15 | 16 | %.o: %.c $(HEADERS) 17 | $(CC) $(CFLAGS) $(INCS) -c $< -o $@ 18 | 19 | .PRECIOUS: $(TARGET) $(OBJECTS) 20 | 21 | $(TARGET): $(OBJECTS) 22 | make -C "../wav_tools" 23 | $(CC) $(LDFLAGS) $(OBJECTS) "../wav_tools/make_wav.o" $(LIBS) -o $@ 24 | 25 | clean: 26 | -rm -f *.o 27 | -rm -f $(TARGET) 28 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramic_mic2wav/main.c: -------------------------------------------------------------------------------- 1 | /* 2 | * main.c 3 | * 4 | * Created on: Jan 16, 2017 5 | * Author: ferry 6 | */ 7 | 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include "make_wav.h" 14 | 15 | int main(int argc, char* argv[]) 16 | { 17 | // Usage : pyramic_mic2wav -i -p -d 18 | unsigned short* micList = NULL; 19 | unsigned short micListLength = 0; 20 | unsigned int duration = 0; 21 | char* prefix = NULL; 22 | for(int i = 0; i < argc; i++) 23 | { 24 | if(strcmp(argv[i], "-i") == 0) 25 | { 26 | i++; 27 | char* micListStr = argv[i]; 28 | // Count how many mics there are 29 | for(unsigned int index = 0; index < strlen(micListStr); index++) 30 | { 31 | if(micListStr[index] == ',') 32 | micListLength++; 33 | } 34 | micListLength += 1; 35 | 36 | // Compute the microphone list 37 | micList = malloc(micListLength * sizeof(unsigned short)); 38 | unsigned short lIndex = 0; 39 | unsigned int prevIndex = 0; 40 | unsigned int listWCLen = strlen(micListStr); 41 | for(unsigned int index = 0; index < listWCLen; index++) 42 | { 43 | if(micListStr[index] == ',' || index == listWCLen - 1) 44 | { 45 | micList[lIndex] = atoi(micListStr + prevIndex); 46 | prevIndex = index + 1; 47 | lIndex++; 48 | } 49 | } 50 | } 51 | else if(strcmp(argv[i], "-d") == 0) 52 | { 53 | i++; 54 | duration = atoi(argv[i]); 55 | } 56 | else if(strcmp(argv[i], "-p") == 0) 57 | { 58 | i++; 59 | prefix = argv[i]; 60 | } 61 | } 62 | 63 | if(micList == NULL) 64 | { 65 | fprintf(stderr, " Please specify the microphones you would like to record from using -i switch\n"); 66 | return -1; 67 | } 68 | 69 | struct pyramic* p; 70 | if(!(p = pyramicInitializePyramic())) 71 | { 72 | fprintf(stderr, "Unable to initialize the Pyramic. Ensure you are running the program as root. \n"); 73 | return -1; 74 | } 75 | 76 | pyramicFixedLengthCapture(p, duration); 77 | 78 | while(pyramicGetCurrentBufferHalf(p) != 0) { 79 | } 80 | 81 | struct inputBuffer inbuf = pyramicGetInputBuffer(p, 0); 82 | 83 | /* Wait for capture finish */ 84 | 85 | for(int i = 0; i < micListLength; i++) 86 | { 87 | printf("Handling microphone %d\n", micList[i]); 88 | int16_t* buffer = malloc(inbuf.samplesPerMic * sizeof(uint16_t)); 89 | int numSamples = inbuf.samplesPerMic; 90 | for(int sample = 0; sample < numSamples; sample++) 91 | { 92 | int sampleInBuf = 48 * sample + micList[i]; 93 | buffer[sample] = inbuf.samples[sampleInBuf]; 94 | } 95 | 96 | char* filename; 97 | if(prefix) 98 | { 99 | filename = malloc((strlen(prefix) + 10) * sizeof(char)); 100 | } 101 | else 102 | { 103 | filename = malloc(10 * sizeof(char)); 104 | } 105 | sprintf(filename, "%s_%d.wav", prefix, micList[i]); 106 | 107 | write_wav(filename, numSamples, (short int*)buffer, 48000); 108 | free(filename); 109 | 110 | free(buffer) 111 | } 112 | 113 | pyramicDeinitPyramic(p); 114 | 115 | free(micList); 116 | return 0; 117 | } 118 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/Makefile: -------------------------------------------------------------------------------- 1 | TARGET = libpyramicio.so 2 | LIBS = 3 | CC = arm-linux-gnueabihf-gcc 4 | CFLAGS = -g -Wall -Wextra -O0 -fpic -Dsoc_cv_av 5 | LDFLAGS = -shared 6 | INCS = -I "${SOCEDS_DEST_ROOT}/ds-5/sw/gcc/arm-linux-gnueabihf/libc/usr/include" -I"../hw_headers" -I "$(SOCEDS_DEST_ROOT)/ip/altera/hps/altera_hps/hwlib/include/soc_cv_av" -I"$(SOCEDS_DEST_ROOT)/ip/altera/hps/altera_hps/hwlib/include" 7 | 8 | .PHONY: default all clean 9 | 10 | default: $(TARGET) 11 | all: default 12 | 13 | OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c)) 14 | HEADERS = $(wildcard *.h) 15 | 16 | %.o: %.c $(HEADERS) 17 | $(CC) $(CFLAGS) $(INCS) -c $< -o $@ 18 | 19 | .PRECIOUS: $(TARGET) $(OBJECTS) 20 | 21 | $(TARGET): $(OBJECTS) 22 | $(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $@ 23 | 24 | install: $(TARGET) 25 | ifneq ($(PREFIX),) 26 | install -d $(PREFIX)/lib/ 27 | install -m 644 $(TARGET) $(PREFIX)/lib/ 28 | install -d $(PREFIX)/include/ 29 | install -m 644 pyramicio.h $(PREFIX)/include/ 30 | endif 31 | 32 | clean: 33 | -rm -f *.o 34 | -rm -f $(TARGET) 35 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/doc_main.md: -------------------------------------------------------------------------------- 1 | \mainpage Documentation for libpyramicio 2 | 3 | \section Wh What is libpyramicio ? 4 | 5 | This library is an abstraction layer for the Pyramic array -made at LCAV (EPFL)- 6 | input/output functions. It enables the use of the Pyramic array by designing 7 | software against an existing hardware design without having to use Altera 8 | Quartus Prime tools, or recompiling the application at each change of the 9 | design in VHDL. 10 | 11 | \section Hw How to use it ? 12 | 13 | In order to use the library, one just has to include the file, 14 | then initialize a Pyramic object through the pyramicInitializePyramic() function. 15 | 16 | All the usable functions are documented in the pyramicio.h file reference in 17 | this documentation. 18 | 19 | Note that programs that use the Pyramic have to be run as root, because the 20 | library is using direct references to memory areas that are reserved for the 21 | system. 22 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/annotated.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | libpyramicio: Class List 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 21 | 22 | 23 | 28 | 29 | 30 |
24 |
libpyramicio 25 |  1.0 26 |
27 |
31 |
32 | 33 | 34 | 37 | 38 | 39 | 45 | 46 |
47 | 48 |
52 |
53 | 54 | 55 |
56 | 59 |
60 | 61 |
62 |
63 |
Class List
64 |
65 |
66 |
Here are the classes, structs, unions and interfaces with brief descriptions:
67 | 68 | 69 | 70 | 71 |
 CinputBufferThis structure represents an input buffer, which direction is the microphone array towards the memory
 CoutputBufferThis structure represents an output buffer, which direction is the memory towards the FPGA CODEC
 CpyramicStructure contanining the addresses used by the library internals
72 |
73 |
74 | 75 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/bc_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/bc_s.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/bdwn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/bdwn.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/classes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | libpyramicio: Class Index 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 21 | 22 | 23 | 28 | 29 | 30 |
24 |
libpyramicio 25 |  1.0 26 |
27 |
31 |
32 | 33 | 34 | 37 | 38 | 39 | 45 | 46 |
47 | 48 |
52 |
53 | 54 | 55 |
56 | 59 |
60 | 61 |
62 |
63 |
Class Index
64 |
65 |
66 |
i | o | p
67 | 68 | 72 | 73 | 74 | 75 |
  i  
69 |
  o  
70 |
  p  
71 |
inputBuffer   outputBuffer   pyramic   
76 |
i | o | p
77 |
78 | 79 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/closed.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/doc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/doc.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/doxygen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/doxygen.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/dynsections.js: -------------------------------------------------------------------------------- 1 | function toggleVisibility(linkObj) 2 | { 3 | var base = $(linkObj).attr('id'); 4 | var summary = $('#'+base+'-summary'); 5 | var content = $('#'+base+'-content'); 6 | var trigger = $('#'+base+'-trigger'); 7 | var src=$(trigger).attr('src'); 8 | if (content.is(':visible')===true) { 9 | content.hide(); 10 | summary.show(); 11 | $(linkObj).addClass('closed').removeClass('opened'); 12 | $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); 13 | } else { 14 | content.show(); 15 | summary.hide(); 16 | $(linkObj).removeClass('closed').addClass('opened'); 17 | $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); 18 | } 19 | return false; 20 | } 21 | 22 | function updateStripes() 23 | { 24 | $('table.directory tr'). 25 | removeClass('even').filter(':visible:even').addClass('even'); 26 | } 27 | 28 | function toggleLevel(level) 29 | { 30 | $('table.directory tr').each(function() { 31 | var l = this.id.split('_').length-1; 32 | var i = $('#img'+this.id.substring(3)); 33 | var a = $('#arr'+this.id.substring(3)); 34 | if (l 2 | 3 | 4 | 5 | 6 | 7 | 8 | libpyramicio: File List 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 21 | 22 | 23 | 28 | 29 | 30 |
24 |
libpyramicio 25 |  1.0 26 |
27 |
31 |
32 | 33 | 34 | 37 | 38 | 39 | 45 | 46 |
47 | 48 |
52 |
53 | 54 | 55 |
56 | 59 |
60 | 61 |
62 |
63 |
File List
64 |
65 |
66 |
Here is a list of all documented files with brief descriptions:
67 | 68 | 69 |
 pyramicio.hA library that allows an easy access to the Pyramic array
70 |
71 |
72 | 73 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/folderclosed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/folderclosed.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/folderopen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/folderopen.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/functions.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | libpyramicio: Class Members 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 21 | 22 | 23 | 28 | 29 | 30 |
24 |
libpyramicio 25 |  1.0 26 |
27 |
31 |
32 | 33 | 34 | 37 | 38 | 39 | 45 | 46 |
47 | 48 |
52 |
53 | 54 | 55 |
56 | 59 |
60 | 61 |
62 |
Here is a list of all documented class members with links to the class documentation for each member:
76 |
77 | 78 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/functions_vars.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | libpyramicio: Class Members - Variables 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 21 | 22 | 23 | 28 | 29 | 30 |
24 |
libpyramicio 25 |  1.0 26 |
27 |
31 |
32 | 33 | 34 | 37 | 38 | 39 | 45 | 46 |
47 | 48 |
52 |
53 | 54 | 55 |
56 | 59 |
60 | 61 |
62 |   76 |
77 | 78 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/globals.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | libpyramicio: File Members 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 21 | 22 | 23 | 28 | 29 | 30 |
24 |
libpyramicio 25 |  1.0 26 |
27 |
31 |
32 | 33 | 34 | 37 | 38 | 39 | 45 | 46 |
47 | 48 |
52 |
53 | 54 | 55 |
56 | 59 |
60 | 61 |
62 |
Here is a list of all documented file members with links to the documentation:
    63 |
  • pyramicAllocateOutputBuffer() 64 | : pyramicio.h 65 |
  • 66 |
  • pyramicDeallocateOutputBuffer() 67 | : pyramicio.h 68 |
  • 69 |
  • pyramicDeinitPyramic() 70 | : pyramicio.h 71 |
  • 72 |
  • pyramicFixedLengthCapture() 73 | : pyramicio.h 74 |
  • 75 |
  • pyramicGetCurrentBufferHalf() 76 | : pyramicio.h 77 |
  • 78 |
  • pyramicGetInputBuffer() 79 | : pyramicio.h 80 |
  • 81 |
  • pyramicInitializePyramic() 82 | : pyramicio.h 83 |
  • 84 |
  • pyramicSelectOutputSource() 85 | : pyramicio.h 86 |
  • 87 |
  • pyramicSetOutputBuffer() 88 | : pyramicio.h 89 |
  • 90 |
  • pyramicStartCapture() 91 | : pyramicio.h 92 |
  • 93 |
  • pyramicStopCapture() 94 | : pyramicio.h 95 |
  • 96 |
97 |
98 | 99 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/globals_func.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | libpyramicio: File Members 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 21 | 22 | 23 | 28 | 29 | 30 |
24 |
libpyramicio 25 |  1.0 26 |
27 |
31 |
32 | 33 | 34 | 37 | 38 | 39 | 45 | 46 |
47 | 48 |
52 |
53 | 54 | 55 |
56 | 59 |
60 | 61 |
62 |  
    63 |
  • pyramicAllocateOutputBuffer() 64 | : pyramicio.h 65 |
  • 66 |
  • pyramicDeallocateOutputBuffer() 67 | : pyramicio.h 68 |
  • 69 |
  • pyramicDeinitPyramic() 70 | : pyramicio.h 71 |
  • 72 |
  • pyramicFixedLengthCapture() 73 | : pyramicio.h 74 |
  • 75 |
  • pyramicGetCurrentBufferHalf() 76 | : pyramicio.h 77 |
  • 78 |
  • pyramicGetInputBuffer() 79 | : pyramicio.h 80 |
  • 81 |
  • pyramicInitializePyramic() 82 | : pyramicio.h 83 |
  • 84 |
  • pyramicSelectOutputSource() 85 | : pyramicio.h 86 |
  • 87 |
  • pyramicSetOutputBuffer() 88 | : pyramicio.h 89 |
  • 90 |
  • pyramicStartCapture() 91 | : pyramicio.h 92 |
  • 93 |
  • pyramicStopCapture() 94 | : pyramicio.h 95 |
  • 96 |
97 |
98 | 99 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | libpyramicio: Documentation for libpyramicio 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 21 | 22 | 23 | 28 | 29 | 30 |
24 |
libpyramicio 25 |  1.0 26 |
27 |
31 |
32 | 33 | 34 | 37 | 38 | 39 | 45 | 46 |
47 | 48 |
52 |
53 | 54 | 55 |
56 | 59 |
60 | 61 |
62 |
63 |
Documentation for libpyramicio
64 |
65 |
66 |

67 | What is libpyramicio ?

68 |

This library is an abstraction layer for the Pyramic array -made at LCAV (EPFL)- input/output functions. It enables the use of the Pyramic array by designing software against an existing hardware design without having to use Altera Quartus Prime tools, or recompiling the application at each change of the design in VHDL.

69 |

70 | How to use it ?

71 |

In order to use the library, one just has to include the <pyramicio.h> file, then initialize a Pyramic object through the pyramicInitializePyramic() function.

72 |

All the usable functions are documented in the pyramicio.h file reference in this documentation.

73 |

Note that programs that use the Pyramic have to be run as root, because the library is using direct references to memory areas that are reserved for the system.

74 |
75 | 76 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/menu.js: -------------------------------------------------------------------------------- 1 | function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { 2 | function makeTree(data,relPath) { 3 | var result=''; 4 | if ('children' in data) { 5 | result+=''; 12 | } 13 | return result; 14 | } 15 | 16 | $('#main-nav').append(makeTree(menudata,relPath)); 17 | $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); 18 | if (searchEnabled) { 19 | if (serverSide) { 20 | $('#main-menu').append('
  • '); 21 | } else { 22 | $('#main-menu').append('
  • '); 23 | } 24 | } 25 | $('#main-menu').smartmenus(); 26 | } 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/menudata.js: -------------------------------------------------------------------------------- 1 | var menudata={children:[ 2 | {text:'Main Page',url:'index.html'}, 3 | {text:'Classes',url:'annotated.html',children:[ 4 | {text:'Class List',url:'annotated.html'}, 5 | {text:'Class Index',url:'classes.html'}, 6 | {text:'Class Members',url:'functions.html',children:[ 7 | {text:'All',url:'functions.html'}, 8 | {text:'Variables',url:'functions_vars.html'}]}]}, 9 | {text:'Files',url:'files.html',children:[ 10 | {text:'File List',url:'files.html'}, 11 | {text:'File Members',url:'globals.html',children:[ 12 | {text:'All',url:'globals.html'}, 13 | {text:'Functions',url:'globals_func.html'}]}]}]} 14 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/nav_f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/nav_f.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/nav_g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/nav_g.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/nav_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/nav_h.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/open.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/all_0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/all_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['documentation_20for_20libpyramicio',['Documentation for libpyramicio',['../index.html',1,'']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/all_1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/all_1.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['inputbuffer',['inputBuffer',['../structinputBuffer.html',1,'']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/all_2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/all_2.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['microphonecount',['microphoneCount',['../structinputBuffer.html#a35bfb2e7cb4d0c0491f9efbe0273e455',1,'inputBuffer']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/all_3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/all_3.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['outputbuffer',['outputBuffer',['../structoutputBuffer.html',1,'']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/all_4.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/all_4.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['pyramic',['pyramic',['../structpyramic.html',1,'']]], 4 | ['pyramicallocateoutputbuffer',['pyramicAllocateOutputBuffer',['../pyramicio_8h.html#ac64771d55b17cf9fef4db7b7d85b2d29',1,'pyramicio.h']]], 5 | ['pyramicdeallocateoutputbuffer',['pyramicDeallocateOutputBuffer',['../pyramicio_8h.html#a52d1e783df48e8eacef637a196aca3a0',1,'pyramicio.h']]], 6 | ['pyramicdeinitpyramic',['pyramicDeinitPyramic',['../pyramicio_8h.html#ac94c73d19dd0e24d95d54e36a58d3773',1,'pyramicio.h']]], 7 | ['pyramicfixedlengthcapture',['pyramicFixedLengthCapture',['../pyramicio_8h.html#ae3c8c7cbb8871e075bb3f4af1a961e71',1,'pyramicio.h']]], 8 | ['pyramicgetcurrentbufferhalf',['pyramicGetCurrentBufferHalf',['../pyramicio_8h.html#a9d6dd3246d067af5d9c8f883076a8d86',1,'pyramicio.h']]], 9 | ['pyramicgetinputbuffer',['pyramicGetInputBuffer',['../pyramicio_8h.html#a81011a5908eb9e8ba814fc915d3cf39c',1,'pyramicio.h']]], 10 | ['pyramicinitializepyramic',['pyramicInitializePyramic',['../pyramicio_8h.html#ac3c433fb9ac54d8e5e93a2423ed79e5e',1,'pyramicio.h']]], 11 | ['pyramicio_2eh',['pyramicio.h',['../pyramicio_8h.html',1,'']]], 12 | ['pyramicselectoutputsource',['pyramicSelectOutputSource',['../pyramicio_8h.html#a90eb22cc274f3a9ef5686a83b7764ae7',1,'pyramicio.h']]], 13 | ['pyramicsetoutputbuffer',['pyramicSetOutputBuffer',['../pyramicio_8h.html#a017b36211ed54afd24e90d8633a062a3',1,'pyramicio.h']]], 14 | ['pyramicstartcapture',['pyramicStartCapture',['../pyramicio_8h.html#a9c174a1fe3dc16e77ef17c11a349be0f',1,'pyramicio.h']]], 15 | ['pyramicstopcapture',['pyramicStopCapture',['../pyramicio_8h.html#ae3e5d9483452a3e2dd851413d58a2336',1,'pyramicio.h']]] 16 | ]; 17 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/all_5.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/all_5.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['samples',['samples',['../structinputBuffer.html#af6cdbaa4124d3e9db0272c19c94b2707',1,'inputBuffer']]], 4 | ['samplespermic',['samplesPerMic',['../structinputBuffer.html#ab8b6a76bd2e891f34932e80268b66178',1,'inputBuffer']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/all_6.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/all_6.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['totalsamplecount',['totalSampleCount',['../structinputBuffer.html#a37bcaba2336dc42b37c4362e30483129',1,'inputBuffer']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/classes_0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/classes_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['inputbuffer',['inputBuffer',['../structinputBuffer.html',1,'']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/classes_1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/classes_1.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['outputbuffer',['outputBuffer',['../structoutputBuffer.html',1,'']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/classes_2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/classes_2.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['pyramic',['pyramic',['../structpyramic.html',1,'']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/close.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/files_0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/files_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['pyramicio_2eh',['pyramicio.h',['../pyramicio_8h.html',1,'']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/functions_0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/functions_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['pyramicallocateoutputbuffer',['pyramicAllocateOutputBuffer',['../pyramicio_8h.html#ac64771d55b17cf9fef4db7b7d85b2d29',1,'pyramicio.h']]], 4 | ['pyramicdeallocateoutputbuffer',['pyramicDeallocateOutputBuffer',['../pyramicio_8h.html#a52d1e783df48e8eacef637a196aca3a0',1,'pyramicio.h']]], 5 | ['pyramicdeinitpyramic',['pyramicDeinitPyramic',['../pyramicio_8h.html#ac94c73d19dd0e24d95d54e36a58d3773',1,'pyramicio.h']]], 6 | ['pyramicfixedlengthcapture',['pyramicFixedLengthCapture',['../pyramicio_8h.html#ae3c8c7cbb8871e075bb3f4af1a961e71',1,'pyramicio.h']]], 7 | ['pyramicgetcurrentbufferhalf',['pyramicGetCurrentBufferHalf',['../pyramicio_8h.html#a9d6dd3246d067af5d9c8f883076a8d86',1,'pyramicio.h']]], 8 | ['pyramicgetinputbuffer',['pyramicGetInputBuffer',['../pyramicio_8h.html#a81011a5908eb9e8ba814fc915d3cf39c',1,'pyramicio.h']]], 9 | ['pyramicinitializepyramic',['pyramicInitializePyramic',['../pyramicio_8h.html#ac3c433fb9ac54d8e5e93a2423ed79e5e',1,'pyramicio.h']]], 10 | ['pyramicselectoutputsource',['pyramicSelectOutputSource',['../pyramicio_8h.html#a90eb22cc274f3a9ef5686a83b7764ae7',1,'pyramicio.h']]], 11 | ['pyramicsetoutputbuffer',['pyramicSetOutputBuffer',['../pyramicio_8h.html#a017b36211ed54afd24e90d8633a062a3',1,'pyramicio.h']]], 12 | ['pyramicstartcapture',['pyramicStartCapture',['../pyramicio_8h.html#a9c174a1fe3dc16e77ef17c11a349be0f',1,'pyramicio.h']]], 13 | ['pyramicstopcapture',['pyramicStopCapture',['../pyramicio_8h.html#ae3e5d9483452a3e2dd851413d58a2336',1,'pyramicio.h']]] 14 | ]; 15 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/mag_sel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/mag_sel.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/nomatches.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
    9 |
    No Matches
    10 |
    11 | 12 | 13 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/pages_0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/pages_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['documentation_20for_20libpyramicio',['Documentation for libpyramicio',['../index.html',1,'']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/search.css: -------------------------------------------------------------------------------- 1 | /*---------------- Search Box */ 2 | 3 | #FSearchBox { 4 | float: left; 5 | } 6 | 7 | #MSearchBox { 8 | white-space : nowrap; 9 | float: none; 10 | margin-top: 8px; 11 | right: 0px; 12 | width: 170px; 13 | height: 24px; 14 | z-index: 102; 15 | } 16 | 17 | #MSearchBox .left 18 | { 19 | display:block; 20 | position:absolute; 21 | left:10px; 22 | width:20px; 23 | height:19px; 24 | background:url('search_l.png') no-repeat; 25 | background-position:right; 26 | } 27 | 28 | #MSearchSelect { 29 | display:block; 30 | position:absolute; 31 | width:20px; 32 | height:19px; 33 | } 34 | 35 | .left #MSearchSelect { 36 | left:4px; 37 | } 38 | 39 | .right #MSearchSelect { 40 | right:5px; 41 | } 42 | 43 | #MSearchField { 44 | display:block; 45 | position:absolute; 46 | height:19px; 47 | background:url('search_m.png') repeat-x; 48 | border:none; 49 | width:115px; 50 | margin-left:20px; 51 | padding-left:4px; 52 | color: #909090; 53 | outline: none; 54 | font: 9pt Arial, Verdana, sans-serif; 55 | -webkit-border-radius: 0px; 56 | } 57 | 58 | #FSearchBox #MSearchField { 59 | margin-left:15px; 60 | } 61 | 62 | #MSearchBox .right { 63 | display:block; 64 | position:absolute; 65 | right:10px; 66 | top:8px; 67 | width:20px; 68 | height:19px; 69 | background:url('search_r.png') no-repeat; 70 | background-position:left; 71 | } 72 | 73 | #MSearchClose { 74 | display: none; 75 | position: absolute; 76 | top: 4px; 77 | background : none; 78 | border: none; 79 | margin: 0px 4px 0px 0px; 80 | padding: 0px 0px; 81 | outline: none; 82 | } 83 | 84 | .left #MSearchClose { 85 | left: 6px; 86 | } 87 | 88 | .right #MSearchClose { 89 | right: 2px; 90 | } 91 | 92 | .MSearchBoxActive #MSearchField { 93 | color: #000000; 94 | } 95 | 96 | /*---------------- Search filter selection */ 97 | 98 | #MSearchSelectWindow { 99 | display: none; 100 | position: absolute; 101 | left: 0; top: 0; 102 | border: 1px solid #90A5CE; 103 | background-color: #F9FAFC; 104 | z-index: 10001; 105 | padding-top: 4px; 106 | padding-bottom: 4px; 107 | -moz-border-radius: 4px; 108 | -webkit-border-top-left-radius: 4px; 109 | -webkit-border-top-right-radius: 4px; 110 | -webkit-border-bottom-left-radius: 4px; 111 | -webkit-border-bottom-right-radius: 4px; 112 | -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); 113 | } 114 | 115 | .SelectItem { 116 | font: 8pt Arial, Verdana, sans-serif; 117 | padding-left: 2px; 118 | padding-right: 12px; 119 | border: 0px; 120 | } 121 | 122 | span.SelectionMark { 123 | margin-right: 4px; 124 | font-family: monospace; 125 | outline-style: none; 126 | text-decoration: none; 127 | } 128 | 129 | a.SelectItem { 130 | display: block; 131 | outline-style: none; 132 | color: #000000; 133 | text-decoration: none; 134 | padding-left: 6px; 135 | padding-right: 12px; 136 | } 137 | 138 | a.SelectItem:focus, 139 | a.SelectItem:active { 140 | color: #000000; 141 | outline-style: none; 142 | text-decoration: none; 143 | } 144 | 145 | a.SelectItem:hover { 146 | color: #FFFFFF; 147 | background-color: #3D578C; 148 | outline-style: none; 149 | text-decoration: none; 150 | cursor: pointer; 151 | display: block; 152 | } 153 | 154 | /*---------------- Search results window */ 155 | 156 | iframe#MSearchResults { 157 | width: 60ex; 158 | height: 15em; 159 | } 160 | 161 | #MSearchResultsWindow { 162 | display: none; 163 | position: absolute; 164 | left: 0; top: 0; 165 | border: 1px solid #000; 166 | background-color: #EEF1F7; 167 | z-index:10000; 168 | } 169 | 170 | /* ----------------------------------- */ 171 | 172 | 173 | #SRIndex { 174 | clear:both; 175 | padding-bottom: 15px; 176 | } 177 | 178 | .SREntry { 179 | font-size: 10pt; 180 | padding-left: 1ex; 181 | } 182 | 183 | .SRPage .SREntry { 184 | font-size: 8pt; 185 | padding: 1px 5px; 186 | } 187 | 188 | body.SRPage { 189 | margin: 5px 2px; 190 | } 191 | 192 | .SRChildren { 193 | padding-left: 3ex; padding-bottom: .5em 194 | } 195 | 196 | .SRPage .SRChildren { 197 | display: none; 198 | } 199 | 200 | .SRSymbol { 201 | font-weight: bold; 202 | color: #425E97; 203 | font-family: Arial, Verdana, sans-serif; 204 | text-decoration: none; 205 | outline: none; 206 | } 207 | 208 | a.SRScope { 209 | display: block; 210 | color: #425E97; 211 | font-family: Arial, Verdana, sans-serif; 212 | text-decoration: none; 213 | outline: none; 214 | } 215 | 216 | a.SRSymbol:focus, a.SRSymbol:active, 217 | a.SRScope:focus, a.SRScope:active { 218 | text-decoration: underline; 219 | } 220 | 221 | span.SRScope { 222 | padding-left: 4px; 223 | } 224 | 225 | .SRPage .SRStatus { 226 | padding: 2px 5px; 227 | font-size: 8pt; 228 | font-style: italic; 229 | } 230 | 231 | .SRResult { 232 | display: none; 233 | } 234 | 235 | DIV.searchresults { 236 | margin-left: 10px; 237 | margin-right: 10px; 238 | } 239 | 240 | /*---------------- External search page results */ 241 | 242 | .searchresult { 243 | background-color: #F0F3F8; 244 | } 245 | 246 | .pages b { 247 | color: white; 248 | padding: 5px 5px 3px 5px; 249 | background-image: url("../tab_a.png"); 250 | background-repeat: repeat-x; 251 | text-shadow: 0 1px 1px #000000; 252 | } 253 | 254 | .pages { 255 | line-height: 17px; 256 | margin-left: 4px; 257 | text-decoration: none; 258 | } 259 | 260 | .hl { 261 | font-weight: bold; 262 | } 263 | 264 | #searchresults { 265 | margin-bottom: 20px; 266 | } 267 | 268 | .searchpages { 269 | margin-top: 10px; 270 | } 271 | 272 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/search_l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/search_l.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/search_m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/search_m.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/search_r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/search_r.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/searchdata.js: -------------------------------------------------------------------------------- 1 | var indexSectionsWithContent = 2 | { 3 | 0: "dimopst", 4 | 1: "iop", 5 | 2: "p", 6 | 3: "p", 7 | 4: "mst", 8 | 5: "d" 9 | }; 10 | 11 | var indexSectionNames = 12 | { 13 | 0: "all", 14 | 1: "classes", 15 | 2: "files", 16 | 3: "functions", 17 | 4: "variables", 18 | 5: "pages" 19 | }; 20 | 21 | var indexSectionLabels = 22 | { 23 | 0: "All", 24 | 1: "Classes", 25 | 2: "Files", 26 | 3: "Functions", 27 | 4: "Variables", 28 | 5: "Pages" 29 | }; 30 | 31 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/variables_0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/variables_0.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['microphonecount',['microphoneCount',['../structinputBuffer.html#a35bfb2e7cb4d0c0491f9efbe0273e455',1,'inputBuffer']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/variables_1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/variables_1.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['samples',['samples',['../structinputBuffer.html#af6cdbaa4124d3e9db0272c19c94b2707',1,'inputBuffer']]], 4 | ['samplespermic',['samplesPerMic',['../structinputBuffer.html#ab8b6a76bd2e891f34932e80268b66178',1,'inputBuffer']]] 5 | ]; 6 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/variables_2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
    11 |
    Loading...
    12 |
    13 | 16 |
    Searching...
    17 |
    No Matches
    18 | 24 |
    25 | 26 | 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/search/variables_2.js: -------------------------------------------------------------------------------- 1 | var searchData= 2 | [ 3 | ['totalsamplecount',['totalSampleCount',['../structinputBuffer.html#a37bcaba2336dc42b37c4362e30483129',1,'inputBuffer']]] 4 | ]; 5 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/splitbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/splitbar.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/structinputBuffer-members.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | libpyramicio: Member List 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
    19 |
    20 | 21 | 22 | 23 | 28 | 29 | 30 |
    24 |
    libpyramicio 25 |  1.0 26 |
    27 |
    31 |
    32 | 33 | 34 | 37 | 38 | 39 | 45 | 46 | 47 |
    51 |
    52 | 53 | 54 |
    55 | 58 |
    59 | 60 |
    61 |
    62 |
    63 |
    inputBuffer Member List
    64 |
    65 |
    66 | 67 |

    This is the complete list of members for inputBuffer, including all inherited members.

    68 | 69 | 70 | 71 | 72 | 73 |
    microphoneCountinputBuffer
    samplesinputBuffer
    samplesPerMicinputBuffer
    totalSampleCountinputBuffer
    74 | 75 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/structoutputBuffer-members.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | libpyramicio: Member List 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
    19 |
    20 | 21 | 22 | 23 | 28 | 29 | 30 |
    24 |
    libpyramicio 25 |  1.0 26 |
    27 |
    31 |
    32 | 33 | 34 | 37 | 38 | 39 | 45 | 46 | 47 |
    51 |
    52 | 53 | 54 |
    55 | 58 |
    59 | 60 |
    61 |
    62 |
    63 |
    outputBuffer Member List
    64 |
    65 |
    66 | 67 |

    This is the complete list of members for outputBuffer, including all inherited members.

    68 | 69 | 70 | 71 | 72 |
    baseAddress (defined in outputBuffer)outputBuffer
    length (defined in outputBuffer)outputBuffer
    samples (defined in outputBuffer)outputBuffer
    73 | 74 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/structoutputBuffer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | libpyramicio: outputBuffer Struct Reference 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
    19 |
    20 | 21 | 22 | 23 | 28 | 29 | 30 |
    24 |
    libpyramicio 25 |  1.0 26 |
    27 |
    31 |
    32 | 33 | 34 | 37 | 38 | 39 | 45 | 46 | 47 |
    51 |
    52 | 53 | 54 |
    55 | 58 |
    59 | 60 |
    61 |
    62 | 65 |
    66 |
    outputBuffer Struct Reference
    67 |
    68 |
    69 | 70 |

    This structure represents an output buffer, which direction is the memory towards the FPGA CODEC. 71 | More...

    72 | 73 |

    #include <pyramicio.h>

    74 | 75 | 77 | 79 | 80 | 82 | 83 | 85 | 86 |

    76 | Public Attributes

    78 | uint32_t baseAddress
     
    81 | uint32_t length
     
    84 | int16_t * samples
     
    87 |

    Detailed Description

    88 |

    This structure represents an output buffer, which direction is the memory towards the FPGA CODEC.

    89 |

    This CODEC is configured to work at 48000 Hz, hence the sampling rate of the injected audio has to be 48000 Hz.

    90 |

    The documentation for this struct was generated from the following file: 93 |
    94 | 95 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/structpyramic-members.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | libpyramicio: Member List 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
    19 |
    20 | 21 | 22 | 23 | 28 | 29 | 30 |
    24 |
    libpyramicio 25 |  1.0 26 |
    27 |
    31 |
    32 | 33 | 34 | 37 | 38 | 39 | 45 | 46 | 47 |
    51 |
    52 | 53 | 54 |
    55 | 58 |
    59 | 60 |
    61 |
    62 |
    63 |
    pyramic Member List
    64 |
    65 |
    66 | 67 |

    This is the complete list of members for pyramic, including all inherited members.

    68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 |
    captureDuration (defined in pyramic)pyramic
    fd_dev_mem (defined in pyramic)pyramic
    fpga_Output_Controller (defined in pyramic)pyramic
    fpga_SPI_System (defined in pyramic)pyramic
    h2f_lw_axi_master (defined in pyramic)pyramic
    h2f_lw_axi_master_ofst (defined in pyramic)pyramic
    h2f_lw_axi_master_span (defined in pyramic)pyramic
    output_memory (defined in pyramic)pyramic
    reserved_memory (defined in pyramic)pyramic
    79 | 80 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/structpyramic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | libpyramicio: pyramic Struct Reference 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
    19 |
    20 | 21 | 22 | 23 | 28 | 29 | 30 |
    24 |
    libpyramicio 25 |  1.0 26 |
    27 |
    31 |
    32 | 33 | 34 | 37 | 38 | 39 | 45 | 46 | 47 |
    51 |
    52 | 53 | 54 |
    55 | 58 |
    59 | 60 |
    61 |
    62 | 65 |
    66 |
    pyramic Struct Reference
    67 |
    68 |
    69 | 70 |

    Structure contanining the addresses used by the library internals . 71 | More...

    72 | 73 |

    #include <pyramicio.h>

    74 | 75 | 77 | 79 | 80 | 82 | 83 | 85 | 86 | 88 | 89 | 91 | 92 | 94 | 95 | 97 | 98 | 100 | 101 | 103 | 104 |

    76 | Public Attributes

    78 | void * h2f_lw_axi_master
     
    81 | size_t h2f_lw_axi_master_span
     
    84 | size_t h2f_lw_axi_master_ofst
     
    87 | void * fpga_SPI_System
     
    90 | void * fpga_Output_Controller
     
    93 | int fd_dev_mem
     
    96 | void * reserved_memory
     
    99 | void * output_memory
     
    102 | int captureDuration
     
    105 |

    Detailed Description

    106 |

    Structure contanining the addresses used by the library internals .

    107 |

    The documentation for this struct was generated from the following file: 110 |
    111 | 112 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/sync_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/sync_off.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/sync_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/sync_on.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/tab_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/tab_a.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/tab_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/tab_b.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/tab_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/tab_h.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/tab_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/html/tab_s.png -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/Makefile: -------------------------------------------------------------------------------- 1 | all: refman.pdf 2 | 3 | pdf: refman.pdf 4 | 5 | refman.pdf: clean refman.tex 6 | pdflatex refman 7 | makeindex refman.idx 8 | pdflatex refman 9 | latex_count=8 ; \ 10 | while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\ 11 | do \ 12 | echo "Rerunning latex...." ;\ 13 | pdflatex refman ;\ 14 | latex_count=`expr $$latex_count - 1` ;\ 15 | done 16 | makeindex refman.idx 17 | pdflatex refman 18 | 19 | 20 | clean: 21 | rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf 22 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/annotated.tex: -------------------------------------------------------------------------------- 1 | \section{Class List} 2 | Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList} 3 | \item\contentsline{section}{\hyperlink{structinputBuffer}{input\+Buffer} \\*This structure represents an input buffer, which direction is the microphone array towards the memory }{\pageref{structinputBuffer}}{} 4 | \item\contentsline{section}{\hyperlink{structoutputBuffer}{output\+Buffer} \\*This structure represents an output buffer, which direction is the memory towards the F\+P\+GA C\+O\+D\+EC }{\pageref{structoutputBuffer}}{} 5 | \item\contentsline{section}{\hyperlink{structpyramic}{pyramic} \\*Structure contanining the addresses used by the library internals }{\pageref{structpyramic}}{} 6 | \end{DoxyCompactList} 7 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/files.tex: -------------------------------------------------------------------------------- 1 | \section{File List} 2 | Here is a list of all documented files with brief descriptions\+:\begin{DoxyCompactList} 3 | \item\contentsline{section}{\hyperlink{pyramicio_8h}{pyramicio.\+h} \\*A library that allows an easy access to the Pyramic array }{\pageref{pyramicio_8h}}{} 4 | \end{DoxyCompactList} 5 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/index.tex: -------------------------------------------------------------------------------- 1 | \hypertarget{index_Wh}{}\section{What is libpyramicio ?}\label{index_Wh} 2 | This library is an abstraction layer for the Pyramic array -\/made at L\+C\+AV (E\+P\+FL)-\/ input/output functions. It enables the use of the Pyramic array by designing software against an existing hardware design without having to use Altera Quartus Prime tools, or recompiling the application at each change of the design in V\+H\+DL.\hypertarget{index_Hw}{}\section{How to use it ?}\label{index_Hw} 3 | In order to use the library, one just has to include the $<$\hyperlink{pyramicio_8h}{pyramicio.\+h}$>$ file, then initialize a Pyramic object through the \hyperlink{pyramicio_8h_ac3c433fb9ac54d8e5e93a2423ed79e5e}{pyramic\+Initialize\+Pyramic()} function. 4 | 5 | All the usable functions are documented in the \hyperlink{pyramicio_8h}{pyramicio.\+h} file reference in this documentation. 6 | 7 | Note that programs that use the Pyramic have to be run as root, because the library is using direct references to memory areas that are reserved for the system. -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/refman.idx: -------------------------------------------------------------------------------- 1 | \indexentry{input\+Buffer@{input\+Buffer}|hyperpage}{7} 2 | \indexentry{input\+Buffer@{input\+Buffer}!microphone\+Count@{microphone\+Count}|hyperpage}{7} 3 | \indexentry{microphone\+Count@{microphone\+Count}!input\+Buffer@{input\+Buffer}|hyperpage}{7} 4 | \indexentry{input\+Buffer@{input\+Buffer}!samples@{samples}|hyperpage}{7} 5 | \indexentry{samples@{samples}!input\+Buffer@{input\+Buffer}|hyperpage}{7} 6 | \indexentry{input\+Buffer@{input\+Buffer}!samples\+Per\+Mic@{samples\+Per\+Mic}|hyperpage}{8} 7 | \indexentry{samples\+Per\+Mic@{samples\+Per\+Mic}!input\+Buffer@{input\+Buffer}|hyperpage}{8} 8 | \indexentry{input\+Buffer@{input\+Buffer}!total\+Sample\+Count@{total\+Sample\+Count}|hyperpage}{8} 9 | \indexentry{total\+Sample\+Count@{total\+Sample\+Count}!input\+Buffer@{input\+Buffer}|hyperpage}{8} 10 | \indexentry{output\+Buffer@{output\+Buffer}|hyperpage}{8} 11 | \indexentry{pyramic@{pyramic}|hyperpage}{9} 12 | \indexentry{pyramicio.\+h@{pyramicio.\+h}|hyperpage}{11} 13 | \indexentry{pyramicio.\+h@{pyramicio.\+h}!pyramic\+Allocate\+Output\+Buffer@{pyramic\+Allocate\+Output\+Buffer}|hyperpage}{12} 14 | \indexentry{pyramic\+Allocate\+Output\+Buffer@{pyramic\+Allocate\+Output\+Buffer}!pyramicio.\+h@{pyramicio.\+h}|hyperpage}{12} 15 | \indexentry{pyramicio.\+h@{pyramicio.\+h}!pyramic\+Deallocate\+Output\+Buffer@{pyramic\+Deallocate\+Output\+Buffer}|hyperpage}{13} 16 | \indexentry{pyramic\+Deallocate\+Output\+Buffer@{pyramic\+Deallocate\+Output\+Buffer}!pyramicio.\+h@{pyramicio.\+h}|hyperpage}{13} 17 | \indexentry{pyramicio.\+h@{pyramicio.\+h}!pyramic\+Deinit\+Pyramic@{pyramic\+Deinit\+Pyramic}|hyperpage}{13} 18 | \indexentry{pyramic\+Deinit\+Pyramic@{pyramic\+Deinit\+Pyramic}!pyramicio.\+h@{pyramicio.\+h}|hyperpage}{13} 19 | \indexentry{pyramicio.\+h@{pyramicio.\+h}!pyramic\+Fixed\+Length\+Capture@{pyramic\+Fixed\+Length\+Capture}|hyperpage}{13} 20 | \indexentry{pyramic\+Fixed\+Length\+Capture@{pyramic\+Fixed\+Length\+Capture}!pyramicio.\+h@{pyramicio.\+h}|hyperpage}{13} 21 | \indexentry{pyramicio.\+h@{pyramicio.\+h}!pyramic\+Get\+Current\+Buffer\+Half@{pyramic\+Get\+Current\+Buffer\+Half}|hyperpage}{13} 22 | \indexentry{pyramic\+Get\+Current\+Buffer\+Half@{pyramic\+Get\+Current\+Buffer\+Half}!pyramicio.\+h@{pyramicio.\+h}|hyperpage}{13} 23 | \indexentry{pyramicio.\+h@{pyramicio.\+h}!pyramic\+Get\+Input\+Buffer@{pyramic\+Get\+Input\+Buffer}|hyperpage}{14} 24 | \indexentry{pyramic\+Get\+Input\+Buffer@{pyramic\+Get\+Input\+Buffer}!pyramicio.\+h@{pyramicio.\+h}|hyperpage}{14} 25 | \indexentry{pyramicio.\+h@{pyramicio.\+h}!pyramic\+Initialize\+Pyramic@{pyramic\+Initialize\+Pyramic}|hyperpage}{14} 26 | \indexentry{pyramic\+Initialize\+Pyramic@{pyramic\+Initialize\+Pyramic}!pyramicio.\+h@{pyramicio.\+h}|hyperpage}{14} 27 | \indexentry{pyramicio.\+h@{pyramicio.\+h}!pyramic\+Select\+Output\+Source@{pyramic\+Select\+Output\+Source}|hyperpage}{14} 28 | \indexentry{pyramic\+Select\+Output\+Source@{pyramic\+Select\+Output\+Source}!pyramicio.\+h@{pyramicio.\+h}|hyperpage}{14} 29 | \indexentry{pyramicio.\+h@{pyramicio.\+h}!pyramic\+Set\+Output\+Buffer@{pyramic\+Set\+Output\+Buffer}|hyperpage}{15} 30 | \indexentry{pyramic\+Set\+Output\+Buffer@{pyramic\+Set\+Output\+Buffer}!pyramicio.\+h@{pyramicio.\+h}|hyperpage}{15} 31 | \indexentry{pyramicio.\+h@{pyramicio.\+h}!pyramic\+Start\+Capture@{pyramic\+Start\+Capture}|hyperpage}{15} 32 | \indexentry{pyramic\+Start\+Capture@{pyramic\+Start\+Capture}!pyramicio.\+h@{pyramicio.\+h}|hyperpage}{15} 33 | \indexentry{pyramicio.\+h@{pyramicio.\+h}!pyramic\+Stop\+Capture@{pyramic\+Stop\+Capture}|hyperpage}{15} 34 | \indexentry{pyramic\+Stop\+Capture@{pyramic\+Stop\+Capture}!pyramicio.\+h@{pyramicio.\+h}|hyperpage}{15} 35 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/refman.ilg: -------------------------------------------------------------------------------- 1 | This is makeindex, version 2.15 [TeX Live 2016] (kpathsea + Thai support). 2 | Scanning input file refman.idx....done (34 entries accepted, 0 rejected). 3 | Sorting entries....done (170 comparisons). 4 | Generating output file refman.ind....done (68 lines written, 0 warnings). 5 | Output written in refman.ind. 6 | Transcript written in refman.ilg. 7 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/refman.ind: -------------------------------------------------------------------------------- 1 | \begin{theindex} 2 | 3 | \item {input\+Buffer}, \hyperpage{7} 4 | \subitem {microphone\+Count}, \hyperpage{7} 5 | \subitem {samples}, \hyperpage{7} 6 | \subitem {samples\+Per\+Mic}, \hyperpage{8} 7 | \subitem {total\+Sample\+Count}, \hyperpage{8} 8 | 9 | \indexspace 10 | 11 | \item {microphone\+Count} 12 | \subitem {input\+Buffer}, \hyperpage{7} 13 | 14 | \indexspace 15 | 16 | \item {output\+Buffer}, \hyperpage{8} 17 | 18 | \indexspace 19 | 20 | \item {pyramic}, \hyperpage{9} 21 | \item {pyramic\+Allocate\+Output\+Buffer} 22 | \subitem {pyramicio.\+h}, \hyperpage{12} 23 | \item {pyramic\+Deallocate\+Output\+Buffer} 24 | \subitem {pyramicio.\+h}, \hyperpage{13} 25 | \item {pyramic\+Deinit\+Pyramic} 26 | \subitem {pyramicio.\+h}, \hyperpage{13} 27 | \item {pyramic\+Fixed\+Length\+Capture} 28 | \subitem {pyramicio.\+h}, \hyperpage{13} 29 | \item {pyramic\+Get\+Current\+Buffer\+Half} 30 | \subitem {pyramicio.\+h}, \hyperpage{13} 31 | \item {pyramic\+Get\+Input\+Buffer} 32 | \subitem {pyramicio.\+h}, \hyperpage{14} 33 | \item {pyramic\+Initialize\+Pyramic} 34 | \subitem {pyramicio.\+h}, \hyperpage{14} 35 | \item {pyramic\+Select\+Output\+Source} 36 | \subitem {pyramicio.\+h}, \hyperpage{14} 37 | \item {pyramic\+Set\+Output\+Buffer} 38 | \subitem {pyramicio.\+h}, \hyperpage{15} 39 | \item {pyramic\+Start\+Capture} 40 | \subitem {pyramicio.\+h}, \hyperpage{15} 41 | \item {pyramic\+Stop\+Capture} 42 | \subitem {pyramicio.\+h}, \hyperpage{15} 43 | \item {pyramicio.\+h}, \hyperpage{11} 44 | \subitem {pyramic\+Allocate\+Output\+Buffer}, \hyperpage{12} 45 | \subitem {pyramic\+Deallocate\+Output\+Buffer}, \hyperpage{13} 46 | \subitem {pyramic\+Deinit\+Pyramic}, \hyperpage{13} 47 | \subitem {pyramic\+Fixed\+Length\+Capture}, \hyperpage{13} 48 | \subitem {pyramic\+Get\+Current\+Buffer\+Half}, \hyperpage{13} 49 | \subitem {pyramic\+Get\+Input\+Buffer}, \hyperpage{14} 50 | \subitem {pyramic\+Initialize\+Pyramic}, \hyperpage{14} 51 | \subitem {pyramic\+Select\+Output\+Source}, \hyperpage{14} 52 | \subitem {pyramic\+Set\+Output\+Buffer}, \hyperpage{15} 53 | \subitem {pyramic\+Start\+Capture}, \hyperpage{15} 54 | \subitem {pyramic\+Stop\+Capture}, \hyperpage{15} 55 | 56 | \indexspace 57 | 58 | \item {samples} 59 | \subitem {input\+Buffer}, \hyperpage{7} 60 | \item {samples\+Per\+Mic} 61 | \subitem {input\+Buffer}, \hyperpage{8} 62 | 63 | \indexspace 64 | 65 | \item {total\+Sample\+Count} 66 | \subitem {input\+Buffer}, \hyperpage{8} 67 | 68 | \end{theindex} 69 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/refman.out: -------------------------------------------------------------------------------- 1 | \BOOKMARK [0][-]{chapter.1}{\376\377\0001\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n\000\040\000f\000o\000r\000\040\000l\000i\000b\000p\000y\000r\000a\000m\000i\000c\000i\000o}{}% 1 2 | \BOOKMARK [1][-]{section.1.1}{\376\377\0001\000.\0001\000\040\000W\000h\000a\000t\000\040\000i\000s\000\040\000l\000i\000b\000p\000y\000r\000a\000m\000i\000c\000i\000o\000\040\000?}{chapter.1}% 2 3 | \BOOKMARK [1][-]{section.1.2}{\376\377\0001\000.\0002\000\040\000H\000o\000w\000\040\000t\000o\000\040\000u\000s\000e\000\040\000i\000t\000\040\000?}{chapter.1}% 3 4 | \BOOKMARK [0][-]{chapter.2}{\376\377\0002\000\040\000C\000l\000a\000s\000s\000\040\000I\000n\000d\000e\000x}{}% 4 5 | \BOOKMARK [1][-]{section.2.1}{\376\377\0002\000.\0001\000\040\000C\000l\000a\000s\000s\000\040\000L\000i\000s\000t}{chapter.2}% 5 6 | \BOOKMARK [0][-]{chapter.3}{\376\377\0003\000\040\000F\000i\000l\000e\000\040\000I\000n\000d\000e\000x}{}% 6 7 | \BOOKMARK [1][-]{section.3.1}{\376\377\0003\000.\0001\000\040\000F\000i\000l\000e\000\040\000L\000i\000s\000t}{chapter.3}% 7 8 | \BOOKMARK [0][-]{chapter.4}{\376\377\0004\000\040\000C\000l\000a\000s\000s\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n}{}% 8 9 | \BOOKMARK [1][-]{section.4.1}{\376\377\0004\000.\0001\000\040\000i\000n\000p\000u\000t\000B\000u\000f\000f\000e\000r\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e}{chapter.4}% 9 10 | \BOOKMARK [2][-]{subsection.4.1.1}{\376\377\0004\000.\0001\000.\0001\000\040\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n}{section.4.1}% 10 11 | \BOOKMARK [2][-]{subsection.4.1.2}{\376\377\0004\000.\0001\000.\0002\000\040\000M\000e\000m\000b\000e\000r\000\040\000D\000a\000t\000a\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n}{section.4.1}% 11 12 | \BOOKMARK [3][-]{subsubsection.4.1.2.1}{\376\377\0004\000.\0001\000.\0002\000.\0001\000\040\000m\000i\000c\000r\000o\000p\000h\000o\000n\000e\000C\000o\000u\000n\000t}{subsection.4.1.2}% 12 13 | \BOOKMARK [3][-]{subsubsection.4.1.2.2}{\376\377\0004\000.\0001\000.\0002\000.\0002\000\040\000s\000a\000m\000p\000l\000e\000s}{subsection.4.1.2}% 13 14 | \BOOKMARK [3][-]{subsubsection.4.1.2.3}{\376\377\0004\000.\0001\000.\0002\000.\0003\000\040\000s\000a\000m\000p\000l\000e\000s\000P\000e\000r\000M\000i\000c}{subsection.4.1.2}% 14 15 | \BOOKMARK [3][-]{subsubsection.4.1.2.4}{\376\377\0004\000.\0001\000.\0002\000.\0004\000\040\000t\000o\000t\000a\000l\000S\000a\000m\000p\000l\000e\000C\000o\000u\000n\000t}{subsection.4.1.2}% 15 16 | \BOOKMARK [1][-]{section.4.2}{\376\377\0004\000.\0002\000\040\000o\000u\000t\000p\000u\000t\000B\000u\000f\000f\000e\000r\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e}{chapter.4}% 16 17 | \BOOKMARK [2][-]{subsection.4.2.1}{\376\377\0004\000.\0002\000.\0001\000\040\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n}{section.4.2}% 17 18 | \BOOKMARK [1][-]{section.4.3}{\376\377\0004\000.\0003\000\040\000p\000y\000r\000a\000m\000i\000c\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e}{chapter.4}% 18 19 | \BOOKMARK [2][-]{subsection.4.3.1}{\376\377\0004\000.\0003\000.\0001\000\040\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n}{section.4.3}% 19 20 | \BOOKMARK [0][-]{chapter.5}{\376\377\0005\000\040\000F\000i\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n}{}% 20 21 | \BOOKMARK [1][-]{section.5.1}{\376\377\0005\000.\0001\000\040\000p\000y\000r\000a\000m\000i\000c\000i\000o\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e}{chapter.5}% 21 22 | \BOOKMARK [2][-]{subsection.5.1.1}{\376\377\0005\000.\0001\000.\0001\000\040\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n}{section.5.1}% 22 23 | \BOOKMARK [2][-]{subsection.5.1.2}{\376\377\0005\000.\0001\000.\0002\000\040\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n}{section.5.1}% 23 24 | \BOOKMARK [3][-]{subsubsection.5.1.2.1}{\376\377\0005\000.\0001\000.\0002\000.\0001\000\040\000p\000y\000r\000a\000m\000i\000c\000A\000l\000l\000o\000c\000a\000t\000e\000O\000u\000t\000p\000u\000t\000B\000u\000f\000f\000e\000r\000\050\000\051}{subsection.5.1.2}% 24 25 | \BOOKMARK [3][-]{subsubsection.5.1.2.2}{\376\377\0005\000.\0001\000.\0002\000.\0002\000\040\000p\000y\000r\000a\000m\000i\000c\000D\000e\000a\000l\000l\000o\000c\000a\000t\000e\000O\000u\000t\000p\000u\000t\000B\000u\000f\000f\000e\000r\000\050\000\051}{subsection.5.1.2}% 25 26 | \BOOKMARK [3][-]{subsubsection.5.1.2.3}{\376\377\0005\000.\0001\000.\0002\000.\0003\000\040\000p\000y\000r\000a\000m\000i\000c\000D\000e\000i\000n\000i\000t\000P\000y\000r\000a\000m\000i\000c\000\050\000\051}{subsection.5.1.2}% 26 27 | \BOOKMARK [3][-]{subsubsection.5.1.2.4}{\376\377\0005\000.\0001\000.\0002\000.\0004\000\040\000p\000y\000r\000a\000m\000i\000c\000F\000i\000x\000e\000d\000L\000e\000n\000g\000t\000h\000C\000a\000p\000t\000u\000r\000e\000\050\000\051}{subsection.5.1.2}% 27 28 | \BOOKMARK [3][-]{subsubsection.5.1.2.5}{\376\377\0005\000.\0001\000.\0002\000.\0005\000\040\000p\000y\000r\000a\000m\000i\000c\000G\000e\000t\000C\000u\000r\000r\000e\000n\000t\000B\000u\000f\000f\000e\000r\000H\000a\000l\000f\000\050\000\051}{subsection.5.1.2}% 28 29 | \BOOKMARK [3][-]{subsubsection.5.1.2.6}{\376\377\0005\000.\0001\000.\0002\000.\0006\000\040\000p\000y\000r\000a\000m\000i\000c\000G\000e\000t\000I\000n\000p\000u\000t\000B\000u\000f\000f\000e\000r\000\050\000\051}{subsection.5.1.2}% 29 30 | \BOOKMARK [3][-]{subsubsection.5.1.2.7}{\376\377\0005\000.\0001\000.\0002\000.\0007\000\040\000p\000y\000r\000a\000m\000i\000c\000I\000n\000i\000t\000i\000a\000l\000i\000z\000e\000P\000y\000r\000a\000m\000i\000c\000\050\000\051}{subsection.5.1.2}% 30 31 | \BOOKMARK [3][-]{subsubsection.5.1.2.8}{\376\377\0005\000.\0001\000.\0002\000.\0008\000\040\000p\000y\000r\000a\000m\000i\000c\000S\000e\000l\000e\000c\000t\000O\000u\000t\000p\000u\000t\000S\000o\000u\000r\000c\000e\000\050\000\051}{subsection.5.1.2}% 31 32 | \BOOKMARK [3][-]{subsubsection.5.1.2.9}{\376\377\0005\000.\0001\000.\0002\000.\0009\000\040\000p\000y\000r\000a\000m\000i\000c\000S\000e\000t\000O\000u\000t\000p\000u\000t\000B\000u\000f\000f\000e\000r\000\050\000\051}{subsection.5.1.2}% 32 33 | \BOOKMARK [3][-]{subsubsection.5.1.2.10}{\376\377\0005\000.\0001\000.\0002\000.\0001\0000\000\040\000p\000y\000r\000a\000m\000i\000c\000S\000t\000a\000r\000t\000C\000a\000p\000t\000u\000r\000e\000\050\000\051}{subsection.5.1.2}% 33 34 | \BOOKMARK [3][-]{subsubsection.5.1.2.11}{\376\377\0005\000.\0001\000.\0002\000.\0001\0001\000\040\000p\000y\000r\000a\000m\000i\000c\000S\000t\000o\000p\000C\000a\000p\000t\000u\000r\000e\000\050\000\051}{subsection.5.1.2}% 34 35 | \BOOKMARK [0][-]{section*.8}{\376\377\000I\000n\000d\000e\000x}{}% 35 36 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/refman.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/refman.pdf -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/refman.tex: -------------------------------------------------------------------------------- 1 | \documentclass[twoside]{book} 2 | 3 | % Packages required by doxygen 4 | \usepackage{fixltx2e} 5 | \usepackage{calc} 6 | \usepackage{doxygen} 7 | \usepackage[export]{adjustbox} % also loads graphicx 8 | \usepackage{graphicx} 9 | \usepackage[utf8]{inputenc} 10 | \usepackage{makeidx} 11 | \usepackage{multicol} 12 | \usepackage{multirow} 13 | \PassOptionsToPackage{warn}{textcomp} 14 | \usepackage{textcomp} 15 | \usepackage[nointegrals]{wasysym} 16 | \usepackage[table]{xcolor} 17 | 18 | % Font selection 19 | \usepackage[T1]{fontenc} 20 | \usepackage[scaled=.90]{helvet} 21 | \usepackage{courier} 22 | \usepackage{amssymb} 23 | \usepackage{sectsty} 24 | \renewcommand{\familydefault}{\sfdefault} 25 | \allsectionsfont{% 26 | \fontseries{bc}\selectfont% 27 | \color{darkgray}% 28 | } 29 | \renewcommand{\DoxyLabelFont}{% 30 | \fontseries{bc}\selectfont% 31 | \color{darkgray}% 32 | } 33 | \newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} 34 | 35 | % Page & text layout 36 | \usepackage{geometry} 37 | \geometry{% 38 | a4paper,% 39 | top=2.5cm,% 40 | bottom=2.5cm,% 41 | left=2.5cm,% 42 | right=2.5cm% 43 | } 44 | \tolerance=750 45 | \hfuzz=15pt 46 | \hbadness=750 47 | \setlength{\emergencystretch}{15pt} 48 | \setlength{\parindent}{0cm} 49 | \setlength{\parskip}{3ex plus 2ex minus 2ex} 50 | \makeatletter 51 | \renewcommand{\paragraph}{% 52 | \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% 53 | \normalfont\normalsize\bfseries\SS@parafont% 54 | }% 55 | } 56 | \renewcommand{\subparagraph}{% 57 | \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% 58 | \normalfont\normalsize\bfseries\SS@subparafont% 59 | }% 60 | } 61 | \makeatother 62 | 63 | % Headers & footers 64 | \usepackage{fancyhdr} 65 | \pagestyle{fancyplain} 66 | \fancyhead[LE]{\fancyplain{}{\bfseries\thepage}} 67 | \fancyhead[CE]{\fancyplain{}{}} 68 | \fancyhead[RE]{\fancyplain{}{\bfseries\leftmark}} 69 | \fancyhead[LO]{\fancyplain{}{\bfseries\rightmark}} 70 | \fancyhead[CO]{\fancyplain{}{}} 71 | \fancyhead[RO]{\fancyplain{}{\bfseries\thepage}} 72 | \fancyfoot[LE]{\fancyplain{}{}} 73 | \fancyfoot[CE]{\fancyplain{}{}} 74 | \fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }} 75 | \fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }} 76 | \fancyfoot[CO]{\fancyplain{}{}} 77 | \fancyfoot[RO]{\fancyplain{}{}} 78 | \renewcommand{\footrulewidth}{0.4pt} 79 | \renewcommand{\chaptermark}[1]{% 80 | \markboth{#1}{}% 81 | } 82 | \renewcommand{\sectionmark}[1]{% 83 | \markright{\thesection\ #1}% 84 | } 85 | 86 | % Indices & bibliography 87 | \usepackage{natbib} 88 | \usepackage[titles]{tocloft} 89 | \setcounter{tocdepth}{3} 90 | \setcounter{secnumdepth}{5} 91 | \makeindex 92 | 93 | % Hyperlinks (required, but should be loaded last) 94 | \usepackage{ifpdf} 95 | \ifpdf 96 | \usepackage[pdftex,pagebackref=true]{hyperref} 97 | \else 98 | \usepackage[ps2pdf,pagebackref=true]{hyperref} 99 | \fi 100 | \hypersetup{% 101 | colorlinks=true,% 102 | linkcolor=blue,% 103 | citecolor=blue,% 104 | unicode% 105 | } 106 | 107 | % Custom commands 108 | \newcommand{\clearemptydoublepage}{% 109 | \newpage{\pagestyle{empty}\cleardoublepage}% 110 | } 111 | 112 | \usepackage{caption} 113 | \captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top} 114 | 115 | %===== C O N T E N T S ===== 116 | 117 | \begin{document} 118 | 119 | % Titlepage & ToC 120 | \hypersetup{pageanchor=false, 121 | bookmarksnumbered=true, 122 | pdfencoding=unicode 123 | } 124 | \pagenumbering{alph} 125 | \begin{titlepage} 126 | \vspace*{7cm} 127 | \begin{center}% 128 | {\Large libpyramicio \\[1ex]\large 1.\+0 }\\ 129 | \vspace*{1cm} 130 | {\large Generated by Doxygen 1.8.12}\\ 131 | \end{center} 132 | \end{titlepage} 133 | \clearemptydoublepage 134 | \pagenumbering{roman} 135 | \tableofcontents 136 | \clearemptydoublepage 137 | \pagenumbering{arabic} 138 | \hypersetup{pageanchor=true} 139 | 140 | %--- Begin generated contents --- 141 | \chapter{Documentation for libpyramicio} 142 | \label{index}\hypertarget{index}{}\input{index} 143 | \chapter{Class Index} 144 | \input{annotated} 145 | \chapter{File Index} 146 | \input{files} 147 | \chapter{Class Documentation} 148 | \input{structinputBuffer} 149 | \input{structoutputBuffer} 150 | \input{structpyramic} 151 | \chapter{File Documentation} 152 | \input{pyramicio_8h} 153 | %--- End generated contents --- 154 | 155 | % Index 156 | \backmatter 157 | \newpage 158 | \phantomsection 159 | \clearemptydoublepage 160 | \addcontentsline{toc}{chapter}{Index} 161 | \printindex 162 | 163 | \end{document} 164 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/refman.toc: -------------------------------------------------------------------------------- 1 | \contentsline {chapter}{\numberline {1}Documentation for libpyramicio}{1}{chapter.1} 2 | \contentsline {section}{\numberline {1.1}What is libpyramicio ?}{1}{section.1.1} 3 | \contentsline {section}{\numberline {1.2}How to use it ?}{1}{section.1.2} 4 | \contentsline {chapter}{\numberline {2}Class Index}{3}{chapter.2} 5 | \contentsline {section}{\numberline {2.1}Class List}{3}{section.2.1} 6 | \contentsline {chapter}{\numberline {3}File Index}{5}{chapter.3} 7 | \contentsline {section}{\numberline {3.1}File List}{5}{section.3.1} 8 | \contentsline {chapter}{\numberline {4}Class Documentation}{7}{chapter.4} 9 | \contentsline {section}{\numberline {4.1}input\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Buffer Struct Reference}{7}{section.4.1} 10 | \contentsline {subsection}{\numberline {4.1.1}Detailed Description}{7}{subsection.4.1.1} 11 | \contentsline {subsection}{\numberline {4.1.2}Member Data Documentation}{7}{subsection.4.1.2} 12 | \contentsline {subsubsection}{\numberline {4.1.2.1}microphone\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Count}{7}{subsubsection.4.1.2.1} 13 | \contentsline {subsubsection}{\numberline {4.1.2.2}samples}{8}{subsubsection.4.1.2.2} 14 | \contentsline {subsubsection}{\numberline {4.1.2.3}samples\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Per\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Mic}{8}{subsubsection.4.1.2.3} 15 | \contentsline {subsubsection}{\numberline {4.1.2.4}total\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Sample\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Count}{8}{subsubsection.4.1.2.4} 16 | \contentsline {section}{\numberline {4.2}output\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Buffer Struct Reference}{8}{section.4.2} 17 | \contentsline {subsection}{\numberline {4.2.1}Detailed Description}{8}{subsection.4.2.1} 18 | \contentsline {section}{\numberline {4.3}pyramic Struct Reference}{9}{section.4.3} 19 | \contentsline {subsection}{\numberline {4.3.1}Detailed Description}{9}{subsection.4.3.1} 20 | \contentsline {chapter}{\numberline {5}File Documentation}{11}{chapter.5} 21 | \contentsline {section}{\numberline {5.1}pyramicio.\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}h File Reference}{11}{section.5.1} 22 | \contentsline {subsection}{\numberline {5.1.1}Detailed Description}{12}{subsection.5.1.1} 23 | \contentsline {subsection}{\numberline {5.1.2}Function Documentation}{12}{subsection.5.1.2} 24 | \contentsline {subsubsection}{\numberline {5.1.2.1}pyramic\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Allocate\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Output\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Buffer()}{12}{subsubsection.5.1.2.1} 25 | \contentsline {subsubsection}{\numberline {5.1.2.2}pyramic\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Deallocate\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Output\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Buffer()}{13}{subsubsection.5.1.2.2} 26 | \contentsline {subsubsection}{\numberline {5.1.2.3}pyramic\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Deinit\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Pyramic()}{13}{subsubsection.5.1.2.3} 27 | \contentsline {subsubsection}{\numberline {5.1.2.4}pyramic\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Fixed\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Length\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Capture()}{13}{subsubsection.5.1.2.4} 28 | \contentsline {subsubsection}{\numberline {5.1.2.5}pyramic\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Get\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Current\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Buffer\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Half()}{14}{subsubsection.5.1.2.5} 29 | \contentsline {subsubsection}{\numberline {5.1.2.6}pyramic\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Get\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Input\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Buffer()}{14}{subsubsection.5.1.2.6} 30 | \contentsline {subsubsection}{\numberline {5.1.2.7}pyramic\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Initialize\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Pyramic()}{14}{subsubsection.5.1.2.7} 31 | \contentsline {subsubsection}{\numberline {5.1.2.8}pyramic\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Select\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Output\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Source()}{14}{subsubsection.5.1.2.8} 32 | \contentsline {subsubsection}{\numberline {5.1.2.9}pyramic\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Set\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Output\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Buffer()}{15}{subsubsection.5.1.2.9} 33 | \contentsline {subsubsection}{\numberline {5.1.2.10}pyramic\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Start\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Capture()}{15}{subsubsection.5.1.2.10} 34 | \contentsline {subsubsection}{\numberline {5.1.2.11}pyramic\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Stop\discretionary {\unhbox \voidb@x \hbox {\relax \fontsize {7}{8}\selectfont $\leftarrow \joinrel \rhook $}}{}{}Capture()}{15}{subsubsection.5.1.2.11} 35 | \contentsline {chapter}{Index}{17}{section*.8} 36 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/structinputBuffer.tex: -------------------------------------------------------------------------------- 1 | \hypertarget{structinputBuffer}{}\section{input\+Buffer Struct Reference} 2 | \label{structinputBuffer}\index{input\+Buffer@{input\+Buffer}} 3 | 4 | 5 | This structure represents an input buffer, which direction is the microphone array towards the memory. 6 | 7 | 8 | 9 | 10 | {\ttfamily \#include $<$pyramicio.\+h$>$} 11 | 12 | \subsection*{Public Attributes} 13 | \begin{DoxyCompactItemize} 14 | \item 15 | int \hyperlink{structinputBuffer_a35bfb2e7cb4d0c0491f9efbe0273e455}{microphone\+Count} 16 | \begin{DoxyCompactList}\small\item\em How many microphones the Pyramic array has. \end{DoxyCompactList}\item 17 | uint32\+\_\+t \hyperlink{structinputBuffer_a37bcaba2336dc42b37c4362e30483129}{total\+Sample\+Count} 18 | \begin{DoxyCompactList}\small\item\em How many samples the buffer contains. \end{DoxyCompactList}\item 19 | uint32\+\_\+t \hyperlink{structinputBuffer_ab8b6a76bd2e891f34932e80268b66178}{samples\+Per\+Mic} 20 | \begin{DoxyCompactList}\small\item\em How many samples are found for each microphone in the buffer. \end{DoxyCompactList}\item 21 | int16\+\_\+t $\ast$ \hyperlink{structinputBuffer_af6cdbaa4124d3e9db0272c19c94b2707}{samples} 22 | \begin{DoxyCompactList}\small\item\em The actual samples, organized the R\+I\+FF way. \end{DoxyCompactList}\end{DoxyCompactItemize} 23 | 24 | 25 | \subsection{Detailed Description} 26 | This structure represents an input buffer, which direction is the microphone array towards the memory. 27 | 28 | \subsection{Member Data Documentation} 29 | \hypertarget{structinputBuffer_a35bfb2e7cb4d0c0491f9efbe0273e455}{}\label{structinputBuffer_a35bfb2e7cb4d0c0491f9efbe0273e455} 30 | \index{input\+Buffer@{input\+Buffer}!microphone\+Count@{microphone\+Count}} 31 | \index{microphone\+Count@{microphone\+Count}!input\+Buffer@{input\+Buffer}} 32 | \subsubsection{\texorpdfstring{microphone\+Count}{microphoneCount}} 33 | {\footnotesize\ttfamily int input\+Buffer\+::microphone\+Count} 34 | 35 | 36 | 37 | How many microphones the Pyramic array has. 38 | 39 | \hypertarget{structinputBuffer_af6cdbaa4124d3e9db0272c19c94b2707}{}\label{structinputBuffer_af6cdbaa4124d3e9db0272c19c94b2707} 40 | \index{input\+Buffer@{input\+Buffer}!samples@{samples}} 41 | \index{samples@{samples}!input\+Buffer@{input\+Buffer}} 42 | \subsubsection{\texorpdfstring{samples}{samples}} 43 | {\footnotesize\ttfamily int16\+\_\+t$\ast$ input\+Buffer\+::samples} 44 | 45 | 46 | 47 | The actual samples, organized the R\+I\+FF way. 48 | 49 | \hypertarget{structinputBuffer_ab8b6a76bd2e891f34932e80268b66178}{}\label{structinputBuffer_ab8b6a76bd2e891f34932e80268b66178} 50 | \index{input\+Buffer@{input\+Buffer}!samples\+Per\+Mic@{samples\+Per\+Mic}} 51 | \index{samples\+Per\+Mic@{samples\+Per\+Mic}!input\+Buffer@{input\+Buffer}} 52 | \subsubsection{\texorpdfstring{samples\+Per\+Mic}{samplesPerMic}} 53 | {\footnotesize\ttfamily uint32\+\_\+t input\+Buffer\+::samples\+Per\+Mic} 54 | 55 | 56 | 57 | How many samples are found for each microphone in the buffer. 58 | 59 | \hypertarget{structinputBuffer_a37bcaba2336dc42b37c4362e30483129}{}\label{structinputBuffer_a37bcaba2336dc42b37c4362e30483129} 60 | \index{input\+Buffer@{input\+Buffer}!total\+Sample\+Count@{total\+Sample\+Count}} 61 | \index{total\+Sample\+Count@{total\+Sample\+Count}!input\+Buffer@{input\+Buffer}} 62 | \subsubsection{\texorpdfstring{total\+Sample\+Count}{totalSampleCount}} 63 | {\footnotesize\ttfamily uint32\+\_\+t input\+Buffer\+::total\+Sample\+Count} 64 | 65 | 66 | 67 | How many samples the buffer contains. 68 | 69 | 70 | 71 | The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} 72 | \item 73 | \hyperlink{pyramicio_8h}{pyramicio.\+h}\end{DoxyCompactItemize} 74 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/structoutputBuffer.tex: -------------------------------------------------------------------------------- 1 | \hypertarget{structoutputBuffer}{}\section{output\+Buffer Struct Reference} 2 | \label{structoutputBuffer}\index{output\+Buffer@{output\+Buffer}} 3 | 4 | 5 | This structure represents an output buffer, which direction is the memory towards the F\+P\+GA C\+O\+D\+EC. 6 | 7 | 8 | 9 | 10 | {\ttfamily \#include $<$pyramicio.\+h$>$} 11 | 12 | \subsection*{Public Attributes} 13 | \begin{DoxyCompactItemize} 14 | \item 15 | \hypertarget{structoutputBuffer_a5d4d7a2c76f4a907c21e26f6e75c2e4f}{}\label{structoutputBuffer_a5d4d7a2c76f4a907c21e26f6e75c2e4f} 16 | uint32\+\_\+t {\bfseries base\+Address} 17 | \item 18 | \hypertarget{structoutputBuffer_a4035a3ad6b17afd2224323429eb68efc}{}\label{structoutputBuffer_a4035a3ad6b17afd2224323429eb68efc} 19 | uint32\+\_\+t {\bfseries length} 20 | \item 21 | \hypertarget{structoutputBuffer_a997516789c79714d9e3ca32c6e3d2303}{}\label{structoutputBuffer_a997516789c79714d9e3ca32c6e3d2303} 22 | int16\+\_\+t $\ast$ {\bfseries samples} 23 | \end{DoxyCompactItemize} 24 | 25 | 26 | \subsection{Detailed Description} 27 | This structure represents an output buffer, which direction is the memory towards the F\+P\+GA C\+O\+D\+EC. 28 | 29 | This C\+O\+D\+EC is configured to work at 48000 Hz, hence the sampling rate of the injected audio {\itshape has} to be 48000 Hz. 30 | 31 | The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} 32 | \item 33 | \hyperlink{pyramicio_8h}{pyramicio.\+h}\end{DoxyCompactItemize} 34 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/latex/structpyramic.tex: -------------------------------------------------------------------------------- 1 | \hypertarget{structpyramic}{}\section{pyramic Struct Reference} 2 | \label{structpyramic}\index{pyramic@{pyramic}} 3 | 4 | 5 | Structure contanining the addresses used by the library internals . 6 | 7 | 8 | 9 | 10 | {\ttfamily \#include $<$pyramicio.\+h$>$} 11 | 12 | \subsection*{Public Attributes} 13 | \begin{DoxyCompactItemize} 14 | \item 15 | \hypertarget{structpyramic_a467fbb0b036739f9bf314822f4cee093}{}\label{structpyramic_a467fbb0b036739f9bf314822f4cee093} 16 | void $\ast$ {\bfseries h2f\+\_\+lw\+\_\+axi\+\_\+master} 17 | \item 18 | \hypertarget{structpyramic_a50ffe7db3c7dfc0db86375465026fbba}{}\label{structpyramic_a50ffe7db3c7dfc0db86375465026fbba} 19 | size\+\_\+t {\bfseries h2f\+\_\+lw\+\_\+axi\+\_\+master\+\_\+span} 20 | \item 21 | \hypertarget{structpyramic_af45a41e339a849f54a316baddf82d5dd}{}\label{structpyramic_af45a41e339a849f54a316baddf82d5dd} 22 | size\+\_\+t {\bfseries h2f\+\_\+lw\+\_\+axi\+\_\+master\+\_\+ofst} 23 | \item 24 | \hypertarget{structpyramic_a7b8ded92630c4c0daecd36c48747819b}{}\label{structpyramic_a7b8ded92630c4c0daecd36c48747819b} 25 | void $\ast$ {\bfseries fpga\+\_\+\+S\+P\+I\+\_\+\+System} 26 | \item 27 | \hypertarget{structpyramic_aea95a38021010d556ccdd17c792902de}{}\label{structpyramic_aea95a38021010d556ccdd17c792902de} 28 | void $\ast$ {\bfseries fpga\+\_\+\+Output\+\_\+\+Controller} 29 | \item 30 | \hypertarget{structpyramic_a61d43185c9e83077a9d9c9ae1fcc3737}{}\label{structpyramic_a61d43185c9e83077a9d9c9ae1fcc3737} 31 | int {\bfseries fd\+\_\+dev\+\_\+mem} 32 | \item 33 | \hypertarget{structpyramic_ad5e31f827fc476f41338d068786b8722}{}\label{structpyramic_ad5e31f827fc476f41338d068786b8722} 34 | void $\ast$ {\bfseries reserved\+\_\+memory} 35 | \item 36 | \hypertarget{structpyramic_a2948d567ed66e6b398214e893a17b2af}{}\label{structpyramic_a2948d567ed66e6b398214e893a17b2af} 37 | void $\ast$ {\bfseries output\+\_\+memory} 38 | \item 39 | \hypertarget{structpyramic_a9adbb51cf8ef7c253ff249e6621cf2f0}{}\label{structpyramic_a9adbb51cf8ef7c253ff249e6621cf2f0} 40 | int {\bfseries capture\+Duration} 41 | \end{DoxyCompactItemize} 42 | 43 | 44 | \subsection{Detailed Description} 45 | Structure contanining the addresses used by the library internals . 46 | 47 | 48 | 49 | The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} 50 | \item 51 | \hyperlink{pyramicio_8h}{pyramicio.\+h}\end{DoxyCompactItemize} 52 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/pyramicio/pyramicio.h: -------------------------------------------------------------------------------- 1 | /** A library that allows an easy access to the Pyramic array. 2 | * This library is compiled using headers derived from the VHDL code available 3 | * at: http://github.com/lcav/pyramic.git. 4 | * In order to compile this library, one has to run the "headers_rbf.sh" file 5 | * that can be found in the toplevel MIC_ARRAY directory to provide the Quartus 6 | * generated header files. 7 | * 8 | * The pyramicio.h file gives access to the API provided by libpyramicio. 9 | * It enables the use of a Pyramic array with an abstraction layer that removes 10 | * the hassle of the FPGA addresses. This enables programming applications that 11 | * use the Pyramic array against an existing design without using the Quartus 12 | * Prime tools. 13 | */ 14 | 15 | /** 16 | * @file pyramicio.h 17 | * @author Corentin Ferry 18 | * @date December 2016 19 | * 20 | * 21 | * @see https://github.com/cferr/pyramic.git 22 | */ 23 | 24 | 25 | #ifndef PYRAMICIO_PYRAMICIO_H_ 26 | #define PYRAMICIO_PYRAMICIO_H_ 27 | 28 | #ifdef __cplusplus 29 | extern "C" { 30 | #endif 31 | 32 | #include 33 | #include 34 | 35 | #define SRC_BEAMFORMER 0 36 | #define SRC_MEMORY 1 37 | 38 | /** This structure represents an input buffer, which direction is the microphone 39 | * array towards the memory. 40 | */ 41 | struct inputBuffer { 42 | /** How many microphones the Pyramic array has. */ 43 | uint32_t microphoneCount; 44 | /** How many samples the buffer contains. */ 45 | uint32_t totalSampleCount; 46 | /** How many samples are found for each microphone in the buffer. */ 47 | uint32_t samplesPerMic; 48 | /** The actual samples, organized the RIFF way. */ 49 | int16_t *samples; 50 | }; 51 | 52 | /** This structure represents an output buffer, which direction is the memory 53 | * towards the FPGA CODEC. This CODEC is configured to work at 48000 Hz, hence 54 | * the sampling rate of the injected audio *has* to be 48000 Hz. 55 | */ 56 | struct outputBuffer { 57 | /** */ 58 | uint32_t baseAddress; 59 | /** */ 60 | uint32_t length; 61 | /** */ 62 | int16_t *samples; 63 | }; 64 | 65 | /** Structure contanining the addresses used by the library internals. */ 66 | struct pyramic { 67 | void *h2f_lw_axi_master; 68 | size_t h2f_lw_axi_master_span; 69 | size_t h2f_lw_axi_master_ofst; 70 | 71 | void *fpga_SPI_System; 72 | void *fpga_Output_Controller; 73 | 74 | int fd_dev_mem; 75 | 76 | void *reserved_memory; 77 | void *output_memory; 78 | 79 | float captureDurationMs; 80 | uint32_t num_samples; 81 | 82 | }; 83 | 84 | /** Initializes the Pyramic array and returns a reference to the associated 85 | * Pyramic object. This initialization is exclusive: only one thread can have 86 | * control over the Pyramic array at the same time. */ 87 | struct pyramic *pyramicInitializePyramic(); 88 | /** Closes the file descriptors assoiated with the Pyramic and frees the 89 | * reserved memory resources. 90 | * @param p The Pyramic object structure on which the function is executed. 91 | */ 92 | void pyramicDeinitPyramic(struct pyramic *p); 93 | 94 | /** Gets the current input buffer. 95 | * @param p The Pyramic object structure on which the function is executed. 96 | * @param bufferHalf If this parameter is 0, the samples start at the beginning 97 | * of the buffer (thus giving you access to the first half and the second half 98 | * as well). If it is 1, the samples start at the beginning of the second half 99 | * of the buffer. 100 | * This parameter is useful for continuous captures where it is safe to use a 101 | * single half of the buffer at a time. 102 | */ 103 | struct inputBuffer pyramicGetInputBuffer(struct pyramic *p, uint32_t bufferHalf); 104 | /** Gets the number of the half on which the Pyramic is currently recording 105 | * samples. The other half can be safely used for processing the signal. 106 | * @param p The Pyramic object structure on which the function is executed. 107 | * Returns 1 for the first buffer, and 2 for the second buffer. 108 | */ 109 | uint32_t pyramicGetCurrentBufferHalf(struct pyramic *p); 110 | /** Gets handle to output buffer memory for output samples. 111 | * @param p The Pyramic object structure on which the function is executed. 112 | * @param lengthInSamples The nummber of samples that the output buffer will 113 | * hold. 114 | * Note that the output frequency is 48000 Hz. 115 | */ 116 | struct outputBuffer pyramicGetOutputBuffer(struct pyramic *p, uint32_t lengthInSamples); 117 | 118 | /** Gets the number of the half on which the Pyramic is currently playing 119 | * samples. The other half can be safely used for processing the signal. 120 | * @param p The Pyramic object structure on which the function is executed. 121 | * Returns 1 for the first buffer, and 2 for the second buffer. 122 | */ 123 | uint32_t pyramicGetCurrentOutputBufferHalf(struct pyramic *p); 124 | 125 | /** Starts a continuous capture on the Pyramic array. 126 | * @param p The Pyramic object structure on which the function is executed. 127 | * @param durationInMilliseconds The duration of the sample buffer. 128 | * Note that the sample buffer is divided into two halves, and you can safely 129 | * read and write into each half while it is not being processed, using 130 | * pyramicGetCurrentBufferHalf(). The buffer has to be long enough so that half 131 | * of it can be entirely processed while the other half is under capture. 132 | * You can get the capture buffers through the pyramicGetInputBuffer() function. 133 | */ 134 | int pyramicStartCapture(struct pyramic *p, uint32_t num_samples); 135 | /** Starts a fixed length capture on the Pyramic array. 136 | * @param p The Pyramic object structure on which the function is executed. 137 | * @param num_samples The size of the circular buffer 138 | * After the capture, you will be able to get the samples through the 139 | * pyramicGetInputBuffer() function. 140 | */ 141 | int pyramicFixedLengthCapture(struct pyramic *p, float durationInMilliseconds); 142 | /** Stops the ongoing capture on the Pyramic array at the end of the current sample. 143 | * @param p The Pyramic object structure on which the function is executed. 144 | */ 145 | int pyramicStopCapture(struct pyramic *p); 146 | /** Selects if the output samples come from the Beamformer or a software buffer. 147 | * @param p The Pyramic object structure on which the function is executed. 148 | * @param source Either SRC_BEAMFORMER (not implemented yet, gives silence) 149 | * or SRC_MEMORY (the pyramic then takes its input from an output buffer in the 150 | * DDR3). 151 | * It is recommended to set the output buffer address through 152 | * pyramicSetOutputBuffer() before calling this function with SRC_MEMORY. 153 | */ 154 | int pyramicSelectOutputSource(struct pyramic *p, int source); 155 | 156 | /** Enables or disables the audio output. 157 | * @param p The Pyramic object structure on which the function is executed. 158 | * @param enable 0 to disable output, 1 to enable. 159 | */ 160 | int pyramicEnableOutput(struct pyramic *p, int enable); 161 | 162 | /** Sets the Pyramic's output buffer as the designated one. 163 | * @param p The Pyramic object structure on which the function is executed. 164 | * @param outputBuffer An output buffer that has been obtained with 165 | * pyramicGetOutputBuffer(). 166 | */ 167 | int pyramicSetOutputBuffer(struct pyramic *p, struct outputBuffer outputBuffer); 168 | 169 | #ifdef __cplusplus 170 | } 171 | #endif 172 | 173 | #endif /* PYRAMICIO_PYRAMICIO_H_ */ 174 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/wav_tools/Makefile: -------------------------------------------------------------------------------- 1 | TARGET = 2 | LIBS = 3 | CC = arm-linux-gnueabihf-gcc 4 | CFLAGS = -g -Wall -Wextra -O0 -std=c99 5 | LDFLAGS = 6 | INCS = 7 | 8 | .PHONY: default all clean 9 | 10 | OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c)) 11 | HEADERS = $(wildcard *.h) 12 | 13 | default: $(OBJECTS) 14 | all: default 15 | 16 | %.o: %.c $(HEADERS) 17 | $(CC) $(CFLAGS) $(INCS) -c $< -o $@ 18 | 19 | .PRECIOUS: $(TARGET) $(OBJECTS) 20 | 21 | $(TARGET): $(OBJECTS) 22 | $(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $@ 23 | 24 | clean: 25 | -rm -f *.o 26 | -rm -f $(TARGET) 27 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/wav_tools/make_wav.c: -------------------------------------------------------------------------------- 1 | /* make_wav.c 2 | * Creates a WAV file from an array of ints. 3 | * Output is monophonic, signed 16-bit samples 4 | * copyright 5 | * Fri Jun 18 16:36:23 PDT 2010 Kevin Karplus 6 | * Creative Commons license Attribution-NonCommercial 7 | * http://creativecommons.org/licenses/by-nc/3.0/ 8 | */ 9 | 10 | #include 11 | #include 12 | 13 | #include "make_wav.h" 14 | 15 | void write_little_endian(unsigned int word, int num_bytes, FILE *wav_file) 16 | { 17 | unsigned buf; 18 | while(num_bytes>0) 19 | { buf = word & 0xff; 20 | fwrite(&buf, 1,1, wav_file); 21 | num_bytes--; 22 | word >>= 8; 23 | } 24 | } 25 | 26 | /* information about the WAV file format from 27 | http://ccrma.stanford.edu/courses/422/projects/WaveFormat/ 28 | */ 29 | 30 | void write_wav(char * filename, unsigned long num_samples, short int * data, int s_rate) 31 | { 32 | FILE* wav_file; 33 | unsigned int sample_rate; 34 | unsigned int num_channels; 35 | unsigned int bytes_per_sample; 36 | unsigned int byte_rate; 37 | unsigned long i; /* counter for samples */ 38 | 39 | num_channels = 1; /* monoaural */ 40 | bytes_per_sample = 2; 41 | 42 | if (s_rate<=0) sample_rate = 48000; 43 | else sample_rate = (unsigned int) s_rate; 44 | 45 | byte_rate = sample_rate*num_channels*bytes_per_sample; 46 | 47 | wav_file = fopen(filename, "w"); 48 | assert(wav_file); /* make sure it opened */ 49 | 50 | /* write RIFF header */ 51 | fwrite("RIFF", 1, 4, wav_file); 52 | write_little_endian(36 + bytes_per_sample* num_samples*num_channels, 4, wav_file); 53 | fwrite("WAVE", 1, 4, wav_file); 54 | 55 | /* write fmt subchunk */ 56 | fwrite("fmt ", 1, 4, wav_file); 57 | write_little_endian(16, 4, wav_file); /* SubChunk1Size is 16 */ 58 | write_little_endian(1, 2, wav_file); /* PCM is format 1 */ 59 | write_little_endian(num_channels, 2, wav_file); 60 | write_little_endian(sample_rate, 4, wav_file); 61 | write_little_endian(byte_rate, 4, wav_file); 62 | write_little_endian(num_channels*bytes_per_sample, 2, wav_file); /* block align */ 63 | write_little_endian(8*bytes_per_sample, 2, wav_file); /* bits/sample */ 64 | 65 | /* write data subchunk */ 66 | fwrite("data", 1, 4, wav_file); 67 | write_little_endian(bytes_per_sample* num_samples*num_channels, 4, wav_file); 68 | for (i=0; i< num_samples; i++) 69 | { 70 | write_little_endian((signed int)(data[i]),bytes_per_sample, wav_file); 71 | } 72 | 73 | fclose(wav_file); 74 | } 75 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/wav_tools/make_wav.h: -------------------------------------------------------------------------------- 1 | /* make_wav.h 2 | * Fri Jun 18 17:06:02 PDT 2010 Kevin Karplus 3 | */ 4 | 5 | #ifndef MAKE_WAV_H 6 | #define MAKE_WAV_H 7 | 8 | void write_wav(char * filename, unsigned long num_samples, short int * data, int s_rate); 9 | /* open a file named filename, write signed 16-bit values as a 10 | monoaural WAV file at the specified sampling rate 11 | and close the file 12 | */ 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/wav_tools/read_wav.c: -------------------------------------------------------------------------------- 1 | /* 2 | * read_wav.c 3 | * 4 | * Created on: Dec 15, 2016 5 | * Author: ferry 6 | */ 7 | #include "read_wav.h" 8 | 9 | struct wav_file* readWav(FILE* fileHandler) { 10 | struct wav_file* w = malloc(sizeof(struct wav_file)); 11 | 12 | fread(&(w->chunkID), sizeof(unsigned int), 1, fileHandler); // RIFF 13 | printf("riff is %x\n", w->chunkID); 14 | fread(&(w->chunkSize), sizeof(unsigned int), 1, fileHandler); 15 | fread(&(w->format), sizeof(unsigned int), 1, fileHandler); 16 | /* fmt subchunk */ 17 | fread(&(w->fmtSubchunkId), sizeof(unsigned int), 1, fileHandler); 18 | fread(&(w->fmtSubchunkSize), sizeof(unsigned int), 1, fileHandler); 19 | fread(&(w->audioFormat), sizeof(unsigned short), 1, fileHandler); 20 | fread(&(w->numChannels), sizeof(unsigned short), 1, fileHandler); 21 | fread(&(w->sampleRate), sizeof(unsigned int), 1, fileHandler); 22 | fread(&(w->byteRate), sizeof(unsigned int), 1, fileHandler); 23 | fread(&(w->blockAlign), sizeof(unsigned short), 1, fileHandler); 24 | fread(&(w->bitsPerSample), sizeof(unsigned short), 1, fileHandler); 25 | /* data subchunk */ 26 | fread(&(w->dataSubchunkId), sizeof(unsigned int), 1, fileHandler); 27 | fread(&(w->dataSubchunkSize), sizeof(unsigned int), 1, fileHandler); 28 | 29 | // allocate the payload 30 | unsigned int bytesPerSample = w->bitsPerSample / 8; 31 | printf("bytes per sample is %d\n", bytesPerSample); 32 | w->numberOfSamples = w->dataSubchunkSize / bytesPerSample; 33 | printf("number of samples is %d\n", w->numberOfSamples); 34 | 35 | w->dataPayload = malloc(w->dataSubchunkSize); 36 | fread(w->dataPayload, (size_t)(bytesPerSample), w->numberOfSamples, fileHandler); 37 | 38 | return w; 39 | 40 | } 41 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/application/wav_tools/read_wav.h: -------------------------------------------------------------------------------- 1 | /* 2 | * read_wav.h 3 | * 4 | * Created on: Dec 15, 2016 5 | * Author: ferry 6 | */ 7 | 8 | #ifndef READ_WAV_H_ 9 | #define READ_WAV_H_ 10 | 11 | #include 12 | #include 13 | 14 | struct wav_file { 15 | unsigned int chunkID; // RIFF 16 | unsigned int chunkSize; 17 | unsigned int format; 18 | /* fmt subchunk */ 19 | unsigned int fmtSubchunkId; 20 | unsigned int fmtSubchunkSize; 21 | unsigned short audioFormat; 22 | unsigned short numChannels; 23 | unsigned int sampleRate; 24 | unsigned int byteRate; 25 | unsigned short blockAlign; 26 | unsigned short bitsPerSample; 27 | /* data subchunk */ 28 | unsigned int dataSubchunkId; 29 | unsigned int dataSubchunkSize; 30 | void* dataPayload; 31 | 32 | unsigned int numberOfSamples; 33 | }; 34 | 35 | struct wav_file* readWav(FILE* fileHandler); 36 | 37 | #endif /* READ_WAV_H_ */ 38 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/linux/.gitignore: -------------------------------------------------------------------------------- 1 | source/ 2 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/linux/rootfs/.gitignore: -------------------------------------------------------------------------------- 1 | ubuntu-* 2 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/linux/rootfs/config_post_install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | 3 | # apt sources 4 | # uncomment the "deb" lines (no need to uncomment "deb src" lines) 5 | 6 | # Edit the “/etc/apt/sources.list” file to configure the package manager. This 7 | # file contains a list of mirrors that the package manager queries. By default, 8 | # this file has all fields commented out, so the package manager will not have 9 | # access to any mirrors. The following command uncomments all commented out 10 | # lines starting with "deb". These contain the mirrors we are interested in. 11 | sudo perl -pi -e 's/^#+\s+(deb\s+http)/$1/g' "/etc/apt/sources.list" 12 | 13 | # When writing our linux applications, we want to use ARM DS-5’s remote 14 | # debugging feature to automatically transfer our binaries to the target device 15 | # and to start a debugging session. The remote debugging feature requires an SSH 16 | # server and a remote gdb server to be available on the target. These are easy 17 | # to install as we have a package manager available 18 | sudo apt update 19 | sudo apt -y install ssh gdbserver nano ntp 20 | 21 | # Allow compiling binaries directly on the target board by installing the 22 | # standard compilation toolchain. Since the library for exploiting the Pyramic 23 | # ships with the base system image, a developer does not need Altera's libaries 24 | # to compile, thus this can be done directly on the board. 25 | sudo apt -y install gcc make binutils 26 | 27 | # Allow root SSH login with password (needed so we can use ARM DS-5 for remote 28 | # debugging) 29 | sudo perl -pi -e 's/^(PermitRootLogin) without-password$/$1 yes/g' "/etc/ssh/sshd_config" 30 | 31 | # Test the Pyramic array 32 | pushd /opt/pyramic/application/libpyramicio_test 33 | make 34 | sudo ./libpyramicio_test 35 | popd 36 | 37 | echo "Pyramic test completed. You should hear the ambient noise around you \ 38 | through the board's sound output (green port of the DE1-SoC). \ 39 | \ 40 | If you don't, please check the Pyramic is connected to the GPIO 0 port, and \ 41 | that all the cables are connected to microphone boards." 42 | -------------------------------------------------------------------------------- /fpga/MIC_ARRAY/sw/hps/linux/rootfs/config_system.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | 3 | # Configure the locale to have proper language support. 4 | localedef -i en_US -c -f UTF-8 en_US.UTF-8 5 | dpkg-reconfigure locales 6 | 7 | # Configure the timezone. 8 | echo "Europe/Zurich" > "/etc/timezone" 9 | dpkg-reconfigure -f noninteractive tzdata 10 | 11 | # Set the machine’s hostname. 12 | echo "pyramic" > "/etc/hostname" 13 | tee "/etc/hosts" >"/dev/null" < "/dev/null" < "/dev/null" < "/dev/null" < "/dev/null" < TCL Scripts... 147 | 148 | and execute the TCL script corresponding to the board you are using. 149 | 150 | NOTE: executing TCL scripts takes some time (~20-60 seconds), and Quartus 151 | may seem to have "frozen", but it is not the case. Please be patient 152 | and wait until the script is fully executed and returns. 153 | 154 | Top-level VHDL files 155 | ==================== 156 | We provide top-level VHDL files for all development boards. It contains all 157 | available pins on the device. 158 | If you desire to add additional VHDL files to your design 159 | contain the names of all available pins on the device. 160 | 161 | Project > Add/Remove Files in Project... 162 | 163 | -------------------------------------------------------------------------------- /pcb/Altium_Library/HEPIA_LSN_RB_V1.SchLib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/pcb/Altium_Library/HEPIA_LSN_RB_V1.SchLib -------------------------------------------------------------------------------- /pcb/MicArray Project_v3/MicArrayPCBBoard_V3.PcbDoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/pcb/MicArray Project_v3/MicArrayPCBBoard_V3.PcbDoc -------------------------------------------------------------------------------- /pcb/MicArray Project_v3/MicArrayPCB_V3.PrjPcbStructure: -------------------------------------------------------------------------------- 1 | Record=TopLevelDocument|FileName=MicArraySchem_V3.SchDoc 2 | -------------------------------------------------------------------------------- /pcb/MicArray Project_v3/MicArraySchem_V3.SchDoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LCAV/Pyramic/31f5270b9a15b66520f96c928e54393b37a29f14/pcb/MicArray Project_v3/MicArraySchem_V3.SchDoc -------------------------------------------------------------------------------- /pcb/README.md: -------------------------------------------------------------------------------- 1 | This folder contains all the CAD files for the PCB. 2 | 3 | All the hardware design is under a CC-BY-SA 4.0 license as described in the main README. 4 | --------------------------------------------------------------------------------