digital plukke calcultion

S

shadeslayer

Guest
Hei alle

Jeg skrev følgende kode, kan noen fortelle meg om THR er noe som mangler?

Code:

-----------------------------------

-----------------------------------

--- Digital plukke amp calc --------

-----------------------------------

-----------------------------------bruk ieee.std_logic_1164.all;

bruk ieee.std_logic_arith.all;

bruk ieee.std_logic_unsigned.all;

library IEEE;
enhet lørdag erport (

DIN: i srd_logic_vector (7 downto 0); ---- data input-linjer

DOUT: out std_logic-vektoren (7 downto 0); ---- data output line

reset: in std_logic; ---- reset signal

nochange: in std_logic; ---- å indikere ingen data endre gjort

);end lørdag;arkitektur atferdsdata av lørdag er

type rega er array (0 til 7) bit; --------- RegA = refrance initialy 0

type regb er array (0 til 7) bit; --------- RegB = data hentet fra brukerensbegynneprosessen (en)

variable reg1: rega;

variable reg2: regb;begynneProsedyren overføringenbegynnereg1 (0) <= reg2 (0); ---------------- subroutine for data endre

reg1 (1) <= reg2 (1);

reg1 (2) <= reg2 (2);

reg1 (3) <= reg2 (3);

reg1 (4) <= reg2 (4);

reg1 (5) <= reg2 (5);

reg1 (6) <= reg2 (6);

reg1 (7) <= reg2 (7);end prosedyre transfer;DIN (0) => reg2 (0); --------------

DIN (1) => reg2 (1); --------

DIN (2) => reg2 (2); -----

DIN (3) => reg2 (3); - Data teken i RegB

DIN (4) => reg2 (4); --

DIN (5) => reg2 (5); -----

DIN (6) => reg2 (6); --------

DIN (7) => reg2 (7); --------------reg1 (0): = 0; --------------

reg1 (1): = 0; --------

reg1 (2): = 0; -----

reg1 (3): = 0; - RegA initialiseres til null

reg1 (4): = 0, --

reg1 (5): = 0; -----

reg1 (6): = 0; --------

reg1 (7): = 0; --------------if (reg2 (0)> reg1 (0)) så ---------------------------------

transfer;elseif (reg2 (1)> reg1 (1)) så -----------------------------

transfer;elseif (reg2 (2)> reg1 (2)) så -------------------------

transfer;elseif (reg2 (3)> reg1 (3)) da ----------------- overføre data hvis RegB> RegA

transfer;elseif (reg2 (4)> reg1 (4)) så ----------------- dermed på slutten får vi Maksimumsverdien

transfer;elseif (reg2 (5)> reg1 (5)) så -------------------------

transfer;elseif (reg2 (6)> reg1 (6)) så -----------------------------

transfer;elseif (reg2 (7)> reg1 (7)) så ---------------------------------

transfer;ellers

nochange; = 1; ---- indikerer ingen endring (ikke obligatorisk)end if;reg1 (0) => DOUT (0); ----------- data tas ut

reg1 (1) => DOUT (1);

reg1 (2) => DOUT (2);

reg1 (3) => DOUT (3);

reg1 (4) => DOUT (4);

reg1 (5) => DOUT (5);

reg1 (6) => DOUT (6);

reg1 (7) => DOUT (7);end prosessen;end Behavioral;
 
1.nochange må ut
2.må du bruke <= i nochange forening
3.du ikke definere signal kalt en (i prosessen sensitivety liste)
4.du har en syntaks feil i din erklæringen (srd_logic. ..)Lagt til etter 7 minutter:Og flere andre

 
plz fortelle meg hvilke andre?

jeg dont vil noen endring i datoen hvis noen forhold er setisfied ikke, vil det b okie hvis jeg DNT bruke nochange signal, men i stedet wht shuld jeg bruke?

 
Vel, jeg har ikke tid til å forklare, men du ikke definere prosedyren korrekt, og ikke kalle det riktig.Men jeg kan ikke rette deg, fordi jeg ikke får det du akkurat gjør.Visste du utvikle noen algoritme?Hvilken programvare verktøy bruker du?Lagt til etter 7 minutter:Jeg kan anbefale deg noen nyttige bøker, som:
RTL Hardware Design Bruke VHDL ved pong P. Chu,
Circuit Design med VHDL av VA Pedroni,
Design Recipes for FPGAs av P. Wilson, etc.

 
Her jeg gjorde et eksempel:

