一个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的选择器分时输出即可。
这是就是典型的实际电路与书写语法的表达式脱节了。
此帖出自
小平头技术问答
一周热门 更多>