[問題] 請教VHDL裡always的問題

看板Programming作者 (ROCMew)時間14年前 (2011/04/15 18:42), 編輯推噓2(2027)
留言29則, 3人參與, 最新討論串1/1
程式碼: module TEST( y, reset, clk ); output y; input reset, clk; reg c; assign y = c; always @( reset or clk ) begin if( reset ) c = 4'b0; else if( clk ) c = 4'b1; end endmodule 而跑出來的結果:http://images.plurk.com/1e341f7e72261158f38e7d4e9af0d46f.jpg
我的問題是: 在2ns的地方,clk為0 且 reset為0,照理說y的值應該不會變呀?!?! 可是結果卻是y變1 請高手幫忙解答,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.138.224.111 ※ 編輯: rocmewtwo 來自: 140.138.224.111 (04/15 18:51) ※ 編輯: rocmewtwo 來自: 140.138.224.111 (04/15 18:53)

04/15 19:16, , 1F
有if沒有else,這個電路是一個Latch.
04/15 19:16, 1F

04/15 19:26, , 2F
先確定你要的是Latch,再來看第二個if有沒
04/15 19:26, 2F

04/15 19:26, , 3F
有寫錯(或是第一個 )
04/15 19:26, 3F

04/15 21:35, , 4F
電路的概念做出來不會是一個一個if去跑
04/15 21:35, 4F

04/15 21:35, , 5F
這樣的condition應該算invalid的吧
04/15 21:35, 5F

04/15 21:36, , 6F
我猜測是undefined behavior
04/15 21:36, 6F

04/15 21:37, , 7F
c後面的東西是combinationl logic不是
04/15 21:37, 7F

04/15 21:37, , 8F
一般程式語言裡面的procedure
04/15 21:37, 8F

04/16 01:18, , 9F
抱歉我好像條件有寫錯了,以致於大家看
04/16 01:18, 9F

04/16 01:18, , 10F
錯方向...我改改
04/16 01:18, 10F
※ 編輯: rocmewtwo 來自: 140.138.224.111 (04/16 01:19)

04/16 01:20, , 11F
其實我的問題是出在reset和clk重疊的時
04/16 01:20, 11F

04/16 01:20, , 12F
後,他們的判斷好像就不符合if else的
04/16 01:20, 12F

04/16 01:21, , 13F
結果?! 就是2ns那裡的問題 謝謝
04/16 01:21, 13F

04/16 01:22, , 14F
出來的結果確定無誤,是在code打的時候
04/16 01:22, 14F

04/16 01:23, , 15F
不小心改到了 抱歉
04/16 01:23, 15F

04/17 02:14, , 16F
改用c<=4'b0看看
04/17 02:14, 16F

04/17 02:15, , 17F
同步跟非同步的差別
04/17 02:15, 17F

04/17 11:09, , 18F
回buganini: 改成 <= 好像也不行耶
04/17 11:09, 18F

04/17 13:00, , 19F
你把時間軸拉大看 0,1之間那一小撮毛
04/17 13:00, 19F

04/17 13:06, , 20F
簡單的解決方法是改變clk的phase
04/17 13:06, 20F

04/17 13:07, , 21F
然後你改<=是改4'b0還是兩個都改?
04/17 13:07, 21F

04/17 19:39, , 22F
只改了reset的那邊,clk沒動
04/17 19:39, 22F

04/17 19:40, , 23F
那撮毛有什麼特別意義嗎>O<
04/17 19:40, 23F

04/17 19:49, , 24F
如果把else if(clk)改成 else
04/17 19:49, 24F

04/17 19:50, , 25F
是可以正常跑沒錯,但是雙信號判斷
04/17 19:50, 25F

04/17 19:50, , 26F
好像就會出錯Q_Q
04/17 19:50, 26F

04/17 20:49, , 27F
那撮毛是有意義的啊 要放大看
04/17 20:49, 27F

04/17 20:49, , 28F
是電路的延遲造成時序上的誤差
04/17 20:49, 28F

04/17 20:49, , 29F
才產生出這樣的結果
04/17 20:49, 29F
文章代碼(AID): #1Dg24OAO (Programming)
文章代碼(AID): #1Dg24OAO (Programming)