O
omara007
Guest
Hi folks
Estoy tratando de mapa de mi memoria codificada en VHDL Xilinx distribuido RAM ..Estoy usando Xilinx Spartan-3A chip DSP (XC3SD1800A-4fg676) y Xilinx ISE 11.3.
Estoy enfrentando 2 problema:
1.Síntesis XST se está utilizando mucho tiempo ..aproximadamente 5,5 horas.
2.La utilización de chips de memoria de sólo el 47% es de 1,8 millones de chip equivalente puerta.
La memoria RAM se destina a tener 8 sincrónica escribir puertos y 8 puertos de lectura asincrónica.
El código se muestra aquí:
Código:IEEE biblioteca;
ieee.std_logic_1164.all uso;
ieee.numeric_std.all uso;- Declaración de la entidad ---------------------------------------------- ----------
rregfile_dp entidad es
puerto (
CLK: in std_logic;
rst_n: in std_logic;
- Escribir Puerto -------------------------------------
- Port-0
wr_en0: in std_logic; - Escriba Habilitar
addrs0_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data0_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos
- Port-1
wr_en1: in std_logic; - Escriba Habilitar
addrs1_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data1_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos
- Port-2
wr_en2: in std_logic; - Escriba Habilitar
addrs2_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data2_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos
- Port-3
wr_en3: in std_logic; - Escriba Habilitar
addrs3_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data3_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos
- Port-4
wr_en4: in std_logic; - Escriba Habilitar
addrs4_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data4_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos
- Port-5
wr_en5: in std_logic; - Escriba Habilitar
addrs5_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data5_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos
- Port-6
wr_en6: in std_logic; - Escriba Habilitar
addrs6_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data6_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos
- Port-7
wr_en7: in std_logic; - Escriba Habilitar
addrs7_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data7_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos- Leer Puertos --------------------------------------
- Port-0
addrs0_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data0_rd: fuera firmado (rg_data_width-1 downto 0); - Leer datos
- Port-1
addrs1_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data1_rd: fuera firmado (rg_data_width-1 downto 0); - Leer datos
- Port-2
addrs2_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data2_rd: fuera firmado (rg_data_width-1 downto 0); - Leer datos
- Port-3
addrs3_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data3_rd: fuera firmado (rg_data_width-1 downto 0); - Leer datos
- Port-4
addrs4_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data4_rd: fuera firmado (rg_data_width-1 downto 0); - Leer datos
- Port-5
addrs5_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data5_rd: fuera firmado (rg_data_width-1 downto 0); - Leer datos
- Port-6
addrs6_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data6_rd: fuera firmado (rg_data_width-1 downto 0); - Leer datos
- Port-7
addrs7_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data7_rd: fuera firmado (rg_data_width-1 downto 0)); - Leer datosrregfile_dp entidad final;
- Fin de la Declaración de la entidad -------------------------------------------- ------ Arquitectura Declaración ---------------------------------------------- ----
RTL arquitectura de rregfile_dp esregfile_type tipo es array (natural rango <>) de la firma (rg_data_width-1 downto 0);
raccum_reg señal: regfile_type (0 a (2 ** rg_addrs_width) -1);empezar - RTL arquitectura-------------------------------------------------- --------
- Proceso de escritura
-------------------------------------------------- --------
proc_wraccum: process (clk, rst_n) es
empezar - proceso proc_wraccum
si rst_n = '0 'then - reset asíncrono (bajo activa)
raccum_reg <= (others => (others => '0 '));
clk'event elsif y = '1 'y luego - flanco de reloj aumento de
si wr_en0 = '1 ', entonces
raccum_reg (to_integer (addrs0_wr)) <= data0_wr;
END IF;si wr_en1 = '1 ', entonces
raccum_reg (to_integer (addrs1_wr)) <= data1_wr;
END IF;si wr_en2 = '1 ', entonces
raccum_reg (to_integer (addrs2_wr)) <= data2_wr;
END IF;si wr_en3 = '1 ', entonces
raccum_reg (to_integer (addrs3_wr)) <= data3_wr;
END IF;si wr_en4 = '1 ', entonces
raccum_reg (to_integer (addrs4_wr)) <= data4_wr;
END IF;si wr_en5 = '1 ', entonces
raccum_reg (to_integer (addrs5_wr)) <= data5_wr;
END IF;si wr_en6 = '1 ', entonces
raccum_reg (to_integer (addrs6_wr)) <= data6_wr;
END IF;si wr_en7 = '1 ', entonces
raccum_reg (to_integer (addrs7_wr)) <= data7_wr;
END IF;
END IF;
proc_wraccum proceso final;
-------------------------------------------------- ---------------------------------------------------------- --------
- Leer Proceso
-------------------------------------------------- --------
data0_rd <= raccum_reg (to_integer (addrs0_rd));
data1_rd <= raccum_reg (to_integer (addrs1_rd));
data2_rd <= raccum_reg (to_integer (addrs2_rd));
data3_rd <= raccum_reg (to_integer (addrs3_rd));
data4_rd <= raccum_reg (to_integer (addrs4_rd));
data5_rd <= raccum_reg (to_integer (addrs5_rd));
data6_rd <= raccum_reg (to_integer (addrs6_rd));
data7_rd <= raccum_reg (to_integer (addrs7_rd));
-------------------------------------------------- --------RTL arquitectura de vanguardia;
- Fin de la Arquitectura Declaración -------------------------------------------
Estoy tratando de mapa de mi memoria codificada en VHDL Xilinx distribuido RAM ..Estoy usando Xilinx Spartan-3A chip DSP (XC3SD1800A-4fg676) y Xilinx ISE 11.3.
Estoy enfrentando 2 problema:
1.Síntesis XST se está utilizando mucho tiempo ..aproximadamente 5,5 horas.
2.La utilización de chips de memoria de sólo el 47% es de 1,8 millones de chip equivalente puerta.
La memoria RAM se destina a tener 8 sincrónica escribir puertos y 8 puertos de lectura asincrónica.
El código se muestra aquí:
Código:IEEE biblioteca;
ieee.std_logic_1164.all uso;
ieee.numeric_std.all uso;- Declaración de la entidad ---------------------------------------------- ----------
rregfile_dp entidad es
puerto (
CLK: in std_logic;
rst_n: in std_logic;
- Escribir Puerto -------------------------------------
- Port-0
wr_en0: in std_logic; - Escriba Habilitar
addrs0_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data0_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos
- Port-1
wr_en1: in std_logic; - Escriba Habilitar
addrs1_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data1_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos
- Port-2
wr_en2: in std_logic; - Escriba Habilitar
addrs2_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data2_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos
- Port-3
wr_en3: in std_logic; - Escriba Habilitar
addrs3_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data3_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos
- Port-4
wr_en4: in std_logic; - Escriba Habilitar
addrs4_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data4_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos
- Port-5
wr_en5: in std_logic; - Escriba Habilitar
addrs5_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data5_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos
- Port-6
wr_en6: in std_logic; - Escriba Habilitar
addrs6_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data6_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos
- Port-7
wr_en7: in std_logic; - Escriba Habilitar
addrs7_wr: en el signo (rg_addrs_width-1 downto 0); - Escriba las direcciones
data7_wr: en la firma (rg_data_width-1 downto 0); - Escribir datos- Leer Puertos --------------------------------------
- Port-0
addrs0_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data0_rd: fuera firmado (rg_data_width-1 downto 0); - Leer datos
- Port-1
addrs1_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data1_rd: fuera firmado (rg_data_width-1 downto 0); - Leer datos
- Port-2
addrs2_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data2_rd: fuera firmado (rg_data_width-1 downto 0); - Leer datos
- Port-3
addrs3_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data3_rd: fuera firmado (rg_data_width-1 downto 0); - Leer datos
- Port-4
addrs4_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data4_rd: fuera firmado (rg_data_width-1 downto 0); - Leer datos
- Port-5
addrs5_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data5_rd: fuera firmado (rg_data_width-1 downto 0); - Leer datos
- Port-6
addrs6_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data6_rd: fuera firmado (rg_data_width-1 downto 0); - Leer datos
- Port-7
addrs7_rd: en el signo (rg_addrs_width-1 downto 0); - Leer Dirección
data7_rd: fuera firmado (rg_data_width-1 downto 0)); - Leer datosrregfile_dp entidad final;
- Fin de la Declaración de la entidad -------------------------------------------- ------ Arquitectura Declaración ---------------------------------------------- ----
RTL arquitectura de rregfile_dp esregfile_type tipo es array (natural rango <>) de la firma (rg_data_width-1 downto 0);
raccum_reg señal: regfile_type (0 a (2 ** rg_addrs_width) -1);empezar - RTL arquitectura-------------------------------------------------- --------
- Proceso de escritura
-------------------------------------------------- --------
proc_wraccum: process (clk, rst_n) es
empezar - proceso proc_wraccum
si rst_n = '0 'then - reset asíncrono (bajo activa)
raccum_reg <= (others => (others => '0 '));
clk'event elsif y = '1 'y luego - flanco de reloj aumento de
si wr_en0 = '1 ', entonces
raccum_reg (to_integer (addrs0_wr)) <= data0_wr;
END IF;si wr_en1 = '1 ', entonces
raccum_reg (to_integer (addrs1_wr)) <= data1_wr;
END IF;si wr_en2 = '1 ', entonces
raccum_reg (to_integer (addrs2_wr)) <= data2_wr;
END IF;si wr_en3 = '1 ', entonces
raccum_reg (to_integer (addrs3_wr)) <= data3_wr;
END IF;si wr_en4 = '1 ', entonces
raccum_reg (to_integer (addrs4_wr)) <= data4_wr;
END IF;si wr_en5 = '1 ', entonces
raccum_reg (to_integer (addrs5_wr)) <= data5_wr;
END IF;si wr_en6 = '1 ', entonces
raccum_reg (to_integer (addrs6_wr)) <= data6_wr;
END IF;si wr_en7 = '1 ', entonces
raccum_reg (to_integer (addrs7_wr)) <= data7_wr;
END IF;
END IF;
proc_wraccum proceso final;
-------------------------------------------------- ---------------------------------------------------------- --------
- Leer Proceso
-------------------------------------------------- --------
data0_rd <= raccum_reg (to_integer (addrs0_rd));
data1_rd <= raccum_reg (to_integer (addrs1_rd));
data2_rd <= raccum_reg (to_integer (addrs2_rd));
data3_rd <= raccum_reg (to_integer (addrs3_rd));
data4_rd <= raccum_reg (to_integer (addrs4_rd));
data5_rd <= raccum_reg (to_integer (addrs5_rd));
data6_rd <= raccum_reg (to_integer (addrs6_rd));
data7_rd <= raccum_reg (to_integer (addrs7_rd));
-------------------------------------------------- --------RTL arquitectura de vanguardia;
- Fin de la Arquitectura Declaración -------------------------------------------