• No results found

FIFO-kostruktion baserat på ett enkel-ports SRAM

N/A
N/A
Protected

Academic year: 2021

Share "FIFO-kostruktion baserat på ett enkel-ports SRAM"

Copied!
39
0
0

Loading.... (view fulltext now)

Full text

(1)

FIFO-kostruktion baserat på ett enkel-ports SRAM

Yusuf Duman

LiTH-ISY-EX-ET-0258-2003

Linköping 2003

(2)
(3)

FIFO-kostruktion baserat på ett enkel-ports SRAM

Examensarbete utfört vid Elektroniksystem

Institutionen för Systemteknik

Linköpings Tekniska Högskola

Av

Yusuf Duman

LiTH-ISY-EX-ET-0258

2003

Handledare: Henrik Ohlsson Examinator: Lars Wanhammar

(4)
(5)

Avdelning, Institution Division, Department Institutionen för Systemteknik 581 83 LINKÖPING Datum Date 2003-08-22 Språk

Language Rapporttyp Report category ISBN X Svenska/Swedish

Engelska/English Licentiatavhandling X Examensarbete ISRN LITH-ISY-EX-ET-0258-2003 C-uppsats D-uppsats Serietitel och serienummer Title of series, numbering ISSN

Övrig rapport

URL för elektronisk version

http://www.ep.liu.se/exjobb/isy/2003/258/

Titel

Title FIFO-kostruktion baserat på ett enkel-ports SRAM FIFO-construction based on a single-port SRAM

Författare

Author Yusuf Duman

Sammanfattning

Abstract

Vid implementeringar av FIFO-arkitekturer har asynkrona FIFO-konstruktioner använts. Denna lösningsmetod har visat sig innehålla en del brister vid tillämpning på höghastighets system, vilket ledde till att synkrona FIFOn började ersätta asynkrona FIFOn.

Den synkrona arkitekturen har samma funktonalitet som de asynkrona typerna med fördelar som högre hastighet och enklare gränssnitt.

I rapporten har olika FIFO-konstruktioner behandlats och jämförelser har gjorts mellan synkrona och asynkrona arkitekturer. Det vid ISY konstruerade SRAM-minnet har sedan avgjort vilken typ av FIFO-arkitektur som varit bäst lämpad för implementering.

Det implementerade FIFO-minnet ordnar indata- och utdataflöden till ett enkelports SRAM-minne på 256 ord med 16 bitar per ord.

Previous implementations of FIFO-architectures has often been asynchronous FIFO-constructions. This method has some limitations in high speed systems. Instead synchronous FIFOs has more and more replaced asynchronous FIFOs.

The synchronous architecture has the same features as the asynchronous but with advantages such as higher speed and simplified interface.

In the report different types of FIFO-constructions has been studied and comparison between synchronous and asynchronous architectures has been done. The memory unit developed by ISY decided which FIFO-architecture that were best suited for the implementation.

The implemented FIFO-memory arrange in- and outdataflow to a single-port SRAM memory containing 256 words with 16 bits per word.

Nyckelord

Keyword

FIFO, SRAM, synkron, asynkron, adressräknare, Data-multiplexer, arkitektur

(6)
(7)

1

Innehållsförteckning

1 INLEDNING ...3 1.1SYFTE...3 1.2METOD...3 1.3SPECIFIKATION AV FIFO ...4 2 FIFO ...5

3 OLIKA TYPER AV FIFO ...7

3.1SKIFTBASERADE FIFON...8

3.2ASYNKRON FIFO ...9

3.3SYNKRON FIFO...10

3.4RAM BASERADE FIFON...11

4 SPECIFIKATION AV RAM-MINNE...15 5 IMPLEMENTERING AV FIFO...17 5.1BESKRIVNING AV SIGNALER...18 5.2KONTROLLBLOCK...19 5.3RÄKNARE...19 5.4FUNKTIONSBESKRIVNING AV FIFON...20 5.5DATA-MULTIPLEXER...21 5.6ADRESS-MULTIPLEXER...22 6 SIMULERING ...23 7 SLUTSATS ...25 8 REFERENSER...27

(8)
(9)

3

1 Inledning

Examensarbetet utfördes på Linköpings universitet vid institutionen för systemteknik (ISY).

Uppgiften för examensarbetet var att konstruera och simulera ett FIFO-minne (First-In-First-Out). FIFOn skall ordna skriv- och läsoperationer till ett enkelport SRAM, som konstrueras vid ISY.

1.1 Syfte

Examensarbetet bestod av att implementera och simulera en FIFO, baserad på ett enkelports SRAM.

Högnivåspråket VHDL [1] användes för kodning av de olika delblocken och simuleringen skedde i simulatorn Modelsim.

1.2 Metod

Arbetsgången var att från ide och insamlad information ta reda på de delblock som en FIFO består av.

Genom att utvärdera några FIFO-strukturer, valdes de delblock som var mest lämpade att implementeras. Dessa delblock är kontrollblock,

skrivräknare, läsräknare, adressräknare, adressmultiplexer och datamultiplexer. FIFOn verifieras sedan genom simuleringar.

(10)

1.3 Specifikation av FIFO

Kontrollblocket har till uppgift att generera de in- och utsignaler som ingår i den statiska RAM-arkitekturen. SRAM-minnet har insignalerna Enable, Read/Write, Address, samt Data som är en gemensam in- och utsignal, se figur nedan.

FIFO-minnet skall hantera läsning och skrivning av de 256 ord med 16 bitar per ord som ryms i SRAM-minnet. FIFOns uppgift är att ordna de genererade skriv- och läsoperationer som förekommer, för att sedan placera dem i en kö beroende på operationernas uppkomst, gällande tidpunkt.

FIFO

Enable Read/Write DATA Address Control block SRAM Clock Reset Write Read DATA FifoEmpty FifoFull

(11)

5

2 FIFO

FIFO (First-In-First-Out) är nyckelkomponenter i höghastighetssystem och används som lagringsbuffrar mellan delsystem.

Ett FIFO-minne kan vara uppbyggt utav skiftregister, vilka skiftar indata respektive utdata. FIFOn kan ha tre interna räknare för att ordna de

dataflöden som genereras:

Skrivräknaren ( Write_counter ) registrerar och räknar upp antalet förekommande skrivoperationer.

Läsräknaren ( Read_counter ) registrerar och räknar upp antalet förekommande läsoperationer.

Adressräknaren ( Address_counter ) har till uppgift att visa det exakta antalet dataord som finns i minnet.

Till adressräknaren är två statusflaggor kopplade ( FifoEmpty och FifoFull ) för att indikera om minnet är tomt respektive fullt. För att

förhindra att information går förlorad finns ett par interna kontrollsignaler ( FifoEmpty_signal, och FifoFull_signal ) kopplade till statusflaggorna. Dessa kontrollsignaler blockerar skrivoperationer när minnet är fullt och läsoperationer när minnet är tomt. Skiftregistren är kopplade till en systemklocka (Clock) som startar dataflöden i minnet och en

nollställningssignal (Reset) som nollställer hela minnet, inklusive räknarna.

(12)
(13)

7

3 Olika typer av FIFO

Synkrona FIFOn introducerar en ny FIFO-arkitektur som ökar prestanda och underlättar systemdesignen [4]. Den synkrona arkitekturen har all den förmåga som de tidigare asynkrona typerna hade med fördelar som högre hastighet och enklare gränssnitt. Detta resulterar i att synkrona FIFOn ersätter asynkrona FIFOn i alla typer av applikationer.

Olika typer av synkrona FIFOn kan vara fördelaktiga att använda, beroende på i vilken applikation de ska användas.

Nedan ges några exempel för att speciellt belysa skillnaderna mellan asynkrona- och synkrona FIFO implementationer.

Figur 1 visar den enklaste formen av FIFO-arkitekturerna och kallas för skiftbaserade FIFOn.

I figurerna 2 och 3 visas blockdiagram av asynkrona och synkrona FIFOn implementerade med två-ports RAM.

Figur 4 visar Ring-adress mekanism av SRAM baserade FIFOn där dess adresser har en cirkulär arbetsgång, därav namnet.

I figur 5 visas Två-ports SRAM baserade FIFOn, medan figur 6 visar Enkel-ports SRAM baserade FIFOn.

(14)

3.1 Skiftbaserade FIFOn

Denna typ av FIFO är baserad på klockade skiftregister som skiftar data från skriv-porten in till den sista oanvända platsen av skiftregistret. Data skiftas åt höger så länge det finns ledig plats i registret. När alla platser till höger om det nya datat är upptagna ligger det kvar på samma plats, tills det första datat i minnet läses ut. När ett data har lästs ut i minnets högra kant flyttas övriga data ett steg till höger och fyller det tomma utrymmet. När registret är fullt kommer inskrivning av nya data förhindras. Nackdelen med denna metod är att ett ord som skrivs in via en skriv-port, måste ta sig igenom n-raders FIFO minnet till läs-porten. Detta kräver en pipeline fördröjning som kan vara upp till n-klockpulser lång, se figur 1.

