作者Goodgybank (好gy银行)
看板Electronics
标题[问题] verilog这种写法会造成latch吗?
时间Fri Aug 9 21:11:26 2013
不知道是不是下面这段code问题
if(mapsize==0)begin // 8*8->4*4
location<=location+18; mapsize<=1;
end
else if(mapsize==1)begin //4*4->2*2
location<=location+9; mapsize<=2;
end
else mapsize<=2; //2*2
在合成电路时他说我的mapsize被合成latch..
在来是以下这段 (看state来决定接下来做甚麽动作)
else if(c_state==STAND_BY)begin
cen <= 1;
OUT_VALID <= 0;
flag_rotate<=0;
end
else if(c_state==Input)begin
wen <= 0;
if(IN_VALID==1)begin
cen<= 0;
IN_A<=IN;
addrA<=count_in;
R[count_in]<=IN; //rotate use
end
else if(count_in==64)begin
cen<= 1;
OUT_VALID<=1;
OUT<= 0;
wen<=1;
end
else;
end //end input
else if(c_state==Output)begin
cen<=0;wen<=1;counter<=counter+1;
if(mapsize==0)begin
if (flag_rotate==1)begin
cen<=0; wen<=0;
IN_A<=R[count_out];
addrA<=count_out;
OUT_VALID<=1;
OUT<=R[count_out];
end
else addrA<=count_out;
end //8*8output end
else if(mapsize==1) addrA<=location+count_out;
else if(mapsize==2) addrA<=location+count_out;
else;
if(flag_rotate==0)begin
if(counter>=2)begin //为了SRAM的delay 多等2clk
OUT_VALID <= 1;
OUT <= outA;
end
else;
end
else;
end //end output
else;
在合成电路时他说c_state变latch...
想请问是甚麽原因
有google查了一下 if else if else条件都有写满...
然後还有变数都有设定了
想求救一下版上verilog神手...
如果有需要完整版的code 小弟会马上附上
谢谢..
小弟快被latch搞疯了... 才第三次写verilog...
快崩溃了T_T...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.235.83
1F:→ wju1230:我觉得是在else中location必须保持原本值 所以有latch 08/10 00:02
2F:→ michael6172:拿去Quartus合完,看RTL view就知道啦 08/10 23:13
3F:→ Goodgybank:小弟在试试看~ 08/10 23:41
小弟已经把latch给用好了~
是在另一段code有问题
简单举例
if(a==1)begin
b<=0; c<=0;
end
else begin
b<=1;
c<=0;
end
就是任何变数在每个if else if else都要写满
至於w大说的 location<=location为何没写不会形成latch 就不知道了
有查了一下版上说写了反而有latch? combo loop 的
这部分还请教其他的大大~
谢谢~~
※ 编辑: Goodgybank 来自: 210.64.163.158 (08/11 09:05)
4F:→ lovepy:location那可能是因为edge trigger吧 所以出来是原来的DFF 08/11 16:00
5F:→ lovepy:有时没写清楚时 HDL comipler会用他的演算法去判断 08/11 16:01
6F:→ lovepy:程式跑出来的结果是不是你原本的意思就又是另一回事了 08/11 16:02