kvv_spb 0 March 19, 2013 Posted March 19, 2013 · Report post Здравствуйте. Сразу прошу прощения за глупый вопрос, новичёк... Как мне передать константы другим модулям (другие файлы) в проекте? для примера кусок кода который нужно подправить... //файл с константами 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 Quote Share this post Link to post Share on other sites More sharing options...
ViKo 0 March 19, 2013 Posted March 19, 2013 · Report post Можно использовать `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 ); Quote Share this post Link to post Share on other sites More sharing options...
kvv_spb 0 March 19, 2013 Posted March 19, 2013 · Report post Спасибо получилось. но может есть варианты с: #(parameter Quote Share this post Link to post Share on other sites More sharing options...
Shivers 2 March 19, 2013 Posted March 19, 2013 · Report post Можно при вызове модуля передавать параметры http://www.asic-world.com/verilog/para_modules1.html последний пример Quote Share this post Link to post Share on other sites More sharing options...
Swup 0 March 20, 2013 Posted March 20, 2013 (edited) · Report post модуль описываете так (это конечно не единственный вариант): 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; Edited March 20, 2013 by Swup Quote Share this post Link to post Share on other sites More sharing options...
FatRobot 8 March 20, 2013 Posted March 20, 2013 · Report post небольшое замечание: defparam далеко не каждый синтезатор уважает defparam shift_reg_instance.const1 = new_parameter; Quote Share this post Link to post Share on other sites More sharing options...
doublekey 0 March 21, 2013 Posted March 21, 2013 · Report post Пару слов про SV package definitions; parameter cons1 = 8; endpackage ... import definitions::cons1; always @ (posedge clk) parallel_data = {serial_data, parallel_data[cons1-1:1]}; Quote Share this post Link to post Share on other sites More sharing options...
agate 0 March 25, 2013 Posted March 25, 2013 · Report post Можно использовать `define, а файл с ними подключать с помощью `include. Я бы к `define прибегал только в крайнем случае т.к он глобальный. А если сделать .v (include) фаил с параметрами то его можно `include в тело модуля где надо. Но самый распостраненный способ это передавать нужные парамеры во время instantiation. Quote Share this post Link to post Share on other sites More sharing options...
kvv_spb 0 March 25, 2013 Posted March 25, 2013 · Report post А если сделать .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 --это ругать на файл с параметром. Quote Share this post Link to post Share on other sites More sharing options...
BSACPLD 17 March 25, 2013 Posted March 25, 2013 · Report post Проще и правильнее (ИМХО), делать так: модуль: 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]) ) ; Quote Share this post Link to post Share on other sites More sharing options...
agate 0 March 25, 2013 Posted March 25, 2013 · Report post чего-то не получется. Задаю файл с параметром и пытаюсь его `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 директива должна быть в теле модуля например перед декларацией портов. Quote Share this post Link to post Share on other sites More sharing options...
ViKo 0 March 25, 2013 Posted March 25, 2013 · Report post чего-то не получется. Задаю файл с параметром и пытаюсь его `include в другой файл соответственно. Quartus 8.0 пишет: если поставить `include в самом начале файла (перед module ): ...нельзя декларировать больше 1-го раза Не совсем понял, что там у вас... но, если файл подключается в нескольких файлах, можно применить известный прием. В файле, который подключаем, пишем следующие строчки, и тогда в проекте он будет подключен один раз. `ifndef DEFS `define DEFS ... // Здесь ваши типы данных, константы и т.п. ... `endif Quote Share this post Link to post Share on other sites More sharing options...
agate 0 March 25, 2013 Posted March 25, 2013 · Report post `ifndef DEFS `define DEFS ... // Здесь ваши типы данных, константы и т.п. ... `endif Мне кажется в этом случае фаил будет включен только один раз. Ето ОК если внутри фаила `define (глобальные переменнные), но а если внутри параметры то это не подходит т.к параметры будут вклуючены в один фаил -модуль (певый в порядке компиляции). Quote Share this post Link to post Share on other sites More sharing options...
lexx 0 March 26, 2013 Posted March 26, 2013 · Report post Внутри тела: module (); parameter xxx = 0; parameter yyy = 0; endmodule Снаружи при вызове модуля: aaa #(new_parameter) bbb(); При этом только первый параметер будет изменен. Можно передать значение параметра из топового модуля, но необходимо спускаться по иерархии. Quote Share this post Link to post Share on other sites More sharing options...