verilog求助!急!
Xst:737 - Found 1-bit latch for signal <temp_0>. Latches may be generated from incomplete case or if statements. We do not recommend the use of latches in FPGA/CPLD designs, as they may lead to timing problems.
结果是将我的temp和i综合称为latch,我用chipscope进行调试的时候,发现i和temp永远是0,即赋值赋不进去,在网上找了好久,也参考了xilinx的官方解释,
说是有不完整的if,但是我检查了好多遍,发现我已经将所有情况考虑到了啊?
代码如下,请高手们指点啊!
always @(rst,cs,byte_done)
if (rst)
begin
i<=2'b00;
temp<=24'b000000000000000000000000;
end
else
begin
if (cs==data)
begin
if(byte_done==1)
begin
if(i==2'b00)
begin
temp[7:0]<=sr;
temp[23:8]<=temp[23:8];
i<=i+1;
end
else if(i==2'b01)
begin
temp[15:8]<=sr;
temp[23:16]<=temp[23:16];
temp[7:0]<=temp[7:0];
i<=i+1;
end
else if(i==2'b10)
begin
temp[23:16]<=sr;
temp[15:0]<=temp[15:0];
i<=i+1;
end
else
begin
temp<=temp; //qd
i<=i;
end
end
else
begin
temp<=temp; //qd
i<=i;
end
end
else if(cs==data_ack)
if(i==3)
begin
i<=2'b00;
temp<=temp;
end
else
begin
i<=i;
temp<=temp;
end
else
begin
i<=i;
temp<=temp;
end
end
这是你的作业吗?基本该得分10分,算是辛苦分
连阻塞和非阻塞概念都不清晰.
建议先别管这个程序的对错,先学习一下verilog的语法在写code吧
呵呵,是瞒不过各位高手啊。
我说名一下,这不是作业,而是想要做成asic的一部分,我在xilinx上先做验证。
我做了半年多的VHDL,接触verilog不过4天。
希望楼上的高手们给我一个指点吧,项目催的比较急。
上面的代码缺点在哪里?到底为什么被综合成了latch ?
还有,我认为我用的都是非阻塞赋值,呵呵,不知对不对。
temp<=temp
就是这个了
恩,这个我原先是没有加的。
加上去的作用其实就是不对temp进行任何操作。
我的目的是使temp在每种情况下都有赋值,从而避免生成latch,但是并没有成功。呵呵
如果学习了半年的VHDL,也应该知道组合逻辑的敏感列表需要填写完整吧?你的temp,i这些变量怎么没有加入到敏感列表中呢?但是在进程中却出现在了赋值符号的右端,似乎这样不是很好的可综合风格吧。而且你这个是纯粹的组合逻辑的话,能不能避免锁存器的产生,不太清楚,要是时序逻辑的话,完备的if条件可能才行。
时序电路用<= 非阻塞
组合电路用 = 阻塞
去看看基础的东西吧
latch是因为你的temp<=temp产生的,这是组合电路,没有时钟,temp<=temp或temp=temp都会生产latch的,当然如果是always @(posedge clk)
begin
temp<=temp;
end
是不会生产latch的。这些论坛上很多coding的规范,你自己看看吧
组合逻辑一般用阻塞赋值;及“=”;
小编的告警应该是if else没有配对完,中间缺省了对一些变量的赋值;综合工具会认为你想对信号进行保持,加之你用的是组合逻辑;因此会有latch生成;建议小编用时序逻辑,加一个clk编写代码,一来不会有latch,二来时序也会比较好
