Registre LFSR
Indiquez des bits de départ, les prises et un nombre de pas pour obtenir la suite d'un LFSR de Fibonacci : la graine 1000 avec les prises 4 et 1 sur 8 pas émet 00011110 et finit en 1101. Utile pour les exercices de CRC. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- État
- 1000
- Pressions
- 4, 1
- Longueur
- 4
- Séquence
- 00011110
- État final
- 1101
Un registre à décalage à rétroaction linéaire, ou LFSR, est une machine numérique compacte qui mémorise une rangée de bits et, à chaque impulsion d'horloge, applique un XOR à quelques positions de prise pour calculer un nouveau bit d'entrée tout en décalant le reste. Les concepteurs s'en servent pour engendrer des flux de bits pseudo-aléatoires, des restes de redondance cyclique, des séquences de brouillage et des motifs d'autotest intégré sans stocker de table de correspondance. Ce calculateur accepte l'état initial du registre comme une chaîne de zéros et de uns, une liste de positions de prise numérotées à partir de 1 et comptées depuis la gauche, ainsi que le nombre de pas d'horloge à exécuter. Il met en œuvre un LFSR de Fibonacci : chaque pas émet le bit le plus à droite, décale le registre d'une place vers la droite et insère à gauche le XOR des bits prélevés.
Ce qu'est un LFSR de Fibonacci et comment chaque horloge produit un bit
Un registre à décalage à rétroaction linéaire est un automate fini dont le prochain bit d'entrée est une fonction linéaire de son contenu courant, prise sur le corps à deux éléments GF(2). En matériel, cette fonction linéaire n'est rien d'autre qu'un XOR. La forme de Fibonacci, que ce point de terminaison implémente, conserve une rangée de n bits et une liste de positions de prise.
Les positions sont numérotées de 1 à gauche de la chaîne d'état jusqu'à n à droite. À chaque horloge, le moteur lit les bits de ces prises, les combine par XOR pour obtenir un unique bit de rétroaction, émet le bit le plus à droite comme prochain échantillon de sortie, décale chaque bit d'une place vers la droite et écrit le bit de rétroaction dans la cellule gauche devenue vacante.
Répéter cette étape produit une séquence de bits déterministe dont la période vaut au plus 2^n moins un : l'état tout à zéro est un point fixe, et tout autre état d'un polynôme de période maximale (primitif) parcourt les 2^n moins un vecteurs non nuls restants avant de se répéter. Des polynômes classiques de cours tels que x^4 plus x plus un, qui correspond aux prises 4 et 1 sur un registre de quatre bits, atteignent cette période maximale lorsqu'on part d'une graine non nulle.
Les LFSR de Galois appliquent un XOR dans plusieurs cellules pendant le décalage et produisent un flux cousin, mais non identique, pour le même polynôme ; ce calculateur n'émule pas le câblage de Galois.
Cas d’usage
Exercices de cours sur LFSR et CRC
Faites avancer un registre de Fibonacci depuis une graine et une liste de prises, puis comparez la séquence de bits émise et l'état final au devoir résolu à la main ou au polynôme du manuel.
Préfixes PRBS et d'autotest intégré
Produisez un préfixe connu d'un flux LFSR de période maximale pour vérifier qu'un FPGA, un ASIC ou un brouilleur logiciel coïncide avec les prises spécifiées après reset.
Oracles pour bancs de test HDL
Alimentez les tests unitaires avec un vidage de bits déterministe afin qu'un modèle LFSR en Verilog ou VHDL n'adopte pas en silence le sens de décalage opposé ni des prises numérotées depuis 0.
Questions fréquentes
Comment ce registre à décalage à rétroaction linéaire avance-t-il à chaque pas ?
Il met en œuvre un LFSR de Fibonacci. Le XOR des bits aux positions de prise numérotées à partir de 1 constitue la rétroaction. Le bit le plus à droite est émis, le registre se décale d'une place vers la droite, et le bit de rétroaction est écrit dans la cellule la plus à gauche.
Comment les positions de prise sont-elles numérotées ?
Le polynôme x^4+x+1 sur quatre bits correspond aux prises 4 et 1.
Que se passe-t-il si une prise dépasse la longueur du registre ?
Une prise supérieure à n décrirait un autre polynôme ; le gestionnaire refuse l'enroulement afin que le contrat reste honnête.
Que produit une graine entièrement nulle ?
Tous les bits de sortie restent à 0 et le registre reste à zéro, car le XOR de zéros vaut zéro. Ce point fixe est un vrai comportement de LFSR, non une erreur. Utilisez une graine non nulle pour un flux non trivial.
S'agit-il d'un LFSR de Fibonacci ou de Galois ?
De Fibonacci : à chaque pas, le bit de droite sort, le registre se décale vers la droite et le OU exclusif des prises entre à gauche. Un câblage de Galois donne une suite voisine mais différente, qui n'est pas reproduite ici.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/math/linear-feedback-shift-register \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"state":"1000","taps":[4,1],"steps":8}'const res = await fetch("https://api.kit.forhosting.com/math/linear-feedback-shift-register", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"state": "1000",
"taps": [
4,
1
],
"steps": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/linear-feedback-shift-register",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"state": "1000",
"taps": [
4,
1
],
"steps": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/linear-feedback-shift-register", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"state":"1000","taps":[4,1],"steps":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"state":"1000","taps":[4,1],"steps":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/linear-feedback-shift-register", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"state": "1000",
"taps": [
4,
1
],
"steps": 8
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.linear_feedback_shift_register",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_length | 64 |
max_steps | 4096 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Si une prise dépasse la longueur du registre, la tâche échoue avec invalid_input au lieu d'inventer un enroulement.
Contrat d'entrée, numérotation des prises, forme de la réponse et erreurs
Envoyez par POST un corps JSON avec trois champs obligatoires. state est le registre initial sous forme de chaîne de caractères 0 et 1 ; le caractère le plus à gauche est la position 1 et la longueur de la chaîne est la largeur du registre, de un à soixante-quatre bits. Les blancs à l'intérieur de state sont ignorés, si bien qu'un nibble espacé tel que 1 0 0 0 est accepté. taps est un tableau non vide de positions entières numérotées à partir de 1 dont les bits sont combinés par XOR pour former la rétroaction de Fibonacci ; chaque prise doit se situer entre 1 et la longueur du registre inclus. steps est le nombre d'horloges à exécuter, un entier de 1 à 4096 ; chaque horloge émet un bit de sortie. Les alias seed ou register pour state, tap_positions pour taps, et n ou count pour steps sont acceptés. Les champs manquants, les non-bits dans state, les non-entiers, les listes de prises vides et les valeurs hors des limites publiées échouent avec invalid_input en nommant le champ et ne sont pas facturés. L'erreur distinctive de cette capacité est une prise qui déborde le registre : si state a quatre bits et que taps contient 5, le gestionnaire refuse la requête avec un message indiquant que la position de prise dépasse la longueur du registre, plutôt que d'enrouler modulo n, ce qui implémenterait en silence un autre polynôme. En cas de succès, le corps renvoie en écho length, la chaîne canonique state, taps et steps ; renvoie bits comme un tableau d'entiers 0 et 1 dans l'ordre des horloges ; renvoie sequence comme ces mêmes bits concaténés pour copier-coller ; et renvoie final_state, le contenu du registre après le dernier décalage, afin qu'un appelant puisse reprendre la machine. Exemple : state 1000, taps 4 et 1, steps 8 donne bits 0,0,0,1,1,1,1,0, sequence 00011110 et final_state 1101.
Où une API de séquence de bits LFSR justifie son existence
Les cours de conception numérique et les laboratoires HDL demandent aux étudiants d'avancer à la main un LFSR de Fibonacci pendant quelques pas et de confronter un polynôme de fiche technique à un vidage de bits ; un oracle déterministe qui utilise la même numérotation de gauche à droite et la même convention de décalage à droite supprime les débats sur quel bout est le bit zéro. Les générateurs d'autotest intégré et de PRBS dans le silicium et les tissus FPGA sont des LFSR dans l'âme : des scripts de vérification peuvent appeler ce point de terminaison pour produire un préfixe connu d'une séquence de période maximale, puis vérifier que le dispositif sous test émet le même préfixe après reset. Une validation en échec ne consomme pas de solde. Les devoirs de communications et de codage utilisent de courts LFSR comme moteur linéaire derrière les contrôles de reste CRC, les codes de Gold et le brouillage additif ; produire ici le flux de référence permet à un correcteur de comparer l'implémentation d'un étudiant à un contrat JSON stable plutôt qu'à une capture d'écran. Parce que l'implémentation est du parse pur de tier A, chaque appel réussi coûte le tarif de base publié de $0.002 sans jetons de modèle et sans réseau sortant.
Questions techniques
Combien coûte le calculateur de registre à décalage à rétroaction linéaire ?
L'outil du navigateur est gratuit. Les requêtes API utilisent le solde prépayé KIT à $0.002 par appel réussi ; une entrée invalide n'est pas facturée.