从下面的两个电路可以看出同步设计的关键所在
第一个图:同步设计的电路结构:
对应的VHDL 程序可以表示如下:
signal Counter: std_logic_vector(1 downto 0);
process(Clk)
begin
if rising_edge(Clk) then
if INPUT=‘1’ and Counter/=“11” then
Counter <= Counter + 1;
end if;
--组合逻辑用在寄存器的D端,
--为同步设计,可行
end if;
signal Counter: std_logic_vector(3 downto 0);
signal TC: std_logic;
signal s: std_logic;
process(Clk)
begin
if rising_edge(Clk) then
if INPUT=‘1’ then
Counter <= Counter + 1;
end if;
if TC=‘1’ then
--TC 用在寄存器的CE端,为同步设计,可行
s <= DATA;
end if;
end if;
end process;
TC <= ‘1’ when Counter=“1111” else ‘0’;
--TC为组合逻辑输出
end process;
第二个结构:禁止异步设计
signal Counter: std_logic_vector(1 downto 0);
process(Counter, Clk)
begin
if Counter=“11” then
--组合逻辑用作寄存器的异步复位,
--为异步设计,禁止!!!
Counter <= “00”;
elsif rising_edge(Clk) then
if INPUT=‘1’ then
Counter <= Counter + 1;
end if;
end if;
end process;
signal Counter: std_logic_vector(3 downto 0);
signal TC: std_logic;
signal s: std_logic;
process(Clk)
begin
if rising_edge(Clk) then
if INPUT=‘1’ then
Counter <= Counter + 1;
end if;
end if;
end process;
TC <= ‘1’ when Counter=“1111” else ‘0’;
--TC为组合逻辑输出
process(TC)
begin
if rising_edge(TC)=‘1’ then
--TC 用作寄存器的时钟,为异步设计,禁止!
s <= DATA;
end if;
end process;
从上面看出,同步设计的关键就是 系统实战和复位信号一定要是经过触发器后的采样后信号,而不能是门控时钟信号
|