[an error occurred while processing this directive]
вопрос по VHDL(+)
(«Телесистемы»: Конференция «Языки описания аппаратуры (VHDL и др.))

миниатюрный аудио-видеорекордер mAVR

Отправлено Romario 07 августа 2004 г. 21:16

необходимо передать массив hex чисел в ASCII формате
вот кусок кода.


type uart_pattern is array(0 to 8) of std_logic_vector(7 DOWNTO 0);

constant uart_array : uart_pattern:=
(TO_STDLOGICVECTOR(x"FF"),
TO_STDLOGICVECTOR(x"AF"),
TO_STDLOGICVECTOR(x"BC"),
TO_STDLOGICVECTOR(x"12"),
TO_STDLOGICVECTOR(x"13"),
TO_STDLOGICVECTOR(x"18"),
TO_STDLOGICVECTOR(x"9F"),
TO_STDLOGICVECTOR(x"AA"),
TO_STDLOGICVECTOR(x"7D")
);

................
variable ud:std_logic_vector(7 DOWNTO 0);
................

if (falling_edge(full)) then


(*)GET_NIBBLE;

if (nibble = '1') then
if (udcnt = "00001000") then
udcnt <= (others=>'0');
else
udcnt <= udcnt+'1';
end if;
end if;

nibble <=not nibble;

if (ud(3 downto 0) > "1001") then
uart_data <= ud + TO_STDLOGICVECTOR(x"37");
else
uart_data <= ud + TO_STDLOGICVECTOR(x"30");
end if;
end if;

---------------------------------------------------------------------------------------------------------------------------
Если использовать конструкцию для (*) такую,
(1)


ud:=uart_array(CONV_INTEGER(udcnt));
if (nibble = '0') then
ud:="0000" & ud(7 downto 4);
else
ud:="0000" & ud(3 downto 0);
end if;

то работает все правильно, т.е. uart_data = ААAFBC1213...
все работает если вместо (*) использовать даже такую констр
(2)


ud:="0000" & (((not nibble,not nibble,not nibble,not nibble) and uart_array(CONV_INTEGER(udcnt))(7 downto 4)) or
(( nibble, nibble, nibble, nibble) and uart_array(CONV_INTEGER(udcnt))(3 downto 0)));


но почему то не работает выделение старшего нибла если
использовать такую конструкцию
(3)

if (nibble = '0') then
ud:="0000" & uart_array(CONV_INTEGER(udcnt))(7 downto 4);
else
ud:="0000" & uart_array(CONV_INTEGER(udcnt))(3 downto 0);
end if;

т.е. вместо ААAFBC1213...передается FFC238FADFFC238...т.е. только младшие нибблы каждого байта! т.е. получается
не работает операция "nibble <=not nibble;" т.е. nibble всегда 1 хотя по RTL видно что констр для него реализована.

в чем ошибка в выр (3)???

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru