Registro LFSR
Indichi una fila iniziale di bit, le posizioni di presa e un numero di passi, e ottenga la sequenza di un LFSR di Fibonacci: il seme 1000 con prese 4 e 1 per 8 passi emette 00011110 e termina in 1101. Utile per esercizi sul CRC. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Stato
- 1000
- Tocchi
- 4, 1
- Lunghezza
- 4
- Sequenza
- 00011110
- Stato finale
- 1101
Un registro a scorrimento a retroazione lineare, o LFSR, è una macchina digitale compatta che memorizza una riga di bit e, a ogni impulso di clock, applica XOR a un pugno di posizioni di presa per calcolare un nuovo bit di ingresso mentre fa scorrere il resto. I progettisti usano registri LFSR per generare flussi di bit pseudocasuali, resti di ridondanza ciclica, sequenze di scramble e motivi di autotest incorporato senza conservare una tabella di consultazione. Questo calcolatore accetta lo stato iniziale del registro come una stringa di zeri e uni, un elenco di posizioni di presa numerate da 1 e contate da sinistra, e il numero di passi di clock da eseguire. Implementa un LFSR di Fibonacci: ogni passo emette il bit più a destra, fa scorrere il registro di un posto verso destra e inserisce a sinistra lo XOR dei bit prelevati.
Che cos'è un LFSR di Fibonacci e come ogni clock produce un bit
Un registro a scorrimento a retroazione lineare è una macchina a stati finiti il cui prossimo bit di ingresso è una funzione lineare del contenuto corrente, presa sul campo a due elementi GF(2). In hardware quella funzione lineare è semplicemente XOR. Le posizioni sono numerate da 1 a sinistra della stringa di stato fino a n a destra.
A ogni clock il motore legge i bit in quelle prese, li combina con XOR per ottenere un unico bit di retroazione, emette il bit più a destra come campione di uscita successivo, fa scorrere ogni bit di un posto verso destra e scrive il bit di retroazione nella cella sinistra rimasta vuota.
Ripetere quel passo produce una sequenza di bit deterministica il cui periodo è al più 2^n meno uno: lo stato di soli zeri è un punto fisso, e ogni altro stato di un polinomio a periodo massimo (primitivo) percorre i 2^n meno uno vettori non nulli restanti prima di ripetersi. Polinomi classici di aula come x^4 più x più uno, che corrisponde alle prese 4 e 1 su un registro a quattro bit, raggiungono quel periodo massimo se avviati da un seme non nullo.
Gli LFSR di Galois applicano XOR in più celle durante lo scorrimento e producono un flusso affine, ma non identico, per lo stesso polinomio; questo calcolatore non emula il cablaggio di Galois.
Casi d'uso
Esercizi d'aula su LFSR e CRC
Faccia avanzare un registro di Fibonacci da un seme e da un elenco di prese, poi confronti la sequenza di bit emessa e lo stato finale con il compito risolto a mano o con il polinomio del manuale.
Prefissi PRBS e di autotest incorporato
Generi un prefisso noto di un flusso LFSR a periodo massimo per verificare che un FPGA, un ASIC o uno scramble software coincidano con le prese specificate dopo il reset.
Oracoli per banchi di prova HDL
Alimenti i test unitari con un dump di bit deterministico affinché un modello LFSR in Verilog o VHDL non adotti in silenzio il senso di scorrimento opposto né prese numerate da 0.
Domande frequenti
Come avanza a ogni passo questo registro a scorrimento a retroazione lineare?
Implementa un LFSR di Fibonacci. Lo XOR dei bit nelle posizioni di presa numerate da 1 è la retroazione. Viene emesso il bit più a destra, il registro scorre di un posto verso destra e il bit di retroazione viene scritto nella cella più a sinistra.
Come sono numerate le posizioni di presa?
Il polinomio x^4+x+1 su quattro bit corrisponde alle prese 4 e 1.
Che cosa accade se una presa supera la lunghezza del registro?
Una presa maggiore di n descriverebbe un polinomio diverso; il gestore rifiuta l'avvolgimento circolare affinché il contratto resti onesto.
Che cosa produce un seme di soli zeri?
Tutti i bit di uscita restano 0 e il registro resta tutto a zero, perché lo XOR di zeri è zero. Quel punto fisso è un vero comportamento da LFSR, non un errore. Usi un seme non nullo per un flusso non banale.
Qual è la sequenza più lunga che un LFSR può produrre?
Al massimo 2 elevato a n meno 1 bit prima di ripetersi, dove n è la lunghezza del registro. Le prese a periodo massimo, come 4 e 1 in un registro a quattro bit, raggiungono quel limite da qualsiasi seme che non sia tutto a zero.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo 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)Esempio di richiesta
{
"state": "1000",
"taps": [
4,
1
],
"steps": 8
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.linear_feedback_shift_register",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_length | 64 |
max_steps | 4096 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Se una presa oltrepassa la lunghezza del registro, l'operazione fallisce con invalid_input invece di inventare un avvolgimento circolare.
Che cos'è un LFSR di Fibonacci e come ogni clock produce un bit
La forma di Fibonacci, che questo endpoint implementa, conserva una riga di n bit e un elenco di posizioni di presa.
Contratto di ingresso, numerazione delle prese, forma della risposta ed errori
Invii per POST un corpo JSON con tre campi obbligatori. state è il registro iniziale come stringa di caratteri 0 e 1; il carattere più a sinistra è la posizione 1 e la lunghezza della stringa è la larghezza del registro, da uno a sessantaquattro bit. Gli spazi bianchi all'interno di state vengono ignorati, così un nibble con spaziatura come 1 0 0 0 è accettato. taps è un array non vuoto di posizioni intere numerate da 1 i cui bit sono combinati con XOR per formare la retroazione di Fibonacci; ogni presa deve stare tra 1 e la lunghezza del registro, estremi inclusi. steps è il numero di clock da eseguire, un intero da 1 a 4096; ogni clock emette un bit di uscita. Sono accettati gli alias seed o register per state, tap_positions per taps, e n o count per steps. Campi mancanti, non-bit in state, non interi, elenchi di prese vuoti e valori fuori dai limiti pubblicati falliscono con invalid_input nominando il campo e non vengono fatturati. L'errore distintivo di questa capacità è una presa che sfora il registro: se state ha quattro bit e taps include 5, il gestore rifiuta la richiesta con un messaggio secondo cui la posizione di presa supera la lunghezza del registro, invece di avvolgere modulo n, il che implementerebbe in silenzio un polinomio diverso. In caso di successo il corpo riecheggia length, la stringa canonica state, taps e steps; restituisce bits come un array di interi 0 e 1 in ordine di clock; restituisce sequence come gli stessi bit concatenati per copia e incolla; e restituisce final_state, il contenuto del registro dopo l'ultimo scorrimento, così chi chiama può riprendere la macchina. Esempio: state 1000, taps 4 e 1, steps 8 produce bits 0,0,0,1,1,1,1,0, sequence 00011110 e final_state 1101.
Dove un'API di sequenza di bit LFSR dimostra il proprio valore
I corsi di progetto digitale e i laboratori HDL chiedono agli studenti di far avanzare a mano un LFSR di Fibonacci per pochi passi e di confrontare un polinomio da scheda tecnica con un dump di bit; un oracolo deterministico che usa la stessa numerazione da sinistra a destra e la stessa convenzione di scorrimento a destra elimina le discussioni su quale estremità sia il bit zero. La convalida fallita non consuma saldo. I compiti di comunicazioni e di codifica usano LFSR corti come motore lineare dietro i controlli di resto CRC, i codici di Gold e lo scramble additivo; generare qui il flusso di riferimento consente a un valutatore di confrontare l'implementazione di uno studente con un contratto JSON stabile invece che con una cattura di schermata. I generatori di autotest incorporato e di PRBS nel silicio e nei tessuti FPGA sono LFSR nel midollo: gli script di verifica possono chiamare questo endpoint per produrre un prefisso noto di una sequenza a periodo massimo e poi controllare che il dispositivo sotto test emetta lo stesso prefisso dopo il reset. Poiché l'implementazione è parse puro di tier A, ogni chiamata riuscita costa il prezzo base pubblicato di $0.002 senza token di modello e senza rete in uscita.
Domande tecniche
Quanto costa il calcolatore di registro a scorrimento a retroazione lineare?
Lo strumento nel browser è gratuito. Le richieste API usano il saldo prepagato KIT a $0.002 per chiamata riuscita; un ingresso non valido non viene fatturato.