Jump to content
    

Снова вопросы начинающего... VErilog

Снова нужна помощь.

 

не могу собрать проект для симуляции в алдеке. модуль, который я пытаюсь установить как top-level, компилится без ошибок, но при попытке начать его моделировать алдек пишет:

 

ELBREAD: Error: No design unit found (searched libraries: sdr_model xilinxcorelib sdr_model virtex2, name chan_rec).

# ELBREAD: Error: Elaboration process completed with errors.

# Design: Error: Elaboration failed

 

Проект смешанный, содержит и VHDL и верилог.

 

Помогите плз., кто может.

Share this post


Link to post
Share on other sites

Снова нужна помощь.

 

не могу собрать проект для симуляции в алдеке. модуль, который я пытаюсь установить как top-level, компилится без ошибок, но при попытке начать его моделировать алдек пишет:

 

ELBREAD: Error: No design unit found (searched libraries: sdr_model xilinxcorelib sdr_model virtex2, name chan_rec).

# ELBREAD: Error: Elaboration process completed with errors.

# Design: Error: Elaboration failed

 

Проект смешанный, содержит и VHDL и верилог.

 

Помогите плз., кто может.

подключите библиотеки Design settings->compilation->verilog ---------- Verilog libaries

Надеюсь поможет :)

Share this post


Link to post
Share on other sites

неа... :05: етот шаманский секрет я уже пробовал...

 

решилась кстати проблема путем шаманской комбинации Workspace/Delete simulation data.

 

но зато появилась другая:

 

в модуле содержится ссылка на функцию CRC16_D16.

BodyTmpCrc_p <= CRC16_D16(MainTrFifoDataOut_p[31:16],BodyTmpCrc_p);

, объявленную в модуле CRC16_D16.

Модуль подключен к проекту и успешно скомпилирован, путь к нему прописан в настройках проекта.

 

Компиляция модуля проходит успешно, а при попытке моделирования

# ELAB2: Fatal Error: ELAB2_0036 Unresolved hierarchical reference to "CRC16_D16" from module

"TranseivChan" (module not found).

 

 

// Info: tools@easics.be

// http://www.easics.com

module CRC16_D16;

// polynomial: (0 5 12 16)

// data width: 16

// convention: the first serial data bit is D[15]

function [15:0] nextCRC16_D16;

input [15:0] Data;

input [15:0] CRC;

reg [15:0] D;

reg [15:0] C;

reg [15:0] NewCRC;

begin

D = Data;

C = CRC;

NewCRC[0] = D[12] ^ D[11] ^ D[8] ^ D[4] ^ D[0] ^ C[0] ^ C[4] ^

C[8] ^ C[11] ^ C[12];

NewCRC[1] = D[13] ^ D[12] ^ D[9] ^ D[5] ^ D[1] ^ C[1] ^ C[5] ^

C[9] ^ C[12] ^ C[13];

NewCRC[2] = D[14] ^ D[13] ^ D[10] ^ D[6] ^ D[2] ^ C[2] ^ C[6] ^

C[10] ^ C[13] ^ C[14];

NewCRC[3] = D[15] ^ D[14] ^ D[11] ^ D[7] ^ D[3] ^ C[3] ^ C[7] ^

C[11] ^ C[14] ^ C[15];

NewCRC[4] = D[15] ^ D[12] ^ D[8] ^ D[4] ^ C[4] ^ C[8] ^ C[12] ^

C[15];

NewCRC[5] = D[13] ^ D[12] ^ D[11] ^ D[9] ^ D[8] ^ D[5] ^ D[4] ^

D[0] ^ C[0] ^ C[4] ^ C[5] ^ C[8] ^ C[9] ^ C[11] ^ C[12] ^

C[13];

NewCRC[6] = D[14] ^ D[13] ^ D[12] ^ D[10] ^ D[9] ^ D[6] ^ D[5] ^

D[1] ^ C[1] ^ C[5] ^ C[6] ^ C[9] ^ C[10] ^ C[12] ^

C[13] ^ C[14];

NewCRC[7] = D[15] ^ D[14] ^ D[13] ^ D[11] ^ D[10] ^ D[7] ^ D[6] ^

D[2] ^ C[2] ^ C[6] ^ C[7] ^ C[10] ^ C[11] ^ C[13] ^

C[14] ^ C[15];

NewCRC[8] = D[15] ^ D[14] ^ D[12] ^ D[11] ^ D[8] ^ D[7] ^ D[3] ^

C[3] ^ C[7] ^ C[8] ^ C[11] ^ C[12] ^ C[14] ^ C[15];

NewCRC[9] = D[15] ^ D[13] ^ D[12] ^ D[9] ^ D[8] ^ D[4] ^ C[4] ^

