Перейти к содержанию
    

Active-HDL моделирование XILINX RAM

Всем привет!

Active-HDL 10.3 64bit.

библиотека "Active-HDL_10.3.3558.6081_x64_for_Xilinx_VIVADO_2016.4_VHDL_Libraries"

Сделана память с использованием BRAM_SDP_MACRO.

Моделирование записи и чтения проходит нормально!

Но ! При попытке инициализировать память из файла *.coe происходит ошибка !

# ELAB2: Create instances ...
# RUNTIME: Fatal Error: RUNTIME_0047 RAMB18E1.vhd (1115): Index 2 out of range (1 to 1).
# KERNEL: Time: 0 ps,  Iteration: 0,  TOP instance.
# ELAB2: Last instance before error: /xil_bram_1k_16/BRAM_SDP_MACRO_inst/sdp_bl/ramb18_dp_bl/ram18_bl/TDP/RAMB18E1_TDP_inst
# KERNEL: Error: E8005 : Kernel process initialization failed.
# VSIM: Error: Simulation initialization failed.

Где порылась собака?!

Кто подскажет ?

Memory

Spoiler

----------------------------------------------------------------------------------
-- Company: 
-- Engineer: 
-- 
-- Create Date: 27.11.2020 11:03:06
-- Design Name: 
-- Module Name: xil_bram_8k_4 - Behavioral
-- Project Name: 
-- Target Devices: 
-- Tool Versions: 
-- Description: 
-- 
-- Dependencies: 
-- 
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
-- 
----------------------------------------------------------------------------------
Library UNISIM;
use UNISIM.vcomponents.all;

Library UNIMACRO;
use UNIMACRO.vcomponents.all;

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity xil_bram_1k_16 is
	port (
		clk			: in std_logic;
		di			: in std_logic_vector(15 downto 0);
		wen			: in std_logic_vector(1 downto 0);
		wraddr 		: in std_logic_vector(9 downto 0);
		rdaddr 		: in std_logic_vector(9 downto 0);
		do			: out std_logic_vector(15 downto 0)
		);
end xil_bram_1k_16;

architecture Behavioral of xil_bram_1k_16 is
	
