根据部件各个的控制信号,我们知道有些部件需要时钟有些不需要时钟,这些需要时钟信号的部件有些可以同时运作,不如PC计数器的加一操作和指令寄存器的存指令操作,但是有些部件就一定需要一个先后顺序,比如说加法,肯定是要等运算完以后才给通用寄存器时钟信号去吧运算结果存进指定的寄存器。所有这里的多个时钟信号的周期必然有区别,处理的方法这里说两种思路:
- 设置多个时钟信号,可以同时进行部件公用一个时钟信号,不能同步的用不同的时钟信号;
- 只用一个时钟,但是加一个计数器,根据经过时钟信号的个数,将当期的信号传给对应的部件。
这两种方法其实细想的话其实差别不大,我这里用的是第二种方法。
(1)VHDL代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity SZJP is
port(CLK:in std_logic;
T1,T2,T3,T4:out std_logic);
end entity SZJP;
architecture ST of SZJP is
signal Q:std_logic_vector(1 downto 0):="00";
begin
process(CLK)
begin
if(CLK'event and CLK='1')then
Q<=Q+1;
end if;
if(Q="00") then T1<='0';T2<='0';T3<='0';T4<='1';
elsif(Q="01")then T1<='1';T2<='0';T3<='0';T4<='0';
elsif(Q="10")then T1<='0';T2<='1';T3<='0';T4<='0';
else T1<='0';T2<='0';T3<='1';T4<='0';
end if;
end process;
end ST;
(2)
引脚说明:
输入端为时钟信号CLK,输出端为表示第几个时钟上升沿的输出,T1~T4分别表示第一到第四个时钟上升沿。
(3)波形仿真:
显然T1,T2,T3,T4这四个输出的上升沿分别为CLK时钟信号的第1、2、3、4个时钟上升沿,符合设计要求。