verilog中inout端口
总线总线操作
总线是模块之间数据流通的公共通道。适当的总线的位宽,配合适当的并行算术逻辑和步骤能显著提高专用信号处理逻辑电路的运算能力。
模块通过带控制端的三态门与总线进行连接。通过调整控制端的信号,来确定一段时间内,总线归哪些模块使用。但是任何时间段内,只能有一个模块进行发送,但可以有多个模块进行接收。
双向端口Inout
Inout是指该端口兼有input和output的属性,这两种属性不能同时使用。设计Inout的目的在于减少IO的开销。现在FPGA设计和外部存储器或CPU的数据交换频繁运用,同时引脚资源有限,使用双向端口设计可以成倍地节省数据引脚线。
在硬件上,通过三态门Buffer实现。具体电路如下图所示(摘自Xilinx Virtex-7 SelectIO UG471)
对于图中的IO pin,兼有input和Output的属性。
当T = 1时,IO(Device)的值来源于I(FPGA),处于输出状态。
当T = 0时,IO(Device)的值输出至O(FPGA),三态门处于关闭状态(高阻态)。
Inout总线接口的简单示例
module SampleOfBus
(
input clk,
input wren,
input link_bus , //向总线输出数据的控制电平
inout [11:0] DataBus //总线双向端口
);
reg [11:0] outsigs;
assign DataBus = link_bus ? outsigs : 12'hzzz ; //当link_bus为高电平时,总线将存于outsigs的计算结果输出。
// 当写使能信号wren至高时,将DataBus的数据+1,然后存入outsigs。
always @ (posedge clk) begin
if(wren)
outsigs <= DataBus + 12'd1 ;
else
;
end
endmodule
控制信号的相互配合由状态机控制。
写这篇文章的出发点是,遇到总线端口,不清楚高阻态位宽描述。后续内容,看后面会遇到什么疑问再补充。