vacikL 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба Приветствую. Подскажите: 1. Есть модуль на VHDL с параметром 16 bit. entity module_01 is generic ( BASE_ADDR : STD_LOGIC_VECTOR(15 downto 0) := x"e000" ); Port ( clk : in STD_LOGIC; data : in STD_LOGIC; ce : in STD_LOGIC; clk_cfg : in STD_LOGIC; addr_cfg : in STD_LOGIC_VECTOR (15 downto 0); dann_cfg : in STD_LOGIC_VECTOR (15 downto 0); dann_cfg_out: out STD_LOGIC_VECTOR (15 downto 0); dann_o : out STD_LOGIC ); end module_01; 2. Второй файл на Verilog, через generate, создаю несколько первых модулей. generate genvar i; for (i=0;i<8;i=i+1) begin:for_module_0 module_01 #( .BASE_ADDR(16'h2000+i*16) ) module_01_I( .clk(clk_G),// : in STD_LOGIC; .data(data_in_0[i]),// : in STD_LOGIC; .ce(ce_in_0[i]),// : in STD_LOGIC; .clk_cfg(clk_ISA),// : in STD_LOGIC; .addr_cfg(addr_ISA_S),// : in STD_LOGIC_VECTOR (15 downto 0); .dann_cfg(data_ISA_in),// : in STD_LOGIC_VECTOR (15 downto 0); .dann_cfg_out(),//: out STD_LOGIC_VECTOR (15 downto 0); .dann_o(data_in_0[i+1])// : out STD_LOGIC; ); end endgenerate Vivado выдает ошибку во втором файле на строке .BASE_ADDR(16'h2000+i*16) , пишет что разрядность входа 16 бит, а данные 32 бита. Подскажите, что делать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Realking 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба Приветствую. Подскажите: 1. Есть модуль на VHDL с параметром 16 bit. entity module_01 is generic ( BASE_ADDR : STD_LOGIC_VECTOR(15 downto 0) := x"e000" ); Port ( clk : in STD_LOGIC; data : in STD_LOGIC; ce : in STD_LOGIC; clk_cfg : in STD_LOGIC; addr_cfg : in STD_LOGIC_VECTOR (15 downto 0); dann_cfg : in STD_LOGIC_VECTOR (15 downto 0); dann_cfg_out: out STD_LOGIC_VECTOR (15 downto 0); dann_o : out STD_LOGIC ); end module_01; 2. Второй файл на Verilog, через generate, создаю несколько первых модулей. generate genvar i; for (i=0;i<8;i=i+1) begin:for_module_0 module_01 #( .BASE_ADDR(16'h2000+i*16) ) module_01_I( .clk(clk_G),// : in STD_LOGIC; .data(data_in_0[i]),// : in STD_LOGIC; .ce(ce_in_0[i]),// : in STD_LOGIC; .clk_cfg(clk_ISA),// : in STD_LOGIC; .addr_cfg(addr_ISA_S),// : in STD_LOGIC_VECTOR (15 downto 0); .dann_cfg(data_ISA_in),// : in STD_LOGIC_VECTOR (15 downto 0); .dann_cfg_out(),//: out STD_LOGIC_VECTOR (15 downto 0); .dann_o(data_in_0[i+1])// : out STD_LOGIC; ); end endgenerate Vivado выдает ошибку во втором файле на строке .BASE_ADDR(16'h2000+i*16) , пишет что разрядность входа 16 бит, а данные 32 бита. Подскажите, что делать. напиши .BASE_ADDR(16'(16'h2000+i*16)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vacikL 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба Не работает. дает ошибку на ' которая после первого 16 Вроде нашел: generate genvar i; for (i=0;i<8;i=i+1) begin:for_module_0 localparam [15:0]ddd = i*16; module_01 #( .BASE_ADDR(16'h2000+ddd) ) module_01_I( .clk(clk_G),// : in STD_LOGIC; .data(data_in_0[i]),// : in STD_LOGIC; .ce(ce_in_0[i]),// : in STD_LOGIC; .clk_cfg(clk_ISA),// : in STD_LOGIC; .addr_cfg(addr_ISA_S),// : in STD_LOGIC_VECTOR (15 downto 0); .dann_cfg(data_ISA_in),// : in STD_LOGIC_VECTOR (15 downto 0); .dann_cfg_out(),//: out STD_LOGIC_VECTOR (15 downto 0); .dann_o(data_in_0[i+1])// : out STD_LOGIC; ); end endgenerate Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба The default integer size is 32 bit in Verilog - проблема в этом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fitc 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба Не работает. дает ошибку на ' которая после первого 16 Вроде нашел: generate genvar i; for (i=0;i<8;i=i+1) begin:for_module_0 localparam [15:0]ddd = i*16; module_01 #( .BASE_ADDR(16'h2000+ddd) ) module_01_I( .clk(clk_G),// : in STD_LOGIC; .data(data_in_0[i]),// : in STD_LOGIC; .ce(ce_in_0[i]),// : in STD_LOGIC; .clk_cfg(clk_ISA),// : in STD_LOGIC; .addr_cfg(addr_ISA_S),// : in STD_LOGIC_VECTOR (15 downto 0); .dann_cfg(data_ISA_in),// : in STD_LOGIC_VECTOR (15 downto 0); .dann_cfg_out(),//: out STD_LOGIC_VECTOR (15 downto 0); .dann_o(data_in_0[i+1])// : out STD_LOGIC; ); end endgenerate А попробуйте ради интереса написать: .BASE_ADDR(16'h2000+i*16'h10) Еще возможно синтезнется такое (хотя это тоже не очень удобное решение): typedef logic[15:0] my_type;//написать перед generate ... .BASE_ADDR(my_type'(16'h2000+i*16)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopart 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба Подскажите, что делать. .BASE_ADDR(16'h2000+i[15:0]*16'd16) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vacikL 0 11 января, 2017 Опубликовано 11 января, 2017 · Жалоба .BASE_ADDR(16'h2000+i[15:0]*16'd16) Спасибо. Это работает. Решение простое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Opex 0 13 февраля, 2017 Опубликовано 13 февраля, 2017 · Жалоба Еще можно так писать .BASE_ADDR({'h2000+i*16}[15:0]) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться