FPGA PCM-streams converter

FPGA's core written in Verilog, but some parts of logic I prefer to describe in graphical way, which helps to recall an idea easier later. The main task of FPGA is operational measurement of input and output audio signal's level. The CPU sends it to the PC for display, or uses this information on the run, for example, to automatic enabling/disabling of subscriber's channel according to their assigned priorities. So, subscribers with low priority can't interrupt a person with higher priority. Thus, at the first figure you see a part that converts signals to / from PCM-streams.

FPGA also responsible to generate an interrupt signal to the CPU in case if audio signal output values is out of the specified limits:

FPGA CPU part s


The ARM's software written in C++ and does not have much interesting things. So, just for a clearer understanding of some functions, I cite here a shorten list of commands that are transmitted from the PC to the device:

ARM_CMD_Q View Conference Description of the selected profile
ARM_CMD_Z Assign already loaded and activated conference as current (for listening and control)
ARM_CMD_SU Port settings review (in the operational buffer)
ARM_CMD_W Update conference's settings in FLASH-memory in accordance with the data of current
active conference in the operational buffer
ARM_CMD_A Perform numbering of all ports
ARM_CMD_CA Activate conference
ARM_CMD_IN Port Input On/Off
ARM_CMD_OUT Port Output On/Off
ARM_CMD_LEVIN Set port Input coefficient of amplification
ARM_CMD_LEVOUT Set port Output coefficient of amplification
ARM_CMD_NRL Set noise reduction level
ARM_CMD_PR Set port priority
ARM_CMD_GEN Set ticker On/Off in the port
ARM_CMD_LAW  Set port encoding law
ARM_CMD_GETCONFIG Get the description of the device
ARM_CMD_INPBVAL  Set the level of Input signal at the port
ARM_CMD_OUTPBVAL  Set the level of Output signal at the port
ARM_CMD_CADD  Connect port to the current conference
ARM_CMD_CREM  Disconnect port from the current conference
ARM_CMD_PSSC  Set the port status in the conference - speak and listen
ARM_CMD_PSSL Set the port status in the conference - listen, only
ARM_CMD_PSSP Set the port status in the conference - not speak and not listen
ARM_CMD_OFFDL  Set the value of delay to port Off
ARM_CMD_ONDL  Set the value of delay to port On
ARM_CMD_GLTBL  Show the linearization table of DELIC
ARM_CMD_GATSD  Get a list of input signal levels of ports
ARM_CMD_CCID  Change the identifier of the active conference