使用define宏实例化模块名称

时间:2016-12-14 09:36:31

标签: verilog system-verilog

我试图用不同的实例名称多次实例化verilog模块,以便它依赖于宏定义。它是这样的

`define CHAN_NO 0
mymodule #(.chan_no(`CHAN_NO)) inst<CHAN_NO> (
    .Addr     (ADDR_A  )
   ,.Data     (DATA_A  )
   ,.Clk      (CLK     )
   );

当然这是一个简化的例子,因为实例化和宏来自不同的文件 这是可能的,如果是的话,这种实例化的正确方法是什么。

1 个答案:

答案 0 :(得分:2)

当然有可能。你应该使用generate block:

pages = [
    {title: 'My Trips', component: TripsPage},
    {title: 'Messages', component: MessagesPage},
    {title: 'Profile', component: ProfilePage}
];

精化后树应该如下所示(例如CHAN_NO = 3):

genvar i;
generate
    for (i = 0; i < `CHAN_NO; i=i+1) 
    begin : mymodule_instance
        mymodule #(.chan_no(i)) mymodule_inst (
            .Addr     (ADDR_A  )
           ,.Data     (DATA_A  )
           ,.Clk      (CLK     )
       );
    end
endgenerate

修改 如果您想拥有一个依赖于宏的实例名称,那么您可以这样做:

mymodule_instance[0]
   mymodule_inst
mymodule_instance[1]
   mymodule_inst
mymodule_instance[2]
   mymodule_inst