作者eecheng87 (EEcheng)
看板Electronics
標題[問題] 同個變數出現在不同always block
時間Sun Mar 3 20:49:20 2019
各位好, 我最近看到有一句話: 同一個變數不能出現在不同always block
他給的理由是
always@(posedge clk)begin
if(reset) counter<=0;
end
always@(posedge clk)begin
if(c1==1)counter<=counter+1;
end
這樣的話不知道要歸零還是做累加
但是同一篇文章又出現以下程式碼(用來實現累加)
always@(posedge clk)begin
if(reset)
counter<=0;
else
counter<=(counter==10)?counter:counter+1;
end
always@(posedge clk)begin
if(reset)
temp<=0;
else if(counter<10)
temp<=temp+counter;
end
雖然counter一邊是在等號右邊一邊是在左邊, 但是這不是也會回到同樣的問題嗎?
不知道哪個block有優先權.
另外還有問一下,標題這句話這樣正確嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.236.123.78
※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1551617363.A.786.html
推 bookstar07: 你第二個always block又不會影響到counter的值 當然可 03/03 21:23
→ bookstar07: 以用 03/03 21:23
推 hsucheng: 兩者邏輯是OK的,但是你可以把合出來的電路比較看看 03/03 21:43
推 eamansf96xs: 設計的時候 我認為 通常一個訊號一個block 比較好 03/03 22:52
→ eamansf96xs: 同一個變數 不能寫在不同block 是正確的 03/03 22:55
推 Archer55b6: 應該說同一個變數只能在一個block裡被改動,在其他blo 03/04 16:23
→ Archer55b6: ck拿來當input是可以的 03/04 16:23
→ kyo547896321: 看完RTL後腦中要有電路啊,實際畫一下不難吧 03/04 18:15
→ kyo547896321: 你原先描述的叫multiple driver,代表用不同的block 03/04 18:18
→ kyo547896321: 同時描述同一根訊號的行為,後面的例子裡兩個DFF的o 03/04 18:18
→ kyo547896321: utput本身就不同 03/04 18:18