У меня есть АЦП (LTC1407A-1) на плате ПЛИС, которая заполняет 14-битный регистр с дополнением подписанными данными 2. Я хочу, чтобы преобразовать эти данные, чтобы быть без знака:VHDL подписали данные в std_logic_vector для неподписанных данных
- Источник Диапазон данных:
-8192 to 8191
- Целевой диапазон данных:
0 to 16383
Однако, что бы я ни стараюсь, я не могу показаться, чтобы получить желаемое результат. Мой текущий раздел рабочего кода для модуля VHDL регистра выглядит следующим образом:
library IEEE;
use ieee.std_logic_arith.all;
use ieee.std_logic_1164.all;
entity reg10 is
Port (clk : in STD_LOGIC; --50MHz clock
reset : in STD_LOGIC; --asynchronous reset
i_load : in STD_LOGIC; --load signal
i_data : in STD_LOGIC_VECTOR (13 downto 0); --data signal
o_data : out STD_LOGIC_VECTOR (15 downto 0) --output data
);
end reg10;
architecture Behavioral of reg10 is
signal s_data : STD_LOGIC_VECTOR(9 downto 0);
signal f_data : STD_LOGIC_VECTOR(13 downto 0);
signal t_sign : signed (13 downto 0);
begin
process(clk, reset)
begin
if reset = '1' then
s_data <= "0000000000";
elsif clk'event and clk = '1' then
t_sign <= SIGNED(i_data);
f_data <= STD_LOGIC_VECTOR(t_sign);
s_data <= "00" & f_data(13 downto 6);
end if;
end process;
o_data <= "000010" & s_data(9 downto 0);
end Behavioral;
Я сделал много поиска вокруг и найти много примеров, когда преобразование может быть сделано, но я не понимаю, правильно подход. Я попытался присвоить i_data
как signed
, перебрасывая между внутренними переменными и многими другими рекомендованными решениями, но все это безуспешно.
signal t_sign : signed (13 downto 0);
f_data <= conv_std_logic_vector(i_data, 14);
Код буферизует изменяющийся входной вектор и форматирует данные в выходной вектор для отображения VGA-контроллера.
Помогите оценить. Благодарю.
Ну, какой желаемый результат? Особенно, когда значения в источнике не являются легальными значениями в цели, что вы хотите? –
@ brian-drummond. Желаемый результат: вход преобразуется из комплимента 2 в беззнаковое, смещен на полпути. – M1GEO
Тогда почему бы просто не сказать, что желаемый результат - добавить 8192? –