Conversion de modulo altera a xlinx

Dudas, cuestiones, sugerencias y peticiones en general sobre el proyecto / Questions and requests about the project
Avatar de Usuario
neuro_999
Mensajes: 692
Registrado: 06 Oct 2015, 10:14

Conversion de modulo altera a xlinx

Mensaje por neuro_999 » 21 Dic 2017, 13:30

Buenos días.

Estaba mirando algun core arcade que hay para el nuevo Mister, y todos ellos utilizan como modulo de ram la siguiente descripcion de altera que no se como convertir a xlinx.

Código: Seleccionar todo

LIBRARY ieee;
USE ieee.std_logic_1164.all;

LIBRARY altera_mf;
USE altera_mf.altera_mf_components.all;

entity dpram is
	generic (
		 addr_width_g : integer := 8;
		 data_width_g : integer := 8
	); 
	PORT
	(
		address_a	: IN STD_LOGIC_VECTOR (addr_width_g-1 DOWNTO 0);
		address_b	: IN STD_LOGIC_VECTOR (addr_width_g-1 DOWNTO 0);
		clock_a		: IN STD_LOGIC  := '1';
		clock_b		: IN STD_LOGIC ;
		data_a		: IN STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0);
		data_b		: IN STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0) := (others => '0');
		enable_a		: IN STD_LOGIC  := '1';
		enable_b		: IN STD_LOGIC  := '1';
		wren_a		: IN STD_LOGIC  := '0';
		wren_b		: IN STD_LOGIC  := '0';
		q_a			: OUT STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0);
		q_b			: OUT STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0)
	);
END dpram;


ARCHITECTURE SYN OF dpram IS
BEGIN
	altsyncram_component : altsyncram
	GENERIC MAP (
		address_reg_b => "CLOCK1",
		clock_enable_input_a => "NORMAL",
		clock_enable_input_b => "NORMAL",
		clock_enable_output_a => "BYPASS",
		clock_enable_output_b => "BYPASS",
		indata_reg_b => "CLOCK1",
		intended_device_family => "Cyclone V",
		lpm_type => "altsyncram",
		numwords_a => 2**addr_width_g,
		numwords_b => 2**addr_width_g,
		operation_mode => "BIDIR_DUAL_PORT",
		outdata_aclr_a => "NONE",
		outdata_aclr_b => "NONE",
		outdata_reg_a => "UNREGISTERED",
		outdata_reg_b => "UNREGISTERED",
		power_up_uninitialized => "FALSE",
		read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ",
		read_during_write_mode_port_b => "NEW_DATA_NO_NBE_READ",
		widthad_a => addr_width_g,
		widthad_b => addr_width_g,
		width_a => data_width_g,
		width_b => data_width_g,
		width_byteena_a => 1,
		width_byteena_b => 1,
		wrcontrol_wraddress_reg_b => "CLOCK1"
	)
	PORT MAP (
		address_a => address_a,
		address_b => address_b,
		clock0 => clock_a,
		clock1 => clock_b,
		clocken0 => enable_a,
		clocken1 => enable_b,
		data_a => data_a,
		data_b => data_b,
		wren_a => wren_a,
		wren_b => wren_b,
		q_a => q_a,
		q_b => q_b
	);

END SYN;
¿Alguien me podría decir como convertirlo a Xilinx?, asi puedo intentar probar a ver si consigo pasar alguno.

Muchas Gracias.

azesmbog
Mensajes: 319
Registrado: 17 Feb 2016, 23:07

Re: Conversion de modulo altera a xlinx

Mensaje por azesmbog » 21 Dic 2017, 18:28

ну это обычная двух портовая память.
Создать такую же в Tools -> Core Generator _> Memiry Elements -> Block Memory Generator
p.s. Это проект Sorgelig ?

Avatar de Usuario
neuro_999
Mensajes: 692
Registrado: 06 Oct 2015, 10:14

Re: Conversion de modulo altera a xlinx

Mensaje por neuro_999 » 21 Dic 2017, 23:22

Yes, some cores that ported to mister.
I wanna try some if then than uses a pacman board with some changes.

I will try to generate the memory with that util.

Thanx.

azesmbog
Mensajes: 319
Registrado: 17 Feb 2016, 23:07

Re: Conversion de modulo altera a xlinx

Mensaje por azesmbog » 21 Dic 2017, 23:41

Как раз занимался сегодня созданием внутренней памяти, правда одно портовой
https://www.xilinx.com/support/document ... em-gen.pdf
Сигнал "WEA" довольно интересный :)
Pacman который развернутый на 90° или какие то модификации?

Avatar de Usuario
neuro_999
Mensajes: 692
Registrado: 06 Oct 2015, 10:14

Re: Conversion de modulo altera a xlinx

Mensaje por neuro_999 » 21 Dic 2017, 23:46

Some games runing in pacman board like 40th thieves than dont work in the pacman core that ported Quest to the zx-uno.
And btw learn some more of fpga. :)

Avatar de Usuario
jepalza
Mensajes: 613
Registrado: 02 Oct 2015, 18:52

Re: Conversion de modulo altera a xlinx

Mensaje por jepalza » 23 Dic 2017, 07:45

Eso que ves de altera, es una "TRUE DUAL PORT RAM" en XILINX.
Como te ha dicho azesmbog debes crear un nuevo "block memory generator", y como opciones, eliges "true dual port ram", en "write width" pones 8 (el ancho del bus de datos) y en "write depth" pones 256 en este caso, que son 256 bytes de almacén, que corresponde a los 8 bits de ancho del bus de direcciones.
Ademas, debes habilitar la opción "USE ENA_A" y la "ENA_B" tambien, y listo, le das a generar.
Ahora, para llamarla, usas esto (para VHDL, lógicamente, que es tu módulo):

Código: Seleccionar todo

      addra => address_a,
      addrb => address_b,
      clka => clock_a,
      clkb => clock_b,
      ena => enable_a,
      enb => enable_b,
      dina => data_a,
      dinb => data_b,
      wea(0) => wren_a,
      web(0) => wren_b,
      douta => q_a,
      doutb => q_b

Avatar de Usuario
neuro_999
Mensajes: 692
Registrado: 06 Oct 2015, 10:14

Re: RE: Re: Conversion de modulo altera a xlinx

Mensaje por neuro_999 » 23 Dic 2017, 09:52

jepalza escribió:Eso que ves de altera, es una "TRUE DUAL PORT RAM" en XILINX.
Como te ha dicho azesmbog debes crear un nuevo "block memory generator", y como opciones, eliges "true dual port ram", en "write width" pones 8 (el ancho del bus de datos) y en "write depth" pones 256 en este caso, que son 256 bytes de almacén, que corresponde a los 8 bits de ancho del bus de direcciones.
Ademas, debes habilitar la opción "USE ENA_A" y la "ENA_B" tambien, y listo, le das a generar.
Ahora, para llamarla, usas esto (para VHDL, lógicamente, que es tu módulo):

Código: Seleccionar todo

      addra => address_a,
      addrb => address_b,
      clka => clock_a,
      clkb => clock_b,
      ena => enable_a,
      enb => enable_b,
      dina => data_a,
      dinb => data_b,
      wea(0) => wren_a,
      web(0) => wren_b,
      douta => q_a,
      doutb => q_b
Gracias, ya lo hice pero no cabia en la fpga. :) supongo que habra que adaptar los cambios que ha hecho para que funcionen esos clones en el core de quest sin usar los bloques de memoria esos. Pero para mi ya es demasiado, no doy pa tanto. :)

Enviado desde mi ONE A2003 mediante Tapatalk

Avatar de Usuario
Kyp
Mensajes: 240
Registrado: 18 May 2016, 20:16

Re: Conversion de modulo altera a xlinx

Mensaje por Kyp » 24 Dic 2017, 13:15

Como es una RAM pequeña prueba a usar el otro tipo de memoria a ver si hay sitio. No recuerdo como la llama, ¿distribuida quizás?

Aunque igual es mejor usar la bram para cuando es de doble puerto y cambiar algún otro bloque de RAM normal de bram a distribuida.

Avatar de Usuario
neuro_999
Mensajes: 692
Registrado: 06 Oct 2015, 10:14

Re: Conversion de modulo altera a xlinx

Mensaje por neuro_999 » 27 Dic 2017, 17:35

De momento he conseguido hacer alguna ñapa para portar un par de cores, sin usar de momento la memoria de doble canal. Ahora me estoy pegando con uno que utiliza dos rams... ;) cuando tenga algo mas claro ya os preguntare a ver. :)

Avatar de Usuario
Kyp
Mensajes: 240
Registrado: 18 May 2016, 20:16

Re: Conversion de modulo altera a xlinx

Mensaje por Kyp » 27 Dic 2017, 17:46

En el core de Spectrum tanto mcleod como yo usamos una RAM de doble puerto para la memoria compartida con la ULA. Mucho más fácil y limpio que el mecanismo de contienda. Aunque luego se simula la contienda para que sea un Spectrum más fiel :silbando:

En aquella época una RAM de doble puerto no se si existiría siquiera como tal. Yo empecé a oír hablar de ellas mucho más tarde, con las primeras tarjetas de vídeo y eran carísimas.

El Inves+ hace una implementación muy sencilla de RAM de doble puerto para evitar la contienda, por cierto. Y supongo que el Pentagon también hará algo parecido.

Responder