作者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