Пользую 3 основных книги
VHDL Эффективное использование при проектировании цифровых систем
VHDL справочное пособие по основам языка
ПЛИС фирмы "ALTERA" элементная база, система проектировнаия и языки описания аппаратуры.
Кстати, учиться синтезу на ПЛИС != учиться программировать МК.
Тут надо представить и описать будущую схему.
Например делаем частотомер. Он состоит из:
генератор тактовых импульсов;
формирователь временных интервалов;
счетчик импульсов;
узел управления;
устройство индикации.
Вот каждый из них надо описать, соеденить между собой и оттестить.
К примеру код генератора цветовых полос
Код: Выделить всё
library ieee;
use ieee.numeric_std.all;
use ieee.std_logic_1164.all;
Entity Color_sel IS
PORT(
clk:in std_logic;
num_str:in std_logic_vector(8 downto 0);
num_point:in std_logic_vector(9 downto 0);
DR,DB,DG:out std_logic_vector(7 downto 0)
);
end Color_sel;
ARCHITECTURE sl OF Color_sel IS
BEGIN
Process(clk)
variable red, blue, green:unsigned(7 downto 0);
variable str:unsigned(8 downto 0);
variable col:unsigned(9 downto 0);
variable mn:unsigned(7 downto 0);
constant sm:unsigned(9 downto 0):="0001001000";
constant stp_point:unsigned(9 downto 0):="0000111100";
begin
if(rising_edge(clk))then
str:=unsigned(num_str);
col:=unsigned(num_point);
mn:=str(7 downto 0);
if(col<sm)then--="0000000000")then
red:="10101010";
blue:="11001100";
green:="10111011";
elsif(col=sm)then--"0000001010")then
red:="00000000";
blue:="00000000";
green:="00000000";
elsif(col=sm+stp_point)then
red:="11111111";
blue:="00000000";
green:="00000000";
elsif(col=sm+2*stp_point)then
red:="00000000";
blue:="11111111";
green:="00000000";
elsif(col=sm+3*stp_point)then
red:="11111111";
blue:="11111111";
green:="00000000";
elsif(col=sm+4*stp_point)then
red:="00000000";
blue:="00000000";
green:="11111111";
elsif(col=sm+5*stp_point)then
red:="11111111";
blue:="00000000";
green:="11111111";
elsif(col=sm+6*stp_point)then
red:="00000000";
blue:="11111111";
green:="11111111";
elsif(col=sm+7*stp_point)then
red:="11111111";
blue:="11111111";
green:="11111111";
end if;
DR<=std_logic_vector(red and mn);
DB<=std_logic_vector(blue and mn);
DG<=std_logic_vector(green and mn);
end if;
end process;
end sl;
И результат работы (вместе с генератором адресации)

Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже