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

Generate Verilog

Приветствую.

 

Подскажите:

 

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 бита.

 

Подскажите, что делать.

 

 

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


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

Приветствую.

 

Подскажите:

 

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))

 

 

 

 

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


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

Не работает.

дает ошибку на

'

которая после первого 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

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


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

Не работает.

дает ошибку на

'

которая после первого 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))

 

 

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


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

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

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

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

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

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

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

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

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

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