Vid användning av denna konstruktion måste alltid en avvägning göras gällande FIFO minnets djup. Litet djup leder till att många data går förlorade, medan stort djup leder till större chipyta och lång fördröjning.

Data_in 0 1 2 253 254 255 Data_out

B A

C

C B A

C B A

(15)

9

3.2 Asynkron FIFO

Den asynkrona FIFOn nedan består av ett två-ports RAM-minne, läs- och skrivräknare samt flagglogik som avkodar adressräknarens värden för att generera tom- respektive fullflaggan, se figur 2. RAM-minnets läs- och skrivoperationer kan utföras oberoende av varandra, eftersom minnet har både läs- och skrivportar. Skrivräknaren väljer var nästa minnesord skall skrivas och läsräknaren väljer var nästa minnesord skall läsas. Data skrivs in i FIFOn då skrivklockan, Write Clock är aktivt låg. Var i RAMminnet informationen hamnar beror på skrivräknarens innehåll, som är noll från början och ökar med ett steg vid uppåtgående flank på

skrivklockan. Detta gör att skrivräknaren pekar på nästa tillgängliga minnesplats.

Skrivklockan är även RAMminnets skrivpuls, vilken verkar för att den minnesplats som skrivräknaren pekar på accepterar indata från

skrivdatabussen, Write Data.

Läsoperationerna går till enligt samma procedur som ovan och styrs av läsklockan. Läsräknaren pekar på berörd dataord, vilket läggs ut på läsdatabussen, Read Data.

Write_counter

Read_counter

Read Data

Figur 2 Asynkron FIFO Block Diagram [4]

Dual-Port RAM Address_ counter

___ Full _____ Empty _________ Write Clock _________ Read Clock Write Data

(16)

3.3 Synkron FIFO

En synkron FIFO konstrueras genom att kombinera en asynkron FIFO med register enligt figur 3.

Registren synkroniserar in- och utsignaler med läs- och skrivklockorna. Fördelar med synkron FIFO:

• FIFOns klockhastighet är densamma som systemklockans hastighet, vilket gör att det inte behövs någon kontrollogik för att försäkra sig om att FIFOn följer systemklockans hastighet.

• Synkrona FIFOn är snabbare både vid skrivning och läsning. Egna skrivklockor förenklar och snabbar upp interna skrivoperationer. Läsoperationer är snabbare pga lägre propageringstid mellan RAM-minnet och kretsens register.

• Synkrona FIFOn har reducerad bruskänslighet. De är endast känsliga under uppåtgående flank på läs/skrivklockan istället för under hela cykeln, som i fallet med asynkrona FIFOn.

Nackdelen med synkrona FIFOn är att de upptar en större chipyta, vilket leder till att kostnaden kan bli högre.

___ Full _____ Empty Dual-Port SRAM Write Latch Address_ counter __________ Write Enable Write Clock Write Data Write Data Register Write_ counter FF EF Write Pulse Gen

(17)

11

3.4 RAM baserade FIFOn

Använder ett RAM för att spara data tillsammans med läs- och

skrivadressregister för kontroll av FIFOn. Beroende på vilket sätt man hanterar data, kan följande RAM-typs FIFOn kännas igen.

• Ring-adress mekanism av SRAM baserade FIFOn Write Address Register (WAR) och Read Address Register (RAR) används för att specificera skrivadress respektive läsadress. Varje register innehåller ´n – 1´ nollor och exakt en ´1´ som specificerar om dataordet skall skrivas eller läsas. När en skriv- eller läsoperation utförs, skiftas skrivadressregistret (WAR) och läsadressregistret (RAR) cirkulärt. Detta medför att adress-dekodern i RAM-minnet elimineras, vilket resulterar i en effektivare FIFO. Detta är en ekonomisk implementation för små FIFOn, se figur 4.

i i+1 i+2 i+3

Memory word i Memory word i+1 Memory word i+2 Memory word i+3 0 0 1 0 0 0 1 0 Write Read word word WAR Lines Write bit lines lines RAR

Shift direction WAR and RAR

