Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2

ТЕМА: Ошибка в коде VHDL.

Re: Ошибка в коде VHDL. 7 года 4 мес. назад #1861

Не совсем, я бы хотел попросить помощи/советов, в построении схемы VGA контроллера в Quartus 2.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Ошибка в коде VHDL. 7 года 4 мес. назад #1862

Тогда Вам всётаки будет лучше заняться не схематическим вводом - а вплотную изучать VHDL или Verilog. Потому что схема быстро начнёт быть сложной и исправления будет сделать сложней чем всё перерисовать снова.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Ошибка в коде VHDL. 6 года 9 мес. назад #2242

Ребят, есть вопрос, помогите. Мне нужно написать код на VHDL фазовой автоподстройки частоты. Вроде написал, но проверяя его в программе modelsim вижу, что сигналу outbuf не присваивается значение. Подскажите, где ошибка?

Код:
______________

Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity diplom is
port (vhod: in std_logic;
rst: in std_logic;
IDCLK: in std_logic;
KCLK: in std_logic;
vyhod: out std_logic);

end diplom;

architecture behaviour of diplom is
signal carry, borrow, direction, idout: std_logic;
signal outbuf: std_logic;
begin

process(rst,vhod,outbuf)
begin
if rst='1' then
outbuf<='0';
end if;
end process;

direction<= vhod xor outbuf;

process(kclk,rst)
variable k:integer range 0 to 15;
begin
if rst='1' then
k:=0;
elsif kclk='1' and kclk'event then
if carry='1' then
carry<= '0';
end if;
if borrow='1' then
borrow<='0';
end if;
if direction='1' then
if k=15 then
k:=0;
carry<='1';
else
k:=k+1;
end if;
else
if k=0 then
k:=15;
borrow<='1';
else
k:=k-1;
end if;
end if;
end if;
end process;

process(idclk)
variable m: std_logic;
begin
if idclk='1' and idclk'event then
if carry='1' then
idout <= '1';
elsif borrow='1' then
idout <= '0';
elsif m='0' then
idout <= '1';
m :='1';
else
idout <= '0';
m := '0';
end if;
end if;
end process;

process(idout,rst)
variable k:integer range 0 to 127;
begin
if rst='1' then
k:=0;
elsif idout='1' and idout'event then
if k=127 then
k:=0;
outbuf<= not outbuf;
else
k:=k+1;
end if;

end if;
end process;

vyhod<= outbuf;

end behaviour;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Ошибка в коде VHDL. 6 года 9 мес. назад #2243

  • nfader
  • nfader аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Осваиваюсь на форуме
  • Сообщений: 37
  • Спасибо получено: 14
Первое, что приходит в голову, outbuf в двух разных process'ах. Да и вообще логика построения малопонятна... Так-то общий есть или все асинхронное друг относительно друга??
Переменная k у вас доже в двух процессах, как оно вообще работать должно???? Да и еще от двух разных тактов?!?! Железяка так не умеет....

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от nfader.
  • Страница:
  • 1
  • 2
Время создания страницы: 0.177 секунд
Работает на Kunena форум