看板 Electronics 關於我們 聯絡資訊
各位好, 我最近看到有一句話: 同一個變數不能出現在不同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