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

Как вставить библиотечный примитив в Verilog module?

Работаю в среде Xilinx Foundation 3.1. В основном рисую схемы в Schematic Editor, но есть необходимость писать часть схемы на Verilogе. Плата с FPGA Xilinx XC5200 уже приобретена, поэтому соображения типа, перейти на более новый тип FPGA, новую среду и т.п. не в данном случае. Когда рисую схемы в Schematic Editor пользуюсь библиотекой для XC5200, она задаётся в начале проектирования в соответствии с типом FPGA. В схемах запросто втаскиваю, например, библиотечный макрос счётчика на 4 бита: CB4CE. Необходимо написать макрос на Verilogе, включающий этот счётчик:

module e70 (N20, OU) ;

input N20 ; wire N20;
output OU ;
//reg OU ;// add your declarations here
wire provod1;
// add your code here
CB4CE cnt (.CE(1'b1), .C(N20), .CLR(1'b0),.Q0(),.Q1(),.Q2(),.Q3(), .CEO(provod1));
CB4CE cnt2 (.CE(provod1), .C(N20), .CLR(1'b0),.Q0(),.Q1(),.Q2(),.Q3(OU));
endmodule

Создаю две сущности этого счётчика и соединяю провода. Но транслятор во время сборки проекта фиксирует ошибку:

Checking expanded design ...
ERROR:NgdBuild:432 - logical block 'cnt' with type 'CB4CE' is unexpanded
ERROR:NgdBuild:432 - logical block 'cnt2' with type 'CB4CE' is unexpanded
ERROR:NgdBuild:456 - logical net '_Logic1_' has both active and tristate
   drivers
ERROR:NgdBuild:456 - logical net 'N_N20' has both active and tristate drivers
ERROR:NgdBuild:456 - logical net '_Logic0_' has both active and tristate
   drivers

Такое впечатление, что в Foundation 3.1 можно только писать на самом языке Verilog и в результате получается модуль, состоящий только из примитивов библиотеки simprims, содержащей только вентили AND, OR, XOR и так далее.

Как добиться, чтобы макросы, созданные в других моих же проектах, с помощью Schematic Editor, VHDL, Verilog , можно было использовать в моих новых проектах?

Заранее, благодарю за ответы и советы.

 

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

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


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

По идее вы должны сообщить в этом же файле название библиотеки откуда вы взяли этот компонент. А иначе он действительно не понимает что это за буковки...

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


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

4 часа назад, KA3AKOB сказал:

Работаю в среде Xilinx Foundation 3.1. В основном рисую схемы в Schematic Editor, но есть необходимость писать часть схемы на Verilogе.

Как добиться, чтобы макросы, созданные в других моих же проектах, с помощью Schematic Editor, VHDL, Verilog , можно было использовать в моих новых проектах?

Описывать базовые примитивы на языке - это путь в никуда. 

Подход простой. выделаете в схематике функционально законченный кусок (одноклоковая синхронизация, на входе регистровая структура, на выходе регистровая структура. Скачиваете с сайта xilinx документ xst.pdf. и вперед. для начала создаете свой счетчик с нужной разрядности, взяв пример из этого документа.

переходите на поведенческое описание на языке. Ваше преимущество, вы знаете все базовые примитивы. Ваша задача - чтоб ваше поведенческое описание легло на эти базовые примитивы. Правильность текста отрабатывайте с помощью RTL просмотрщика. (Влоб схематик на язык не перевести. На языке проявляется другое мышление)

 

 

 

module ct_cb8ce  // verilog 2001
(
input     c,
input  clr,
input     ce,
output out_c
);

reg [7:0] counter = 8'd0;

always @(posedge c or posedge clr)
begin
if (clr)            counter <= 8'd0;
else if (ce)    counter <= counter + 1'b1;
end

assign out_c = counter [7];

endmodule
 

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


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

Насколько я помню, можно было схематик из Xilinx Foundation 4.1 версии транслировать в VHDL. Среда очень древняя, verilog 2001 она не поддерживала, только 95. Я помнится написал на verilog для XC4000 полином crc16. Скачайте лучше Xilinx Foundation 4.1 там есть больше возможностей. Но по мне такой дичью лучше не заниматься, а переходить на что-то посовременнее типа UltraScale и Vivado.

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

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


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

Представляется, что Вам надо, как то оформить Верилоговский модуль как "черный ящик" (некий SYM) с прикрепленным файлом списка цепей (ngc, edn, ...), протранслировав предварительно этот модуль отдельно и затем вставить этот модуль в вашу схему.

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


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

11.02.2022 в 19:05, MegaVolt сказал:

По идее вы должны сообщить в этом же файле название библиотеки откуда вы взяли этот компонент. А иначе он действительно не понимает что это за буковки...

Ну, да. Нужно сообщить название библиотеки. И где это название вписать? В какой именно текст на Verilogе? Когда рисую в Schematic Editorе, то  в Project Managerе указываю из какой библиотеки таскать макросы, созданные в прошлых проектах, в текущий проект. blob.png.48fe174b8d06f59a6a7f7b8e52abb909.png

Слева в Attached Libraries Выбираем нужную библиотеку, d00, например, нажимаем Add>> и можем таскать d00-ные макросы на схему. Но это на схеме. 

А я хочу втащить в текущий проект.  А он уже пишется на Verilogе. Пока один единственный модуль e70. Пример его см. выше. Что именно надо написать в тексте e70.v, чтобы макрос CB4CE втащился в проект? Библиотека xc5200 уже присоединена, макросы из неё в тексте на верилоге использовать нельзя. Что написать в тексте, чтобы было можно?

 

blob.png

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

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


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

11.02.2022 в 21:31, sazh сказал:

 

 

module ct_cb8ce  // verilog 2001
(
input     c,
input  clr,
input     ce,
output out_c
);

reg [7:0] counter = 8'd0;

always @(posedge c or posedge clr)
begin
if (clr)            counter <= 8'd0;
else if (ce)    counter <= counter + 1'b1;
end

assign out_c = counter [7];

endmodule
 

Плата с FPGA Xilinx XC5200 уже приобретена, поэтому соображения типа, перейти на более новый тип FPGA, новую среду и т.п. не в данном случае. 

И Foundationа кроме 3.1 другого нет. И не надо. Я подозреваю, что пропустил в информациях что-то, что позволяет взять Xilinxовскую библиотеку для xc5200  и так же как для схем использовать модули из этой библиотеки в модуле на верилоге. Очень странно, если такой возможности в среде нет.  Мне не счётчик на верилоге надо написать. Кстати, макрос на верилоге я в схемном проекте написать могу и использовать могу, а когда наоборот: в вериложном проекте вставить схемный примитив не могу: unexpanded. Это мне и кажется странным.

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


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

33 минуты назад, KA3AKOB сказал:

Ну, да. Нужно сообщить название библиотеки. И где это название вписать? В какой именно текст на Verilogе? Когда рисую в Schematic Editorе, то  в Project Managerе указываю из какой библиотеки таскать

`include  "<file_name>" 

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


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

5 часов назад, KA3AKOB сказал:

Плата с FPGA Xilinx XC5200 уже приобретена, поэтому соображения типа, перейти на более новый тип FPGA, новую среду и т.п. не в данном случае. 

И Foundationа кроме 3.1 другого нет. И не надо. Я подозреваю, что пропустил в информациях что-то, что позволяет взять Xilinxовскую библиотеку для xc5200  и так же как для схем использовать модули из этой библиотеки в модуле на верилоге. Очень странно, если такой возможности в среде нет.  Мне не счётчик на верилоге надо написать. Кстати, макрос на верилоге я в схемном проекте написать могу и использовать могу, а когда наоборот: в вериложном проекте вставить схемный примитив не могу: unexpanded. Это мне и кажется странным.

 

Может статься, эти примитивы только для схематика предназначены.

Попробуйте примитив 

BUFG BUFG_inst (

.O(O), // Clock buffer output

.I(I) // Clock buffer input

втянуть.

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

Я могу понять про 5титысячник. Я не могу понять про Foundation.  Найдите какой нибудь старенький айс, поддерживающий это семейство.  С синтезатором, который в должной мере поддерживает язык.

По мне, так надо оставить свои наработки в схематике только для поддержки проектов, которые были сделаны в схематике, дорабатывать только в схематике.

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

module ct_div
#(
parameter xtal_clk = 33_333_333,
                  baud = 115_200
)
(
input            clk,
input            s_rst_n,
output        enable_wr
);

///////////////// $clog2
function integer clogb2 (input [31:0] value);
begin
value = value - 1;
for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
value = value >> 1;
end
endfunction
/////////////////

localparam clk_div = xtal_clk / baud,
             ct_width = clogb2(clk_div);   //ct_width = $clog2(clk_div)

reg [ct_width-1:0] ct = {ct_width{1'b0}};
reg                     enable_wr_rg = 1'b0;

always @(posedge clk)
begin
if (s_rst_n == 1'b0)                ct <= {ct_width{1'b0}};
else if (ct == clk_div-1)        ct <= {ct_width{1'b0}};
else                                    ct <= ct + 1'b1;

enable_wr_rg <= (ct == clk_div-1);
end

assign enable_wr = enable_wr_rg;

endmodule

 

 

 

 

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


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

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

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

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

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

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

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

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

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

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