library IEEE;
bruk IEEE.STD_LOGIC_1164.ALL;
bruk IEEE.STD_LOGIC_ARITH.ALL;
bruk IEEE.STD_LOGIC_UNSIGNED.ALL;

enhet d_p er
Port (din: i STD_LOGIC_VECTOR (7 downto 0);
dout: ut STD_LOGIC_VECTOR (7 downto 0);
reset: i STD_LOGIC);
end d_p;

architecture Behavioral of d_p er

begynne
Prosessen (DIN, reset)
variable dat: std_logic_vector (7 downto 0);
begynne
if (reset ='1 ') og deretter dat: = "00000000";
elsif din> dat deretter dat: = din;
end if;
dout <= dat;
end prosessen;
end Behavioral;Lagt etter 8 minutter:Her er simulering:

 
oh sin nice,,,, thx,,

Jeg bruker xilinx9.2i og activehdl7.1Lagt etter 2 minutter:i ytterligere vil legge til, refrence, og mot,,

det vil si, hvis jeg tar 03 som refrence thn jeg chk hvor mange gang jeg fikk data over 03 og hvis jeg får data countinuously 03 for 1 min thn Jeg vil stoppe prosessen,,,

Jeg tenkte på å bruke protmaping, og kombinere komponentene, men im ikke sikker på hvordan du legger til dette i denne koden,,,

 
For counter kan du bruke Språk Maler fra innsiden Ise (menyen Edit).
For referanseverdi du kan bruke generisk kommandoen.
Å kombinere komponenter du må bruke strukturen beskrivelse.Det
er godt å undersøke "Ise har dybdekunnskap Tutorial"
samt Ise Quick Start opplæringen.
Du finner dem innsiden:
... Xilinx \ doc \ usenglish \ bøker \ docs

 
library IEEE;
bruk IEEE.STD_LOGIC_1164.ALL;
bruk IEEE.STD_LOGIC_ARITH.ALL;
bruk IEEE.STD_LOGIC_UNSIGNED.ALL;

enhet d_p er
Port (din: i STD_LOGIC_VECTOR (7 downto 0);
ref: i STD_LOGIC_VECTOR (7 downto 0);
dout: ut STD_LOGIC_VECTOR (7 downto 0);
h_out: ut STD_LOGIC_VECTOR (3 downto 0);
reset: i STD_LOGIC);
end d_p;

architecture Behavioral of d_p er
begynne
Prosessen (DIN, reset)
variable dat: std_logic_vector (7 downto 0);
variable cnt: heltall;
begynne
if (reset ='1 ') og deretter
dat: = ref;
cnt: = 0;
elsif din> dat deretter
dat: = din;
cnt: = cnt 1;
end if;
dout <= dat;
h_out <= CONV_STD_LOGIC_VECTOR (cnt, 4);
end prosessen;
end Behavioral;
Beklager, men du må logge inn for å vise dette vedlegget

 
Jeg
gjorde ikke fikk denne koden?forvirret ,,,,,

la jeg forklare i detalj hva som skal b gjort,, thn tror jeg u vil forstå klart hva im prøver å gjøre,,,

im bruker 2 comparators, en vil kalkulere plukke verdi eller u kan si maksimumsverdien, en annen gir pule når min inngang er større thn ref si 03, nå
hvis min skriving dontgo over 03 for 2mins eller 3mins deretter hele prosessen stoppes,,

håper u har det, vil jeg prøve å laste opp en blokk diagram,

