Linear Feedback Shift Register
From Gezel2
A 5-bit Linear Feedback Shift Register is implemented at wordlevel, using a single shift operation for the register itself, and expressing the feedback network with exor operations. Refer to wikipedia for a discussion on the operation of an [LFSR].
lfsr.fdl
dp lfsr(in seed : ns(5);
in load : ns(1);
out b : ns(1)) {
reg shft : ns(5);
sig shft_new : ns(5);
always {
shft_new = (shft << 1) | (shft[1] ^ shft[4]);
shft = load ? seed : shft_new;
b = shft[4];
}
}
// testbench
dp lfsr_tb(out seed : ns(5);
out load : ns(1);
in b : ns(1)) {
sfg init { seed = 0x1F; load = 1; }
sfg run { seed = 0; load = 0; }
sfg show { $display("b= ", b); }
}
fsm hlfsr_tb(lfsr_tb) {
initial s0;
state s1;
@s0 (init) -> s1;
@s1 (run, show) -> s1;
}
dp top {
sig seed : ns(5);
sig load, b : ns(1);
use lfsr(seed, load, b);
use lfsr_tb(seed, load, b);
}
system S {
top;
}
Simulation Output
>fdlsim lfsr.fdl 20 b= 1 b= 1 b= 1 b= 1 b= 1 b= 0 b= 0 b= 1 b= 1 b= 0 b= 1 b= 0 b= 0 b= 1 b= 0 b= 0 b= 0 b= 0 b= 1