begin
	
	--BRAM_SDP_MACRO : In order to incorporate this function into the design,
	--     VHDL      : the following instance declaration needs to be placed
	--   instance    : in the architecture body of the design code.  The
	--  declaration  : (BRAM_SDP_MACRO_inst) and/or the port declarations
	--     code      : after the "=>" assignment maybe changed to properly
	--               : reference and connect this function to the design.
	--               : All inputs and outputs must be connected.
	
	--    Library    : In addition to adding the instance declaration, a use
	--  declaration  : statement for the UNISIM.vcomponents library needs to be
	--      for      : added before the entity declaration.  This library
	--    Xilinx     : contains the component declarations for all Xilinx
	--   primitives  : primitives and points to the models that will be used
	--               : for simulation.
	
	--  Copy the following four statements and paste them before the
	--  Entity declaration, unless they already exist.
	
	
	--  <-----Cut code below this line and paste into the architecture body---->
	
	-- BRAM_SDP_MACRO: Simple Dual Port RAM
	--                 Artix-7
	-- Xilinx HDL Language Template, version 2018.2
	
	-- Note -  This Unimacro model assumes the port directions to be "downto". 
	--         Simulation of this model with "to" in the port directions could lead to erroneous results.
	
	-----------------------------------------------------------------------
	--  READ_WIDTH | BRAM_SIZE | READ Depth  | RDADDR Width |            --
	-- WRITE_WIDTH |           | WRITE Depth | WRADDR Width |  WE Width  --
	-- ============|===========|=============|==============|============--
	--    37-72    |  "36Kb"   |      512    |     9-bit    |    8-bit   --
	--    19-36    |  "36Kb"   |     1024    |    10-bit    |    4-bit   --
	--    19-36    |  "18Kb"   |      512    |     9-bit    |    4-bit   --
	--    10-18    |  "36Kb"   |     2048    |    11-bit    |    2-bit   --
	---------------+-----------+-------------+--------------+--------------
	--    10-18    |  "18Kb"   |     1024    |    10-bit    |    2-bit   --		1024x18
	---------------+-----------+-------------+--------------+--------------
	--     5-9     |  "36Kb"   |     4096    |    12-bit    |    1-bit   --
	--     5-9     |  "18Kb"   |     2048    |    11-bit    |    1-bit   --
	--     3-4     |  "36Kb"   |     8192    |    13-bit    |    1-bit   --
	--     3-4     |  "18Kb"   |     4096    |    12-bit    |    1-bit   --
	--       2     |  "36Kb"   |    16384    |    14-bit    |    1-bit   --
	--       2     |  "18Kb"   |     8192    |    13-bit    |    1-bit   --
	--       1     |  "36Kb"   |    32768    |    15-bit    |    1-bit   --
	--       1     |  "18Kb"   |    16384    |    14-bit    |    1-bit   --
	-----------------------------------------------------------------------
	
	
	BRAM_SDP_MACRO_inst : BRAM_SDP_MACRO
	generic map (
		-- Target BRAM, "18Kb" or "36Kb" 
		BRAM_SIZE				 => "18Kb",	  
		-- Target device: "VIRTEX5", "VIRTEX6", "7SERIES", "SPARTAN6" 
		DEVICE					 => "7SERIES",
		-- Valid values are 1-72 (37-72 only valid when BRAM_SIZE="36Kb")
		WRITE_WIDTH				 => 16,
		-- Valid values are 1-72 (37-72 only valid when BRAM_SIZE="36Kb")
		READ_WIDTH				 => 16,
		-- Optional output register (0 or 1)
		DO_REG					 => 1,
		-- Collision check enable "ALL", "WARNING_ONLY", "GENERATE_X_ONLY" or "NONE"       
		SIM_COLLISION_CHECK	 => "WARNING_ONLY",
		--  Set/Reset value for port output
		SRVAL					 => X"000000000000000000",
		-- Specify "READ_FIRST" for same clock or synchronous clocks
		-- Specify "WRITE_FIRST for asynchrononous clocks on ports
		WRITE_MODE				 => "READ_FIRST",
		-- Initial values on output port
		INIT_FILE				 => "blkmem.coe",
		INIT					 => X"000000000000000000"
		)
	port map (
		DO		 => DO,         -- Output read data port, width defined by READ_WIDTH parameter
		DI		 => DI,         -- Input write data port, width defined by WRITE_WIDTH parameter
		RDADDR	 => RDADDR,		-- Input read address, width defined by read port depth
		RDCLK	 => CLK,    	-- 1-bit input read clock
		RDEN	 => '1',    	-- 1-bit input read port enable
		REGCE	 => '1',	    -- 1-bit input read output register enable
		RST		 => '0',        -- 1-bit input reset 
		WE		 => wen,        -- Input write enable, width defined by write port depth
		WRADDR 	 => WRADDR, 	-- Input write address, width defined by write port depth
		WRCLK	 => CLK,	    -- 1-bit input write clock
		WREN	 => '1'	    	-- 1-bit input write port enable
		);
	-- End of BRAM_SDP_MACRO_inst instantiation
	
end Behavioral;

 

*.coe

Spoiler

