Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
15 years ago

LUT help!!!

I have wrote this code for implementing a neural network.What it does is to take some values(inputs) and some weights and computes the SUM(values*weigths).What i want to do is to check if the total sum(values*weights)< threshold and correct the weights in order to sum(values*weights)>=threshold.I think that i have to store the weights on a look up table and change the values in order to sum(values*weights)>=threshold.How i can do this?.My code is :

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE IEEE.STD_LOGIC_SIGNED.ALL;

ENTITY ANN IS

GENERIC ( m : INTEGER := 4; -- Number of inputs or weights

b : INTEGER := 8); --Number of bits per input or weight

PORT ( x1,x2,x3,x4: IN UNSIGNED(b-1 DOWNTO 0);

w : IN UNSIGNED(b-1 DOWNTO 0);

clk: IN STD_LOGIC;

y : buffer UNSIGNED(2*b-1 DOWNTO 0);

id : buffer bit);

END ANN;

ARCHITECTURE NEURAL OF ANN IS

TYPE weights IS ARRAY (1 TO m) OF UNSIGNED(b-1 DOWNTO 0);

TYPE inputs IS ARRAY (1 TO m) OF UNSIGNED(b-1 DOWNTO 0);

BEGIN

PROCESS(clk,w,x1,x2,x3,x4)

VARIABLE weight : weights;

VARIABLE input : inputs;

VARIABLE prod,acc : UNSIGNED(2*b-1 DOWNTO 0);

VARIABLE sub : UNSIGNED(2*b-1 DOWNTO 0);

BEGIN

IF (clk'EVENT AND CLK='1') THEN

weight:=w&weight(1 TO m-1);

END IF;

input(1):=x1;

input(2):=x2;

input(3):=x3;

input(4):=x4;

acc:=(OTHERS=>'0');

FOR j IN 1 TO m LOOP

prod:=input(j)*weight(j);

acc:=acc+prod;

END LOOP;

y<=acc;

END IF;

END PROCESS;

END NEURAL;

70 Replies