k2i 0 20 июня, 2005 Опубликовано 20 июня, 2005 · Жалоба на VHDL ПЗУ: type rom_type is array(255 downto 0) of integer range 0 to 255; constant rom: rom_type := (1, 2, 3, ....., 100); Как на Verilog просто описать ПЗУ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 56 20 июня, 2005 Опубликовано 20 июня, 2005 · Жалоба на VHDL ПЗУ: type rom_type is array(255 downto 0) of integer range 0 to 255; constant rom: rom_type := (1, 2, 3, ....., 100); Как на Verilog просто описать ПЗУ? <{POST_SNAPBACK}> В блоке initial, вестимо. reg [15:0] Array[262143:0]; initial for(i = 0; i <262144; i = i + 1) Array[i] = i; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 июня, 2005 Опубликовано 20 июня, 2005 · Жалоба на VHDL ПЗУ: type rom_type is array(255 downto 0) of integer range 0 to 255; constant rom: rom_type := (1, 2, 3, ....., 100); Как на Verilog просто описать ПЗУ? <{POST_SNAPBACK}> компоненту поставить и через defparam Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k2i 0 20 июня, 2005 Опубликовано 20 июня, 2005 · Жалоба В Verilog2001 нашел load_memory_tasks ::= $readmemb ( " file_name " , memory_name [ , start_addr [ , finish_addr ] ] ) ; | $readmemh ( " file_name " , memory_name [ , start_addr [ , finish_addr ] ] ) ; Synplify похоже не поддерживает :(( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 5 20 июня, 2005 Опубликовано 20 июня, 2005 · Жалоба Если говорить о синтезируемых описаниях, есть два способа первый, сгенерить мегафункцию на Верилоге и подключить к своему проекту второй, это оператор 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k2i 0 20 июня, 2005 Опубликовано 20 июня, 2005 · Жалоба на VHDL получается проще...... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 5 20 июня, 2005 Опубликовано 20 июня, 2005 · Жалоба "на VHDL получается проще...... " Это точно. Все в одну строчку. Если что исправить надо , адрес курсором будете отслеживать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k2i 0 20 июня, 2005 Опубликовано 20 июня, 2005 · Жалоба Если что исправить надо , адрес курсором будете отслеживать? <{POST_SNAPBACK}> Нет конечно, я говорю о больших ПЗУ, я вычисляю содержимое ПЗУ, например в Матлабе, вывожу в файл, из файла копирую в исходник VHDL. В Veriloge2001 есть подходящая функция $readmemh , но она не поддерживается синтезатором (надеюсь пока не поддерживается). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 20 июня, 2005 Опубликовано 20 июня, 2005 · Жалоба Нет конечно, я говорю о больших ПЗУ, я вычисляю содержимое ПЗУ, например в Матлабе, вывожу в файл, из файла копирую в исходник VHDL. В Veriloge2001 есть подходящая функция $readmemh , но она не поддерживается синтезатором (надеюсь пока не поддерживается). <{POST_SNAPBACK}> $readmemh - это системная функция, она и не может быть поддержена синтезатором (ток для сред моделирования) - чтобы иниц. на кристале нужно польз. директивами производителя и здесь VHDL не легче ни разу - см для примера UG012 от Xilinx стр. 118, 135 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilya79 0 21 июня, 2005 Опубликовано 21 июня, 2005 · Жалоба >>$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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k2i 0 21 июня, 2005 Опубликовано 21 июня, 2005 · Жалоба >>$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. <{POST_SNAPBACK}> Synplify 8.1 выдал: Ignoring initial statement Он вобще понимает инициализацию ? :mellow: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilya79 0 21 июня, 2005 Опубликовано 21 июня, 2005 · Жалоба Synplify 8.1 выдал: Ignoring initial statement >>Он вобще понимает инициализацию ? Понимает, понимает. Случайно не пишет, что undriven? Если да и надо ROM вставте фиктивную запись и никуда не подключайте we. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k2i 0 21 июня, 2005 Опубликовано 21 июня, 2005 · Жалоба >>Если да и надо ROM вставте фиктивную запись и никуда не подключайте we. Заработало !!! Спасибо ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andre_2006 0 13 июля, 2005 Опубликовано 13 июля, 2005 · Жалоба //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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться