Voor een producent van röntgen detectoren in de medische sector, hebben we een geavanceerd image opslag systeem ontwikkeld met een FPGA en DDR3 chips.
Veel röntgen detectoren zijn uitgerust met een Gig-E Vision interface, een standaard uit 2006 gebaseerd op Gigabit Ethernet. Door de jaren heen zijn de sensor resoluties dusdanig toegenomen dat de maximale beeld frequentie beperkt word door deze interface. Om dit op te lossen word de sensor data snel uitgelezen en in het DDR3 geheugen geplaatst. Daarna kunnen de plaatjes op een lagere snelheid worden gelezen uit het DDR3 geheugen en verzonden met de Gig-E interface. De uitdaging was de eis om meer dan 500 hoge resolutie plaatjes op te slaan in het geheugen.Het klant had het hardware platform reeds gedefinieerd. Wij creëerden de interne FPGA architectuur en maakte het bandbreedte berekening model om vast te stellen hoeveel DDR 3 chips er nodig waren om te voldoen aan de beeld frequentie en capaciteit eisen.De laatste eis leidde ertoe dat het totale DDR3 geheugen 2 Gigabyte moest zijn.DDR3 chips zijn ontworpen voor fly-by topologie. De DDR3 controller in de FPGA moet daarom ondersteuning bieden voor read en write leveling om de maximale performance te halen.Om het mogelijk te maken om streaming en random plaatjes te lezen en schrijven is een nieuw file systeem ontwikkeld. In dit file systeem worden tijdcodes, volgnummers en andere instellingen toegevoegd aan ieder plaatje. Ook een CRC per plaatje ontbreekt niet om de integriteit van te checken.Het blokschema toont de systeem architectuur van het image processing subsysteem en gerelateerde componenten. De centrale unit is de packing/unpacking core. De image data komt hier binnen, worden ingepakt in het file formaat en weggeschreven naar de DDR3 controller via de Avalon bus. Als de Gig-E transmitter (hier niet weergegeven) beschikbaar is om data te ontvangen leest de unpacker de plaatjes uit het geheugen en stuurt die in het oorspronkelijke formaat uit.De NiosII host processor bestuurt de packing/unpacking core via het register file blok. In dit blok bevinden zich alle registers die de processing core nodig heeft. De registers worden geschreven en gelezen door de NiosII via de Avalon bus. De register file is gegenereerd met onze register builder software.Om het gedrag van de DDR3 controller samen met chips te imiteren is een model gemaakt en gebruikt in een testbench. Deze testbench stelt alle registers in en bevat ook een dummy image data generator met pseudo-random data en een verificatie unit om de output te controleren op fouten.Om het gehele subsysteem te testen is ook in de hardware een image stream generator in de FPGA ingebouwd (hier niet weergegeven) die kan worden verbonden met de core.Met de NiosII kan de dummy data geschakeld worden en kan het opnemen en uitsturen van plaatjes via het geheugen worden gestart en gestopt. Tijdens het uitlezen van de plaatjes uit het geheugen worden CRC fouten gelogd door de core. Deze log data is via de register file beschikbaar voor de host en is veelvuldig gebruikt tijdens het debuggen.Het systeem is geleverd aan de klant en is inmiddels in productie.