TELL1 VHDL Framework By Aditya Mittal Scenario Block Diagram http://ppewww.physics.gla.ac.uk/~parkes/VeloSoftware/EventModel.jpg TELL1 Tell1 is the common (used for all subdetectors) LHCb data acquisition board that operates at 1.11MHz http://lphe1dell1.epfl.ch/~ghaefeli/specification_and_documents/TELL1.pdf CVS CVS is a concurrent version system It appends a version number to a file name for each revision of a file stored in a repository Changes are tracked in a “commit log” file Basic test side commands include add, remove, commit, and log Basic release side commands include update and checkout According to the TELL1 Homepage, they are not using a CVS repository because their HTL Designer (I’m not sure what this is) deletes the repository TCL (Tool Command Language) Scripts TCL Scripts make it easy to setup the project or achieve tedious and repetitive tasks http://tmml.sourceforge.net/doc/tcl/index.html is a reference manual that can be used when writing a TCL Script The VHDL framework for TELL1 comes with TCL Scripts to make setup easy The order matters when compiling the TCL Scripts because of the dependencies QuartusII has a TCL console window under Utilities in which a TCL script can be called and run Setting up the TELL1 Project for QuartusII Download the latest .zip file from the website Extract and save to some location Open up the environment_setup folder in the hdl folder Right click and open the set_environment_variables file with a text editor and edit the path to your working directory Double click and run the setx application and it will set the environment paths Now open up the preexisting QuartusII file (.qpf) for the particular sub-detector (I used velo_pp_fpga.qpf) and run the TCL scripts in order and the project should all be setup Do a full compile (it takes a while) and make sure everything works Directory Structure The hdl folder has a folder called common_tell1_libraries and another folder called user_tell1_libraries, the user_tell1_libraries are sub-detector specific libraries There is a processing_doc folder which contains release specific documentation Other folders like hdl_ini_files or vhdl_export were not very meaningful to me as I was not using Mentor Graphics software for automatic generation of hdl (hardware description language) nor was I trying to add or remove things from the CVS File Types We have already talked about tcl scripts The most important files are vhdl source code files including the entities themselves and their testbenches (the name of the testbench file should be the same as the name of the vhdl entity file with an _tb attached) .sof and pof files were not meaningful since I did not use Max+PlusII software Another important file type was .vwf a waveform file which can be used to simulate the inputs and outputs of any entity using the Quartus II Simulator, the .vwf are generated by the QuartusII Waveform Editor EDA tool Generated Code A field programmable gate array is a semiconductor device containing programmable logic components and programmable interconnects. The logic components include everything from and, or, not, xor gates to adders, decoders, multiplexers and so on In an EDA tool a module’s functionality can be defined using VHDL code or schematic diagrams of the logic Since much of the logic is repeated over and over in places, it is important that it is fully optimized and that the VHDL is written so that the minimum number of components are generated Often tool generated code is not fully optimized Inter_position_calc_sum_wsum before and after example There is one less adder afterwards in the gate level because of the way the line in VHDL code was written The VHDL modules in the code are built to simulate the desired physics Things like clusterization, common mode subtraction, pedestal subtraction, weighted sum calculation etc. are all built from these gates and memory read write operations in the VHDL modules Timing can also be done within the VHDL module based on clocks, which allows us to build state machines The chapters such as that on clusterization and Input Data Processing for the Velo (Ch3) describe the logic blocks built in the VHDL on TELL1 The TELL1 Spec Sheet http://lphe1dell1.epfl.ch/~ghaefeli/specification_and_do cuments/TELL1.pdf has nice block diagrams of the overall structure of TELL1 and the modules inside VHDL Basics This is not an attempt to teach VHDL coding, refer to some VHDL Reference like this one for that: http://www.eng.auburn.edu/department/ee/mgc/vhdl.html But a few concepts should be clear, VHDL supports coding at various hierarchical levels. The levels of abstraction include: Architectural, Algorithmic, RTL, Gate, and Circuit VHDL also supports both sequential and concurrent statements: All statements within a process are sequential and all processes are concurrent Entities are the logical building blocks of the system, and components and processes form them An architecture is an arrangement of these entities connected by ports or buses Analysis and Synthesis Upon compilation QuartusII will analyze and synthesize all the entities in relation with each other forming the TELL1 architecture The Project Navigator on the Side will show all the design units (including entities and their processes and components) in relation to each other The Node Finder can be used to find all the points at which the various entities are connected to each other Testbenches Testbenches are used to test the various entities It is good practice to write or generate a testbench for each entity in order to ensure proper functionality of the entity and the system A good testbench should cover all the corner cases that can arise in the code This is part of functional verification The TELL1 Code The VHDL code is all at the RTL level, Gate Level Optimizations can be made but would be rather tedious for such a large project The C code is all at the Algorithmic level It is well structured and easy to navigate Throughout the project, a few testbenches exist here and there for higher level entities but not enough, therefore, it would be hard to detect bugs It is a large project and adding testbenches will make it larger still Wavefile Simulation There are two types of simulations that can be done functional and timing with the QuartusII simulator The functional simulator lets us view a bunch of signals at any 1 point in time The timing simulator lets us view 1 signal at many points in time SUM-WSUM Module Simulated Waveform Behavioral Simulation Using EDA tool such as Scirocco from Synopsis one can do Behavioral Simulation which allows us to view the change in many signals and vectors in time as dictated by a testbench In order to use Scirocco first the vhdl entity file and its testbench must be compiled using the “vhdlan” command in a qsh shell running synopsis Next, one needs to compile the top level configuration of the entity using the “scs” command Finally, launch Simulator VirSim Gui using “scirocco &” and after putting in “./scsim” into the main window launch scirocco by pressing ok Open up the Hierarchy window and run for 150ns or so after selecting the waveform Verification Steps after Simulation After writing the code it needs to be verified before release for implementation Simulation using test benches and test vectors is the first step in functional verification Equivalence checking and formal verification are next steps, for TELL1 VHDL code this might be easier because the functionality of the modules can be checked against the C code Mixed Signal Analysis etc. may also be performed at a later stage in Verification Thank You