bit de lectura VHDL del problema de entrada

0
entity TestRun01 is
    Port ( Clk : in  STD_LOGIC;
           Din : in  STD_LOGIC;
           Dout : out  STD_LOGIC_vector(11 downto 0));
end TestRun01;

architecture Behavioral of TestRun01 is
    signal regr : std_logic_vector(11 downto 0) :="000000000010"; 
    signal reg  : std_logic;
begin
    process(Clk,reg)
    begin
        if falling_edge(CLK) then
            if Din ='1' then
                reg <='1';
            elsif  Din='0' then
                reg <='0';
            else
                reg <= reg;
            end if;
            regr(0)<=reg;                   
            regr<=regr(10 downto 0) & '0';
        end if;
    end process;

    Dout<=regr;
end Behavioral;

¿porquésolocambia'0'alregistrodedesplazamiento?

sicambioelcódigode

regr(0)<=reg;regr<=regr(10downto0)&'0';

a

regr<=regr(10downto0)&'0';regr(0)<=reg;

elpuntodereferenciamuestra

    
pregunta Yuan Cao

1 respuesta

2

Observando las siguientes dos líneas de código:

regr(0)<=reg;                   
regr<=regr(10 downto 0) & '0';

Dado que regr tiene un ancho de 12 bits, la segunda línea asigna cada bit en esta señal. Dado que la última asignación a una señal en particular tiene prioridad, su asignación inicial a regr(0) se ignora de manera efectiva.

En el segundo ejemplo con las dos líneas intercambiadas, la última asignación a regr(0)<=reg; tiene prioridad sobre la asignación a '0' en la línea anterior.

La versión más legible se vería así:

regr <= regr(10 downto 0) & reg;

por lo tanto, realiza la tarea completa en una línea sin posibilidad de confusión.

En tu segundo ejemplo, estás viendo que 'U' está siendo cambiado, porque tu señal reg no está inicializada. Podría inicializar su señal a '0' usando:

signal reg : std_logic := '0'
    
respondido por el scary_jeff

Lea otras preguntas en las etiquetas