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

симуляция в ActiveHDL c учетом задержек

Подключил файлы .vho и .sdo - скомпилировал,а симулятор рисует диаграммы без задержек.Что-то ещё нужно сделать?

Кстати в файле det2time_sim_gate_vhdl.do,созданном квартусом, всего одна строка :

 

transcript to asim_log

 

Так и должно быть?

post-18832-1273841101_thumb.png

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


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

Так и должно быть?

Как то я запускал временное моделирование в альдеке, но через задний проход. Если мне память не изменяет через гуй у меня плохо получалось, я делал напрямую скриптами через asim

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


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

Как то я запускал временное моделирование в альдеке, но через задний проход. Если мне память не изменяет через гуй у меня плохо получалось, я делал напрямую скриптами через asim

 

Спасибо!

Похоже временнОе моделирование не пользуется популярностью.Ну и ладно,мне вообще-то достаточно STA,просто из любопытства хотелось посмотреть.

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


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

Спасибо!

Похоже временнОе моделирование не пользуется популярностью.Ну и ладно,мне вообще-то достаточно STA,просто из любопытства хотелось посмотреть.

Как-то помнится ради интереса пользовал временное моделирование в ActiveHDL. Было это давно, но помню что особых проблем там не возникало. В результате разводки (Active цепляет для этой цели ISE) получается *.sdf файл, который потом аттачится к post routing simulation model (*.v либо *.vhdl) и всё прекрасно моделируется. Был там какой-то трюк в том, что надо цеплять некий несинтезируемый примитив под названием "grst" или что-то вроде этого, иначе сброс не обрабатывается правильно. А в остальном всё работает.

Пользуются этим достаточно редко, потому как 90% ошибок всё-таки вычисляются на этапе функционального моделирования, ну а те, что что связаны с реальными ограничениями кристалла проще поглядеть средствами In-system debugging типа Chipscope чем корректно отмоделировать в ActiveHDL c учётом всех возможных комбинаций входных параметров.

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


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

 

Спасибо!

У меня уже пропало желание продолжать эксперименты,да и с временем напряг.

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


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

Если ещё кому интересно, то, по совету -=Vitaly=- скачал документик: 000498_TimingSimulationinActive_HDL.pdf

Информации, содержащейся в нём, хватило полностью, чтобы всё понять и сделать точно так же, всё заработало.

 

Был там какой-то трюк в том, что надо цеплять некий несинтезируемый примитив под названием "grst" или что-то вроде этого, иначе сброс не обрабатывается правильно. А в остальном всё работает.
Я столкнулся с тем, что, когда в проекте используются напрямую примитивы (типа рам-блоков и т.п.), то начинает ругаться на глобальные сигналы кристалла, что они нигде не описаны. Уважаемый Putnik подсказал мне, что нужно в любом месте модуля добавить строчку
glbl glbl();

 

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


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

Здравствуйте. Помогите, пожалуйста. Уже 2 дня бьюсь - не запускается временная симуляция.

Имеется проект:

post-13271-1293610904_thumb.png

Топ-модуль wrapper

