【发布时间】:2013-09-22 18:32:10
【问题描述】:
我有一个由受控逆变器 IV0(.c(ctrl),.in(d),.out(a)) 驱动的普通逆变器 IV1(.in(a),.out(b))。对于 IV0,当 ctrl 为 1 时,驱动输出。否则,它会保持浮动。
同时,还有一个弱反馈反相器IVW(.in(b), .out(a))。
当ctrl为1时,节点a的值由IV0驱动。当ctrl为0时,节点a由弱反馈反相器驱动。
当IV0驱动节点a时,弱反馈反相器IVW也驱动节点a。如果他们将节点 a 驱动到不同的值,verilog 将产生 X。
我怎样才能用verilog写这个?
原答案
module buf(input d,ctrl, output b);
reg a,b;
always @ (d or ctrl) begin
if(ctrl==1) begin
a=~d;
b=~a;
end
else begin
a=~b;
b=~a;
end
end
endmodule
摩根评论
这在综合后的工作方式与您当前的 RTL 不同 模拟。您确实需要使用 always @* 来确保 RTL 和门 级别将匹配。
【问题讨论】: