Estou descrevendo um circuito em VHDL em que quatro cartões SAM são lidos e escritos (não simultaneamente) através de um barramento correspondente (EPLD_SAM_DIO_IO[0...3]), mediante a seleção de escrita/leitura dada por sam_dio[0...3], onde os dados de escrita e leitura de um dos cartões selecionado será "copiado" para a UART, através da saída de transmissão de dados: "uart_xmit" e entrada: "uart-recv".
O circuito funciona como um bridge entre a UART e o pino de dados do cartão. O trecho abaixo exibe a descrição. Conforme podem notar, os pinos EPLD_SAM_DIO(0...3) são os pinos de escrita e leitura no cartão (conectado à EPLD), uart_xmit é a saída de transmissão da UART, uart_recv é entrada de recepção da UART. sam_dio(0...3) correspondem as seleções do cartão a ser interfaceado, bem como se será escrita ou leitura.
Realizei a descrição primeiramente utilizando o GHDL e depois o Quartus. A síntese foi feita no Quartus sem maiores problemas ou warnings, mas fazer o testbench, não consigo simular corretamente o comportamento de entrada/saída do pino EPLD_SAM_DIO_IO(0...3). Somente um caso funciona.
Alguém teria uma dica?
- Código: Selecionar todos
uart_xmit <= EPLD_SAM_DIO_IO(0) when sam_dio(0) = '0' and
sam_dio(1) = '1' and
sam_dio(2) = '1' and
sam_dio(3) = '1' else
EPLD_SAM_DIO_IO(1) when sam_dio(0) = '1' and
sam_dio(1) = '0' and
sam_dio(2) = '1' and
sam_dio(3) = '1' else
EPLD_SAM_DIO_IO(2) when sam_dio(0) = '1' and
sam_dio(1) = '1' and
sam_dio(2) = '0' and
sam_dio(3) = '1' else
EPLD_SAM_DIO_IO(3) when sam_dio(0) = '1' and
sam_dio(1) = '1' and
sam_dio(2) = '1' and
sam_dio(3) = '0' else '1';
EPLD_SAM_DIO_IO(0) <= EPLD_UART_RECV_I when sam_dio(0) = '1' and
sam_dio(1) = '0' and
sam_dio(2) = '0' and
sam_dio(3) = '0' else 'Z';
EPLD_SAM_DIO_IO(1) <= EPLD_UART_RECV_I when sam_dio(0) = '0' and
sam_dio(1) = '1' and
sam_dio(2) = '0' and
sam_dio(3) = '0' else 'Z';
EPLD_SAM_DIO_IO(2) <= EPLD_UART_RECV_I when sam_dio(0) = '0' and
sam_dio(1) = '0' and
sam_dio(2) = '1' and
sam_dio(3) = '0' else 'Z';
EPLD_SAM_DIO_IO(3) <= EPLD_UART_RECV_I when sam_dio(0) = '0' and
sam_dio(1) = '0' and
sam_dio(2) = '0' and
sam_dio(3) = '1' else 'Z';