Page 1 of 1

rom look_up_table

PostPosted: 01 Oct 2013, 14:39
by giuseppe01051984
Devo creare una rom look-up-table(14 bit in ingresso e 12 in uscita ) con valori del seno che provvederò a calcolare con matlab.Si potrebbe avere del codice per scriverla in vhdl?????

Re: rom look_up_table

PostPosted: 04 Oct 2013, 14:02
by deluca
salve giuseppe,
in che formato d'uscita vuoi i dati?

Hex o Mif ? li devi caricare su una lpm_rom di Altera o vuoi realizzare una rom vhdl indipendent.

Devo creare una rom look-up-table(14 bit in ingresso e 12 in uscita ) con valori del seno che provvederò a calcolare con matlab.
Si potrebbe avere del codice per scriverla in vhdl?????


Quando dici 14bit ingresso e 12uscita cosa intendi?

di solito per Rom Sin si parla di address(locazioni per stabilire il numero di campioni SIN/COS) e Dati(risoluzione d'uscita -> DAC)

dimmi....

Re: rom look_up_table

PostPosted: 04 Oct 2013, 14:15
by Leonardo
Ciao Giuseppe,
Puoi:

- utilizzare il MegaWizard di Quartus per istanziare una ROM http://www.cs.ucsb.edu/~betamaz/teaching/cs154s12/labs/ROM_tutorial.pdf

- scriverla tramite codice VHDL partendo magari dal template Single-Port ROM che trovi in Edit / Insert Template / VHDL / Full Designs / RAMs and ROMs che ti riporto:

Code: Select all
-- Quartus II VHDL Template
-- Single-Port ROM

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity single_port_rom is

   generic
   (
      DATA_WIDTH : natural := 12;
      ADDR_WIDTH : natural := 14
   );

   port
   (
      clk      : in std_logic;
      addr   : in natural range 0 to 2**ADDR_WIDTH - 1;
      q      : out std_logic_vector((DATA_WIDTH -1) downto 0)
   );

end entity;

architecture rtl of single_port_rom is

   -- Build a 2-D array type for the RoM
   subtype word_t is std_logic_vector((DATA_WIDTH-1) downto 0);
   type memory_t is array(2**ADDR_WIDTH-1 downto 0) of word_t;

   function init_rom
      return memory_t is
      variable tmp : memory_t := (others => (others => '0'));
   begin
      for addr_pos in 0 to 2**ADDR_WIDTH - 1 loop
         -- Initialize each address with the address itself
         tmp(addr_pos) := std_logic_vector(to_unsigned(addr_pos, DATA_WIDTH));
      end loop;
      return tmp;
   end init_rom;   

   -- Declare the ROM signal and specify a default value.   Quartus II
   -- will create a memory initialization file (.mif) based on the
   -- default value.
   signal rom : memory_t := init_rom;

begin

   process(clk)
   begin
   if(rising_edge(clk)) then
      q <= rom(addr);
   end if;
   end process;

end rtl;

Resta però da chiarire come ha detto Giovanni cosa intendi per bit di ingresso e di uscita e da personalizzare il codice per caricare i dati da un file.

Ciao

Re: rom look_up_table

PostPosted: 04 Oct 2013, 18:01
by giuseppe01051984
Sto cercando di realizzare lo schema di fig 6 in cui la look-up-table viene descritta in fig 7.

Re: rom look_up_table

PostPosted: 09 Oct 2013, 14:55
by giuseppe01051984
Salve,
ho scritto un programma matlab che mi calcola 2^14 (valori) del seno in decimale ognuno codificato a 14 bit.
Ora vorrei convertirli in binario, riportarmeli in quartus ed associarli al mio ingresso lineare in uscita dall'accumulatore.
Come posso fare????Se non riesco a spiegarmi bene si può avere un tutorial che mi chiarisca le idee????

Re: rom look_up_table

PostPosted: 09 Oct 2013, 18:31
by giuseppe01051984
Ho generato un file .mif con matlab che contiene i valori binari che dovrei caricare nella ROM.
Provo ad aprirlo con quartus e mi da errore!!!in cosa sbaglio???
Vi allego il file...

Re: rom look_up_table

PostPosted: 09 Oct 2013, 18:57
by deluca
Non può funzionare poichè la struttura del file non è compatibile al formato mif.

La struttura del file mif è questa:

Code: Select all
WIDTH=8;
DEPTH=8;

ADDRESS_RADIX=UNS;
DATA_RADIX=UNS;

CONTENT BEGIN
   0  :   23;
   1  :   34;
   2  :   0;
   3  :   255;
   4  :   0;
   5  :   123;
   6  :   255;
   7  :   0;
END;

a sinistra ci stanno gli indirizzi, a destra il valore ...
se il file contiene valori binari cambia la radice:
Code: Select all
WIDTH=8;
DEPTH=8;

ADDRESS_RADIX=HEX;
DATA_RADIX=BIN;

CONTENT BEGIN
   0  :   00010111;
   1  :   00100010;
   2  :   00000000;
   3  :   11111111;
   [4..5] :  00000000;
   6  :   11111111;
   7  :   00000000;
END;

come vedi basta cambiare la radice di Address e di Data il gioco è fatto.
Ovviamente devi formattare l'uscita dei dati matilab secondo la struttura che ti ho mostrato.

Re: rom look_up_table

PostPosted: 09 Oct 2013, 23:17
by giuseppe01051984
La ringrazio.....scusi se non riesco a farmi capire ma per me a volte e difficile entrare bene nell'argomento!!!!

Re: rom look_up_table

PostPosted: 10 Oct 2013, 11:01
by deluca
no problem.... alla prox

Re: rom look_up_table

PostPosted: 10 Oct 2013, 14:16
by giuseppe01051984
Salve .
Eccomi di nuovo qua,ho scritto la rom in allegato con valori del seno che ricavo da matlab.
Il problema che la simulazione si ferma al 10% e non va piu avanti(non da ne errori ne warning).
Cosa puo essere,spero di non dover cambiare simulatore

Re: rom look_up_table

PostPosted: 10 Oct 2013, 16:37
by deluca
hai provato con una lpm_rom?

immagino che il progetto deve essere realizzato in vhdl nativo, ma intanto è meglio indagare passo passo, così da assicurarti che il resto dell'hardware sia ok!