NodeEEBench with Digilent BASYS3 FPGA boardLookup table ImplementationJörg Vollrath, University of Applied Science Kempten, Germany, Joerg.vollrath@hs-kempten.deMarch, 2024 OverviewIntroductionImplementation as VHDL ProgramTesting |

-- Memory
COMPONENT One_port_ram
generic(
ADDR_WIDTH: integer := 16; -- 64k
DATA_WIDTH: integer := 16
);
port (
clk: in std_logic;
we: in std_logic;
addr: in std_logic_vector(ADDR_WIDTH-1 downto 0);
din: in std_logic_vector(DATA_WIDTH-1 downto 0);
dout: out std_logic_vector(DATA_WIDTH-1 downto 0)
);
end COMPONENT;
2 lookup tables 4k (ADDR_WIDTH => 12) x 16 each are implemented.
myLut1: One_port_ram
generic map ( ADDR_WIDTH => 12 )
port map (
clk => CLK,
we => we01,
addr => addr01,
din => din01,
dout => dout01
);
-- address multiplexer write read
addr01b <= mywave(15 downto 4); -- from AWG
with rMem(13) select
addr01 <= addr01a when '0', -- uart writing
addr01b when '1', -- lut reading
addrGen when others; -- switches
myLut2: One_port_ram
generic map ( ADDR_WIDTH => 12 )
port map (
clk => CLK,
we => we02,
addr => addr02,
din => din02,
dout => dout02
);
with rMem(13) select -- lookup table data or not
mywaveX <= mywave when '0',
dout01 when '1',
"0000000000000000" when others;
JB <= mywaveX(7 downto 0);
JC <= mywaveX(15 downto 8);
| md | 0 | 1 | 2 | 3 |
| lookup | normal i*16 | reverse 8 *1024 - 1 - i * 16 |
fixed | steps Math.trunc(i / 128) * 128 * 16 |
| Value | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384 | 32768 |
| Voltage | 0.045 | 0.060 | 0.09 | 0.145 | 0.25 | 0.465 | 0.87 | 1.655 |