Implementación de BZFAD usando VHDL

2

Soy novato para la codificación vhdl. Estoy implementando BZFAD que es un multiplicador de baja potencia.

En el diagrama de bloques como se muestra a continuación, tengo un bloque de transistor (M1) cuya entrada se maneja desde el contador de anillo. Estoy confundido en cuanto a cómo se pueden implementar estos transistores utilizando VHDL.

Estoy usando la herramienta Xlinx ISE para implementar lo mismo.

    
pregunta user40295

1 respuesta

3

M1 es un multiplexor k-1 de ancho a 1 con habilitaciones individuales controladas desde el contador de anillo. Donde la señal READY fuerza la salida a un '0'. M2 es un selector 1: k-1 con habilitaciones individuales desconectadas del contador de anillo. El contador de anillos tiene k etapas. MUX1 es un multiplexor 2: 1 de ancho k + 1 con una única entrada de selección.

En el modelo M1, M2 y MUX1, no tiene acceso a transistores en el entorno de software integrado de la tecnología de síntesis de Xilinx. En el mejor de los casos, puede emularlo en un FPGA.

M1_out <= reduce_or (B(32 downto 1) and Ring_Counter(31 downto 0)) 
              when Ready = '0' else 
          '0' when Ready = '1';'

Ready is Ring_Counter (31).

Cuando en una implementación a nivel de transistor, la reducción OR es en realidad un OR de cable. Dependiendo de los paquetes y la versión VHDL, es posible que tenga una reducción O disponible como función o como operador.

Lo que tiene de especial la arquitectura es la capacidad de utilizar pestillos para P en lugar de un registro de desplazamiento a la derecha de desplazamiento de carga paralelo y ahorrar energía al reducir el número de redes que cambian con el reloj.

Podrías escribir modelos de comportamiento de transistores pero no te acercará más a los transistores reales.

Addendum

"podemos escribir un modelo estructural en lugar del modelo de comportamiento ..."

Estructural en este caso es el nivel de transistor. No podemos modelar los transistores con precisión sin simulación analógica, VHDL no sabe nada acerca de los transistores. Podemos hacer un modelo lógico digital estructural.

Se utilizan dos tipos de transistores, ambos mostrados incidentalmente en MUX1, que es un multiplexor 2: 1 de k + 1 de ancho:

Llamealaconexiónsuperioraltransistorsource,alaconexióninferiordrainyalaburbujamedia(derecha)oburbujamenosalaconexióngate.

Lasiguientenoeslaúnicaformademodelartransistoresaquí.Modelartransistoresesalgomejordejarloeneldominioanalógico.

Modelamoslosdostransistoresdemaneradiferentesegúnlaburbuja:

libraryieee;useieee.std_logic_1164.all;entitytransisport(source:instd_logic;gate:instd_logic;drain:outstd_logic);endentity;architecturefuncoftransisbegindrain<=sourcewhengate='1'else'Z'whengate='0'else'X';endarchitecture;libraryieee;useieee.std_logic_1164.all;entitytrans_bubbleisport(source:instd_logic;gate:instd_logic;drain:outstd_logic);endentity;architecturefuncoftrans_bubbleisbegindrain<=sourcewhengate='0'else'Z'whengate='1'else'X';endarchitecture;

Sinlasimulaciónanalógica,loúnicoquepodríamoshacerseríamodelarlafuenteyeldrenajecomomodoinoutyresolverambassalidas.Parecemuchotrabajoparaalgoquenopuedesermuyprecisodetodosmodos.

UnmodeloMUX1simplequeusatransistores:

libraryieee;useieee.std_logic_1164.all;entityMUX1isgeneric(k:natural:=32--kwidth);port(a:instd_logic_vector(kdownto0);--widthisk+1b:instd_logic_vector(kdownto0);sel:instd_logic;outp:outstd_logic_vector(kdownto0));endentity;architecturefuncofMUX1issignalwire_ab:std_logic_vector(kdownto0);beginMUX_1:foriinoutp'rangegenerateMUX1A:entitywork.trans_bubbleportmap(source=>a(i),gate=>sel,drain=>wire_ab(i));MUX1B:entitywork.transportmap(source=>b(i),gate=>sel,drain=>wire_ab(i));endgenerate;WIRED_OR:outp<=wire_ab;

arquitecturafinal;

Lasdeclaracionesdegeneracióngeneranunconjuntode32transistoresconburbujasparaelladoadelmulitplexery32transistoressinburbujasparaelladob.LassalidasdelostransistoresoelcableOjaronelvalordesalidacontandoconlaresoluciónstd_logic.Untransistorestáencendidooapagado.Enestosmodelos,laentradadelafuenteseexpulsaeneldrenajecuandolacompuertasehabilita,delocontrarioseemite'Z'(altaimpedancia).

EscribiendounbancodepruebassimpleparaMUX1:

libraryieee;useieee.std_logic_1164.all;entitymux1_tbisgeneric(k:natural:=32);endentity;architecturefooofmux1_tbissignala:std_logic_vector(kdownto0):=('0'&X"FEEDFACE");
    signal b:       std_logic_vector(k downto 0) := ('1' & X"DEADBEEF");
    signal outp:    std_logic_vector(k downto 0);
    signal sel:     std_logic;
begin
DUT:
    entity work.mux1
        generic map (
            k => k
        )
        port map (
            a => a,
            b => b,
            sel => sel,
            outp => outp
        );

STIMULUS:
    process 
    begin
        wait for 10 ns;
        sel <= '0';
        wait for 10 ns;
        sel <= '1';
        wait for 10 ns;
        wait;
    end process;
end architecture;

nos da:

Que muestra que funciona MUX1. Además, si tuviera que mirar dentro de la jerarquía, encontraría 32 pares de transistores (MUX_1 [0-32] / MUX1A y MUX_1 [0-32] / MUX1B o alguna variación, donde los MUX1A son trans_bubble y los MUX1B son trans).

M1 y M2 requieren acceso individual a las entradas de la puerta y tienen un riel común para la fuente (M2) o el drenaje (M1), consulte la Figura 2 del documento. Tenga en cuenta que en ningún lugar del multiplexor MUX1, el selector M1 o el decodificador M2 hay más de un transistor habilitado a la vez.

Debido a que el contador de anillo también proporciona una señal LISTA, también impulsa la salida del selector M1 a '0' a través del transistor por debajo del drenaje común. En lugar de usar las funciones de resolución, simplemente puede invertir las conexiones para que el drenaje del único transistor esté en la parte superior del símbolo esquemático. Podemos hacer esto porque todas las habilitaciones de transistores son mutuamente excluyentes. La intención es tener siempre algo conduciendo una red. Esto evita el enganche y otros fenómenos desagradables en implementaciones reales. El suelo puede ser reemplazado por un '0'.

    
respondido por el user8352

Lea otras preguntas en las etiquetas