很多时候我们进行数字电路设计的时候,我们综合出来的东西会有latch。latch会使得大型的硬件系统变得不可靠。那么我们如何消除这种现象呢?做法应该就那么几种,我举一个栗子,这样可以更好地说明这个问题。 在使用case语句的时候,如果使用的位数会大于case的数目,比如case的是两位数,只写了三种情况,还有一种情况没有写,那么就会导致latch。那么怎么避免这个问题呢?一般人会采取以下做法:
module dec(y,sel)
input [1:0]sel;
output [2:0]y;
reg [2:0]y;
always@(sel)
case(sel)
2'b00: y = 3'b001;
2'b01: y = 3'b010;
2'b10: y = 3'b100;
default: y = 3'b000;
endcase
endmodule
如果要是default只是为了消除latch的话,那么可以这样做。
module dec(y,sel)
input [1:0]sel;
output [2:0]y;
reg [2:0]y;
always@(sel)
case(sel)
2'b00: y = 3'b001;
2'b01: y = 3'b010;
2'b10: y = 3'b100;
default: y = 3'bxxx;
endcase
endmodule
这样做有什么好处呢?你看看综合出来的效果你就知道了。这个东西看似简单,可是还是需要很多工业设计经验才可得到的。 |