fpga代码设计中,记得有一条“原则”,对于三态口,尽量在顶层模块使用三态,不要在内部子模块使用三态,不然会带来一系列问题,之前也是一直按照这个原则来设计代码的,图然然有点好奇,计算机中,挂在总线上的模块大多是三态的,相当于是一个个具有三态的子模块通过一个顶层连接到外部,那么作为使用硬件互联的FPGA也应该具有这样的能力,于是,使用Verilog写了段实现三态总线的代码。使用Quartus9.1编译,观察生成的RTL电路,验证想法。
首先设计具有三态口的子模块。,代码如下
module tricompoment1(
Clk,
iodata,
odata,
outen
);
input Clk;
input outen;
output [7:0]odata;
inout [7:0]iodata;
reg[7:0] data1,odata;
assign iodata=(outen)?data1:8'hzz;
always@(posedge Clk)
begin
data1<=data1+8'd1;
odata<=iodata;
end
endmodule
然后在顶层将具有三态口的多个模块相连,使得FPGA的引脚成为类似三态总线的存在。
module tribus(
Clk,
iodata,
odata1,<