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

Modelsim странная ошибка

Здравствуйте

Есть код на verilog:

module hi_read_tx(
pck0, ck_1356meg, ck_1356megb,
pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4,
adc_d, adc_clk,
ssp_frame, ssp_din, ssp_dout, ssp_clk,
cross_hi, cross_lo,
dbg,
shallow_modulation
);
input pck0, ck_1356meg, ck_1356megb;
output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4;
input [7:0] adc_d;
output adc_clk;
input ssp_dout;
output ssp_frame, ssp_din, ssp_clk;
input cross_hi, cross_lo;
output dbg;
input shallow_modulation;

// The high-frequency stuff. For now, for testing, just bring out the carrier,
// and allow the ARM to modulate it over the SSP.
reg pwr_hi;
reg pwr_oe1;
reg pwr_oe2;
reg pwr_oe3;
reg pwr_oe4;
always @(ck_1356megb or ssp_dout or shallow_modulation)
begin
if(shallow_modulation)
begin
	pwr_hi <= ck_1356megb;
	pwr_oe1 <= ~ssp_dout;
	pwr_oe2 <= ~ssp_dout;
	pwr_oe3 <= ~ssp_dout;
	pwr_oe4 <= 1'b0;
end
else
begin
	pwr_hi <= ck_1356megb & ssp_dout;
	pwr_oe1 <= 1'b0;
	pwr_oe2 <= 1'b0;
	pwr_oe3 <= 1'b0;
	pwr_oe4 <= 1'b0;
end
end

// Then just divide the 13.56 MHz clock down to produce appropriate clocks
// for the synchronous serial port.
// This is used for ISO14443-B
reg [6:0] hi_div_by_128;

always @(posedge ck_1356meg)
hi_div_by_128 <= hi_div_by_128 + 1;

assign ssp_clk = hi_div_by_128[6];

reg [2:0] hi_byte_div;

always @(negedge ssp_clk)
hi_byte_div <= hi_byte_div + 1;

