Rastgele sayı üretimi işlemleri için Galois tarafından önerilen LFSR (Linear Feedback Shift Register ) yöntemi kullanılmıştır.

Kaydırma ve tanımlı olan bitlerin xor işlemine tabi tutulması ile yeni sayı üretim işlemi gerçekleştirilmektedir. Bu yazıda ise kullanıc tarafından xor işlemine tabi tutulacak bitlerin sayısı ve bit numaraları generic olarak tanımlanabilme imkanı sağlayan kod sunulmuştur. Rastgele sayı üretim işlemleri bu değere göre gerçekleşitirilmiştir. Bununla birlikte oluşturulan paket içerisinde sayı uzunluğu ve kullanulacak olan polinoma ilişkin tanımlamalar yapılabilmetkedir. Aşağıda rastgele sayı üreteci benzetim çıktısı ve VHDL kodları verilmiştir.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use work.lfsr_packet.all;
entity lfsr is
Generic(
INIT_VALUE : std_logic_vector(DATA_WIDTH - 1 downto 0) := X"A47C"
);
Port (
in_clk : in std_logic;
in_rst : in std_logic;
out_rnd_data : out std_logic_vector(DATA_WIDTH - 1 downto 0)
);
end lfsr;
architecture Behavioral of lfsr is
signal r_rnd_data : std_logic_vector(DATA_WIDTH - 1 downto 0) := INIT_VALUE;
begin
out_rnd_data <= r_rnd_data;
process(in_clk, in_rst)
begin
if in_rst = '1' then
r_rnd_data <= INIT_VALUE;
elsif rising_edge(in_clk) then
r_rnd_data <= f_lfsr(r_rnd_data, c_POLYNOM);
end if;
end process;
end Behavioral;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
package lfsr_packet is
constant DATA_WIDTH : integer := 16;
constant PLOY_LENGTH : integer := 3;
type t_POLYNOM is array (0 to PLOY_LENGTH - 1) of integer range 0 to DATA_WIDTH - 1;
constant c_POLYNOM : t_POLYNOM := (13, 12, 10);
function f_lfsr(data : std_logic_vector(DATA_WIDTH - 1 downto 0); POLYNOM : t_POLYNOM ) return std_logic_vector;
end lfsr_packet;
package body lfsr_packet is
function f_lfsr(data : std_logic_vector(DATA_WIDTH - 1 downto 0); POLYNOM : t_POLYNOM ) return std_logic_vector is
variable v_data : std_logic_vector(DATA_WIDTH - 1 downto 0);
variable v_zero : std_logic;
begin
v_data := data;
v_zero := v_data(0);
v_data(DATA_WIDTH - 2 downto 0) := v_data(DATA_WIDTH - 1 downto 1);
v_data(DATA_WIDTH - 1) := v_zero;
for n_j in 0 to PLOY_LENGTH - 1 loop
v_data(POLYNOM(n_j)) := v_data(POLYNOM(n_j)) xor v_zero;
end loop;
return v_data;
end f_lfsr;
end package body;