Read bit lines

(18)

• Två-ports SRAM baserade FIFOn

Skrivräknaren ( Write Addr Reg ) och läsräknaren ( Read Addr Reg ) är specificerade var för sig med N-bit räknare som adresserar minnet via separata portar, se figur 5. Några typiska egenskaper för ett statiskt två-ports RAM är att den är försedd med indikatorflaggorna tom och full för att ange statusen, att responstiden för läs- och skrivoperationer är en klockcykel, att simultana läs- och skrivoperationer alltid är tillåtna och att illegala operationer som att läsa från en tom FIFO ignoreras. Signalernas betydelse och funktion förklaras längre fram.

Data Input Reg Read Addr Reg WE Clk RS FF WO RO DI DUAL-PORT SRAM 256 words 16 bits/word RE EF FIFO Control Block Write Addr Reg Data Output Reg Data_out Data_in DO

(19)

13

• Enkel-ports SRAM baserade FIFOn

Skrivräknaren ( Write Addr Reg ) och läsräknaren ( Read Addr Reg ) är specificerade var för sig med N-bit räknare som kopplas till minnet via en enkel-port, se figur 6. Ingående data presenteras på DI bussen medan utgående data tas från DO bussen. Kontrollblockets funktion inkluderar serialisation av simultana RR (läsförfrågningar) och WR (skrivförfrågningar). FF och EF visar statusen på FIFOn och indikerar om den är full eller tom. RS (reset) kontrollen påverkar skriv- och läsräknaren så att de specificerar samma initialadress. Denna

implementation kostar mindre då den upptar en mindre chipyta, men har en lägre prestanda än föregående konstruktion, se figur 5.

Address multiplexer Data multiplexer Write Addr Reg Read Addr Reg WE RS Clk FF DI DO SINGLE-PORT SRAM 256 words 16 bits/word RE EF FIFO Control Block

(20)
(21)

15

4 Specifikation av RAM-minne

Det RAM som konstruerats vid ISY, vilket denna FIFO baseras på, är ett enkelports statiskt RAM-minne, se figur 7.

Det som skiljer ett enkelports RAM minne från ett dubbelports RAM minne är att enkelports RAM minne använder samma port för både indata och utdata, medan dubbelports RAM minnen har separata läs- och skrivsignaler plus separata portar för indata och utdata.

RAM-minnet har plats för 256 ord med 16 bitar per ord och består av två kontrollsignaler, en adressbuss och en databuss, se figur 7. Insignalen Enable är minnets klocksignal, vilken genereras av FIFOns Clock.

Read/Write signalen anropas av FIFOns interna signal Write_signal som i sin tur är kopplad till insignalerna Write och Read. Dessa signaler avgör om information skall skrivas in i minnet eller läsas ut ur minnet.

Insignalen Address är en åtta bitars buss som anropas av FIFOns interna adressbuss Address_signal som tilldelas antingen skrivräknaren

Write_counter eller läsräknaren Read_counter, vilka indikerar antalet skriv- samt läsoperationer. Databussen, som är 16 bitar bred, är en

gemensam indata- och utdatabuss och anropas av FIFOns databuss, Data. Dataflöden till och från minnet sker via Databussen.

Enable (klockning) _____ Read/Write Address (7, 0) Data (15, 0) Single-port SRAM 256 words 16 bits/word

(22)
(23)

17

5 Implementering av FIFO

Den FIFO-typ som valdes att konstrueras för detta projekt var helt och hållet beroende av RAM-minnets uppbyggnad, se figur 7.

Detta ledde till att nedanstående FIFO-arkitektur, enkelports SRAM-FIFOn valdes, se figur 8.

RO WO Enable ____ Read/Write Address Data

Figur 8 Enkel-ports SRAM FIFO Block Diagram [3]

DI DO Write_ counter Read_ counter Address_ multiplexer Data multiplexer Write Clock Reset FifoFull SINGLE-PORT SRAM 256 words 16 bits/word Read FifoEmpty FIFO Control Block Address- counter

(24)

5.1 Beskrivning av signaler

FifoFull signal: Indikerar att FIFOn är full (innehåller 256 ord). FifoEmpty signal: Indikerar att FIFOn är tom (innehåller 0 ord). Reset signal: vid hög signal placeras FIFOn i dess initialläge oavsett vilket läge den befann sig i tidigare.

Write signal: Tillåter skrivning om Write = 1 och blockerar skrivning om Write = 0.

