TODOPIC
Otros Microcontroladores / Dispositivos programables => Lógica Programable => Mensaje iniciado por: black_flowers en 29 de Septiembre de 2009, 16:36:11
-
hola de nuevo, una pregunta... si tenemos este código (que es de un flip-flop):
--
-- Flip-Flop with Positive-Edge Clock
--
library ieee;
use ieee.std_logic_1164.all;
entity registers_1 is
port(C, D : in std_logic;
Q : out std_logic);
end registers_1;
architecture archi of registers_1 is
begin
process (C)
begin
if (C’event and C=’1’) then
Q <= D;
end if;
end process;
end archi;
por qué se comprueba c'event?
si ha entrado en process es porque ha habido un cambio en c, y si
el valor de c='1' entonces ese flanco tuvo que ser de subida. ¿no sobraría la comprobación "if (C'event) ?
sl2 :)
-
Pues al no haber más señales en la lista de sensibilidad me entra la duda...se supone que sin el C'EVENT funcionaría igualmente.
En el caso de que hubiese más señales, la función de C'EVENT es para asegurarse de que el proceso se ha activado por un cambio en la señal de reloj y no en otra de las señales
-
claro esa era la duda, gracias modulay!
-
Hola black_flowers.
Se debe comprobar que el flanco sea ascendente. En caso de que no se compruebe esta condición, el flip-flop
funcionará tanto con el flanco ascendente como en el descendente. Por ello es necesario el clk 'event and clk = '1'.
Un saludo.
-
Hola black_flowers.
Se debe comprobar que el flanco sea ascendente. En caso de que no se compruebe esta condición, el flip-flop
funcionará tanto con el flanco ascendente como en el descendente. Por ello es necesario el clk 'event and clk = '1'.
Un saludo.
si clk ha cambiado de estado y su nuevo estado es 1 (if (C=’1’) then) ... es porque ha sido flanco ascendente no??
saludos
si la
-
Sí, así es.
-
Entonces, en ausencia de otras señales en la lista de sensibilidad, no sería necesaria la comprobación C'EVENT
-
Ahora que lo pienso, tienes razón, con comprobar C = '1' es suficiente.
Es que no lo había entendido bien.
-
De casualidad vi tu post, y vi que no te han dado la respuesta exacta, con el clk'event se sintetiza un flip flop D, si quitas el clk'event y solo confirmas su estado igual a 1, se sintetiza un latch. Espero sirva
-
Hola
pero si no quieres usar C'EVENT puedes usar:
if rising_edge(c) then
para flanco de subida o:
if falling_edge(c) then
para flanco de bajada.
salu2:)
-
Igual no todos tienen implementadas esas funciones, entonces para hacerlo más general es conveniente usar 'event ;-)
Saludos!
-
Como menciona luisdearg, si no evalúas clk'event se crea un latch, que probablemente no sea lo que desees y pudiera llegar a generar algún problema, en el caso de las herramientas de Xilinx te avisan y te indican que no se recomienda el uso de latches.
-
Igual no todos tienen implementadas esas funciones, entonces para hacerlo más general es conveniente usar 'event ;-)
si pero son del VHDL 93 y creo que si la mayoria lo tiene implementado ano ser que explicitmente le digas al software que quieres usar una version inferior y por lomenos ami el ISE de xilinx no me deja selecconar una version inferior a la 93.
y me olvidaba mencionar que se encuentran en el paquete "std_logic_1164" que si fue incluido en el ejemplo de la pregunta y normalmente es incluio de forma automatica al crear un nuevo proyecto.
y si como explico luisderag si no usas 'event o las funciones que puse te genera un latch lo que en la mayoria de los casos te puede generar resultados inesperados.
yo lo comprobe una ves y si se tiene que tener algo de cuidado al programar.
-
bueno yo creo que si se trata de un flip flop pues son muy inestables, con los transitirios o ruido de la fuente, asi que pues una de la soluciones fue usar las activaciones por flanco, entra mejor en la sincronia de los pulsos de reloj, pero recordando todos los flip flop TTL son muy inestables. auque la FPGA que no es TTL necesita un circuito con buena tierra, voltaje y dependiendo la aplicaciòn buen blindaje y aislamiento, asi no tendremos que preocuparnos y deve de funcinar bien, pero no esta de mas la sincronia que se usa hace mucho en circuitos logicos y en realidad ese es el proposito del lenguaje de descripcion describir circuitos logicos.
pero si por ejemplo fuera un incremento de una variable, talvez en la lista sencible entraria una señal de reloj general, solo para sincronizar con todos los componentes programados en el FPGA, y el flanco me permetiria hacer el conteo una sola vez durante el pulso de reloj y no durante los cambios en los pulsos que no sincronizen con el pulso de reloj.
pienzo que el event es un gran ventaja en vhdl.