Xilinx coregen -> VHDL
Radó Zoltán
zrado at leasingtechnology.com
Sat Apr 28 11:34:46 CEST 2001
Haliho mindenkinek!
Lenne egy problemam, amit nem tudok megoldani:
Bocsanat mindenkitol a hosszu level miatt....
Core generatorral generalt memoriablockot szeretnek hasznalni a VHDL kodban.
A VHO filebol atmasoltam a componens definiciot es a hozzarendeleseket. A
hozzarendeleseket modositottam a szuksegleteknek megfeleloen. A core
SpartanXL-be Basic Element, Registered DualPort RAM. 16bit szeles 16 mely DP
RAM.... A problema az, hogy a szintezis soran folyamatosan olyan warning-ot
kapok, hogy:
Warning: Cannot link cell 'OUTFIFO/dpramo' to its reference design 'dp16x16'. (FPGA-LINK-2)
Mit kell meg beallitani? Vagy mi nem jo?
Segitsegeket elore is koszi...
Udv: Zoli
A vhdl modul amiben hasznalnam:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
entity OUTFIFO is
port (
RESET: in STD_LOGIC;
RD: in STD_LOGIC;
WR: in STD_LOGIC;
D: in STD_LOGIC_VECTOR (15 downto 0);
Q: out STD_LOGIC_VECTOR (7 downto 0)
);
end OUTFIFO;
architecture OUTFIFO_arch of OUTFIFO is
SIGNAL RA: integer range 0 to 31;
SIGNAL WA: integer range 0 to 31;
SIGNAL EMPTY: std_logic;
SIGNAL FULL: std_logic;
SIGNAL STDWA: std_logic_vector(4 downto 0);
SIGNAL STDRA: std_logic_vector(4 downto 0);
SIGNAL kamu: std_logic_vector(15 downto 0);
SIGNAL tmpq: std_logic_vector(15 downto 0);
SIGNAL one: std_logic ;
component dp16x16
port (
a: IN std_logic_VECTOR(3 downto 0);
dpra: IN std_logic_VECTOR(3 downto 0);
d: IN std_logic_VECTOR(15 downto 0);
we: IN std_logic;
c: IN std_logic;
ce: IN std_logic;
spo: OUT std_logic_VECTOR(15 downto 0);
dpo: OUT std_logic_VECTOR(15 downto 0));
end component;
begin
dpramo : dp16x16
port map (
a => stdwa(4 downto 1),
dpra => stdra(4 downto 1),
d => d,
we => one,
c => wr,
ce => one,
spo => kamu,
dpo => tmpq(15 downto 0));
sampmux: process(tmpq,stdra)
begin
if stdra(0) = '1' then
q<= tmpq(7 downto 0);
else
q<= tmpq(15 downto 8);
end if;
end process;
wrcount: process(wr,reset)
variable wcnt: integer range 0 to 31;
variable tmpSTDWA : std_logic_vector(4 downto 0);
begin
one <= '1';
if RESET ='1' then
wcnt:= 0;
STDWA <= "00000";
WA <= 0;
elsif WR'event and WR ='0' then
if FULL = '0' then
wcnt:= wcnt +2;
WA <= wcnt;
STDWA <= conv_std_logic_vector(wcnt,5);
end if;
end if;
end process;
rdcount: process(rd,reset)
variable rcnt: integer range 0 to 31;
begin
if RESET = '1' then
rcnt:= 0;
STDRA <= "00000";
RA <= 0;
elsif RD'event and RD = '0' then
if EMPTY = '0' then
rcnt:= rcnt +1;
RA <= rcnt;
STDRA <= conv_std_logic_vector(rcnt,5);
end if;
end if;
end process;
process(WA, RA)
variable sub: integer range 0 to 31;
begin
SUB:= WA - RA;
if SUB = 0 then
EMPTY <= '1';
else
EMPTY <= '0';
end if;
if SUB = 31 or SUB = 30 then
FULL <= '1';
else
FULL <= '0';
end if;
end process;
end OUTFIFO_arch;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.centralnet.hu/pipermail/elektro/attachments/20010428/1fe6f371/attachment.html
More information about the Elektro
mailing list