[問題] verilog這種寫法會造成latch嗎?
不知道是不是下面這段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
→
08/10 00:02, , 1F
08/10 00:02, 1F
→
08/10 23:13, , 2F
08/10 23:13, 2F
→
08/10 23:41, , 3F
08/10 23:41, 3F
小弟已經把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)
→
08/11 16:00, , 4F
08/11 16:00, 4F
→
08/11 16:01, , 5F
08/11 16:01, 5F
→
08/11 16:02, , 6F
08/11 16:02, 6F