[問題] 同個變數出現在不同always block

看板Electronics作者 (EEcheng)時間6年前 (2019/03/03 20:49), 編輯推噓4(407)
留言11則, 5人參與, 6年前最新討論串1/1
各位好, 我最近看到有一句話: 同一個變數不能出現在不同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

03/03 21:23, 6年前 , 1F
你第二個always block又不會影響到counter的值 當然可
03/03 21:23, 1F

03/03 21:23, 6年前 , 2F
以用
03/03 21:23, 2F

03/03 21:43, 6年前 , 3F
兩者邏輯是OK的,但是你可以把合出來的電路比較看看
03/03 21:43, 3F

03/03 22:52, 6年前 , 4F
設計的時候 我認為 通常一個訊號一個block 比較好
03/03 22:52, 4F

03/03 22:55, 6年前 , 5F
同一個變數 不能寫在不同block 是正確的
03/03 22:55, 5F

03/04 16:23, 6年前 , 6F
應該說同一個變數只能在一個block裡被改動,在其他blo
03/04 16:23, 6F

03/04 16:23, 6年前 , 7F
ck拿來當input是可以的
03/04 16:23, 7F

03/04 18:15, 6年前 , 8F
看完RTL後腦中要有電路啊,實際畫一下不難吧
03/04 18:15, 8F

03/04 18:18, 6年前 , 9F
你原先描述的叫multiple driver,代表用不同的block
03/04 18:18, 9F

03/04 18:18, 6年前 , 10F
同時描述同一根訊號的行為,後面的例子裡兩個DFF的o
03/04 18:18, 10F

03/04 18:18, 6年前 , 11F
utput本身就不同
03/04 18:18, 11F
文章代碼(AID): #1SUyrJU6 (Electronics)