assign ssp_frame = (hi_byte_div == 3'b000);

// Implement a hysteresis to give out the received signal on
// ssp_din. Sample at fc.
assign adc_clk = ck_1356meg;

// ADC data appears on the rising edge, so sample it on the falling edge
reg after_hysteresis;
always @(negedge adc_clk)
begin
if(& adc_d[7:0]) after_hysteresis <= 1'b1;
else if(~(| adc_d[7:0])) after_hysteresis <= 1'b0;
end


assign ssp_din = after_hysteresis;

assign pwr_lo = 1'b0;
assign dbg = ssp_din;

endmodule

Код из опенсорс-проекта proxmark3.

Тестбенч к нему:

`include "hi_read_tx.v"

/*
pck0			- input main 24Mhz clock (PLL / 4)
[7:0] adc_d		- input data from A/D converter
shallow_modulation	- modulation type

pwr_lo			- output to coil drivers (ssp_clk / 8)
adc_clk			- output A/D clock signal
ssp_frame		- output SSS frame indicator (goes high while the 8 bits are shifted)
ssp_din			- output SSP data to ARM (shifts 8 bit A/D value serially to ARM MSB first)
ssp_clk			- output SSP clock signal

ck_1356meg		- input unused
ck_1356megb		- input unused
ssp_dout		- input unused
cross_hi		- input unused
cross_lo		- input unused

pwr_hi			- output unused, tied low
pwr_oe1			- output unused, undefined
pwr_oe2			- output unused, undefined
pwr_oe3			- output unused, undefined
pwr_oe4			- output unused, undefined
dbg				- output alias for adc_clk
*/

module testbed_hi_read_tx;
reg  pck0;
reg  [7:0] adc_d;
reg  shallow_modulation;

wire pwr_lo;
wire adc_clk;
reg ck_1356meg;
reg  ck_1356megb;
wire ssp_frame;
wire ssp_din;
wire ssp_clk;
reg  ssp_dout;
wire pwr_hi;
wire pwr_oe1;
wire pwr_oe2;
wire pwr_oe3;
wire pwr_oe4;
wire cross_lo;
wire cross_hi;
wire dbg;

hi_read_tx #(5,200) dut(
.pck0(pck0),
.ck_1356meg(ck_1356meg),
.ck_1356megb(ck_1356megb),
.pwr_lo(pwr_lo),
.pwr_hi(pwr_hi),
.pwr_oe1(pwr_oe1),
.pwr_oe2(pwr_oe2),
.pwr_oe3(pwr_oe3),
.pwr_oe4(pwr_oe4),
.adc_d(adc_d),
.adc_clk(adc_clk),
.ssp_frame(ssp_frame),
.ssp_din(ssp_din),
.ssp_dout(ssp_dout),
.ssp_clk(ssp_clk),
.cross_hi(cross_hi),
.cross_lo(cross_lo),
.dbg(dbg),
.shallow_modulation(shallow_modulation)
);

integer idx, i;

// main clock
always #5 begin 
	ck_1356megb = !ck_1356megb;
	ck_1356meg = ck_1356megb;
end

//crank DUT
task crank_dut;
begin
	@(posedge ssp_clk);
	ssp_dout = $random;
end
endtask

initial begin

	// init inputs
	ck_1356megb = 0;
	adc_d = 0;
	ssp_dout=0;

	// shallow modulation off
	shallow_modulation=0;
	for (i = 0;  i < 16;  i = i + 1) begin
		crank_dut;
	end

	// shallow modulation on
	shallow_modulation=1;
	for (i = 0;  i < 16;  i = i + 1) begin
		crank_dut;
	end
	$finish;
end

endmodule // main

Вот что выдает Modelsim 6.5b в Windows XP при симуляции:

vsim -novopt work.testbed_hi_read_tx
# vsim -novopt work.testbed_hi_read_tx 
# Refreshing C:\fpga\work.testbed_hi_read_tx
# Loading work.testbed_hi_read_tx
# Refreshing C:\fpga\work.hi_read_tx
# Loading work.hi_read_tx
# ** Error: (vsim-3006) C:/fpga/testbed_hi_read_tx.v(70): Too many inherited module instance parameters.
#         Region: /testbed_hi_read_tx
# Error loading design

Пробовал включать/отключать оптимизацию-не помогло.

Если удалить в строке 50 тестбенча строку #(5,200), то симулятор запускается, но кроме синхросигналов ничего не отображается. Нужно ли переписывать тестбенч с нуля?

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


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

Вот что выдает Modelsim 6.5b в Windows XP при симуляции:

# ** Error: (vsim-3006) C:/fpga/testbed_hi_read_tx.v(70): Too many inherited module instance parameters.

Если удалить в строке 50 тестбенча строку #(5,200), то симулятор запускается

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

 

кроме синхросигналов ничего не отображается. Нужно ли переписывать тестбенч с нуля?
А что должно отображаться?

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


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

Этот модуль занимается модуляцией сигнала. В симуляторе должны отображаться модулируемая несущая и тому подобные красивые картинки, но я ничего не вижу. См. скриншот.

post-76445-1365679979_thumb.jpg

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


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

Есть код на verilog:

....

 

always @(ck_1356megb or ssp_dout or shallow_modulation)

begin

if(shallow_modulation)

begin

 

Как Вы себе представляете такие конструкции?

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

Так не годится, обычно все гораздо легче привести к единой синхрочастоте.

 

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


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

Этот модуль занимается модуляцией сигнала. В симуляторе должны отображаться модулируемая несущая и тому подобные красивые картинки, но я ничего не вижу. См. скриншот.

Юморист :)

Серьезно, в чем проблема то?

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

 

1) Обратите внимание на сигналы ssp_clk и ssp_frame. Они в состоянии 'X'. Это плохо. :)

2) Добавьте в модуль hi_read_tx (где-нибудь в конце) следующее:

initial begin
hi_div_by_128 = 7'd0;
hi_byte_div = 3'd0;
end

3) Отпишитесь о результатах :)

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


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

Данный код не мой, я лишь пытаюсь запустить его в Modelsim'е чтобы понять как работает обработка сигналов. Вот ссылка на SVN:

https://code.google.com/p/proxmark3/source/...%2Ftrunk%2Ffpga

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


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

Данный код не мой, я лишь пытаюсь запустить его в Modelsim'е чтобы понять как работает обработка сигналов.

Это понятно. :)

Рекомендую почитать и немного разобраться в верилоге, чтобы с бубном не прыгать.

 

Выше приведен кусок кода. Вставьте его в hi_read_tx.v (в конце описания, перед словом "endmodule").

Скомпилируйте и запустите моделирование. Убедитесь, что на "ssp_clk" действительно есть клок (частотой ниже ck_1356meg в 128 раз).

 

Удачи. :)

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


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

winipuh

Да, действительно, клок появился.

По поводу моих познаний в Verilog и Modelsim - изучал примитивные конструкции(счетчики, делители и т.д.), ну и читал пару книг. Решил взяться за более сложные и интересные проекты.

post-76445-1365688749_thumb.jpg

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


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

Еще одна проблема:

При запуске другого тестбенча(https://code.google.com/p/proxmark3/source/.../testbed_fpga.v) выдает ошибку

# ** Error: (vsim-3033) fpga.v(48): Instantiation of 'IBUFG' failed. The design unit was not found.

# Region: /testbed_fpga/dut

# Searched libraries:

# C:\fpga\work

 

Modelsim не может найти какую-то внешнюю библиотеку?

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


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

Еще одна проблема:

При запуске другого тестбенча(https://code.google.com/p/proxmark3/source/.../testbed_fpga.v) выдает ошибку

# ** Error: (vsim-3033) fpga.v(48): Instantiation of 'IBUFG' failed. The design unit was not found.

Вам Моделсим конкретно сказал ГДЕ проблема: Error: (vsim-3033) fpga.v(48) - файл fpga.v, строчка 48... :krapula:

Видите вверху `include "fpga.v"?

Теперь смотрите сюда.

Конкретно вот в это место:

//assign pck0 = pck0i;
    IBUFG #(.IOSTANDARD("DEFAULT") ) pck0b(
        .O(pck0),
        .I(pck0i)
    );
//assign spck = spcki;
    IBUFG #(.IOSTANDARD("DEFAULT") ) spckb(
        .O(spck),
        .I(spcki)
    );

Здесь два инстанса модулей IBUFG. Это примитивы FPGA Xilinx.

Instantiation of 'IBUFG' failed - Моделсим не нашел в проекте верилоговских исходников с описанием такого модуля, и не нашел библиотеку с этими модулями (либо Вы ее не подключили) - The design unit was not found.

Вариантов два:

1) Раскомментарить строчки assign pck0 = pck0i, assign spck = spcki, закомментарить инстансы IBUFG.

2) Найти и подключить нужную библиотеку. Если библиотеки нет - скомпилировать с помощью xcomplib (в поставке Xilinx ISE).

Рекомендую первый вариант.

И вообще... Хватит с бубном прыгать! Разберитесь хоть немного в верилоге, ёптыть!!! :)

 

 

 

P.S. Первый раз встречаю исходники, где автор маниакально инклудит верилоговские файлы друг в друга... :cranky:

 

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


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

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

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

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

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

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

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

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

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

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