Read signal: Tillåter läsning om Read = 1 och blockerar läsning om Read = 0.

WO ( Write operation ): En 16-bit ord skrivs in i FIFOn och

skrivräknaren ( Write_counter ) pekar på nästa plats i minnet om minnet inte är full, annars på noll. En skrivoperation kan endast utföras om Write = 1, FifoFull = 0 och Read = 0.

RO ( Read operation ): En 16-bit ord läses från FIFOn och läsräknaren ( Read_counter ) pekar på nästa ord som skall läsas om minnet inte är tom, annars på noll. En läsoperation kan endast utföras om Read = 1, FifoEmpty = 0 och Write = 0.

OWP ( Over Write protection ): Tillåter skrivoperation om FifoFull = 0 och blockerar skrivoperation om FifoFull = 1.

ORP (Over Read protection): Tillåter läsoperation om FifoEmpty = 0 och blockerar läsoperation om FifoEmpty = 1.

(25)

19

5.2 Kontrollblock

Kontrollblocket kan sägas vara FIFO-minnets hjärna. Den ser till att kommunikationen mellan de olika delblocken fungerar och styr FIFO-minnets statussignaler.

5.3 Räknare

FIFO-minnet innehåller tre olika räknare:

Skrivräknare ”Write_counter” registrerar och räknar upp alla genererade skrivoperationer.

Läsräknare ”Read_counter” registrerar och räknar upp alla genererade läsoperationer.

Adressräknaren ”Address_counter” är den räknare som visar antalet ord i minnet och fungerar som en summeringsoperator mellan skriv- och

läsräknaren.

Exempel: 15 utförda skrivoperationer och 5 utförda läsoperationer gör att adressräknaren visar talet 10, ( 15 – 5 = 10 ). Adressräknaren styr också de två statusflaggorna ”FifoFull” och ”FifoEmpty”, vilka indikerar tomt respektive fullt minne.

(26)

5.4 Funktionsbeskrivning av FIFOn

Både läs- och skrivräknaren står i initialläget från början, vilket betyder att de pekar på minnesplats 0, se figur 9.

Inskrivning av data:

Första dataordet som skrivs läggs in på minnesplats 0 i RAM-minnet, eftersom skrivräknaren pekar på minnesplats 0. När det första dataordet har skrivits in pekar skrivräknaren på nästa minnesplats, vilket leder till att nästa dataord som skrivs läggs in på minnesplats 1 osv. Detta innebär att skrivoperations räknaren ökar med ett steg för varje dataord som skrivs in, samtidigt räknas adressräknaren upp för varje inskrivet dataord. Utläsning av data:

Dataord som ligger på minnesplats 0 utläses först, då läsräknaren pekar på minnesplats 0. Sedan utläses det dataord som ligger på minnesplats 1 osv. Detta innebär att läsoperationsräknaren ökar med ett steg för varje dataord som läses ut. Samtidigt räknas adressräknaren ned med ett steg för varje utläst dataord.

Om exempelvis 256 skrivoperationer sker efter varandra utan någon läsoperation emellan, så leder det till att adressräknaren räknat upp till sitt maximalt tillåtna värde. Detta innebär att RAM-minnet blir fullt och flaggsignalen fifofull ettställs och spärrar för vidare skrivoperationer. Det finns två sätt att lämna detta läge, antingen genom att utföra läsoperationer vilket leder till att flaggsignalen fifofull nollställs då adressräknaren räknar ner, eller genom att ettställa ”Reset”, vilket leder till att ”Write_counter” och ”Read_counter” återgår till sina initiallägen.

Write 16-bits word Read

0000000000000001 0 1 2 3 4 5 252 253

(27)

21

5.5 Data-multiplexer

FIFO-minnet har separata datasignaler för läsning respektive skrivning. Dessa måste anpassas till RAM-minnet, som använder en gemensam insignal för läsning och skrivning. En datamultiplexer utnyttjas för att avgöra om de genererade skriv- och läsoperationer som genereras skall läggas in som indata till RAM-minnet eller läsas ut som utdata från RAM-minnet.

När Read/Write är ´0´ skrivs informationen in till RAM-minnet som indata och när Read/Write är ´1´ utläses informationen från RAM-minnet som utdata, se figur 10.

DO DI ____ Read/Write 1 0 Data

(28)

5.6 Adress-multiplexer