`timescale 1 ns / 1 ps
module wrapper
(

 input L_clk_in_ds_p,
 input L_clk_in_ds_n,
 input L_data_in_ds_p,
 input L_data_in_ds_n,
 output L_clk_out_ds_p,
 output L_clk_out_ds_n,
 output L_data_out_ds_p,
 output L_data_out_ds_n,

);

wire [9:0] par_data;
wire par_sync, ddr_clk_in;

SerDes_LR #(
.DDR_CLK_DES_GBUF(1),
.PAR_CLK_DES_GBUF(1)
)
serdes_uut(
.par_data_ser(par_data),
.ddr_clk_ser(ddr_clk_in),
.par_sync_ser(par_sync),

 .clk_in_ds_p(L_clk_in_ds_p),
 .clk_in_ds_n(L_clk_in_ds_n),
 .data_in_ds_p(L_data_in_ds_p),
 .data_in_ds_n(L_data_in_ds_n),
 .clk_out_ds_p(L_clk_out_ds_p),
 .clk_out_ds_n(L_clk_out_ds_n),
 .data_out_ds_p(L_data_out_ds_p),
 .data_out_ds_n(L_data_out_ds_n),



.sync_en(1'b1),
.par_data_des(par_data),
.par_clk_en(),
.par_clk_des(par_sync),
.ddr_clk_des(ddr_clk_in),
.carrier_lost()
);

/* synthesis translate_off */ 
glbl glbl ();
/* synthesis translate_on */ 
endmodule

- это обёртка другого модуля serdes_lr, который я хочу проверить:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:	14:53:38 07/05/2010 
// Design Name: 
// Module Name:	SerDes_LR 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
`ifndef SERDES_V
`define SERDES_V
`include "Serialiser.v"
`include "Deserialiser.v"

module SerDes_LR

// !!! Внимание!!! в данном коде везде имеет место путаница: сигналы с суффиксом _o (odd, т.е. нечётный)
// по порядку на самом деле чётные. Но отсчёт начинается с нуля. Аналогично сигналы с суффиксом _e
// (even, т.е. чётный) по порядку на самом деле нечётные, но если считать с нуля, то это 0, 2, 4, ...
// Кроме того, в одном блоке защёлкивание происходит по одному фронту, а в смежном блоке (смежные блоки -
// это сериализатор и десериализатор) - по другому фронту (по положительному и отрицательному)

#(
	parameter sync_frm_p = 10'b0011111010,
	parameter sync_frm_n = 10'b1100000101,
	parameter resync_period = 40,
	parameter PAR_CLK_DES_GBUF = 0,			// разрешено ли подключить сигнал к глобальным линиям:
	parameter DDR_CLK_DES_GBUF = 0,			// 0 - запрещено, 1 - подключить принудительно
	parameter DDR_IN_DATA_DELAY = "AUTO",	// задержка последовательного сигнала данных на IOB
	parameter DDR_IN_CLK_DELAY = "0"		// задержка тактового сигнала на IOB
)											// !!! последние 2 параметра - строковые !!!!
(

	input 		wire [9:0]	par_data_ser,
	input 		wire ddr_clk_ser,
	input		wire par_sync_ser,	

	input clk_in_ds_p,
	input clk_in_ds_n,
	input data_in_ds_p,
	input data_in_ds_n,
	output clk_out_ds_p,
	output clk_out_ds_n,
	output data_out_ds_p,
	output data_out_ds_n,

	input		wire sync_en, 

	output		wire [9:0] par_data_des, 
	output		wire par_clk_en, 
	output		par_clk_des, 

	output		reg carrier_lost = 1,

	output		ddr_clk_des
);

// !!! Внимание!!! в данном коде везде имеет место путаница: сигналы с суффиксом _o (odd, т.е. нечётный)
// по порядку на самом деле чётные. Но отсчёт начинается с нуля. Аналогично сигналы с суффиксом _e
// (even, т.е. чётный) по порядку на самом деле нечётные, но если считать с нуля, то это 0, 2, 4, ...
// Кроме того, в одном блоке защёлкивание происходит по одному фронту, а в смежном блоке (смежные блоки -
// это сериализатор и десериализатор) - по другому фронту (по положительному и отрицательному)

wire ddr_data_out_e;
wire ddr_data_out_o;		
wire ddr_data_in_e;
wire ddr_data_in_o;

// ниже группа назначений для пробы прямого подключения к глобальным буферам без параметров
// (в нормальном режиме должно быть закомментировано)
//	wire ddr_clk_des_inbuf;
//	wire par_clk_des_nobuf;
//	assign ddr_clk_des = ddr_clk_des_inbuf;
//	assign par_clk_des = par_clk_des_nobuf;

// Ниже делаем параметризируемое подключение тактовых сигналов к глобальным линиям 
wire ddr_clk_des_inbuf/* synthesis syn_noclockbuf = 1 */;
wire par_clk_des_nobuf/* synthesis syn_noclockbuf = 1 */;

generate
	if (DDR_CLK_DES_GBUF != 0)
		begin
			wire ddr_clk_des_bufg;
			BUFG BUFG_ddr_clk_des_bufg (
			  .O(ddr_clk_des_bufg),	 // Clock buffer output
			  .I(ddr_clk_des_inbuf)	  // Clock buffer input
		   	);
			assign ddr_clk_des = ddr_clk_des_bufg;
		end
	else
		assign ddr_clk_des = ddr_clk_des_inbuf;
endgenerate

generate
	if (PAR_CLK_DES_GBUF != 0)
		begin
			wire par_clk_des_bufg;
			BUFG BUFG_par_clk_des_bufg (
			  .O(par_clk_des_bufg),	 // Clock buffer output
			  .I(par_clk_des_nobuf)	  // Clock buffer input
		   	);
			assign par_clk_des = par_clk_des_bufg;
		end
	else
		assign par_clk_des = par_clk_des_nobuf;
endgenerate
// Выше делаем параметризируемое подключение тактовых сигналов к глобальным линиям 

wire 	ddr_data_des,		// последовательные данные между входным усилителем и DDR-триггером
		ddr_data_ser,		// последовательные данные между DDR-триггером и выходным усилителем
		ddr_clk_ser_outbuf;	// тактовый сигнал между DDR-триггером и выходным усилителем

  IBUFDS #(
  .DIFF_TERM("FALSE"),	// Differential Termination (Virtex-4/5, Spartan-3E/3A)
  .IBUF_DELAY_VALUE(DDR_IN_CLK_DELAY), // Specify the amount of added input delay for 
						  //   the buffer, "0"-"16" (Spartan-3E/3A only)
  .IOSTANDARD("LVDS_33")  // Specify the input I/O standard
  ) IBUFDS_DDR_clk_des_inbuf (
  .O(ddr_clk_des_inbuf),  // Buffer output
  .I(clk_in_ds_p),  // Diff_p buffer input (connect directly to top-level port)
  .IB(clk_in_ds_n) // Diff_n buffer input (connect directly to top-level port)
  );

//  D input
IBUFDS #(
  .CAPACITANCE("DONT_CARE"), // "LOW", "NORMAL", "DONT_CARE" (Virtex-4 only)
  .DIFF_TERM("FALSE"),	   // Differential Termination (Virtex-4/5, Spartan-3E/3A)
  .IBUF_DELAY_VALUE("0"),	// Specify the amount of added input delay for
							 //	the buffer, "0"-"16" (Spartan-3E only)
  .IFD_DELAY_VALUE(DDR_IN_DATA_DELAY),  // Specify the amount of added delay for input
							 //	register, "AUTO", "0"-"8" (Spartan-3E/3A only)
  .IOSTANDARD("LVDS_33")	 // Specify the input I/O standard
  ) IBUFDS_sdr_data_in (
  .O(ddr_data_des),  // Buffer output
  .I(data_in_ds_p),  // Diff_p buffer input (connect directly to top-level port)
  .IB(data_in_ds_n) // Diff_n buffer input (connect directly to top-level port)
  );

// !!! Внимание!!! в данном коде везде имеет место путаница: сигналы с суффиксом _o (odd, т.е. нечётный)
// по порядку на самом деле чётные. Но отсчёт начинается с нуля. Аналогично сигналы с суффиксом _e
// (even, т.е. чётный) по порядку на самом деле нечётные, но если считать с нуля, то это 0, 2, 4, ...
// Кроме того, в одном блоке защёлкивание происходит по одному фронту, а в смежном блоке (смежные блоки -
// это сериализатор и десериализатор) - по другому фронту (по положительному и отрицательному)

IDDR2 #(
  .DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1" 
  .INIT_Q0(1'b0), // Sets initial state of the Q0 output to 1'b0 or 1'b1
  .INIT_Q1(1'b0), // Sets initial state of the Q1 output to 1'b0 or 1'b1
  .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset
  ) IDDR2_DDR_IN (
  .Q0(ddr_data_in_e), // 1-bit output captured with C0 clock 
  .Q1(ddr_data_in_o), // 1-bit output captured with C1 clock
  .C0(ddr_clk_des), // 1-bit clock input
  .C1(~ddr_clk_des), // 1-bit clock input
  .CE(1), // 1-bit clock enable input
  .D(ddr_data_des),   // 1-bit DDR data input
  .R(0),   // 1-bit reset input
  .S(0)	// 1-bit set input
  )/* synthesis syn_useioff=1 */;


OBUFDS #(
  .IOSTANDARD("LVDS_33") // Specify the output I/O standard
  ) OBUFDS_clk_out (
  .O(clk_out_ds_p),	 // Diff_p output (connect directly to top-level port)
  .OB(clk_out_ds_n),   // Diff_n output (connect directly to top-level port)
  .I(ddr_clk_ser_outbuf)	  // Buffer input 
  );

OBUFDS #(
  .IOSTANDARD("LVDS_33") // Specify the output I/O standard
  ) OBUFDS_data_out (
  .O(data_out_ds_p),	 // Diff_p output (connect directly to top-level port)
  .OB(data_out_ds_n),   // Diff_n output (connect directly to top-level port)
  .I(ddr_data_ser)	  // Buffer input 
  );	


// !!! Внимание!!! в данном коде везде имеет место путаница: сигналы с суффиксом _o (odd, т.е. нечётный)
// по порядку на самом деле чётные. Но отсчёт начинается с нуля. Аналогично сигналы с суффиксом _e
// (even, т.е. чётный) по порядку на самом деле нечётные, но если считать с нуля, то это 0, 2, 4, ...
// Кроме того, в одном блоке защёлкивание происходит по одному фронту, а в смежном блоке (смежные блоки -
// это сериализатор и десериализатор) - по другому фронту (по положительному и отрицательному)


  ODDR2 #(
  .DDR_ALIGNMENT("C0"), // Sets output alignment to "NONE", "C0" or "C1" 
  .INIT(1'b0),	// Sets initial state of the Q output to 1'b0 or 1'b1
  .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset
  ) ODDR2_L_DDR_OUT (
  .Q(ddr_data_ser),   // 1-bit DDR output data
  .C0(ddr_clk_ser),   // 1-bit clock input
  .C1(~ddr_clk_ser),   // 1-bit clock input
  .CE(1'b1), // 1-bit clock enable input
  .D0(ddr_data_out_e), // 1-bit data input (associated with C0)
  .D1(ddr_data_out_o), // 1-bit data input (associated with C1)
  .R(1'b0),   // 1-bit reset input
  .S(1'b0)	// 1-bit set input
  )/* synthesis syn_useioff=1 */;

  ODDR2 #(
  .DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1" 
  .INIT(1'b0),	// Sets initial state of the Q output to 1'b0 or 1'b1
  .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset
  ) ODDR2_L_DDR_OUT_clk (
  .Q(ddr_clk_ser_outbuf),   // 1-bit DDR output data
  .C0(ddr_clk_ser),   // 1-bit clock input
  .C1(~ddr_clk_ser),   // 1-bit clock input
  .CE(1'b1), // 1-bit clock enable input
  .D0(1), // 1-bit data input (associated with C0)
  .D1(0), // 1-bit data input (associated with C1)
  .R(1'b0),   // 1-bit reset input
  .S(1'b0)	// 1-bit set input
  )/* synthesis syn_useioff=1 */;



// !!! Внимание!!! в данном коде везде имеет место путаница: сигналы с суффиксом _o (odd, т.е. нечётный)
// по порядку на самом деле чётные. Но отсчёт начинается с нуля. Аналогично сигналы с суффиксом _e
// (even, т.е. чётный) по порядку на самом деле нечётные, но если считать с нуля, то это 0, 2, 4, ...
// Кроме того, в одном блоке защёлкивание происходит по одному фронту, а в смежном блоке (смежные блоки -
// это сериализатор и десериализатор) - по другому фронту (по положительному и отрицательному)

Serialiser Ser (
	.par_data_in(par_data_ser), 
	.ddr_clk(ddr_clk_ser), 
	.par_sync(par_sync_ser), 

	.ddr_data_out_e(ddr_data_out_e), 
	.ddr_data_out_o(ddr_data_out_o)
);



// !!! Внимание!!! в данном коде везде имеет место путаница: сигналы с суффиксом _o (odd, т.е. нечётный)
// по порядку на самом деле чётные. Но отсчёт начинается с нуля. Аналогично сигналы с суффиксом _e
// (even, т.е. чётный) по порядку на самом деле нечётные, но если считать с нуля, то это 0, 2, 4, ...
// Кроме того, в одном блоке защёлкивание происходит по одному фронту, а в смежном блоке (смежные блоки -
// это сериализатор и десериализатор) - по другому фронту (по положительному и отрицательному)

Deserialiser 
	#(
	.sync_frm_p(sync_frm_p),
	.sync_frm_n(sync_frm_n),
	.resync_period(resync_period)
	)
	Des 
	(
	.ddr_data_in_e(ddr_data_in_e), 
	.ddr_data_in_o(ddr_data_in_o), 
	.ddr_clk_in(ddr_clk_des), 

	.sync_en(sync_en), 

	.par_data_out(par_data_des), 
	.par_clk_en(par_clk_en), 
	.par_clk(par_clk_des_nobuf), 

	.counter_out_e(), 
	.counter_out_o()
);


//===============================
//Carrier detect
//
//===============================

//Dividing input frequency
reg [4:0] f_in_div = 0;
always @(posedge ddr_clk_des) 
begin
	f_in_div <= f_in_div + 1;
end

//Crossing clock domain
reg [2:0] f_in_div_local;
always @(posedge par_sync_ser) 
begin
	f_in_div_local[0] <= f_in_div[4];
	f_in_div_local[1] <= f_in_div_local[0];
	f_in_div_local[2] <= f_in_div_local[1];
end

//detecting of carrier loss 
reg [3:0] carrier_cnt = 0;	
always @(posedge par_sync_ser) 
begin	
	if(f_in_div_local[2] != f_in_div_local[1]) 
		begin
			carrier_cnt <= 0;
			carrier_lost <= 0;			
		end 
	else
		begin
			if(carrier_cnt == 4'hF) carrier_lost <= 1;
			else carrier_cnt <= carrier_cnt + 1;
		end
end

endmodule
`endif 

В модуле serdes_lr используются другие модули, которые инклюдятся (приводить их не буду из соображений хоть некоторой коммерческой тайны - чтобы руководство не обвинило в раскрытии исходников - думаю приведённых исходников достаточно для понимания проблемы). Как видно даже из приведённых исходников в коде применяются xilinx-specific примитивы. Они описаны в библиотеке OVI_Unisim. Функциональная симуляция запускается, ошибок не даёт (пробовал командой Simulation - Initialize Simulation, дальше не пробовал, т.к. для данного кода мне необходима временная симуляция. А временная уже на этапе данной команды выдаёт ошибку. Об это будет ниже). Замечательно. Делаю синтез через Synplify. Синтез проходит нормально. Делаю Implementation как вызов из Active-HDL ксайлинксовского имплементатора, входящего в комплект Xilinx ISE Studio. Результаты имплемента смотрю в FPGA Editor'е - все примитивы расставлены, как мне надо. Т.е. проект не липовый.

Перехожу непосредственно к временной симуляции согласно этому сообщению. Настраиваю параметры симуляции в окошке Timing Simulation Options. Оно у меня выглядит так:

post-13271-1293612380_thumb.png

Нажимаю в Design Flow кнопочку Timing Simulation. Вылазит следующая ошибка (привожу полный лог сообщений Active-HDL после нажатия этой кнопочки):

 

