如何在Verilog中指定弱反馈反相器
我有一个正常的逆变器IV1(.in(a),.out(b))由受控逆变器IV0(.c(ctrl),.in(d),.out(a))驱动。对于IV0,当ctrl为1时,将驱动输出。否则,它将保持浮动状态 同时,存在一个弱反馈逆变器IVW(.In(b),.out(a)) 当ctrl为1时,节点a的值由IV0驱动。当ctrl为0时,节点a由弱反馈逆变器驱动 当IV0驱动节点a时,弱反馈逆变器IVW也驱动节点a。如果它们将节点a驱动到不同的值,verilog将生成X 我怎样才能用verilog写这个如何在Verilog中指定弱反馈反相器,verilog,feedback,Verilog,Feedback,我有一个正常的逆变器IV1(.in(a),.out(b))由受控逆变器IV0(.c(ctrl),.in(d),.out(a))驱动。对于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和gate
级别将匹配
要指定弱逆变器,请执行以下操作:
not (weak1,weak0) u0 (out0,in1);
当ctrl为1时,我们实际上只有这一点:
IV1( .in(a), .out(b));
IVW( .in(b), .out(a));
这是一个可能导致振荡器不稳定的定时环路
IV1( .in(a), .out(b));
IVW( .in(b), .out(a));