generować 3, 6 albo 9 impulsów w zaleznosci od 2-bitowego sygnału wejsciowego. generacja nastepuje po wygaśnięciu sygnału START.
napisałem, ale nie działa. z góry dziękuje za pomoc i wskazówki
/w Xilinku: Check syntax kompiluje,
ale assign pins - pokazuje mi sie bład :
MultiSource on Integers in Concurrent Assignment., przy rozpoczeciu drugiego procesu.
Kod: Zaznacz cały
library IEEE;
use IEEE.std_logic_1164.all;
entity TYP is
port ( clock : in std_logic ;
a : in BIT_VECTOR (0 to 1);
start : in bit;
y : out bit);
end entity TYP;
architecture GENERATOR of TYP is
type state is (s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18);
signal present_state, next_state : state;
signal czekac : bit; -- czekac='1' -- automat jest w trakcie generowania impulsow
begin
seq : process (start, clock) is -- czyli asynchroniczny start ! tak jak mialo byc
begin
if ( start'event and start='0' and czekac='0') then
czekac <= '1';
case a is
when "00" =>
next_state <= s0; -- stoi w miejscu
czekac <= '0';
when "01" =>
next_state <= s13; -- wygeneruje 3 jedynek
when "10" =>
next_state <= s7; -- wygeneruje 6 jedynek
when "11" =>
next_state <= s1; -- wygeneruje 9 jedynek
end case;
elsif czekac='0' then -- czekac='0' czyli automat nie musi czekac
next_state<=s0;
end if;
if rising_edge(clock) then
present_state <= next_state;
end if;
end process seq;
com : process (present_state) is
begin
y<='0';
case present_state is
when s0 => -- zapetla sie tu.
y<='0';
-- next_state <=s0 -- to nie nadmiarowosc, bo i tak to robi
when s1 =>
y<='1'; -- pierwsza "jedynka"
next_state<=s2 ; -- dla a=00 -> leci od poczatku
when s2 =>
y<='0';
next_state<=s3 ;
when s3 =>
y<='1'; -- druga "jedynka"
next_state<=s4 ;
when s4 =>
y<='0';
next_state<=s5 ;
when s5 =>
y<='1'; -- trzecia "jedynka"
next_state<=s6 ;
when s6 =>
y<='0';
next_state<=s7 ; -- dla a=10 leci od tad. i generje 6 "jedynek"
when s7 =>
y<='1'; -- czwarta "jedynka"
next_state<=s8 ;
when s8 =>
y<='0';
next_state<=s9 ;
when s9 =>
y<='1'; -- piata "jedynka"
next_state<=s10 ;
when s10 =>
y<='0';
next_state<=s11 ;
when s11 =>
y<='1'; -- szosta "jedynka"
next_state<=s12 ;
when s12 =>
y<='0';
next_state<=s13 ;
when s13 =>
y<='1'; -- siodma "jedynka"
next_state<=s14 ; -- dla a=01 generuje trzy "jedynki"
when s14 =>
y<='0';
next_state<=s15 ;
when s15 =>
y<='1'; -- osma "jedynka"
next_state<=s16 ;
when s16 =>
y<='0';
next_state<=s17 ;
when s17 =>
y<='1';-- osma "jedynka"
next_state<=s18 ;
when s18 =>
y<='0';
next_state<=s0 ; -- na koniec wraca do s0
end case;
end process com;
end architecture GENERATOR;