En adress_multiplexer används för att bestämma om en operation ska använda läs- eller skrivadressen.

När Write är ´1´ tilldelas skrivadressen till Address och när Write är ´0´ tilldelas läsadressen till Address, se figur 11.

Address WO RO Write 1 0

(29)

23

6 Simulering

FIFOn har simulerats i simulatorn Modelsim och de olika

kontrollsignalerna har testats, för att verifiera en tillfredsställande funktion.

Simuleringen har gått till enligt följande:

Information har förts in i FIFOminnet och sedan lästs ut ur minnet, för att försäkra sig om att ordningen enligt principen först in först ut följdes. Reset-signalen sattes hög för att försäkra sig om att inga operationer gått att genomföra och att hela FIFO-minnet nollställts.

Sedan gjordes försök att läsa ut från ett tomt minne, vilket blockerades av kontrollsignalen FifoEmpty som var hög och markerade att ingen information fanns att utläsa.

Minnet fylldes för att kontrollera om det gick att skriva över befintlig information, vilket nekades då kontrollsignalen FifoFull var hög och blockerade för vidare skrivoperationer.

Det har inte gått att genomföra någon operation då både Read- och Writesignalen varit höga samtidigt, vilket är korrekt.

Testresultaten av simuleringen var fullständiga och korrekta, vilket verifierade FIFOminnets funktionalitet.

(30)
(31)

25

7 Slutsats

FIFO implementeringen var beroende av RAM minnets konstruktion, vilket gav arkitekturen på FIFOn.

FIFO-minnet och SRAM-minnet har implementerats som separata block i högnivåspråket VHDL. FIFO minnet anropar SRAM minnet och

kontrollerar de dataflöden som förekommer.

Detta innebär att RAM minnet enkelt kan bytas ut mot ett annat. Genom några små justeringar i FIFO minnets VHDL-kod kan det anpassas till minnets insignaler och utsignaler. Ändrad storlek vad gäller ordlängd och djup på det nya RAM minnet, föranleder inte heller till några större

justeringar vad gäller FIFO minnets VHDL-kod.

FIFOn har testats genom simuleringar och funktionaliteten har verifierats.

(32)
(33)

27

8 Referenser

[1] Kevin Skahill VHDL for PROGRAMMABLE LOGIC

[2] Goor A., Schanstra I and Zorian Y.; ”BIST for Ring-Address SRAM-type FIFOs” ( p 112 – 118 )

[3] Goor A. and Zorian Y.; ”Functinal Tests for Arbitration SRAM-type FIFOs ” ( p 96 – 101 )

(34)
(35)

Appendix

Library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; Entity SRAM-FIFO is Port ( Clock : in std_logic; Reset : in std_logic; Write : in std_logic; Read : in std_logic;

Data : inout std_logic_vector(15 downto 0); FifoEmpty : out std_logic;

FifoFull : out std_logic );

END SRAM-FIFO;

Architecture FIFO of SRAM-FIFO is

Component Rams Port (

Enable____ : in std_logic; Read/Write : in std_logic;

Data : inout std_logic_vector ( 15 downto 0 ); Address : in std_logic_vector ( 7 downto 0 ) );

END Component;

Signal Read_counter : std_logic_vector ( 7 downto 0 ); Signal Write_counter : std_logic_vector ( 7 downto 0 ); Signal Address_counter : std_logic_vector ( 7 downto 0 ); Signal Address_signal : std_logic_vector ( 7 downto 0 );

Signal Write_signal : std_logic;

Signal FifoFull_signal : std_logic;

(36)

Begin FifoRam : Rams Port map ( Enable____ => Clock, Read/Write => Write_signal, Data => Data, Address => Address_signal );

ReadWriteFifo : Process ( Clock, Reset )

Begin

IF ( Reset = '1' ) then

Read_counter <= ( others => '0' ); Write_counter <= ( others => '0' ); Address_counter <= ( others => '0' );

