一个FPGA初学者容易出差错的地方:多驱动源的问题
例如:
一个主模块M,这个主模块包含3个子模块,M1,M2,M3。
Module M(clk, rst, din, cs, we,dout) input clk, rst; output cs, we; output [7:0] 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
上面典型的多驱动源问题就是,dout ,由于三个模块的数据输出对应dout ,这样就造成dout输出总线短路:(模块一输出全0,而同时模块2输出全1,这样就会造成输出短路)
解决这个问题的办法,定义三个数据总线寄存器,dout1, dout2,dout3 。 然后用一个三选1的选择器分时输出即可。
这是就是典型的实际电路与书写语法的表达式脱节了。
|