C[8] ^ C[9] ^ C[12] ^ C[13] ^ C[15];

NewCRC[10] = D[14] ^ D[13] ^ D[10] ^ D[9] ^ D[5] ^ C[5] ^ C[9] ^

C[10] ^ C[13] ^ C[14];

NewCRC[11] = D[15] ^ D[14] ^ D[11] ^ D[10] ^ D[6] ^ C[6] ^ C[10] ^

C[11] ^ C[14] ^ C[15];

NewCRC[12] = D[15] ^ D[8] ^ D[7] ^ D[4] ^ D[0] ^ C[0] ^ C[4] ^ C[7] ^

C[8] ^ C[15];

NewCRC[13] = D[9] ^ D[8] ^ D[5] ^ D[1] ^ C[1] ^ C[5] ^ C[8] ^ C[9];

NewCRC[14] = D[10] ^ D[9] ^ D[6] ^ D[2] ^ C[2] ^ C[6] ^ C[9] ^ C[10];

NewCRC[15] = D[11] ^ D[10] ^ D[7] ^ D[3] ^ C[3] ^ C[7] ^ C[10] ^

C[11];

nextCRC16_D16 = NewCRC;

end

endfunction

endmodule

 

 

может быть кто-нибудь покажет шаманский бубен для данного случая ?

Edited by a123-flex

Share this post


Link to post
Share on other sites

неа... :05: етот шаманский секрет я уже пробовал...

 

решилась кстати проблема путем шаманской комбинации Workspace/Delete simulation data.

 

но зато появилась другая:

 

в модуле содержится ссылка на функцию CRC16_D16.

BodyTmpCrc_p <= CRC16_D16(MainTrFifoDataOut_p[31:16],BodyTmpCrc_p);

, объявленную в модуле CRC16_D16.

Модуль подключен к проекту и успешно скомпилирован, путь к нему прописан в настройках проекта.

.............

может быть кто-нибудь покажет шаманский бубен для данного случая ?

фигасе! ну Вы и маладец! :07:

обращаетесь к функции которая внутри модуля! класс!

сделайте тогда уж (что проще кстати) - подключите только функцию и все

типа так 'include "path\...\path\xxxx\CRC16_D16.h" во всех модулях где планируете использовать вычисление црц

а из модуля CRC16_D16 нужно все выкинить кроме определения функции

и сам файл CRC16_D16.h нужно сделать не доступным для компиляции в ахдл

Share this post


Link to post
Share on other sites

извините, я на verilog писать только учус... а разве верилог хидерные файлы поддерживает :07: ?

да уж кстати гулять так гулять... может есть и механизм управления областями видимости тогда переменных и функций ?

 

может просто нужно published написать ?

Edited by a123-flex

Share this post


Link to post
Share on other sites

извините, я на verilog писать только учус... а разве верилог хидерные файлы поддерживает :07: ?

да уж кстати гулять так гулять... может есть и механизм управления областями видимости тогда переменных и функций ?

 

может просто нужно published написать ?

1)Идея в том чтобы юзать функции которые вы планируете использовать скажем в модуле приема и в модуле передачи - одни и теже функции подсчета црц. тоесть вообщем то можно инклудить любой файл :) . главное чтобы синтаксис верилога соблюдался

 

2)а механизма такого нету. ...в смысле это несинтезируемые конструкции, а для симуляции пожалуйста

правда я сам не юзал скажем такого

 

crc<= externalmodulename.FUNCTIONfromexternal(crc,data);

или

localvariable<= externalmodule.VARIABLEfromexternal;

имхо нужно стандарт читать.

да не понятно зачем эти ЧРЕЗЗАБОРНЫЕНОГОЧЕСАНИЯ :07:

но вот такое точно работает -

@(posedge externalUNITUNDERTEST.internalwiresignal)

Share this post


Link to post
Share on other sites

crc<= externalmodulename.FUNCTIONfromexternal(crc,data);

или

localvariable<= externalmodule.VARIABLEfromexternal;

имхо нужно стандарт читать.

да не понятно зачем эти ЧРЕЗЗАБОРНЫЕНОГОЧЕСАНИЯ :07:

 

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

 

GfpPkg GfpPkg ();  //"class" GfpPkg 
....
task automatic Work;
............
    crc16 = GfpPkg.Crc16(0,      length[15:8]);
    crc16 = GfpPkg.Crc16(crc16,  length[ 7:0]);
............
endtask

 

и само описание "класса"

module GfpPkg; 
function bit [15:0] Crc16(input bit [15:0] crc, input bit [7:0] data);
..............
endfunction
endmodule

 

 

Можно было это сделать с помошью настоящих классов SV, но времени разбираться не было, сделал в PV стиле.

Share this post


Link to post
Share on other sites

