微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 双向端口verilog 这样写 会游什么问题?

双向端口verilog 这样写 会游什么问题?

时间:10-02 整理:3721RD 点击:
module duo(a,b,en);
inout[3:0] a,b;
wire [3:0]a,b;
input en;
assign a=(en)?b:1'bz;
assign b=(en)?a:1'bz;
endmodule

tri a, b;

两个三态门用同一个使能,按你上面的赋值是有问题的,有效时,既做输入又做输出,冲突了。

当en有效的时候
a = b
b = a
这样实在意图在哪里呢?组合环路?

你的真实意图是不是想让2个端口在不使能的时候为高阻断开态呢,如果是的话,光靠上面的2句话是不行的。
inout [7:0]dinout;
input clk;
input rd;
input [7:0]dout;
output [7:0]din;
reg [7:0]din;
reg [7:0]dout_temp;
assign dinout = (!rd) ? dout_temp : 8'bzzzzzzzz;
always @(posedge clk)
begin
if (!rd)
        dout_temp <= dout;
else
        din <= dinout;
end
可以参考一下

谢谢楼上的大家的回答。我其实是用不同的信号来区分的 ,只不过,这两个信号在某个时段会出现同值....

a,b好像不能是wire型吧,得是tri型

IO口物理上只能一个方向吧,

论坛里边有一篇文章专门讲怎么仿真双向口的,可以看看。

双向端口一般有专门的cell或buf处理,建议只是在最顶层改成双向口,内部都用单向口做。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top