Articles Liés
Notes d'étude frontales des circuits intégrés numériques : synthèse du verrou
Notes d'étude frontales des circuits intégrés numériques : implémentation Verilog de FIFO (1)
Notes d'étude frontales des circuits intégrés numériques : implémentation Verilog de FIFO (2)
Notes d'étude sur le front-end des circuits intégrés numériques : sondage d'arbitrage (1)
Notes d'étude sur le front-end des circuits intégrés numériques : sondage d'arbitrage (2)
Notes d'étude frontales sur les circuits intégrés numériques : sondage d'arbitrage (3)
Notes d'étude frontales sur les circuits intégrés numériques : sondage d'arbitrage (4)
Notes d'étude sur le front-end des circuits intégrés numériques : sondage d'arbitrage (5)
Notes d'étude sur le front-end des circuits intégrés numériques : sondage d'arbitrage (6)
Principes de base de la synchronisation de signal à bit unique
Lorsque le signal d'entrée d'une bascule ne respecte pas le temps de configuration (temps de configuration) et le temps de maintien (temps de maintien), la sortie sera dans un état métastable, c'est-à-dire que la sortie n'est ni 1 ni 0, et est en une valeur incertaine Lorsque l'état métastable Lorsque la sortie est utilisée comme entrée d'autres portes logiques, cela peut entraîner la transmission en chaîne d'états métastables, une méthode doit donc être utilisée pour empêcher les bascules d'entrer dans des états métastables.
Dans un système numérique avec une seule horloge (appelé système numérique à domaine d'horloge unique), vous pouvez vous assurer que les temps de configuration et de maintien répondent aux exigences de synchronisation en contrôlant le retard du circuit logique combinatoire entre les deux bascules. Mais lorsque la sortie d'une bascule de domaine d'horloge est utilisée comme entrée d'une autre bascule de domaine d'horloge, les deux horloges n'ont aucune corrélation et l'état métastable à ce moment nécessite d'autres méthodes à éviter.
La figure ci-dessous montre une manière de résoudre ce problème, qui consiste à insérer deux bascules D en cascade à la fin de la sortie du domaine d'horloge CLK_B. À ce moment, la sortie de Q_BS1 peut apparaître dans un état métastable, mais avant que le prochain front d'horloge n'arrive, l'état métastable se stabilisera, et à ce moment, Q_BS2 n'apparaîtra probablement pas dans un état métastable. Mais lorsque l'horloge CLK_B est très rapide, Q_BS2 peut toujours apparaître métastable.A ce moment, vous pouvez envisager d'augmenter le nombre de bascules D en cascade. Dans les applications pratiques, il suffit d'utiliser des déclencheurs à deux étages pour taper.
![](https://img-blog.csdnimg.cn/img_convert/54405d744729352109f480df2c1205ef.jpeg)
Règles de synchronisation des signaux
Lorsque les signaux sont synchronisés, plusieurs règles doivent être suivies.
Les signaux qui traversent les domaines d'horloge doivent provenir directement des sorties de registre du domaine d'horloge source. Si le signal provient de la logique combinatoire au lieu de directement des bascules, des courses et des dangers peuvent être créés, un exemple est donné dans la figure ci-dessous.
![](https://img-blog.csdnimg.cn/img_convert/c15c5bee5ad74c0218b779cb99fa061b.jpeg)
Au début, les deux entrées de la porte ET sont 1 et 0, et la sortie c est 0. Lorsque a passe de 0 à 1 et b passe de 1 à 0, la sortie finale c est toujours 0, mais a et b peut être court Le temps est toujours à l'état 1, ce qui fait que la sortie c est à 1 par erreur pendant un certain temps. Si le front montant de CLK_B se produit à ce moment, alors le signal de parasite 1 sera transmis au étape suivante, faisant apparaître d et e d'une certaine largeur Faux signaux, qu'on ne veut pas voir. Si le registre utilisant le domaine d'horloge CLK_A est inséré derrière la porte ET, alors le pépin sur c n'apparaîtra pas, n'affectant ainsi pas le fonctionnement normal du circuit.
Les synchroniseurs sont implémentés à l'aide de bascules dédiées dans la bibliothèque de cellules logiques. Les bascules à usage spécial mentionnées ici ont une capacité de commande élevée et un gain élevé (
), ce qui les fera entrer plus rapidement dans l'état stable, de sorte que leur utilisation peut accélérer la vitesse du circuit sortant de l'état métastable.
Un signal de sortie, évitant l'utilisation de plusieurs dispositifs de synchronisation pour la synchronisation. Ce que cette phrase signifie, c'est que vous ne pouvez pas utiliser plusieurs synchroniseurs pour synchroniser un signal à plusieurs points dans un autre domaine d'horloge, car les synchroniseurs retarderont le signal de 1 à 2 cycles, et s'il y a plusieurs synchroniseurs, alors le résultat peut be Il y aura des incohérences (même si le résultat final est cohérent), ce qui entraînera des erreurs dans les systèmes en aval.
Les signaux de sortie multi-bits évitent d'utiliser plusieurs dispositifs de synchronisation pour synchroniser séparément. Ce dont nous discutons dans cet article, ce sont tous les signaux à bit unique, principalement des signaux de contrôle. Lorsque les signaux multibits doivent être synchronisés, nous ne pouvons pas utiliser la méthode décrite dans cet article. La raison est la même que c. Les résultats multibits peuvent avoir des combinaisons instables. Peut entraîner des erreurs (cela peut également être évité en utilisant le codage en code Gray, car le code Gray ne change qu'un bit à la fois). Comment synchroniser autant de signaux Bit ? Nous pouvons utiliser FIFO asynchrone ou d'autres méthodes telles que le protocole de poignée de main pour synchroniser.
Synchronisation du signal avancée
Selon la vitesse relative des deux vitesses d'horloge dans le domaine fréquentiel, nous divisons la synchronisation des signaux à un seul bit en deux cas.Pour ces deux cas, différentes méthodes sont nécessaires pour la synchronisation.
Signaux de commande asynchrones dans le domaine de l'horloge lente synchrone à horloge rapide
在这种情况下,可能会出现异步信号在自己的慢时钟域中只维持了一个时钟的有效时间,但在快时钟域却被采样了多次,这可能会导致目标时钟域误以为有多个连续的有效控制信号(这里和之前的信号沿检测文章中要求输出一个单周期宽度的检测信号类似,见https://blog.csdn.net/weixin_45791458/article/details/128690161?spm=1001.2014.3001.5501)。
这里采用的方法为在两级同步器后再加一个级别,然后利用第三个同步器的低电平和第二个同步器的高电平译码出一个周期的高电平。
input sig_a;
input clkb;
input rstb;
reg sig_a_d1,sig_a_d2,sig_a_d3;
wire sig_a_posedge;
assign sig_a_posedge=sig_a_d2&!sig_a_d3;
always@(posedge clkb,negedge rstb)
begin
if(!rstb)
begin
sig_a_d1<=1'b0;
sig_a_d2<=1'b0;
sig_a_d3<=1'b0;
end
else
begin
sig_a_d1<=sig_a;
sig_a_d2<=sig_a_d1;
sig_a_d3<=sig_a_d2;
end
end
慢时钟域同步快时钟域下的异步控制信号
用慢时钟同步快时钟域下的控制信号带来的问题是可能在慢时钟到来之前,快时钟的控制信号已经失效,这样就丢失了控制信号,显然造成了功能错误,信号波形如下图所示。对于这个问题,常见的是使用握手机制。
![](https://img-blog.csdnimg.cn/img_convert/dbaec9d56e62955365b76752b1443f02.jpeg)
握手机制(一)
我们通过握手机制,人为锁存快时钟域的控制信号,然后通过同步器穿越边界,使慢时钟域采样到信号,再通过同步器反馈给快时钟域,接着快时钟域释放当前控制信号,这时就可以响应下一个控制信号,原理图如下所示。
![](https://img-blog.csdnimg.cn/img_convert/e2cc85396e80bd50efdd94c9e76d5c5a.jpeg)
其中,数据从adat输入,左下角应该是一个不是一个简单的触发器,而是可以根据反馈信号锁存adat的触发器,锁存后的信号为adat1,这个信号通过两级同步器进入慢时钟域,并将反馈信号(这里是信号本身)同步会快时钟域,表示信号已收到,可以取消快时钟域的锁存信号了,并等待下一个adat有效信号的到来。
用Verilog HDL实现的快时钟域的锁存代码如下。
module adapt_gen(input aclk,rest_b,adat,abdat2,output reg adat1);
always@(posedge clk,negedge rest_b)
if(!reset_b)
adat1<=1'b0;
else
if(abdat2)
adat1<=1'b0;
else
adat1<=adat;
endmodule
这种方法不能解决快时钟域信号在两个慢时钟域信号间多次翻转的问题。握手机制默认了这种情况不存在,也就是说,在设计时,必须保证快时钟域两个有效信号间的最小时间限制。这个最小值是反馈回路的延迟和第一个同步器恢复无效状态的时间之和。
握手机制(二)
我们还可以将快时钟域异步信号连接到一个D触发器的时钟端,而输出端连接至高电平,然后通过两级同步器连接至慢时钟域,慢时钟域收到信号后给出反馈信号,复位D触发器和第一个同步器,如下图所示。
![](https://img-blog.csdnimg.cn/img_convert/d8de15581024437227791f0277b452f5.jpeg)
当异步信号有效沿来临时,D触发器的输出q1被置为1,此时q1可能不满足第一个同步器的建立时间要求,导致q2出现亚稳态,但在Synch_out端,亚稳态不会出现(同步装置的原理),输出被反馈回到复位端,与输入信号的低电平一起复位前两个触发器,这样使得输出信号的宽度为一个慢时钟域时钟周期。
以上内容来源于《Verilog高级数字系统设计技术和实例分析》、《SOC设计方法与实现》和《Verilog HDL高级数字设计》