Дело в том, что мне идея организации библиотеки стандартных пользовательских функций не кажется ЧРЕЗЗАБОРНЫМНОГОЧЕСАНИЕМ :) .

Share this post


Link to post
Share on other sites

Дело в том, что мне идея организации библиотеки стандартных пользовательских функций не кажется ЧРЕЗЗАБОРНЫМНОГОЧЕСАНИЕМ :) .

о как! :) а мужики то не знают что Вы хотели в итоге то! :(

Я так делаю библиотеку

1) функции в один большой файл(сверху уже описал как юзать)

2) модули тоже но в другой большой файл

вот и всё :)

всё это синтезируемо!

ну или для симуляции как написал Вам уже уважаемый des00

Share this post


Link to post
Share on other sites

большой фэнкс :beer: за поддержку всем!!! :yeah:

 

2des00

а если не секрет что значит волшебная фраза "GfpPkg GfpPkg ();" ?

 

действительно, с ней симуляция идет на ура..

Edited by a123-flex

Share this post


Link to post
Share on other sites

а если не секрет что значит волшебная фраза "GfpPkg GfpPkg ();" ?

 

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

Рекомендую писать на одном ХДЛ, но читать оба.

Share this post


Link to post
Share on other sites

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

Рекомендую писать на одном ХДЛ, но читать оба.

 

Буду. Обещаю. :a14:

Edited by a123-flex

Share this post


Link to post
Share on other sites

Мда... благодарствую всем за помощь, но вот наконец-то мегадевайс дописан, пора в плисину заливаться. И Айс (точнее Синплифай) опять отказывается понимать че я от него хочу. А именно:есть модуль с библиотекой FBPackage.v

 

`ifdef _VCP

`else

`define library

`endif

 

