zhongfanyang
Newbie level 3
- Joined
- Aug 16, 2015
- Messages
- 3
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1
- Activity points
- 34
Hi, I have a project over the Nexys4 development board which is based on Artix100T. I have this wierd intermittent error : Block RAM randorm data corruption. BRAM clock runs at only 50MHz, timing analysis is fine. But data readback is not correct at times not even the data at the same address is read consecutively (it always gives the same error pattern as if data been tampered).I've check the VCCInt, VCCBRAM all is within normal range. I'm really struggling to find the root cause of this problem, and it has been driving me crazy for days!! Can anyone give me any suggestion,Thanks?
Following is the snippet of the code for the BRAM. It is as simple as it is.
For the timing report: setup/hold time slack for all the paths leading in/out of BRAM exceeds 10ns /0.38ns. I've exhausted every possibilities, but the problem persists. What could I'v missed! :sad:
ZFyoung
Following is the snippet of the code for the BRAM. It is as simple as it is.
Code:
entity BlockRAM_SDP is
generic(MemDepth : integer := 2048;
AddrBusWidth:integer:= 11;
DataBusWidth: integer := 16);
Port (
Clk : in STD_LOGIC;
CE: in STD_LOGIC;
Read_Addr : in STD_LOGIC_VECTOR ((AddrBusWidth - 1) downto 0);
Read_Data : out STD_LOGIC_VECTOR ((DataBusWidth - 1) downto 0);
Write_Addr : in STD_LOGIC_VECTOR ((AddrBusWidth - 1) downto 0);
Write_Data : in STD_LOGIC_VECTOR ((DataBusWidth - 1) downto 0);
Write_En : in STD_LOGIC
);
end BlockRAM_SDP;
--read first model
architecture Behavioral of BlockRAM_SDP is
TYPE BRAMDataVector is array (natural range <>) of STD_LOGIC_VECTOR ((DataBusWidth - 1) downto 0);
signal Memory : BRAMDataVector(0 to (MemDepth - 1)) := (others => (others=>'0'));
begin
Process(Clk)
begin
if(Clk'event and Clk = '1') then
if(CE = '1') then
Read_Data <= Memory(conv_integer(Read_Addr));
if(Write_En = '1') then
Memory(conv_integer(Write_Addr)) <= Write_Data;
end if;
end if;
end if;
end process;
end Behavioral;
For the timing report: setup/hold time slack for all the paths leading in/out of BRAM exceeds 10ns /0.38ns. I've exhausted every possibilities, but the problem persists. What could I'v missed! :sad:
ZFyoung