Je suis en train d'écrire quelque chose comme ceci:Comment attendre les bords toujours bloqués?
[email protected](posedge bus_start)
begin
@(posedge scl) buffer[7] = sda;
@(posedge scl) buffer[6] = sda;
@(posedge scl) buffer[5] = sda;
@(posedge scl) buffer[4] = sda;
@(posedge scl) buffer[3] = sda;
@(posedge scl) buffer[2] = sda;
@(posedge scl) buffer[1] = sda;
@(posedge scl) buffer[0] = sda;
end
Mais ce n'est pas synthétisable selon l'erreur que je suis arrivé.
Je peux utiliser FSM pour résoudre cela, mais cela pourrait compliquer la situation, est-il possible de la rendre synthétisable?
Non. Il s'agit d'un Verilog comportemental de haut niveau. Cela ferait un bon modèle de référence pour un banc d'essai, mais il n'est pas suffisamment détaillé pour être synthétisable. Le niveau d'abstraction (niveau de détail) auquel vous devez écrire du code synthétisable s'appelle RTL (Register Transfer Level), dans lequel vous décidez presque manuellement où se trouvent les bascules et où le synthétiseur remplit la logique combinatoire. Pour cette interface I2C, vous aurez besoin d'un registre de décalage, vous aurez besoin d'un FSM, vous aurez probablement besoin d'un compteur. Voir [le site Web de mon entreprise] (https://www.doulos.com/knowhow/verilog_designers_guide/). –