btw thx for denne koden hvis u fortelle meg litel bit ABT denne koden,Lagt etter 3 minutter:Jeg også thout å bruke skranke slik at jeg kommer til å vite hvor mange ganger min skriving går over refrence spenning

 
Hei,
Jeg festet symbolet.
Når reset = 1 deretter h_out = 0.
Den første verdier d_out er referanseverdi.
Hver gang d_in blir større enn dagens verdi av d_out, deretter d_out = d_in.
Hver gang d_out endringer sin verdi, h_out øker med 1 (den teller hvor mange ganger d_in hadde vært større enn d_out).
Beklager, men du må logge inn for å vise dette vedlegget

 
Nå er jeg så, du betydde h_out må telle hvor mange ganger skriving er større enn referanseverdi, så en liten endring av koden kan bli gjort.

 
ja og også tilbakestillingen signal shuld b 1
dvs. alle prosess shuld stoppe når din er under ref for 2or 3 min,, og den
1. koden u ga shuld også b THR,,

så på slutten av prosessen i shuld få plukke verdien ved utgangen countinuously,,,

 
Hvordan vil du få 2 eller 3 min.periode?Jeg mener, har du tenkt å syntetisere det eller ikke?Hvis du ikke vil syntetisere koden, kan du bruke "etter", ellers må ha noen referanse klokke signal slutten realisere et møte å dele klokke frekvens.

 
what??Jeg dint fikk u, hva ur prøver å si?Lagt til etter 7 minutter:Jeg mener å si at med hjelp av en comparator, vil jeg være geting plukke verdi,,,

og med hjelp av en annen comparator jeg kan få howmany tid mitt signal går over min refrance spenning,,,

se i wll gir demping wavefor som et innspill til ADC, og digital utgang jeg skal bruke for simulering, ryt,,,nå hvis im har en daping bølgeform ved skriving thn etter en tid mitt signal vil nå en stabil tilstand,, så etter at jeg ikke har behov for å se etter plukke amplitude,,

Det jeg mente er at jeg ikke får signal ovenfor min
ref. spenning for 2or 3 min da jeg shuld tilbakestille systemet, og vil lagre mine plukke verdi somewher FRM hvor jeg kan få den i produksjon,,,,

inthe 1ste programmet u ga det vil b chaknig for hakke verdier og woriknig bra,, men som i musing demping wave (acostic utslipp signal) som inndata thn etter noen thim signal vil b jevn, slik at vil b slutten av en hendelse ,, thn igjen etter en tid jeg vil bli en annen demping signal, som også ba demping signal dette er min andre hendelsen ...

håper u forstått

 
Hva mener du med "2 eller 3 min."Jeg tror du mener minutter.Så, i VHDL du ikke har mulighet til å måle tid, unntatt hvis det har en referanse frekvens og du telle sine sykluser.Derfor vil du nead en teller.Eller, du må finne en annen måte å finne steade stat (si, hvis antall ganger skriving går under sitt plukke nivå, men ikke glem det kan være noen tar over og under steade stat).

 
ja im talknig om miutes, vil det b bedre å bruke conter som genrated puleses etter noen få secnods og conting tm vi kan gjøre tht, men im ikke Abel til koden,, skrånende vi bruker forsinkelsen som vente en stund type uttalelser??

kan du skrive inn koden etter hvilke u fikk, tror jeg u fikk full ting jeg vil si, som u explaind meg ABT hvordan vi kan bruke conter å få 2 eller 3 minutter chkout,,,

thx

 
library IEEE;
bruk IEEE.STD_LOGIC_1164.ALL;
bruk IEEE.STD_LOGIC_ARITH.ALL;
bruk IEEE.STD_LOGIC_UNSIGNED.ALL;

enhet d_p er
Port (din: i STD_LOGIC_VECTOR (7 downto 0);
ref: i STD_LOGIC_VECTOR (7 downto 0);
reset: i STD_LOGIC;
endret: ut STD_LOGIC;
dout: ut STD_LOGIC_VECTOR (7 downto 0));
end d_p;

architecture Behavioral of d_p er
begynne
Prosessen (DIN, reset)
variable dat: std_logic_vector (7 downto 0);
begynne
if (reset ='1 ') og deretter dat: = ref;
elsif din> dat deretter dat: = din; endret <='1 ';
else endret <='0 ';
end if;
dout <= dat;
end prosessen;
end Behavioral;
library IEEE;
bruk IEEE.STD_LOGIC_1164.ALL;
bruk IEEE.STD_LOGIC_ARITH.ALL;
bruk IEEE.STD_LOGIC_UNSIGNED.ALL;