# ELBREAD: Elaboration process.
# ELBREAD: Elaboration time 0.0 [s].
# Checking if synthesis needs to be updated...
# Checking if implementation needs to be updated...
vlcomp  -l ovi_simprim -l SPARTAN3A -l ovi_unisim -work serdes_lr_timing "$dsn\IMPLEMENT\TIME_SIM.V"
# Compile...
# Pass 1. Scanning modules hierarchy.
# Module \$root found in current working library.
# Module X_IPAD found in library ovi_simprim.
# Module X_BUFGMUX found in library ovi_simprim.
# Module X_ZERO found in library ovi_simprim.
# Module X_AND2 found in library ovi_simprim.
# Module X_SFF found in library ovi_simprim.
# Module X_XOR2 found in library ovi_simprim.
# Module X_INV found in library ovi_simprim.
# Module X_IBUFDS found in library ovi_simprim.
# Module X_OBUFDS found in library ovi_simprim.
# Module X_ONE found in library ovi_simprim.
# Module X_FF found in library ovi_simprim.
# Module X_MUX2 found in library ovi_simprim.
# Module X_FDDRRSE found in library ovi_simprim.
# Module X_OPAD found in library ovi_simprim.
# Module X_BUF found in library ovi_simprim.
# Module X_LUT4 found in library ovi_simprim.
# Pass 2. Processing instantiations.
# Pass 3. Processing behavioral statements.
# ELB/DAG code generating.
# Module \$root found in current working library.
# Unit top modules: wrapper glbl.
# $root top modules: wrapper glbl.
# Compile success 0 Errors 0 Warnings  Analysis time: 0[s].
# done
asim +access +r -advdataflow -L ovi_simprim -PL ovi_simprim -sdftyp -AUTO="$dsn\implement\time_sim.sdf"  wrapper
# ELBREAD: Elaboration process.
# ELBREAD: Elaboration time 0.0 [s].
# asim: Stack memory: 32MB
# asim: Retval memory: 32MB
# KERNEL: Main thread initiated.
# KERNEL: Kernel process initialization phase.
# KERNEL: Time resolution set to 1ps.
# ELAB2: Elaboration final pass...
# ELAB2: Create instances ...
# ELAB2: Fatal Error: ELAB2_0036 Unresolved hierarchical reference to "glbl.GTS" from module "wrapper.\serdes_uut/OBUFDS_clk_out/OBUFDS \" (module not found).
# ELAB2: Last instance before error: .\serdes_uut/OBUFDS_clk_out/OBUFDS \
# KERNEL: Error: E8005 : Kernel process initialization failed.
# Error: Fatal error occurred during simulation initialization.
wave
wave  /wrapper/* .wrapper.* 

Смысл ошибки какой? Что она не видит сигнал GTS, объявленный в модуле glbl. А на этот сигнал ссылается примитив wrapper.\serdes_uut/OBUFDS_clk_out/OBUFDS. Открываю исходник, на основе которого было выдано такое сообщение (это сам v-файл для временной симуляции - time_sim.v - см. в прилагаемом архиве весь файл: sources.rar)

Делаю поиск по этому файлику строки serdes_uut/OBUFDS_clk_out/OBUFDS.

Нахожу вот что:

  X_OBUFDS #(
    .LOC ( "PAD60" ))
  \serdes_uut/OBUFDS_clk_out/OBUFDS  (
    .I(\serdes_uut/ddr_clk_ser_outbuf ),
    .O(L_clk_out_ds_p),
    .OB(L_clk_out_ds_n)
  );

Т.е. создаётся экземпляр примитива типа X_OBUFDS, который находится в библиотеке OVI_Simprim:

`timescale 1 ps/1 ps

module X_OBUFDS (O, OB, I);

    parameter LOC = " UNPLACED";
    parameter CAPACITANCE = "DONT_CARE";
    parameter IOSTANDARD = "DEFAULT";

    output O, OB;

    input  I;
[b]    tri0 GTS = [u]glbl.GTS[/u];
[/b]
    bufif0 (O, I, GTS);
    notif0 (OB, I, GTS);

    specify
    (I => O) = (0:0:0, 0:0:0);
    (I => OB) = (0:0:0, 0:0:0);
    specparam PATHPULSE$ = 0;
    endspecify

endmodule

Здесь-то мы и обнаруживаем ту самую ссылку, которую не находит программа при попытке запуска симуляции и о которой она выдаёт ошибку

 # ELAB2: Fatal Error: ELAB2_0036 Unresolved hierarchical reference to "glbl.GTS" from module "wrapper.\serdes_uut/OBUFDS_clk_out/OBUFDS \" (module not found)

(я выше её уже приводил). Я начинаю искать, где же этот модуль glbl может быть указан... и обнаруживаю, что этот модуль указан в том же самом файле time_sim.v, в котором и содержится вся симуляционная модель моего устройства (т.е. модуль wrapper) (исходник выше я приводил, см. самую нижнюю часть).

Я ничего не понимаю: получается, что модуль wrapper в файле time_sim.v видится, потому что ошибка ссылается на \serdes_uut/OBUFDS_clk_out/OBUFDS. А этот экземпляр описывается именно в time_sim.v. Т.е. модуль wrapper в файле time_sim.v программа видит, а модуль glbl она не видит. Хотя этот модуль находится в том же файле, только ниже...

Ну как такое может быть???... Ничего не понимаю... Пробовал описание модуля glbl переставить в начало, чтобы его первым проходило при анализе - ничего не поменялось...

Дополнительно привожу настройки в меню Design - Settings:

post-13271-1293613604_thumb.png

post-13271-1293613616_thumb.png

post-13271-1293613623_thumb.png

post-13271-1293613632_thumb.png

Помогите, пожалуйста... работа стоит... Больше всего я не понимаю, почему не видится glbl, если он в том же файле, другой модуль из которого видится? Может ссылка glbl.GTS не годится, а надо записать эту ссылку в другой форме, чтобы увиделось? Или где-то какую-то галочку поставить? Или куда-то какую-то библиотеку дописать?...

Прилагаю архив с исходниками: sources.rar.

 

4 Vetal: сори, не догадывался, что есть различия в code и codebox, думал code, как раз, и сделает с прокруткой. А codebox'а вообще нет в панельке инструментов:post-13271-1293668452_thumb.png

А сам я в html-е не силён :)

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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