Asignación bidireccional en Systemverilog

0

Necesito crear un bloque mux que funcione con pines de entrada. Mi módulo tiene n entradas y n salidas, quiero poder cambiar entre diferentes salidas.

El problema que tengo actualmente es que tengo que hacerlo con pasadores de entrada. Así que si mi pin de salida se tira hacia abajo, el pin de entrada del Mux verá eso. Esto no funciona con una declaración de asignación común desde Sólo escribirá en una dirección. He intentado una declaración de alias, que Funciona como una asignación bidireccional, pero no puedo combinar esto con una sentencia if para el mux.

Lo que quiero hacer:

alias net_out = (config) ? net1 : net2;

He creado un ejemplo en edaplayground

    
pregunta Patrick

2 respuestas

0

Si está intentando modelar un mux bidireccional, las primitivas tranif podrían ser más apropiado / fácil, dependiendo de cuál sea su objetivo final.

tranif1 # (t_on, t_off) (a, b, ena);

entonces

tranif1 # (1, 1) (net1, net2, config);

tranif0 # (1, 1) (net2, net1, config);

    
respondido por el GMilliorn
0

Habría ayudado si mencionara el hecho de que está utilizando redes de números reales para empezar. Las primitivas tran de SystemVerilog solo se definen con el modelo de solidez del cable de Verilog, y para hacer lo que quiera, debe definir su propio modelo de resolución que muy pocos simuladores han implementado todavía.

Es más probable que esté pensando en términos de diseño analógico (AMS) y que necesite subir un nivel de abstracción para obtener lo que desea en SystemVerilog.

    
respondido por el dave_59

Lea otras preguntas en las etiquetas