Jump to content

    
Sign in to follow this  

Recommended Posts

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

 

Подскажите:

 

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

 

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

 

 

Share this post


Link to post
Share on other sites
Приветствую.

 

Подскажите:

 

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

 

 

 

 

Share this post


Link to post
Share on other sites

Не работает.

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

'

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

Share this post


Link to post
Share on other sites
Не работает.

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

'

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

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this