时钟和复位在数字系统设计中的重要性是勿庸置疑的.在RTL级设计中,要表示一个时钟并不复杂,在Verilog中只需像下面这样写就表示clk是一个时钟:EDA中国门户网站+aX:p)[!Bc
^
always @ (posedge clk)EDA中国门户网站]"b6G'N9bO;P4Y*c
同样复位也不复杂,如:
M$u/r"?{
正常操作;EDA中国门户网站S ~jh hH
M,~
虽然在RTL级设计中表示时钟或是复位并不复杂,但实际关于时钟和复位的使用和相关的问题却要复杂的多.
T&e(I#o`huqc2007 对于时钟,如果我们的设计中只使用了一个全局时钟,那么我们在编写RTL级代码时没有必要过多的考虑时钟的问题,因为这种时钟无论在仿真,还是在FPGA或ASIC的实现都是比较简单的.但是多数情况我们没这么幸运,设计中经常会因为功能需求需要在芯片同时使用多个时钟,同时还需要在不同的时钟域间传递数据,这在电信和数据通信领域是很常见的.当数据从一个时钟域进入另一个时钟域时,如果产生数据的时钟和采样数据的时钟是异步关系,有可能造成数据传输时序关系的混乱.要解决这一问题,需要多方面的考虑,包括时钟域的规划、综合、仿真、测试等等。
~v-L y#w-q
Rhuqc2007 对于复位信号的处理,也会有类似的问题。比如是选择同步还是异步复位,复位电路如何保证安全可靠等等。下面我们就对时钟系统和复位的处理进行详细的讨论。EDA中国门户网站[1]@ ko}{.[1Wj
多时钟信号的处理
}ac C Hhuqc2007 多时钟系统相对于单时钟系统的设计要复杂的多,这主要体现在以下几个方面:
r.ZQ/i c1i@
Phuqc2007 在设计规划中如何根据时钟域划分模块;多时钟系统的RTL级,特别是跨时钟域边界的数据传输方法;以及相关的仿真、综合及测试的问题。EDA中国门户网站Z-R[1]IcSf
对于多时钟系统,每个时钟域当中都是一个单时钟系统。因此,问题的关键是信号(数据或控制信号)从一个时钟域传输到另一个时钟域如何保证功能的正确。不同EDA中国门户网站 ve%[(Z%^9o K
时钟域间信号传输首先可能遇到就是由亚稳态产生同步失败问题。亚稳态是指当触发器的数据端的变化与时钟的有效沿很近(不能满足建立和保持时间)时,其输出不能稳
#B'[#b0F1C"@I'Jthuqc2007定在一个确定的状态(‘0’或‘1’)。
S‑[1XRC W)Kfhuqc2007 解决亚稳态的问题,最常用的方法是使用同步电路。同步电路的作用是采样一个与本地时钟域异步的信号,并将其同步的传输到本地时钟域当中。最常用的同步电路
[1]oH"]uu}huqc2007是双触发器同步电路。第一个触发器用本地时钟对异步的输入信号进行采样,并等待一个时钟周期以保证第一级的输出信号的亚稳态趋于稳定,然后第一级信号被第二级触EDA中国门户网站2?
eF"l6Cl+i
发器采样,这样就可以保证第二级触发器的输出信号是稳定的,并且与本地时钟同步。从理论上来说,当第二级触发器采样时,第一级信号有可能仍然处于不稳定状态,这样EDA中国门户网站%J:~}Sa(t+V&xO
可能导致第二级触发器的输出仍为亚稳态。这种可能性和产生输入信号的时钟频率以及同步时钟频率有关。一般来说,两级触发器的同步电路就足以消除亚稳态的问题了。EDA中国门户网站 n#c-c+Mm6@
因此作为一条设计规则,对于所有从一个时钟域到另一个时钟域的信号都应该使用同步电路。使用VHDL描述这条规则就是:EDA中国门户网站:U9\p)zsz
..EDA中国门户网站C$r.zS$I6N WRQ^!G!`
process(clka)EDA中国门户网站 g6r ? C"Su
t.};o
p
begin
1s#T
e9Q"@,q Hzhuqc2007 if clka'event and clka='1' thenEDA中国门户网站TR:K a2c~0B,X
data_a <= data;EDA中国门户网站8CQ
i"L‑W;~,N
end if;
o4s ^f~
Whuqc2007end process;EDA中国门户网站j8kFW9CW'Qu;{%UF
process(clkb)EDA中国门户网站~"F2[&n1d
beginEDA中国门户网站‑f‑~%j`s1C.s
if clkb'event and clkb='1' then
&?
v2U3^/phuqc2007 data_b1 <= data_a;EDA中国门户网站:ZOub%[QI
data_b2 <= data_b1;
,Zn&^w/tp'SwA+Ehuqc2007 end if;EDA中国门户网站4n9U @)m[|
end process;
9r'Ai){TsG)TVhuqc2007...
R8gQ J9xo,@huqc2007 即使使用了同步电路,当信号从高速时钟域进入低速时钟域时,必须保证高速信号的值在低速时钟采样前不会发生多次改变。否则,低速时钟采样到的值可能不是我们EDA中国门户网站 Z r4a]'P_(y
想要传递的值。(怎么解决呢?)EDA中国门户网站‑S'd3C9b0O1[9c
K\B
解决这个问题的方法之一就是延长信号发送的时间,以保证低速时钟至少可以采样到一次有效的信号。另一种解决的方法是使用握手机制,如下图:
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
data_a经过同步电路后传输到clkb时钟域(clkb2搞错了,应该是data_b2^_^),然后这个信号作为回应再经过同步电路后返回clka时钟域(data_ab2).这样clka
;CQ6v
文章评论(0条评论)
登录后参与讨论