在FPGA设计过程中,难免会使用到双向信号,比如,1-wire bus,IIC bus等。
双向总线的使用实际上就是如何使用三态门输出高、低电平和高阻态。
下图是一个使用三态门的例子:
信号说明:
- IO:双向信号线
- IO_out:输出信号
- IO_in:输入信号
- en:三态门使能信号
使用思路:
- 使用使能信号en控制双向信号线IO是输出、还是高阻态
- 如果是输出,则把IO_out上的数据赋给双线数据线IO
- 如果是高阻态,则把IO的数据赋给IO_in,以获取总线上的输入
根据思路,可以写出上图的Verilog代码:
//双向总线写法测试模块
module inout_test(
inout IO //双线总线
);
reg IO_out; //总线输出
reg en; //三态使能信号
wire IO_in; //总线输入
assign IO_in = IO; //把双向总线的数据赋值给输入(高阻状态下)
assign IO = en ? IO_out : 1'bz; //根据使能信号,决定双向总线是输出还是高阻态
endmodule