在下面的一段verilog代码里,实现的是74ls164的计数功能,在quartusII编译的时候出现了下面的警告:warning:truncated value with size 32 to match size of target 找了一下提示说在 else if (ENT == 1 && ENP == 1) Q <= Q + 1'b1;里有问题,于是上网找了一下还真有:
因为没有指定位宽,所以系统提示默认为32位所以你将out <= out + 1 改为out <= out + 1'b1 就可以了。
module Vr74LS164(CLK,CLR_L, LD_L, ENP, ENT, D, Q, RCO);
input CLK,CLR_L, LD_L, ENP, ENT;
input [3:0] D;
output [3:0] Q;
output RCO;
reg [3:0] Q;
reg RCO;
always @ (posedge CLK) //Creat the counter f-f behavior
if (CLR_L == 0) Q <= 4'b0;
else if (LD_L == 0) Q <= D;
else if (ENT == 1 && ENP == 1) Q <= Q + 1'b1;
else Q <= Q;
always @ (Q or ENT)
if ((ENT == 1) && (Q == 4'd15)) RCO = 1;
else RCO = 0;
endmodule
改了之后还真是好了!哈哈!于是乎来记录一下!