Let me First talk about System Level Verification Environment,
SOC (system on chip) functionality is controlled by subsystem (DSP, ARM etc).Some Complex SOC has more then one subsystem inside the chip & different IP (peripherals) which executes functionality(Serial port, Audio video coded, Camera Etc) . These subsystems control peripherals inside the chip & execute functionality of peripherals. So, here we need to verify every IP (peripherals) individually and their integration with subsystems and other peripherals.
There are two type of verification we are using to verify entire SOC (System of chip).
(A) Module Level verification
This Type of Verification used to verify module or IP individually.
IPs (peripherals) mostly controlled through input pins. We provide set of input and checking the functionality & expect desired results on output pins according to IPs specifications. In this process we are checking DUT (Design under test) behaviour by providing different type of Test scenarios using Constraint - Randomization and make sure that Module or IP is fully verified by checking Coverage (Functional & Code) Coverage.
We mostly use System Verilog, e, OVA, and VHDL/verilog languages for this type of verification.
(B) System (Chip) Level verification
We mostly use C, Assembly language for this type of verification.
we write Test case in C language to execute various functionality from Processor and assembler converts C language into Assembly language. So, The Assembler reads functions & macros from C Test case and selects set of Assembly instructions and prepare entire test case in Assembly instructions. Now these instructions get converted into binary language because we can load these binary data into program memory.
Once we load data into program memory we run entire design & this verification also has a test bench which has BFM (Bus function module),
Above is normal verification methodology which we are using to verify system on chip. This covers all the functionality of design.
So, why we need Standalone module level verification for Processor Subsystem?
Processors has own set of instructions & how to make sure all instruction get executed in System Level Verification?
In System level verification environment we are using Assembler which converts C Program into Assembly. So, we highly rely on assembler which has hard coded set of instructions for any functions. It uses Limited instructions or Set of instructions.
Assemblers designed only once by vendor and normally it has same set of instructions for C functions & macros.
There are other instructions also though which we can check functionality. Those instructions are not used by assembler. That way we can verify all the functionality of the design but still not verified all the instructions of Processor.
To test every instruction we have to modify the Assembler which is time consuming & also it’s difficult because by modifying it still we cant be sure of using all the instructions in assembler and again not much relevant to system level verification.
We provide Clock & Reset from Test bench and once Processor come out from Reset it start executing functionality according to given instructions & write test case in Assembly language by using all different kind of instructions & check All functionality again. So, here we don’t require assembler and we make sure that 100% coverage achieved by processor.
To execute any functionality through this module level environment, take less time & resource compare to system level.
Above mentioned figure shows the environment of Processors module Level verification. We write test case in Assembly language using all possible functionality related instructions & Assembly language is getting converted into binary format.
This verification environment does have its own linker file, test macros & Test bench.
Linker file which specifies the program memory location where Processor read instruction & execute also take care of jump kind of instruction where user want their program should execute from different memory locations.
Test bench at top-level which has memory pre-loading, BFM & loop back kind of functionality to verify Processors.
Conclusion:
We always close our verification process once we verify all functionality but still in System like DSP/ARM remain unverified as we haven’t tested all instructions yet
Instructions are very crucial for any Processor & it’s like blood in a vein. We can’t afford to ignore it in any SOC Projects as Verification Engineer.
good article..
ReplyDelete