Bästa svaret
I strukturell dataflödesmodellering definieras digitala designfunktioner med hjälp av komponenter som en inverterare , en MUX, en adderare, en avkodare, grundläggande digitala logikgrindar osv. Det är som att ansluta och ordna olika delar av kretsar som är tillgängliga för att implementera en funktion du letar efter.
Implementering av halv adderare med hjälp av strukturell dataflödesmodellering: ingång A, B; utgångssumma, bär; xor (.in1 (A), .in2 (B), .out (sum)); och (.in1 (A), .in2 (B), .out (bär));
Modellering av beteendeflöden används för att beskriva beteendet hos digitala kretsar. Designer beskriver funktionaliteten i design genom att skriva algoritmkod. Det används för att förklara dataflödet med olika booleska uttryck som & (och), | (eller), ~ (invertera), ^ (xor),? (Villkorad) etc … två underkategorier av denna typmodellering schemat är kontinuerligt dataflöde och procedurellt dataflöde.
1. Kontinuerligt dataflöde I denna typ av dataflödesmodellering är tilldelning av data till utgångar kontinuerlig. Detta kommer att implementeras med ” tilldela ” uttalanden i Verilog som visas i exemplet.
input A, B; utgångssumma, bär; tråd summa, bär; tilldela summa = A ^ B; assign carry = A & B;
Det är kontinuerlig tilldelning och all förändring av ingången kommer därför att påverka utdata omedelbart eftersom avsaknad av kontrollåtgärder, dvs känslighetslista. Här måste utgående variabel definieras som ” tråd ” eftersom de kontinuerligt drivs av digital logik definierad på RHS.
2. Procedurellt dataflöde Här utförs datatilldelningarna inte kontinuerligt, utan sker på specifika händelser som anges i känslighetslistan. Denna typ av modelleringsschema implementeras med procedurblock som ” alltid ” eller ” initial ”som visas i exemplet.
ingång A, B; utgångssumma, bär; reg summa, bär; alltid @ (A) börjar summan A + B; bär A & B; slut
RHS för alla uttryck beräknas kontinuerligt men dess tilldelning till LHS sker endast vid ändring av ingång A men inte B. I detta fall måste utdatavariabler definieras som ” reg ” typ eftersom de håller kvar tidigare värde tills nya uppdrag inträffar efter någon ändring i angiven känslighetslista.
Hoppas, detta kommer att rensa dina tvivel.
Svar
Dataflöde och beteende utesluter inte ömsesidigt. Inte heller är dataflöde och funktionellt eller dataflöde och strukturellt. Klassiskt visat beskriver ”dataflöde” en arkitektur där en förändring av värdet på ett dataobjekt (variabel) automatiskt utlöser omberäkning av alla andra data beroende på den.
Många felaktigt (IMHO) klassificerar alla arkitekturer dataflödet hanteras snarare än att styra flödeshantering för att vara ”dataflöde”; men termen används på detta sätt med tillräcklig regelbundenhet för att låta det vara en alternativ definition.
Ser vi på ”Behavioral” design kan vi klassificera det som en designmetod där moduler modelleras på en hög abstraktionsnivå där designern definierar modulens önskade beteende och syntesverktygen sönderdelar detta beteende till antingen RTL- eller strukturmodeller. I beteendemodellering definieras funktionen algoritmiskt med timing och nodladdning ignoreras till stor del. Det är uppenbart att beteenden kan modelleras så att klassiskt dataflöde tillgodoses.
Mindre abstrakt är ”RTL” eller Register Transfer Logic modellering. Det är här många utövare säger att dataflödet börjar. De flesta av dagens syntesverktyg sönderdelar beteendekod till RTL. Ett bra exempel är C (eller C ++) till RTL-verktyg som ImpulseC, Cynthesizer, etc).
Minst abstrakt är ”strukturell” modellering där designen anges nästan uteslutande som komponentinstanser med anslutande register och ledningar.
Rensa som lera, eller hur?