;Sample memory initialization file for Single Port Block Memory
memory_initialization_radix=16;
memory_initialization_vector=
0000,
0001,
0002,
0003,
0004,
0005,
0006,
0007,
0008,
0009,
000A,
000B,
000C,
000D,
000E,
000F,
0010,
0011,
0012,
0013,
0014,
0015,
0016,
0017,
0018,
0019,
001A,
001B,
001C,
001D,
001E,
001F,
0020,
0021,
0022,
0023,
0024,
0025,
0026,
0027,
0028,
0029,
002A,
002B,
002C,
002D,
002E,
002F,
0030,
0031,
0032,
0033,
0034,
0035,
0036,
0037,
0038,
0039,
003A,
003B,
003C,
003D,
003E,
003F,
0040,
0041,
0042,
0043,
0044,
0045,
0046,
0047,
0048,
0049,
004A,
004B,
004C,
004D,
004E,
004F,
0050,
0051,
0052,
0053,
0054,
0055,
0056,
0057,
0058,
0059,
005A,
005B,
005C,
005D,
005E,
005F,
0060,
0061,
0062,
0063,
0064,
0065,
0066,
0067,
0068,
0069,
006A,
006B,
006C,
006D,
006E,
006F,
0070,
0071,
0072,
0073,
0074,
0075,
0076,
0077,
0078,
0079,
007A,
007B,
007C,
007D,
007E,
007F,
0080,
0081,
0082,
0083,
0084,
0085,
0086,
0087,
0088,
0089,
008A,
008B,
008C,
008D,
008E,
008F,
0090,
0091,
0092,
0093,
0094,
0095,
0096,
0097,
0098,
0099,
009A,
009B,
009C,
009D,
009E,
009F,
00A0,
00A1,
00A2,
00A3,
00A4,
00A5,
00A6,
00A7,
00A8,
00A9,
00AA,
00AB,
00AC,
00AD,
00AE,
00AF,
00B0,
00B1,
00B2,
00B3,
00B4,
00B5,
00B6,
00B7,
00B8,
00B9,
00BA,
00BB,
00BC,
00BD,
00BE,
00BF,
00C0,
00C1,
00C2,
00C3,
00C4,
00C5,
00C6,
00C7,
00C8,
00C9,
00CA,
00CB,
00CC,
00CD,
00CE,
00CF,
00D0,
00D1,
00D2,
00D3,
00D4,
00D5,
00D6,
00D7,
00D8,
00D9,
00DA,
00DB,
00DC,
00DD,
00DE,
00DF,
00E0,
00E1,
00E2,
00E3,
00E4,
00E5,
00E6,
00E7,
00E8,
00E9,
00EA,
00EB,
00EC,
00ED,
00EE,
00EF,
00F0,
00F1,
00F2,
00F3,
00F4,
00F5,
00F6,
00F7,
00F8,
00F9,
00FA,
00FB,
00FC,
00FD,
00FE,
00FF,
0100,
0101,
0102,
0103,
0104,
0105,
0106,
0107,
0108,
0109,
010A,
010B,
010C,
010D,
010E,
010F,
0110,
0111,
0112,
0113,
0114,
0115,
0116,
0117,
0118,
0119,
011A,
011B,
011C,
011D,
011E,
011F,
0120,
0121,
0122,
0123,
0124,
0125,
0126,
0127,
0128,
0129,
012A,
012B,
012C,
012D,
012E,
012F,
0130,
0131,
0132,
0133,
0134,
0135,
0136,
0137,
0138,
0139,
013A,
013B,
013C,
013D,
013E,
013F,
0140,
0141,
0142,
0143,
0144,
0145,
0146,
0147,
0148,
0149,
014A,
014B,
014C,
014D,
014E,
014F,
0150,
0151,
0152,
0153,
0154,
0155,
0156,
0157,
0158,
0159,
015A,
015B,
015C,
015D,
015E,
015F,
0160,
0161,
0162,
0163,
0164,
0165,
0166,
0167,
0168,
0169,
016A,
016B,
016C,
016D,
016E,
016F,
0170,
0171,
0172,
0173,
0174,
0175,
0176,
0177,
0178,
0179,
017A,
017B,
017C,
017D,
017E,
017F,
0180,
0181,
0182,
0183,
0184,
0185,
0186,
0187,
0188,
0189,
018A,
018B,
018C,
018D,
018E,
018F,
0190,
0191,
0192,
0193,
0194,
0195,
0196,
0197,
0198,
0199,
019A,
019B,
019C,
019D,
019E,
019F,
01A0,
01A1,
01A2,
01A3,
01A4,
01A5,
01A6,
01A7,
01A8,
01A9,
01AA,
01AB,
01AC,
01AD,
01AE,
01AF,
01B0,
01B1,
01B2,
01B3,
01B4,
01B5,
01B6,
01B7,
01B8,
01B9,
01BA,
01BB,
01BC,
01BD,
01BE,
01BF,
01C0,
01C1,
01C2,
01C3,
01C4,
01C5,
01C6,
01C7,
01C8,
01C9,
01CA,
01CB,
01CC,
01CD,
01CE,
01CF,
01D0,
01D1,
01D2,
01D3,
01D4,
01D5,
01D6,
01D7,
01D8,
01D9,
01DA,
01DB,
01DC,
01DD,
01DE,
01DF,
01E0,
01E1,
01E2,
01E3,
01E4,
01E5,
01E6,
01E7,
01E8,
01E9,
01EA,
01EB,
01EC,
01ED,
01EE,
01EF,
01F0,
01F1,
01F2,
01F3,
01F4,
01F5,
01F6,
01F7,
01F8,
01F9,
01FA,
01FB,
01FC,
01FD,
01FE,
01FF,
0200,
0201,
0202,
0203,
0204,
0205,
0206,
0207,
0208,
0209,
020A,
020B,
020C,
020D,
020E,
020F,
0210,
0211,
0212,
0213,
0214,
0215,
0216,
0217,
0218,
0219,
021A,
021B,
021C,
021D,
021E,
021F,
0220,
0221,
0222,
0223,
0224,
0225,
0226,
0227,
0228,
0229,
022A,
022B,
022C,
022D,
022E,
022F,
0230,
0231,
0232,
0233,
0234,
0235,
0236,
0237,
0238,
0239,
023A,
023B,
023C,
023D,
023E,
023F,
0240,
0241,
0242,
0243,
0244,
0245,
0246,
0247,
0248,
0249,
024A,
024B,
024C,
024D,
024E,
024F,
0250,
0251,
0252,
0253,
0254,
0255,
0256,
0257,
0258,
0259,
025A,
025B,
025C,
025D,
025E,
025F,
0260,
0261,
0262,
0263,
0264,
0265,
0266,
0267,
0268,
0269,
026A,
026B,
026C,
026D,
026E,
026F,
0270,
0271,
0272,
0273,
0274,
0275,
0276,
0277,
0278,
0279,
027A,
027B,
027C,
027D,
027E,
027F,
0280,
0281,
0282,
0283,
0284,
0285,
0286,
0287,
0288,
0289,
028A,
028B,
028C,
028D,
028E,
028F,
0290,
0291,
0292,
0293,
0294,
0295,
0296,
0297,
0298,
0299,
029A,
029B,
029C,
029D,
029E,
029F,
02A0,
02A1,
02A2,
02A3,
02A4,
02A5,
02A6,
02A7,
02A8,
02A9,
02AA,
02AB,
02AC,
02AD,
02AE,
02AF,
02B0,
02B1,
02B2,
02B3,
02B4,
02B5,
02B6,
02B7,
02B8,
02B9,
02BA,
02BB,
02BC,
02BD,
02BE,
02BF,
02C0,
02C1,
02C2,
02C3,
02C4,
02C5,
02C6,
02C7,
02C8,
02C9,
02CA,
02CB,
02CC,
02CD,
02CE,
02CF,
02D0,
02D1,
02D2,
02D3,
02D4,
02D5,
02D6,
02D7,
02D8,
02D9,
02DA,
02DB,
02DC,
02DD,
02DE,
02DF,
02E0,
02E1,
02E2,
02E3,
02E4,
02E5,
02E6,
02E7,
02E8,
02E9,
02EA,
02EB,
02EC,
02ED,
02EE,
02EF,
02F0,
02F1,
02F2,
02F3,
02F4,
02F5,
02F6,
02F7,
02F8,
02F9,
02FA,
02FB,
02FC,
02FD,
02FE,
02FF,
0300,
0301,
0302,
0303,
0304,
0305,
0306,
0307,
0308,
0309,
030A,
030B,
030C,
030D,
030E,
030F,
0310,
0311,
0312,
0313,
0314,
0315,
0316,
0317,
0318,
0319,
031A,
031B,
031C,
031D,
031E,
031F,
0320,
0321,
0322,
0323,
0324,
0325,
0326,
0327,
0328,
0329,
032A,
032B,
032C,
032D,
032E,
032F,
0330,
0331,
0332,
0333,
0334,
0335,
0336,
0337,
0338,
0339,
033A,
033B,
033C,
033D,
033E,
033F,
0340,
0341,
0342,
0343,
0344,
0345,
0346,
0347,
0348,
0349,
034A,
034B,
034C,
034D,
034E,
034F,
0350,
0351,
0352,
0353,
0354,
0355,
0356,
0357,
0358,
0359,
035A,
035B,
035C,
035D,
035E,
035F,
0360,
0361,
0362,
0363,
0364,
0365,
0366,
0367,
0368,
0369,
036A,
036B,
036C,
036D,
036E,
036F,
0370,
0371,
0372,
0373,
0374,
0375,
0376,
0377,
0378,
0379,
037A,
037B,
037C,
037D,
037E,
037F,
0380,
0381,
0382,
0383,
0384,
0385,
0386,
0387,
0388,
0389,
038A,
038B,
038C,
038D,
038E,
038F,
0390,
0391,
0392,
0393,
0394,
0395,
0396,
0397,
0398,
0399,
039A,
039B,
039C,
039D,
039E,
039F,
03A0,
03A1,
03A2,
03A3,
03A4,
03A5,
03A6,
03A7,
03A8,
03A9,
03AA,
03AB,
03AC,
03AD,
03AE,
03AF,
03B0,
03B1,
03B2,
03B3,
03B4,
03B5,
03B6,
03B7,
03B8,
03B9,
03BA,
03BB,
03BC,
03BD,
03BE,
03BF,
03C0,
03C1,
03C2,
03C3,
03C4,
03C5,
03C6,
03C7,
03C8,
03C9,
03CA,
03CB,
03CC,
03CD,
03CE,
03CF,
03D0,
03D1,
03D2,
03D3,
03D4,
03D5,
03D6,
03D7,
03D8,
03D9,
03DA,
03DB,
03DC,
03DD,
03DE,
03DF,
03E0,
03E1,
03E2,
03E3,
03E4,
03E5,
03E6,
03E7,
03E8,
03E9,
03EA,
03EB,
03EC,
03ED,
03EE,
03EF,
03F0,
03F1,
03F2,
03F3,
03F4,
03F5,
03F6,
03F7,
03F8,
03F9,
03FA,
03FB,
03FC,
03FD,
03FE,
03FF;

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 minutes ago, OLD_SHURiK said:

