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

Verilog vs. VHDL

на VHDL ПЗУ:

 

type rom_type is array(255 downto 0) of integer range 0 to 255;

constant rom: rom_type := (1, 2, 3, ....., 100);

 

Как на Verilog просто описать ПЗУ?

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


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

на VHDL ПЗУ:

 

type rom_type is array(255 downto 0) of integer range 0 to 255;

constant rom: rom_type := (1, 2, 3, ....., 100);

 

Как на Verilog просто описать ПЗУ?

В блоке initial, вестимо.

reg [15:0] Array[262143:0];

initial for(i = 0; i <262144; i = i + 1) Array[i] = i;

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


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

на VHDL ПЗУ:

 

type rom_type is array(255 downto 0) of integer range 0 to 255;

constant rom: rom_type := (1, 2, 3, ....., 100);

 

Как на Verilog просто описать ПЗУ?

компоненту поставить и через defparam

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


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

В Verilog2001 нашел

 

load_memory_tasks ::=

$readmemb ( " file_name " , memory_name [ , start_addr [ , finish_addr ] ] ) ;

| $readmemh ( " file_name " , memory_name [ , start_addr [ , finish_addr ] ] ) ;

 

Synplify похоже не поддерживает :((

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


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

Если говорить о синтезируемых описаниях, есть два способа

первый, сгенерить мегафункцию на Верилоге и подключить к своему проекту

второй, это оператор case. Во втором случае синтезатор сам решит, использовать встроенную память или нет.

Скачайте xst.pdf с сайта Xilinx и никого не надо будет спрашивать.

Verilog Code // xst.pdf

Following is Verilog code for a ROM with registered output.

module rominfr (clk, en, addr, data);

input clk;

input en;

input [4:0] addr;

output reg [3:0] data;

always @(posedge clk) begin

if (en)

case(addr)

4’b0000: data <= 4’b0010;

4’b0001: data <= 4’b0010;

4’b0010: data <= 4’b1110;

4’b0011: data <= 4’b0010;

4’b0100: data <= 4’b0100;

4’b0101: data <= 4’b1010;

4’b0110: data <= 4’b1100;

4’b0111: data <= 4’b0000;

4’b1000: data <= 4’b1010;

4’b1001: data <= 4’b0010;

4’b1010: data <= 4’b1110;

4’b1011: data <= 4’b0010;

4’b1100: data <= 4’b0100;

4’b1101: data <= 4’b1010;

4’b1110: data <= 4’b1100;

4’b1111: data <= 4’b0000;

default: data <= 4’bXXXX;

endcase

end

endmodule

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


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

"на VHDL получается проще...... "

Это точно. Все в одну строчку.

Если что исправить надо , адрес курсором будете отслеживать?

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


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

Если что исправить надо , адрес курсором будете отслеживать?

 

Нет конечно, я говорю о больших ПЗУ, я вычисляю содержимое ПЗУ, например в Матлабе, вывожу в файл, из файла копирую в исходник VHDL.

 

В Veriloge2001 есть подходящая функция $readmemh , но она не поддерживается синтезатором (надеюсь пока не поддерживается).

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


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

Нет конечно, я говорю о больших ПЗУ, я вычисляю содержимое ПЗУ, например в Матлабе, вывожу в файл, из файла копирую в исходник VHDL.

 

В Veriloge2001 есть подходящая функция $readmemh , но она не поддерживается синтезатором (надеюсь пока не поддерживается).

 

$readmemh - это системная функция, она и не может быть поддержена синтезатором (ток для сред моделирования) - чтобы иниц. на кристале нужно польз. директивами производителя и здесь VHDL не легче ни разу - см для примера UG012 от Xilinx стр. 118, 135

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


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

>>$readmemh - это системная функция, она и не может быть поддержена синтезатором (ток для сред моделирования)

 

А руководство Synplify 8.1 уже никто не читает, или синтез в XST принципиален?

 

 

The synthesis tool attaches an attribute, syn_init_val, to sequential elements

with initial values. The value of the attribute holds the initial value. The

compiler supports both procedural assignments and calls to verilog tasks

readmemb() and readmemh(), from within the initial block. When loading data

files with readmemb() and readmemh(), Verilog tasks the memory is loaded in

the order of its declaration range.

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


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

>>$readmemh - это системная функция, она и не может быть поддержена синтезатором (ток для сред моделирования)

 

А руководство Synplify 8.1 уже никто не читает, или синтез в XST принципиален?

 

 

The synthesis tool attaches an attribute, syn_init_val, to sequential elements

with initial values. The value of the attribute holds the initial value. The

compiler supports both procedural assignments and calls to verilog tasks

readmemb() and readmemh(), from within the initial block. When loading data

files with readmemb() and readmemh(), Verilog tasks the memory is loaded in

the order of its declaration range.

 

Synplify 8.1 выдал:

Ignoring initial statement

 

Он вобще понимает инициализацию ? :mellow:

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


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

Synplify 8.1 выдал:

Ignoring initial statement

 

>>Он вобще понимает инициализацию ?

Понимает, понимает. Случайно не пишет, что undriven?

Если да и надо ROM вставте фиктивную запись и никуда не подключайте we.

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


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

>>Если да и надо ROM вставте фиктивную запись и никуда не подключайте we.

 

 

Заработало !!! Спасибо !

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


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

//exemplar attribute U0 INIT_00 0101010101010101010000000000000000000000000000000000000000000000

//exemplar attribute U0 INIT_01 0100000000000000000000010101010101010101010000000000000000000001

//exemplar attribute U0 INIT_02 0000000101010101010101010100000000000000000000010101010101010101

//exemplar attribute U0 INIT_03 0101010101000000000000000000000101010101010101010100000000000000

//exemplar attribute U0 INIT_04 0000000000000020202020202020202020000000000000000000000101010101

//exemplar attribute U0 INIT_05 0808080808080808080000000000000000000040404040404040404040000000

//exemplar attribute U0 INIT_06 0200000000000000000000040404040404040404040000000000000000000008

//exemplar attribute U0 INIT_07 8000001010101010101010101000000000000000000000020202020202020202

 

Следующая конструкция может быть сгенерена из обычного бинарного файла. Поддерживаеться синтезатором Leonardo, но есть и для Symplify подобное. Всё это хозяйство можно подключть к проекту например так `include "<file_name>"

 

Но можно и по другому, как больше нравиться, конструкции синтезируемы. Подключть также по `include. Единственное нужно написать прогу конвертации в такой формат.

 

defparam RAMB4_S8_inst.INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;

defparam RAMB4_S8_inst.INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;

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


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

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

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

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

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

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

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

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

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

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