Writing dizajn VHDL counter pomoć

T

TERRYWU3

Guest
Dragi stručnjaci,

Želim dizajn brojač koji će ovisiti o ulazne 8 bita bus.

ako bus je "10011010", moj brojač slijed je 1 -> 3 -> 4 -> 7 -> 1 -> 3 -> 4 -> 7 petlja.

ako bus je "10000001", brojač slijed je 0 -> 7 -> 0 -> 7 ...petlja

Moj bus je slučajan mijenja.

Molim Vas, dajte mi savjet ili referentne podatke?Vrlo vrlo hvala opet!
Last edited by TERRYWU3 dana 20. travnja 2007 16:36, edited 1 time in total

 
bok

Je li ta vrijednost 10011010 je ono što se umeće na početku counter ...... recite mi jasno

 
Bok,

Ovdje je kod:

signala brojilo, next_counter: integer range 0 - 7;

proces (CLK, reset)
započeti
if (reset = '0 '), tada
brojac <= 1;
elsif (clk'event i CLK = '1 '), tada
brojac <= next_counter;
end if;
end process;

proces (brojač, autobus)
započeti
if (autobus = "10.011.010")
if (brojac = 1) tada
next_counter <= 3;
elsif (counter = 3), tada
next_counter <= 4;
elsif (brojač = 4) a zatim
next_counter <= 7;
drugi
next_counter <= 1;
end if;
end if;
end process;Ako to nije ono što želite, plz besplatno na post ur problem detaljno

Check out za sintaksu, nisam sastavio kod.

Pozdravi,
dcreddy

 
nandhika wrote:

bokJe li ta vrijednost 10011010 je ono što se umeće na početku counter ...... recite mi jasno
 
Zapravo, ono što je opisati sekvencer, ne brojač, gdje se određuje redoslijed po ulazni vektor.Ispod ćete naći neki kod koji vam može pomoći da obaviti ono što vam je potrebno.Također možete pokušati dodati druge države, tako da ako je input = "00000000", KA odlazi neispravno stanje.Provjerite sintaksa, jer nemam na raspolaganju prevodilac u mojem PC-u ovom trenutku.
Morat ćete kompletan kod za državnu 12,3,4,5,6 i 7.

library IEEE;
korištenje ieee.std_logic_1164.all;
korištenje ieee.std_logic_unsigned.all;
korištenje ieee.std_logic_arith.all;

entitet count_at_input je
port (
CLK: in std_logic; - Clock
RST: in std_logic; - asinhroni reset
redom: u std_logic_vector (7 downto 0); - slijed
P: out std_logic_vector (2 downto 0) - izlaz (count)
);
kraj count_at_input;arhitektura counter of count_at_input je
qp signala, Qn: std_logic_vector (2 downto 0); - danas i sljedeće stanje
započeti
kombinatorne: proces (seq, QP)
započeti
slučaj je QP
kada je "000" => - Ako je postignut, bitni 0 je 1
if (seq (1) = '1 ') onda - Ako bit1 = 1, onda sljedeći count = 1
Qn <= "001";
elsif (seq (2) = '1 ') onda - else if bit2 = 1, onda sljedeća count = 2
Qn <= "010";
elsif (seq (3) = '1 ') onda - else if bit3 = 1, uz count = 3
Qn <= "011";
elsif (seq (4) = '1 ') onda - else if bit4 = 1, uz count = 4
Qn <= "100";
elsif (seq (5) = '1 ') onda - else if bit5 = 1, uz count = 5
Qn <= "101";
elsif (seq (6) = '1 ') onda - else if bit6 = 1, uz count = 6
Qn <= "110";
elsif (seq (7) = '1 ') onda - else if bit7 = 1, uz count = 7
Qn <= "111";
drugo - ako su svi ostali bitovi su 0, ostati ovdje
Qn <= "000"; - ili je mogao biti Qn <= qp;
end if;

kada je "001" => - Ako je postignut, bit 1 = 1
if (seq (2) = '1 ') onda - else if bit2 = 1, onda sljedeća count = 2
Qn <= "010";
elsif (seq (3) = '1 ') onda - else if bit3 = 1, uz count = 3
Qn <= "011";
elsif (seq (4) = '1 ') onda - else if bit4 = 1, uz count = 4
Qn <= "100";
elsif (seq (5) = '1 ') onda - else if bit5 = 1, uz count = 5
Qn <= "101";
elsif (seq (6) = '1 ') onda - else if bit6 = 1, uz count = 6
Qn <= "110";
elsif (seq (7) = '1 ') onda - else if bit7 = 1, uz count = 7
Qn <= "111";
if (seq (0) = '1 ') onda - Ako bit0 = 1, onda sljedeći count = 0
Qn <= "000";
drugo - postavljeni su Nijedan drugi komadići
Qn <= "001"; - ili je mogao biti Qn <= qp;
end if;

kada je "010" => - Put slično kod ovdje
kada je "011" => - Put slično kod ovdje
kada je "100" => - Put slično kod ovdje
kada je "101" => - Put slično kod ovdje
kada je "110" => - Put slično kod ovdje
kada drugi => - Put sličan broj za državne 7
end case;

Q <= qp; - Output je sadašnje stanje (count)

end process kombinatorne;

slijedni: proces (CLK, RST, seq)
započeti
if (RST = '1 '), tada
if (seq (0) = '1 '), tada
Qp <= "000";
elsif (seq (1) = '1 '), tada
Qp <= "001";
elsif (seq (2) = '1 '), tada
Qp <= "010";
elsif (seq (3) = '1 '), tada
Qp <= "011";
elsif (seq (4) = '1 '), tada
Qp <= "100";
elsif (seq (5) = '1 '), tada
Qp <= "101";
elsif (seq (6) = '1 '), tada
Qp <= "110";
elsif (seq (7) = '1 '), tada
Qp <= "111";
drugo - Ako je postavljen nijedan zalogaj na ulaz
Qp <= "000"; - default to count = 0
end if;

elsif (clk'event i CLK = '1 '), tada
Qp <= Qn; - Na rubu diže, promjena pozornici
end if;

kraj procesa koji slijedi;

counter end;

 
Ovdje je još jedan način ...kod je u verilog ..da možete to prevesti na VHDL!
Šifra:

modul seq_counter (

/ / Izlazi

računati,

/ / Ulazi

CLK, reset_n, seq

);

CLK ulaz, reset_n;

input [7:0] seq;

izlaz [2:0] count;

reg [2:0] count;

reg [7:0] seq_r;

reg [7:0] maska, mask_nx;

žice [7:0] mask_and_seq = maska & seq_r;

reg [7:0] check_zero;

žica nula = ~ | (check_zero);

Uvijek @ (posedge CLK ili negedge reset_n) počinju

if (! reset_n) počinju

seq_r <= 8'hff;

maska <= 8'hff;

end else begin

seq_r <= seq;

maska <= mask_nx;

kraj

krajUvijek @ (/ * kao * / brojati ili maske ili seq_r ili nula) begin

mask_nx = maska;

if (nula)

mask_nx = seq_r;

drugi

slučaj (count)

0: mask_nx [0] = 1'b0;

1: mask_nx [1] = 1'b0;

2: mask_nx [2] = 1'b0;

3: mask_nx [3] = 1'b0;

4: mask_nx [4] = 1'b0;

5: mask_nx [5] = 1'b0;

6: mask_nx [6] = 1'b0;

7: mask_nx [7] = 1'b0;

endcase / / slučaj (count)

krajUvijek @ (/ * kao * / mask_and_seq) počinju

if (mask_and_seq [0])

count = 0;

else if (mask_and_seq [1])

count = 1;

else if (mask_and_seq [2])

count = 2;

else if (mask_and_seq [3])

count = 3;

else if (mask_and_seq [4])

count = 4;

else if (mask_and_seq [5])

count = 5;

else if (mask_and_seq [6])

count = 6;

else if (mask_and_seq [7])

count = 7;

drugi

count = 0;

kraj / / uvijek @ (...Uvijek @ (/ * kao * / brojati ili seq_r) begin

check_zero = seq_r;

slučaj (count)

0: check_zero = seq_r>> 1;

1: check_zero = seq_r>> 2;

2: check_zero = seq_r>> 3;

3: check_zero = seq_r>> 4;

4: check_zero = seq_r>> 5;

5: check_zero = seq_r>> 6;

6: check_zero = seq_r>> 7;

7: check_zero = seq_r>> 8;

endcase

kraj

endmodule / / seq_counter
 
bok!
U prvi put uzeli autobus vrijednost usporedite s vrijednostima onih s kojima ur brojač počinje i ove usporedbe treba obaviti kada ur autobus promjena ot vrijednosti.ako autobus ima vrijednosti koje su jednake onima vrijednosti, a zatim početi ur counter.sve te može bude učinjeno koristeći proces izjave

plz ispravite me ako sam u krivu

hvala i pozdrav
Deepak

 

Welcome to EDABoard.com

Sponsor

Back
Top