ELSIF ( Clock'event and Clock = '0' ) then

IF ( Write = '1' and FifoFull_signal = '0' and Read = '0' ) then

Write_counter <= Write_counter + 1;

Address_counter <= Address_counter + 1;

END IF;

IF ( Read = '1' and FifoEmpty_signal = '0' and Write = '0' ) then Read_counter <= Read_counter + 1; Address_counter <= Address_counter - 1; END IF; END IF; END process; --- ---

FifoEmpty_signal <= '1' when (Address_counter = "00000000") else '0'; FifoFull_signal <= '1' when (Address_counter = "11111111") else '0'; FifoFull <= FifoFull_signal;

FifoEmpty <= FifoEmpty_signal;

(37)

Library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; Entity SRAM is Port ( Enable____ : in std_logic; Read/Write : in std_logic;

Data : inout std_logic_vector ( 15 downto 0 ); Address : in std_logic_vector ( 7 downto 0 ) );

END SRAM;

Architecture RAM of SRAM is

Type Mem is array ( 0 to 255 ) of std_logic_vector ( 15 downto 0 ); Signal Memory : Mem;

Begin

Write_Process : Process ( Enable ) Begin

IF ( Enable'event and Enable = '0' ) then IF ( Read/Write = '1' ) then

Memory ( Conv_Integer ( Address )) <= Data;

END IF;

ELSE Data <= Memory ( Conv_Integer ( Address )); END IF;

END process; End SRAM;

(38)
(39)

På svenska

Detta dokument hålls tillgängligt på Internet – eller dess framtida ersättare – under en längre tid från publiceringsdatum under förutsättning att inga extra-ordinära omständigheter uppstår.

Tillgång till dokumentet innebär tillstånd för var och en att läsa, ladda ner, skriva ut enstaka kopior för enskilt bruk och att använda det oförändrat för ickekommersiell forskning och för undervisning. Överföring av upphovsrätten vid en senare tidpunkt kan inte upphäva detta tillstånd. All annan användning av dokumentet kräver upphovsmannens medgivande. För att garantera äktheten, säkerheten och tillgängligheten finns det lösningar av teknisk och administrativ art.

Upphovsmannens ideella rätt innefattar rätt att bli nämnd som upphovsman i den omfattning som god sed kräver vid användning av dokumentet på ovan beskrivna sätt samt skydd mot att dokumentet ändras eller presenteras i sådan form eller i sådant sammanhang som är kränkande för upphovsmannens litterära eller konstnärliga anseende eller egenart.

För ytterligare information om Linköping University Electronic Press se förlagets hemsida http://www.ep.liu.se/

In English

The publishers will keep this document online on the Internet - or its possible replacement - for a considerable time from the date of publication barring exceptional circumstances.

The online availability of the document implies a permanent permission for anyone to read, to download, to print out single copies for your own use and to use it unchanged for any non-commercial research and educational purpose. Subsequent transfers of copyright cannot revoke this permission. All other uses of the document are conditional on the consent of the copyright owner. The publisher has taken technical and administrative measures to assure authenticity, security and accessibility.

According to intellectual property law the author has the right to be mentioned when his/her work is accessed as described above and to be protected against infringement.

For additional information about the Linköping University Electronic Press and its procedures for publication and for assurance of document integrity, please refer to its WWW home page: http://www.ep.liu.se/

References

Related documents

Nima Gholam Ali Pour (SD) har anhållit om att till kommunalrådet med beredningsansvar för arbetsmarknads- och socialnämnd Sedat Arif (S) få framställa en enkel fråga

Torbjörn Tegnhammar (M) har anhållit om att till kommunalrådet med beredningsansvar för miljö och stadsbyggnad Simon Chrisander (L) få framställa en enkel fråga om industrijobb i

Kommunfullmäktige beslutade under § 117 D medge Lars-Johan Hallgren (SD) att till kommunalrådet med beredningsansvar för arbetsmarknad och socialtjänst Sedat Arif (S) få

Kommunfullmäktige beslutade under § 160 E medge Emma-Lina Johansson (V) att till kommunalrådet med beredningsansvar för arbetsmarknad och socialtjänst Rose-Marie Carlsson (S)

Kommer Malmö stad införa liknande förbud som är i linje med EU-parlamentets beslut i väntan på att detta ska förverkligas. Tony

Kommunfullmäktige beslutade under § 250 A medge Måns Berger (MP) att till kommunalrådet med beredningsansvar för arbetsmarknad och socialtjänst Rose-Marie Carlsson (S) få framställa

Daniel Sestrajcic (V) har anhållit om att till kommunstyrelsens ordförande Katrin Stjernfeldt Jammeh (S) få framställa en enkel fråga om Malmö stads engagemang för The

Emma-Lina Johansson (V) har anhållit om att till kommunalrådet med beredningsansvar för arbetsmarknad och socialtjänst Sedat Arif (S) få framställa en enkel fråga om nya