Тогда еще с компилятором-синтезатором непонятное дело. Ниже приведу код и предупреждение выскакивающее при компиляции. Это у всех так или я что-то не так указал? Предупреждение такое: Warning (10631): VHDL Process Statement warning at lcd_controller.vhd(93): signal or variable "lcd_rs_sig" may not be assigned a new value in every possible path through the Process Statement. Signal or variable "lcd_rs_sig" holds its previous value in every path with no new value assignment, which may create a combinational loop in the current design. И также для lcd_rw_sig, lcd_e_sig, lcd_data. И еще: Warning: Latch lcd_e_sig has unsafe behavior. Warning: Ports D and ENA on the latch are fed by the same signal rtl~0
Код
architecture behavioural of lcd_controller is
signal lcd_rs_sig, lcd_rw_sig, lcd_e_sig : std_logic;
signal lcd_data_sig : std_logic_vector(7 downto 0);
signal clk_counter : std_logic_vector(31 downto 0) := X"00000000";
-- PCI_clk = 66 MHz => T_clk = 15 ns => T_count = 2 * T_clk = 30 ns
constant lcd_state_0 : std_logic_vector(31 downto 0) := X"00000000";
-- plus delay >= 15 ms
constant lcd_state_1 : std_logic_vector(31 downto 0) := X"0007A120";
begin
process(reset,clk)
begin
if (reset = '0') then
clk_counter <= X"00000000";
else
if (clk'event and clk = '1') then
clk_counter <= clk_counter + X"00000001";
end if;
end if;
end process;
process(reset, clk_counter)
begin
if (reset = '0') then
lcd_rs_sig <= '0';
lcd_rw_sig <= '0';
lcd_e_sig <= '0';
lcd_data_sig <= X"00";
else
case clk_counter(31 downto 0) is
when lcd_state_0 =>
lcd_rs_sig <= '0';
lcd_rw_sig <= '0';
lcd_e_sig <= '0';
lcd_data_sig <= X"00";
-- first clear screen command (3 times sequentially)
when lcd_state_1 =>
lcd_rs_sig <= '0';
lcd_rw_sig <= '0';
lcd_e_sig <= '1';
lcd_data_sig <= X"30";
when others =>
end case;
end if;
end process;
lcd_rs <= lcd_rs_sig;
lcd_rw <= lcd_rw_sig;
lcd_e <= lcd_e_sig;
lcd_data(7 downto 0) <= lcd_data_sig(7 downto 0);
end architecture behavioural;
Убрал из второго процесса reset'овскую часть - тоже самое. Смысл-то простой: по тактам счетчика инициализировать Датавижновский ЖКИ, а синтезатор чего-то не понимает, хотя скорее я не понимаю. В чем может быть дело?