Cochlear Implant Systems today’s challenges in embedded firmware design December 7, 2009 René Roos
Cochlear Implant Systems?
Cochlear and CTC • Cochlear Implant Systems for hearing impaired people • First Cochlear implant, 1978, Melbourne Hospital • First commercial, DSP-based processor: SPrint (1998) • Current system: Nucleus 5 (2009) • CTC: Cochlear’s R&D outside Australia
Cochlear Implant System
Complexity
Flexibility CI Hybrid (CI + acoustic) CI Bone Anchored
Product diversity deaf 1 1 3 3 Cochlear implants 0 0 DACS 1 1 2 2 0 0 1 1 1 1 0 0 1 1 0 0 Hybrid total hearing loss profound 0 0 9 9 0 0 8 8 0 0 severe 7 7 BAHA 0 0 mod. severe 0 0 6 6 0 0 6 6 HA 5 5 0 0 5 5 0 0 moderate 0 0 4 4 ) 0 0 4 4 L H mild B 3 3 0 0 d 0 0 3 3 ( p S a N G 2 2 0 0 2 2 H 0 0 e n . L o . B ( 0 0 1 1 d 0 0 1 1 r B i A H L ) 0 0 0 0
Importance of firmware • Manage system complexity – Easy recipient ‘fitting’ – Programmable – Adjustable – Field upgrades – Hear Now. And Always • Support product diversity & derivatives – Platform development � �������������� ��������� ���������������� � ������������������������ ���������������������
Cochlear’s Champ • Custom IC • 4 Parallel DSPs • uC • 180 Mops • Extremely low power consumption (few mW)
Hardware integration • Limited amount of hardware releases • ASIC Prototyping – Modelsim – FPGA • Product Prototyping
Software integration • Firmware Integration – uC – DSP • Software Integration – Device drivers – Clinical software – User devices
Sound processing research • Simulink • xPC Target
Quality • Peer review – Product code – Unit / System tests • Coding guidelines – MISRA-C • Documentation • Verification & validation – Regression testing – Automation • Code analyser tools – Static – Dynamic
Looking into static code analysis (example) Synchronous Asynchronous int x, y, a[5] = {1, 2, 3, 4, 5}; int x, y, a[5] = {1, 2, 3, 4, 5}; typedef void (*EventHandler)(void); void f1(void); EventHandler handler; void f2(void); void scheduler(void) void f1(void) { { while (handler) x = 10; { f2(); handler(); } } } void f2(void) { void f1(void); y = a[x]; void f2(void); } void f1(void) int main() { { x = 10; f1(); handler = f2; return y; } } void f2(void) { y = a[x]; handler = 0; } int main() { handler = f1; scheduler(); return y; }
Regulatory • Strict and clear procedures • IEC 62304 – Segregation of software items – How to manage potential software failures – SOUP
Holy grail in supporting developments • Looking for the perfect static analysis tool • Formal code verification? • Quantification of software risks?
Recommend
More recommend