作者rocmewtwo (ROCMew)
看板Programming
標題[請益] 請教VHDL裡always的問題
時間Fri Apr 15 18:42:29 2011
程式碼:
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)
1F:推 Leadgen:有if沒有else,這個電路是一個Latch. 182.234.11.129 04/15 19:16
2F:推 Leadgen:先確定你要的是Latch,再來看第二個if有沒 182.234.11.129 04/15 19:26
3F:→ Leadgen:有寫錯(或是第一個 ) 182.234.11.129 04/15 19:26
4F:→ buganini:電路的概念做出來不會是一個一個if去跑 163.22.93.132 04/15 21:35
5F:→ buganini:這樣的condition應該算invalid的吧 163.22.93.132 04/15 21:35
6F:→ buganini:我猜測是undefined behavior 163.22.93.132 04/15 21:36
7F:→ buganini:c後面的東西是combinationl logic不是 163.22.93.132 04/15 21:37
8F:→ buganini:一般程式語言裡面的procedure 163.22.93.132 04/15 21:37
9F:→ rocmewtwo:抱歉我好像條件有寫錯了,以致於大家看140.138.224.111 04/16 01:18
10F:→ rocmewtwo:錯方向...我改改140.138.224.111 04/16 01:18
※ 編輯: rocmewtwo 來自: 140.138.224.111 (04/16 01:19)
11F:→ rocmewtwo:其實我的問題是出在reset和clk重疊的時140.138.224.111 04/16 01:20
12F:→ rocmewtwo:後,他們的判斷好像就不符合if else的140.138.224.111 04/16 01:20
13F:→ rocmewtwo:結果?! 就是2ns那裡的問題 謝謝140.138.224.111 04/16 01:21
14F:→ rocmewtwo:出來的結果確定無誤,是在code打的時候140.138.224.111 04/16 01:22
15F:→ rocmewtwo:不小心改到了 抱歉140.138.224.111 04/16 01:23
16F:→ buganini:改用c<=4'b0看看 163.22.93.132 04/17 02:14
17F:→ buganini:同步跟非同步的差別 163.22.93.132 04/17 02:15
18F:→ rocmewtwo:回buganini: 改成 <= 好像也不行耶140.138.224.111 04/17 11:09
19F:→ buganini:你把時間軸拉大看 0,1之間那一小撮毛 163.22.93.132 04/17 13:00
20F:→ buganini:簡單的解決方法是改變clk的phase 163.22.93.132 04/17 13:06
21F:→ buganini:然後你改<=是改4'b0還是兩個都改? 163.22.93.132 04/17 13:07
22F:→ rocmewtwo:只改了reset的那邊,clk沒動140.138.224.111 04/17 19:39
23F:→ rocmewtwo:那撮毛有什麼特別意義嗎>O<140.138.224.111 04/17 19:40
24F:→ rocmewtwo:如果把else if(clk)改成 else140.138.224.111 04/17 19:49
25F:→ rocmewtwo:是可以正常跑沒錯,但是雙信號判斷140.138.224.111 04/17 19:50
26F:→ rocmewtwo:好像就會出錯Q_Q140.138.224.111 04/17 19:50
27F:→ buganini:那撮毛是有意義的啊 要放大看 163.22.93.132 04/17 20:49
28F:→ buganini:是電路的延遲造成時序上的誤差 163.22.93.132 04/17 20:49
29F:→ buganini:才產生出這樣的結果 163.22.93.132 04/17 20:49