Estoy usando un código UART vhdl FPGA para enviar 16 bits de datos con un bit de inicio 1, 1 bits de parada e incluso un bit de paridad. Necesito verificar si los paquetes de 16 bits enviados se reciben correctamente usando un software de terminal en Windows PC. Hice una investigación en google y encontré muchos terminales que solo permiten 8 bits de datos con paridad check + start + stop bits, en mi caso son 16 bits. Entonces, ¿cómo puedo monitorear estos 16 bits de datos usando un terminal?
Actualizado,
He realizado algo como esto (pseudo-código) y no funcionó
X_16_bit - > Datos de 16 bits X_16_bit - > AB
A --- > 8 bits superiores
B --- > 8 bits más bajos
este X_16_bit de 16 bits se actualiza cada 0,5 segundos. En un proceso sincronizado de 50MHz, en el mismo proceso, lo hago por debajo de la operación. (no funcionó)
x < = 0; y y < = 0; se inicializan como variables dentro del proceso por debajo
process(clk_50)
variable x : STD_LOGIC:= '0';
variable y : STD_LOGIC;
variable A : std_logic_vector(7 downto 0) := x"00";
variable B : std_logic_vector(7 downto 0) := x"00";
variable X_16_bit : std_logic_vector(15 downto 0) := x"0000";
begin
------------------------
***THE CODE THAT calculates X_16_bit at every 0.5 seconds***
-----------------------
//SPLITTING code runs in 50MhZ clocked process
if (x ='0'){ // stop A and B is being mixing with a new value
A := X_16_bit(15 downto 8);
B := X_16_bit(7 downto 0);
}
if (x='0'){ // 1stly send upper 8 bits
tx_data <= A;
y:=1;
x:=1;
}
if (y='0'){ // 2ndly send lower 8 bits
tx_data <= B;
x:=0;
}
y:='0';
end process;
se solucionó el siguiente error, tx_data es una señal que se usa para transmitir datos en el proceso del transmisor tx tengo error
Error (10028): Can't resolve multiple constant drivers for tx_data
El transmisor UART es otro proceso que utilizo velocidad de transmisión de 19200, incluso paridad el VHDL que he usado es en este enlace
ACTUALIZADO
process(clk_50)
variable x : STD_LOGIC:= '0';
variable y : STD_LOGIC;
variable A : std_logic_vector(7 downto 0) := x"00";
variable B : std_logic_vector(7 downto 0) := x"00";
variable X_16_bit : std_logic_vector(15 downto 0) := x"0000";
begin
------------------------
***THE CODE THAT calculates X_16_bit at every 0.5 seconds***
-----------------------
//SPLITTING code runs in 50MhZ clocked process
ACTUALIZADO
X_16_bit := x"4563";
IF(x = '0') THEN
A := X_16_bit (15 downto 8);
B := X_16_bit (7 downto 0);
tx_data <= A;
x := '1';
ELSIF(x = '1') THEN
tx_data <= B;
x := '0';
END IF;
end process;
ACTUALIZADO Con este código obtengo solo 63 en la salida tx. No consigo 45 en absoluto.