enhet timer er
Port (reset: i STD_LOGIC;
clk: i STD_LOGIC;
stødig: ut STD_LOGIC);
end tidtakeren;

architecture Behavioral av timer er
begynne
prosessen (clk, reset)
variable cnt: INTEGER: = 0;
variable avsluttet: STD_LOGIC;
konstant t_per: INTEGER: = 12; - 2min hvis clk = 0.1Hz (10 sek)
begynne
hvis reset ='1 'deretter cnt: = 0; endte: ='0';
elsif (clk'event og clk ='1 'og endte ='0') og deretter cnt: = cnt 1;
end if;
hvis cnt> = t_per deretter cnt: = 0; avsluttet: ='1 ';
end if;
jevn <= slutt;
end prosessen;
end Behavioral;

bruk IEEE.STD_LOGIC_1164.ALL;
bruk IEEE.STD_LOGIC_ARITH.ALL;
bruk IEEE.STD_LOGIC_UNSIGNED.ALL;

enhet pick_det er
port (klokke: in std_logic;
din: in std_logic_vector (7 downto 0);
ref: in std_logic_vector (7 downto 0);
reset: in std_logic;
pick_value: out std_logic_vector (7 downto 0);
klar: out std_logic);
end pick_det;architecture Behavioral of pick_det er
signal rst: std_logic;
komponent d_p
port (reset: in std_logic;
din: in std_logic_vector (7 downto 0);
ref: in std_logic_vector (7 downto 0);
endret: out std_logic;
dout: out std_logic_vector (7 downto 0));
end komponent;

komponent tidtaker
port (reset: in std_logic;
clk: in std_logic;
stødig: out std_logic);
end komponent;

begynne
U1: d_p
port map (DIN (7 downto 0) => din (7 downto 0),
ref (7 downto 0) => ref (7 downto 0),
reset => reset,
endret => rst,
dout (7 downto 0) => pick_value (7 downto 0));

U2: tidtaker
port map (clk => klokke,
reset => rst,
jevn => klar);

end Behavioral;
Beklager, men du må logge inn for å vise dette vedlegget

 
kanne u gir litt forklaring av hva som skjer,, være fordi waveforms er ikke klart,, jeg mener valus Jeg kan Abel å se ordentlig,, thxLagt til etter 19 minutter:eek:g cpuner shuld telle hvor mange tid skriving greator deretter ref signal ikke hvor mange ganger min plukke verdi endringer, tror jeg i dette programmet sitt som viser hvor mange ganger den cchanging,,,i min kode som jeg gav til start i brukt nochang signal bare coz på tht tid i
didnt rememberd null setningen, men at nochange er ikke req,, telleren vil fortelle meg howmany pulser Jeg har ovenfor ref signal,,,i calulation av acostic signaler dette hjelper mye i clulating materiale styrke,,,

 
Når (reset = 1) så dout = ref.value.
Når (reset = 0 og din> dout) deretter dout = din, tidtakeren begynner å telle fra begynnelsen (0), clearing utdataene (signal) stødig.
Når reset = 0 og din <dout deretter tidtaker øker innholdet på hver stigende kanten av klokken puls.Når den når sin ende tilstand (12 det hans tilfelle) den nullstiller seg og setter signal støtt.
Ruten blir en strukturell koden.Første enhet erklæringen (pick_det) er hele enheten.I arkitektur første komponent (d_p) er comparator, den andre - tidtakeren.U1 og U2 er instantiations for komponentene.
Jeg vil gjøre noen endringer for å telle hvor mange ganger skriving er høyere enn referansen verdi.

 
ja vi trenger å telle hvor mange ganger skriving er høyere deretter ref verdi, her im skrive god forklaring tht jeg kan gi,,

når reset = 1 deretter systemet shuld stoppe eller ikke fungerer

nå whn reset = 1 thn

dout = plukke verdien av din (loop vil arbeide samme som ur 1ste code)

hvis dint> Ref thn det shuld øke teller
og hvis din <ref for si 12 clk pules thn reset = 1 og sys vil stoppe,,,,

nå til å igjen starte sys til arbeid vi shuld manualy gjør reset = 0

Jeg tror dette er litt klart,,,

 

Welcome to EDABoard.com

Sponsor

Back
Top