kvv_spb 0 19 марта, 2013 Опубликовано 19 марта, 2013 · Жалоба Здравствуйте. Сразу прошу прощения за глупый вопрос, новичёк... Как мне передать константы другим модулям (другие файлы) в проекте? для примера кусок кода который нужно подправить... //файл с константами module constant #(parameter cons1=8); endmodule //файл куда нужно передать константу cons1 module shift_reg(clk,serial_data,parallel_data); input clk; input serial_data; output reg [7:0]parallel_data; always @ (posedge clk) parallel_data = {serial_data, parallel_data[[b]cons1[/b]-1:1]}; endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 19 марта, 2013 Опубликовано 19 марта, 2013 · Жалоба Можно использовать `define, а файл с ними подключать с помощью `include. `define MEMMAX 14 // 2^14 words (16K) `include "xxx_Defs.sv" module Memory_m ( input bit clkf, //!< fast clock input bit clkm, //!< main clock ... input bit [`MEMMAX-1:9] memszen, //!< memory size ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kvv_spb 0 19 марта, 2013 Опубликовано 19 марта, 2013 · Жалоба Спасибо получилось. но может есть варианты с: #(parameter Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shivers 0 19 марта, 2013 Опубликовано 19 марта, 2013 · Жалоба Можно при вызове модуля передавать параметры http://www.asic-world.com/verilog/para_modules1.html последний пример Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 20 марта, 2013 Опубликовано 20 марта, 2013 (изменено) · Жалоба модуль описываете так (это конечно не единственный вариант): module shift_reg #( parameter const1= 8) //параметр по умолчанию ( input clk, input serial_data, output reg [7:0]parallel_data ); always @ (posedge clk) parallel_data = {serial_data, parallel_data[cons1-1:1]}; endmodule При создании копии модуля объявление такое: shift_reg shift_reg_instance ( .clk( ), // в скобках wire которые связывают модули .serial_data(), .parallel_data () ); defparam shift_reg_instance.const1 = new_parameter; Изменено 20 марта, 2013 пользователем Swup Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 0 20 марта, 2013 Опубликовано 20 марта, 2013 · Жалоба небольшое замечание: defparam далеко не каждый синтезатор уважает defparam shift_reg_instance.const1 = new_parameter; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doublekey 0 21 марта, 2013 Опубликовано 21 марта, 2013 · Жалоба Пару слов про SV package definitions; parameter cons1 = 8; endpackage ... import definitions::cons1; always @ (posedge clk) parallel_data = {serial_data, parallel_data[cons1-1:1]}; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
agate 0 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба Можно использовать `define, а файл с ними подключать с помощью `include. Я бы к `define прибегал только в крайнем случае т.к он глобальный. А если сделать .v (include) фаил с параметрами то его можно `include в тело модуля где надо. Но самый распостраненный способ это передавать нужные парамеры во время instantiation. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kvv_spb 0 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба А если сделать .v (include) фаил с параметрами то его можно `include в тело модуля где надо. чего-то не получется. Задаю файл с параметром и пытаюсь его `include в другой файл соответственно. Quartus 8.0 пишет: если поставить `include в самом начале файла (перед module ): ...нельзя декларировать больше 1-го раза если в тексте то говарит что то вроде этого : Error (10170): Verilog HDL syntax error at cons.v(3) near text "module"; expecting ";", or ":", or "@", or "end", or an identifier ("module" is a reserved keyword ), or a system task, or "{", or a sequential statement --это ругать на файл с параметром. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 9 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба Проще и правильнее (ИМХО), делать так: модуль: module ETH1000MDIO #( parameter [11:0] CLKDIV = 12'd800, parameter [4:0] PHY_ADDR = 5'b00000 ) ( input clk, input reset, input [7:0] data_in, input wr_mdio_ctrl, input wr_reg_address, input wr_data_l, input wr_data_h, output [7:0] data_out_l, output [7:0] data_out_h, output ready, output reg set_1000, output mdc, inout mdio ) ; Вставка в проект: ETH1000MDIO #( .CLKDIV (12'd500), .PHY_ADDR (5'b00000) ) SYS_ETH1000MDIO ( .clk (clk_cpu), .reset (reset_mac), .data_in (data_out), .wr_mdio_ctrl (IOW_MDIO_CTRL[i]), .wr_reg_address (IOW_MDIO_REG_ADDR[i]), .wr_data_l (IOW_MDIO_DATAL[i]), .wr_data_h (IOW_MDIO_DATAH[i]), .data_out_l (IN_MDIO_DATAL[i]), .data_out_h (IN_MDIO_DATAH[i]), .ready (STATUS_MAC[i][5]), .set_1000 (), .mdc (enet_mdc[i]), .mdio (enet_mdio[i]) ) ; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
agate 0 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба чего-то не получется. Задаю файл с параметром и пытаюсь его `include в другой файл соответственно. Quartus 8.0 пишет: если поставить `include в самом начале файла (перед module ): ...нельзя декларировать больше 1-го раза если в тексте то говарит что то вроде этого : Error (10170): Verilog HDL syntax error at cons.v(3) near text "module"; expecting ";", or ":", or "@", or "end", or an identifier ("module" is a reserved keyword ), or a system task, or "{", or a sequential statement --это ругать на файл с параметром. include фаил должен содержать только набор типа parameter XXX=<value>; parameter YYY=<value>; `include директива должна быть в теле модуля например перед декларацией портов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба чего-то не получется. Задаю файл с параметром и пытаюсь его `include в другой файл соответственно. Quartus 8.0 пишет: если поставить `include в самом начале файла (перед module ): ...нельзя декларировать больше 1-го раза Не совсем понял, что там у вас... но, если файл подключается в нескольких файлах, можно применить известный прием. В файле, который подключаем, пишем следующие строчки, и тогда в проекте он будет подключен один раз. `ifndef DEFS `define DEFS ... // Здесь ваши типы данных, константы и т.п. ... `endif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
agate 0 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба `ifndef DEFS `define DEFS ... // Здесь ваши типы данных, константы и т.п. ... `endif Мне кажется в этом случае фаил будет включен только один раз. Ето ОК если внутри фаила `define (глобальные переменнные), но а если внутри параметры то это не подходит т.к параметры будут вклуючены в один фаил -модуль (певый в порядке компиляции). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 26 марта, 2013 Опубликовано 26 марта, 2013 · Жалоба Внутри тела: module (); parameter xxx = 0; parameter yyy = 0; endmodule Снаружи при вызове модуля: aaa #(new_parameter) bbb(); При этом только первый параметер будет изменен. Можно передать значение параметра из топового модуля, но необходимо спускаться по иерархии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться