wo20092010 发表于 2010-9-6 07:06:47

关于多驱动源的问题

大家好,我是一个Verilog新手。 最近经常遇到一个多驱动源的问题,很是头痛,想请教大家一下。

问题是这样的:一个主模块M,这个主模块包含3个子模块,M1,M2,M3。

Module M(clk, rst, din, cs, we,dout)
   input             clk, rst;
    output         cs, we;
    output dout;
    wire ....
    reg....
   
    M1(   .m1_clk(clk),
             .m1_rst(rst),
             .m1_cs(cs),
             .m1_we(we)
             .m1_dout(dout)
         );
   
    M2(   .m2_clk(clk),
             .m2_rst(rst),
             .m2_cs(cs),
             .m2_we(we)
             .m2_dout(dout)
         );

   M3(   .m3_clk(clk),
             .m3_rst(rst),
             .m3_cs(cs),
             .m3_we(we)
             .m3_dout(dout)
         );
....
endmodule

因为m1,m2和m3的代码比较多,所以写成了这种2层的结构,把他们对应到主模块m里面。

但是象上面这样写,系统提示,多驱动错误,即m1,m2,m3中的cs,we 和dout 信号都同时对应到了,主模块中的 cs, we, dout信号。

修改了一下,分别取了不同的名字,但向下就不知道怎么操作了,

M1(   .m1_clk(clk),
             .m1_rst(rst),
             .m1_cs(cs_1),
             .m1_we(we_1)
             .m1_dout(dout_1)
         );
   
    M2(   .m2_clk(clk),
             .m2_rst(rst),
             .m2_cs(cs_2),
             .m2_we(we_2)
             .m2_dout(dout_2)
         );

   M3(   .m3_clk(clk),
             .m3_rst(rst),
             .m3_cs(cs_3),
             .m3_we(we_3)
             .m3_dout(dout_3)
         );

请高人指点,不胜感激

njithjw 发表于 2010-9-9 22:24:07

你这3个模块的输出应该不会同时有效,后面可以做1个MUX进行选择,只选择当前有效的数据输出。
页: [1]
查看完整版本: 关于多驱动源的问题