【发布时间】:2021-05-12 11:28:01
【问题描述】:
我需要在 FPGA 中制作 I2C 多路复用器。 从主到从的SCL信号应该通过多路复用器连接,没有问题。 SDA信号呢?它应该在两个方向上都起作用。直接连接,无需高阻或时钟同步。 分配 sda_slave0 = sda_master ;`
module i2c_mux
(
inout wire sda_master,
input wire scl_master,
inout wire sda_slave0,
output bit scl_slave0,
inout wire sda_slave1,
output bit scl_slave1
inout bit [1:0] select
)
always_comb
begin
unique case (select)
2'b00 : { scl_slave1, scl_slave0 } = { 1, scl_master };
2'b01 : { scl_slave1, scl_slave0 } = { scl_master, 1 };
2'b10 : { scl_slave1, scl_slave0 } = { 1, 1 };
2'b11 : { scl_slave1, scl_slave0 } = { 1, 1 };
end
assign sda_master = sda_slave0; // ?????????????????????
assign sda_slave0 = sda_master; // ?????????????????????
endmodule
【问题讨论】:
-
您的问题到底是什么?在任何情况下,您都不能为 always_comb 中的网络分配值。 Inouts 必须是 net,而不是 var。 (不要在那里使用位)。在进行任何 fpga 工作之前,您应该编译、模拟和验证您的模型。
标签: verilog system-verilog iverilog