   Lexical analysis, regular expressions, deterministic and nondeterministic finite automa, contextfree grammers, topdown parsing, syntax trees, scopes and symbol tables, type checking, intermediterepresentation generation, machinecode generation, register allocation, code scheduling, dataflow analysis, Scalar Optimization, Peephole optimizations, dependence analysis.  Fifth year     Sharedmemory and Distributedmemory parallel architectures. Cache Coherence protocols. Interconnection Networks and Topologies. Parallel Programming. Problem Decomposition Techniques. Synchronization Methods (Barriers, Critical Sections, Locks, Atomic operations). OpenMPI Programming. MPI Programming. Performance Measurement and Analysis of Parallel Programs. Numerical and NonNumerical Algorithms.  Fifth year     Pipelining: Data and Control Hazards, Exceptions and Interrupts, Instruction Level Parallelism (ILP): Software and Hardware approaches for speculative execution, Case Studies of Modern Processors. Memory Hierarchy: Cache Design and Evaluation, Virtual Memory, Advanced Cache Technology, Input/Output Devices and Interface, Multiprocessors and Vector Processing, Shared and Distributed Memory Architectures. Graphics Processing.  Fourth year     Using CAD tools, the student designs and simulates the main parts of a computer: the ALU, registers, control unit, cache memory, system bus, memory, and I/O devices. Integration and simulation of computer design.  Fourth year     Number Systems and digital waveforms. Basic gates and logic functions. Boolean algebra, Boolean expressions. Logic minimization techniques. VHDL basics. Design, simulation and synthesis tools for programmable logic devices. Combinational logic building blocks including decoders, encoders, multiplexers, demultiplexers, magnitude comparators. VHDL for combinational circuits. Digital arithmetic, adders, subtractors. VHDL for arithmetic circuits. Basics of sequential circuits. Basic latches and flipflops. Timing parameters and diagrams. Counters, shift registers. Basic PLDs, CPLDs and FPGAs architectures. VHDL for binary counters and shift registers. State machines. System design with state machines using VHDL. Memory devices and systems including RAM, ROM, FIFO, LIFO and dynamic RAM.  Second year     Experiments on basic TTL and CMOS logic gates, including simulations to explore functionality and timing parameters. Experiments using both simulation and practical hardware implementation on CPLDs or FPGAs, using VHDL for combinational and sequential circuits including multiplexers, demultiplexers, decoders, encoders, shift registers, counters, latches and memory. Experiments in logic design using state machines.  Second year     Elementary programming, primitive data types, assignments and expressions, control flow statements, loops, functions, arrays, pointers, strings, libraries, objects, classes, and problemsolving.  First year 