`timescale 1ps / 1ps

 

module FarBPackage();

 

function [15:0] nextCRC16_D24;

input [23:0] Data;

input [15:0] CRC;

reg [23:0] D;

reg [15:0] C;

reg [15:0] NewCRC;

begin

D = Data;

C = CRC;

NewCRC[0] = D[22] ^ D[20] ^ D[19] ^ D[12] ^ D[11] ^ D[8] ^ D[4] ^ D[0] ^ C[0] ^ C[3] ^ C[4] ^ C[11] ^ C[12] ^ C[14];

NewCRC[1] = D[23] ^ D[21] ^ D[20] ^ D[13] ^ D[12] ^ D[9] ^ D[5] ^ D[1] ^ C[1] ^ C[4] ^ C[5] ^ C[12] ^ C[13] ^ C[15];

NewCRC[2] = D[22] ^ D[21] ^ D[14] ^ D[13] ^ D[10] ^ D[6] ^ D[2] ^ C[2] ^ C[5] ^ C[6] ^ C[13] ^ C[14];

NewCRC[3] = D[23] ^ D[22] ^ D[15] ^ D[14] ^ D[11] ^ D[7] ^ D[3] ^ C[3] ^ C[6] ^ C[7] ^ C[14] ^ C[15];

NewCRC[4] = D[23] ^ D[16] ^ D[15] ^ D[12] ^ D[8] ^ D[4] ^ C[0] ^ C[4] ^ C[7] ^ C[8] ^ C[15];

NewCRC[5] = D[22] ^ D[20] ^ D[19] ^ D[17] ^ D[16] ^ D[13] ^ D[12] ^ D[11] ^ D[9] ^ D[8] ^ D[5] ^ D[4] ^ D[0] ^ C[0] ^

C[1] ^ C[3] ^ C[4] ^ C[5] ^ C[8] ^ C[9] ^ C[11] ^ C[12] ^ C[14];

NewCRC[6] = D[23] ^ D[21] ^ D[20] ^ D[18] ^ D[17] ^ D[14] ^ D[13] ^ D[12] ^ D[10] ^ D[9] ^ D[6] ^ D[5] ^ D[1] ^ C[1] ^

C[2] ^ C[4] ^ C[5] ^ C[6] ^ C[9] ^ C[10] ^ C[12] ^ C[13] ^ C[15];

NewCRC[7] = D[22] ^ D[21] ^ D[19] ^ D[18] ^ D[15] ^ D[14] ^ D[13] ^ D[11] ^ D[10] ^ D[7] ^ D[6] ^ D[2] ^ C[2] ^ C[3] ^

C[5] ^ C[6] ^ C[7] ^ C[10] ^ C[11] ^ C[13] ^ C[14];

NewCRC[8] = D[23] ^ D[22] ^ D[20] ^ D[19] ^ D[16] ^ D[15] ^ D[14] ^ D[12] ^ D[11] ^ D[8] ^ D[7] ^ D[3] ^ C[0] ^ C[3] ^

C[4] ^ C[6] ^ C[7] ^ C[8] ^ C[11] ^ C[12] ^ C[14] ^ C[15] ;

NewCRC[9] = D[23] ^ D[21] ^ D[20] ^ D[17] ^ D[16] ^ D[15] ^ D[13] ^ D[12] ^ D[9] ^ D[8] ^ D[4] ^ C[0] ^ C[1] ^ C[4] ^

C[5] ^ C[7] ^ C[8] ^ C[9] ^ C[12] ^ C[13] ^ C[15];

NewCRC[10] = D[22] ^ D[21] ^ D[18] ^ D[17] ^ D[16] ^ D[14] ^ D[13] ^ D[10] ^ D[9] ^ D[5] ^ C[1] ^ C[2] ^ C[5] ^ C[6] ^

C[8] ^ C[9] ^ C[10] ^ C[13] ^ C[14];

NewCRC[11] = D[23] ^ D[22] ^ D[19] ^ D[18] ^ D[17] ^ D[15] ^ D[14] ^ D[11] ^ D[10] ^ D[6] ^ C[2] ^ C[3] ^ C[6] ^ C[7] ^

C[9] ^ C[10] ^ C[11] ^ C[14] ^ C[15];

NewCRC[12] = D[23] ^ D[22] ^ D[18] ^ D[16] ^ D[15] ^ D[8] ^ D[7] ^ D[4] ^ D[0] ^ C[0] ^ C[7] ^ C[8] ^ C[10] ^ C[14] ^

C[15];

NewCRC[13] = D[23] ^ D[19] ^ D[17] ^ D[16] ^ D[9] ^ D[8] ^ D[5] ^ D[1] ^ C[0] ^ C[1] ^ C[8] ^ C[9] ^ C[11] ^ C[15];

NewCRC[14] = D[20] ^ D[18] ^ D[17] ^ D[10] ^ D[9] ^ D[6] ^ D[2] ^ C[1] ^ C[2] ^ C[9] ^ C[10] ^ C[12];

NewCRC[15] = D[21] ^ D[19] ^ D[18] ^ D[11] ^ D[10] ^ D[7] ^ D[3] ^ C[2] ^ C[3] ^ C[10] ^ C[11] ^ C[13];

nextCRC16_D24 = NewCRC;

end

endfunction

endmodule

 

Далее есть еще один модуль, в котором я пытаюсь обратиться к функции первого:

 

module fifo_anal_rec_my(

rst,

clk,

din,

rd_en,

wr_en,

data_count,

dout,

empty,

full,

HeadErrorCnt,

BodyErrorCnt

);

 

FarBPackage tObj();

...................................

always @(posedge clk)

if (rst == 1'b1) begin

..................................

end

else begin

..................................

if ((din == FarBPackage.nextCRC16_D24({FifoMemory[WrPntr_p-1],din[15:8]},0))

..................................

 

синплифай говорит

 

@E: CG100 :"C:\My\My_work\Almaz\HDL\FAR_BOS\SDR\SDR_Model_FPGA\fifo_anal_rec_my.v":90:40:90:50|Reference to unknown variable FarBPackage

 

И ЧЕ ТЕПЕРЬ ДЕЛАТЬ ? :07:

Share this post


Link to post
Share on other sites

Переместить function [15:0] nextCRC16_D24 из module FarBPackage в module fifo_anal_rec_my вместо инстанциации FarBPackage tObj. Некоторые (все?) синтезаторы не любят, когда вызывается функция из другого модуля - слишком сложная для них конструкция.

Edited by vladv

Share this post


Link to post
Share on other sites

Мда... благодарствую всем за помощь, но вот наконец-то мегадевайс дописан, пора в плисину заливаться. И Айс (точнее Синплифай) опять отказывается понимать че я от него хочу. А именно:есть модуль с библиотекой FBPackage.v

 

 

 

FarBPackage tObj();

...................................

always @(posedge clk)

if (rst == 1'b1) begin

..................................

end

else begin

..................................

if ((din == FarBPackage.nextCRC16_D24({FifoMemory[WrPntr_p-1],din[15:8]},0))

..................................

 

синплифай говорит

 

@E: CG100 :"C:\My\My_work\Almaz\HDL\FAR_BOS\SDR\SDR_Model_FPGA\fifo_anal_rec_my.v":90:40:90:50|Reference to unknown variable FarBPackage

 

И ЧЕ ТЕПЕРЬ ДЕЛАТЬ ? :07:

ничего :)

написать вместо

if ((din == FarBPackage.nextCRC16_D24({FifoMemory[WrPntr_p-1],din[15:8]},0))

вот это

if ((din == tObj.nextCRC16_D24({FifoMemory[WrPntr_p-1],din[15:8]},0))

 

з.ы. Скажите а чем вам не понравилось идея подключать (инклудить) функции?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...