作者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