# RUNTIME: Fatal Error: RUNTIME_0047 RAMB18E1.vhd (1115): Index 2 out of range (1 to 1).

открыть сорцы либы на этом месте и посмотреть что ему не нравиться. ЕМНП не всякая модель кое файлы ест, их надо в хекс конвертировать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на файл он не ругается !

ошибка указывет строку :

Spoiler

    if (INIT_FILE /= "NONE") then
      
      file_open(open_status, int_infile, INIT_FILE, read_mode);

      while not endfile(int_infile) loop
          
        readline(int_infile, data_line);

        while (data_line /= null and data_line'length > 0) loop
          
          if (data_line(data_line'low to data_line'low + 1) = "//") then
            deallocate(data_line);

          elsif ((data_line(data_line'low to data_line'low + 1) = "/*") and (data_line(data_line'high-1 to data_line'high) = "*/")) then
            deallocate(data_line);
            
          elsif (data_line(data_line'low to data_line'low + 1) = "/*") then
            deallocate(data_line);
            ignore_line := true;

          elsif (ignore_line = true and data_line(data_line'high-1 to data_line'high) = "*/") then
            deallocate(data_line);
            ignore_line := false;

это анализ коментария !

куда дальше ?!

P.S.

VIVADO зависает при моделировании, если указать файл инициализации !!!

Изменено пользователем OLD_SHURiK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, OLD_SHURiK said:

ошибка указывет строку :

  Hide contents

    if (INIT_FILE /= "NONE") then
      
      file_open(open_status, int_infile, INIT_FILE, read_mode);

      while not endfile(int_infile) loop
          
        readline(int_infile, data_line);

        while (data_line /= null and data_line'length > 0) loop
          
          if (data_line(data_line'low to data_line'low + 1) = "//") then
            deallocate(data_line);

          elsif ((data_line(data_line'low to data_line'low + 1) = "/*") and (data_line(data_line'high-1 to data_line'high) = "*/")) then
            deallocate(data_line);
            
          elsif (data_line(data_line'low to data_line'low + 1) = "/*") then
            deallocate(data_line);
            ignore_line := true;

          elsif (ignore_line = true and data_line(data_line'high-1 to data_line'high) = "*/") then
            deallocate(data_line);
            ignore_line := false;

это анализ коментария !

куда дальше ?!

это не анализ, это код. ну вот из кода и вытаскивайте какой файл он ест. судя по приведенному коду

Quote

ЕМНП не всякая модель кое файлы ест, их надо в хекс конвертировать

обработчик написан не для coe файлов. Более точно надо смотреть код. Можно точку остановки на это место поставить и посмотреть что именно он читает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1.  не останавливается. Наверно потому что это происходит в процессе инициализации симулятора.

2. что *.hex , что *.coe результат один и тот же !

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

50 minutes ago, OLD_SHURiK said:

на файл он не ругается !

ошибка указывет строку :

  Reveal hidden contents

    if (INIT_FILE /= "NONE") then
      
      file_open(open_status, int_infile, INIT_FILE, read_mode);

      while not endfile(int_infile) loop
          
        readline(int_infile, data_line);

        while (data_line /= null and data_line'length > 0) loop
          
          if (data_line(data_line'low to data_line'low + 1) = "//") then
            deallocate(data_line);

          elsif ((data_line(data_line'low to data_line'low + 1) = "/*") and (data_line(data_line'high-1 to data_line'high) = "*/")) then
            deallocate(data_line);
            
          elsif (data_line(data_line'low to data_line'low + 1) = "/*") then
            deallocate(data_line);
            ignore_line := true;

          elsif (ignore_line = true and data_line(data_line'high-1 to data_line'high) = "*/") then
            deallocate(data_line);
            ignore_line := false;

это анализ коментария !

куда дальше ?!

P.S.

VIVADO зависает при моделировании, если указать файл инициализации !!!

 

Похоже что симулятору что-то не нравится в файле *.coe.

Моделирование проходит в Vivado или в Aldec? Если в Aldec, то там можно посмотреть дамп памяти. Возможно по нему что-то прояснится.

Как вариант ещё можно уменьшить размер *.coe и посмотреть, как симулятор на него отреагирует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, OLD_SHURiK said:

Всем привет!

Active-HDL 10.3 64bit.

библиотека "Active-HDL_10.3.3558.6081_x64_for_Xilinx_VIVADO_2016.4_VHDL_Libraries"

Сделана память с использованием BRAM_SDP_MACRO.

Моделирование записи и чтения проходит нормально!

Но ! При попытке инициализировать память из файла *.coe происходит ошибка !

# ELAB2: Create instances ...
# RUNTIME: Fatal Error: RUNTIME_0047 RAMB18E1.vhd (1115): Index 2 out of range (1 to 1).
# KERNEL: Time: 0 ps,  Iteration: 0,  TOP instance.
# ELAB2: Last instance before error: /xil_bram_1k_16/BRAM_SDP_MACRO_inst/sdp_bl/ramb18_dp_bl/ram18_bl/TDP/RAMB18E1_TDP_inst
# KERNEL: Error: E8005 : Kernel process initialization failed.
# VSIM: Error: Simulation initialization failed.

Где порылась собака?!

 

Может .coe не находит ?

В Ahdl 10.5  и Ahdl 11.1  работают с .mif ok

Можеть, вместо .coe - .mif   ему указать ?

Vivado их генерирует.

 

c_mem_init_file => "mem_8x256.mif"

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, attaboy said:

Похоже что симулятору что-то не нравится в файле *.coe.

Моделирование проходит в Vivado или в Aldec? Если в Aldec, то там можно посмотреть дамп памяти. Возможно по нему что-то прояснится.

Как вариант ещё можно уменьшить размер *.coe и посмотреть, как симулятор на него отреагирует.

моделируется в Active-HDL.

Vivado вообще зависает если указать файл инициализации.

до симуляции дело не доходит.

всё валится на этапе инициализации симулятора !

пробовал .нех , то же самое !

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, OLD_SHURiK said:

моделируется в Active-HDL.

Vivado вообще зависает если указать файл инициализации.

до симуляции дело не доходит.

всё валится на этапе инициализации симулятора !

пробовал .нех , то же самое !

 

 

Приведенный в начале темы *.coe файл заканчивается на ;

Я проверил несколько своих, у них нет ; в конце. Может быть в этом проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

40 minutes ago, gosha said:

Сгенерировать RAM IP c .coe -  и в ее в Aldec ?

Есть ошибки ?

есть !!! файл генерировался и IP core и самостоятельно и брался "example", всё едино !!

 

33 minutes ago, attaboy said:

Приведенный в начале темы *.coe файл заканчивается на ;

Я проверил несколько своих, у них нет ; в конце. Может быть в этом проблема?

так должно быть !

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

25 minutes ago, OLD_SHURiK said:

есть !!! файл генерировался и IP core и самостоятельно и брался "example", всё едино !!

 

так должно быть !

Ну выложите упрощенный testbench AHDL: ram, к ним .coe и .mif

По-пробую в AHDL 11.1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

53 minutes ago, gosha said:

Ну выложите упрощенный testbench AHDL: ram, к ним .coe и .mif

По-пробую в AHDL 11.1

исходник ram and *.coe вверху.

tb

Spoiler

Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

library unimacro;
use unimacro.VCOMPONENTS.all;

library unisim;
use unisim.VCOMPONENTS.all;

-- Add your library and packages declaration here ...

entity xil_bram_1k_16_tb is
end xil_bram_1k_16_tb;

architecture TB_ARCHITECTURE of xil_bram_1k_16_tb is
	-- Component declaration of the tested unit
	component xil_bram_1k_16
		port(
			clk : in STD_LOGIC;
			di : in STD_LOGIC_VECTOR(15 downto 0);
			wen : in STD_LOGIC_VECTOR(1 downto 0);
			wraddr : in STD_LOGIC_VECTOR(9 downto 0);
			rdaddr : in STD_LOGIC_VECTOR(9 downto 0);
			do : out STD_LOGIC_VECTOR(15 downto 0) );
	end component;
	
	-- Stimulus signals - signals mapped to the input and inout ports of tested entity
	signal clk : STD_LOGIC := '0';
	signal di : STD_LOGIC_VECTOR(15 downto 0) := (others => '0');
	signal wen : STD_LOGIC_VECTOR(1 downto 0) := (others => '0');
	signal wraddr : STD_LOGIC_VECTOR(9 downto 0) := (others => '0');
	signal rdaddr : STD_LOGIC_VECTOR(9 downto 0) := (others => '0');
	-- Observed signals - signals mapped to the output ports of tested entity
	signal do : STD_LOGIC_VECTOR(15 downto 0);
	
	-- Add your code here ...
	
begin
	
	-- Unit Under Test port map
	UUT : xil_bram_1k_16
	port map (
		clk => clk,
		di => di,
		wen => wen,
		wraddr => wraddr,
		rdaddr => rdaddr,
		do => do
		);
	
	-- Add your stimulus here ...
	
	process
	begin
		wait for 20ns;
		clk	<= '1';
		wait for 20ns;
		clk	<= '0';
	end process;
	--
	process
	begin
		wait for 1us;
		--	write
		wait until rising_edge(clk);
		wraddr	<= conv_std_logic_vector(50, wraddr'length) after 1ns;
		wen		<= "11" after 1ns;
		di		<= x"1278" after 1ns;
		wait for 40ns;
		wraddr	<= conv_std_logic_vector(0, wraddr'length) after 1ns;
		wen		<= "00" after 1ns;
		di		<= x"0000" after 1ns;
		--	read
		wait for 1us;
		wait until rising_edge(clk);
		rdaddr	<= conv_std_logic_vector(50, wraddr'length) after 1ns;
		wait for 40ns;
		rdaddr	<= conv_std_logic_vector(0, wraddr'length) after 1ns;


	end process;
	
end TB_ARCHITECTURE;

configuration TESTBENCH_FOR_xil_bram_1k_16 of xil_bram_1k_16_tb is
	for TB_ARCHITECTURE
		for UUT : xil_bram_1k_16
			use entity work.xil_bram_1k_16(behavioral);
		end for;
	end for;
end TESTBENCH_FOR_xil_bram_1k_16;

 

заранее благодарен !!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 hours ago, OLD_SHURiK said:

исходник ram and *.coe вверху.

tb

  Reveal hidden contents


Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

library unimacro;
use unimacro.VCOMPONENTS.all;

library unisim;
use unisim.VCOMPONENTS.all;

-- Add your library and packages declaration here ...

entity xil_bram_1k_16_tb is
end xil_bram_1k_16_tb;

architecture TB_ARCHITECTURE of xil_bram_1k_16_tb is
	-- Component declaration of the tested unit
	component xil_bram_1k_16
		port(
			clk : in STD_LOGIC;
			di : in STD_LOGIC_VECTOR(15 downto 0);
			wen : in STD_LOGIC_VECTOR(1 downto 0);
			wraddr : in STD_LOGIC_VECTOR(9 downto 0);
			rdaddr : in STD_LOGIC_VECTOR(9 downto 0);
			do : out STD_LOGIC_VECTOR(15 downto 0) );
	end component;
	
	-- Stimulus signals - signals mapped to the input and inout ports of tested entity
	signal clk : STD_LOGIC := '0';
	signal di : STD_LOGIC_VECTOR(15 downto 0) := (others => '0');
	signal wen : STD_LOGIC_VECTOR(1 downto 0) := (others => '0');
	signal wraddr : STD_LOGIC_VECTOR(9 downto 0) := (others => '0');
	signal rdaddr : STD_LOGIC_VECTOR(9 downto 0) := (others => '0');
	-- Observed signals - signals mapped to the output ports of tested entity
	signal do : STD_LOGIC_VECTOR(15 downto 0);
	
	-- Add your code here ...
	
begin
	
	-- Unit Under Test port map
	UUT : xil_bram_1k_16
	port map (
		clk => clk,
		di => di,
		wen => wen,
		wraddr => wraddr,
		rdaddr => rdaddr,
		do => do
		);
	
	-- Add your stimulus here ...
	
	process
	begin
		wait for 20ns;
		clk	<= '1';
		wait for 20ns;
		clk	<= '0';
	end process;
	--
	process
	begin
		wait for 1us;
		--	write
		wait until rising_edge(clk);
		wraddr	<= conv_std_logic_vector(50, wraddr'length) after 1ns;
		wen		<= "11" after 1ns;
		di		<= x"1278" after 1ns;
		wait for 40ns;
		wraddr	<= conv_std_logic_vector(0, wraddr'length) after 1ns;
		wen		<= "00" after 1ns;
		di		<= x"0000" after 1ns;
		--	read
		wait for 1us;
		wait until rising_edge(clk);
		rdaddr	<= conv_std_logic_vector(50, wraddr'length) after 1ns;
		wait for 40ns;
		rdaddr	<= conv_std_logic_vector(0, wraddr'length) after 1ns;


	end process;
	
end TB_ARCHITECTURE;

configuration TESTBENCH_FOR_xil_bram_1k_16 of xil_bram_1k_16_tb is
	for TB_ARCHITECTURE
		for UUT : xil_bram_1k_16
			use entity work.xil_bram_1k_16(behavioral);
		end for;
	end for;
end TESTBENCH_FOR_xil_bram_1k_16;

 

заранее благодарен !!

IP RAM c инициализацией ram .mif   файлом (прикрепленный файл) - моделируется ok.

Cудя по исходнику RAMB18E1.vhd из комплекта Vivado (в котором считывается файл инициализации RAM)  (на который ругается при simulation_init  (сообщение об ошибке в Вашем первом посте)) - формат файла инициализации , вроде бы не .coe

 

    if (INIT_FILE /= "NONE") then
      
      file_open(open_status, int_infile, INIT_FILE, read_mode);

      while not endfile(int_infile) loop
          
        readline(int_infile, data_line);

        while (data_line /= null and data_line'length > 0) loop
          
          if (data_line(data_line'low to data_line'low + 1) = "//") then
            deallocate(data_line);

          elsif ((data_line(data_line'low to data_line'low + 1) = "/*") and (data_line(data_line'high-1 to data_line'high) = "*/")) then
            deallocate(data_line);
            
          elsif (data_line(data_line'low to data_line'low + 1) = "/*") then
            deallocate(data_line);
            ignore_line := true;

          elsif (ignore_line = true and data_line(data_line'high-1 to data_line'high) = "*/") then
            deallocate(data_line);
            ignore_line := false;


          elsif (ignore_line = false and data_line(data_line'low) = '@') then
            read(data_line, char_tmp);
            hread(data_line, init_addr_slv, good_data);

            i := SLV_TO_INT(init_addr_slv);

          elsif (ignore_line = false) then

            hread(data_line, input_initf_tmp(i), good_data);
            input_initf(i)(slv_width - 1 downto 0) := input_initf_tmp(i)(slv_width - 1 downto 0);
          
            if (good_data = true) then
              i := i + 1;             
            end if;
          else
            deallocate(data_line);
                     
          end if;
        
        end loop;
        
      end loop;

    end if;
        
    return input_initf;

  end;

 

test_ram_mif.zip RAMB18E1.vhd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 hours ago, OLD_SHURiK said:

исходник ram and *.coe вверху.

tb

  Reveal hidden contents


Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

library unimacro;
use unimacro.VCOMPONENTS.all;

library unisim;
use unisim.VCOMPONENTS.all;

-- Add your library and packages declaration here ...

entity xil_bram_1k_16_tb is
end xil_bram_1k_16_tb;

architecture TB_ARCHITECTURE of xil_bram_1k_16_tb is
	-- Component declaration of the tested unit
	component xil_bram_1k_16
		port(
			clk : in STD_LOGIC;
			di : in STD_LOGIC_VECTOR(15 downto 0);
			wen : in STD_LOGIC_VECTOR(1 downto 0);
			wraddr : in STD_LOGIC_VECTOR(9 downto 0);
			rdaddr : in STD_LOGIC_VECTOR(9 downto 0);
			do : out STD_LOGIC_VECTOR(15 downto 0) );
	end component;
	
	-- Stimulus signals - signals mapped to the input and inout ports of tested entity
	signal clk : STD_LOGIC := '0';
	signal di : STD_LOGIC_VECTOR(15 downto 0) := (others => '0');
	signal wen : STD_LOGIC_VECTOR(1 downto 0) := (others => '0');
	signal wraddr : STD_LOGIC_VECTOR(9 downto 0) := (others => '0');
	signal rdaddr : STD_LOGIC_VECTOR(9 downto 0) := (others => '0');
	-- Observed signals - signals mapped to the output ports of tested entity
	signal do : STD_LOGIC_VECTOR(15 downto 0);
	
	-- Add your code here ...
	
begin
	
	-- Unit Under Test port map
	UUT : xil_bram_1k_16
	port map (
		clk => clk,
		di => di,
		wen => wen,
		wraddr => wraddr,
		rdaddr => rdaddr,
		do => do
		);
	
	-- Add your stimulus here ...
	
	process
	begin
		wait for 20ns;
		clk	<= '1';
		wait for 20ns;
		clk	<= '0';
	end process;
	--
	process
	begin
		wait for 1us;
		--	write
		wait until rising_edge(clk);
		wraddr	<= conv_std_logic_vector(50, wraddr'length) after 1ns;
		wen		<= "11" after 1ns;
		di		<= x"1278" after 1ns;
		wait for 40ns;
		wraddr	<= conv_std_logic_vector(0, wraddr'length) after 1ns;
		wen		<= "00" after 1ns;
		di		<= x"0000" after 1ns;
		--	read
		wait for 1us;
		wait until rising_edge(clk);
		rdaddr	<= conv_std_logic_vector(50, wraddr'length) after 1ns;
		wait for 40ns;
		rdaddr	<= conv_std_logic_vector(0, wraddr'length) after 1ns;


	end process;
	
end TB_ARCHITECTURE;

configuration TESTBENCH_FOR_xil_bram_1k_16 of xil_bram_1k_16_tb is
	for TB_ARCHITECTURE
		for UUT : xil_bram_1k_16
			use entity work.xil_bram_1k_16(behavioral);
		end for;
	end for;
end TESTBENCH_FOR_xil_bram_1k_16;

 

заранее благодарен !!

Если из Вашего .coe удалить ВСЕ содержимое - симуляция ok. (пустой файл)

Думаю, формат файла нужен не .coe

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...