[an error occurred while processing this directive]
|
необходимо передать массив 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: info@telesys.ru