作者light0617 (期待寒假)
看板Electronics
標題[問題] verilog reset問題
時間Sat May 31 02:35:44 2014
各位大大好
我最近在寫碼錶上一個reset的功能
遇到了一個問題
下面是部分CODE
input reset;//按鈕reset 每按一次重設
input i_clk;
input i_rts;//原本的東西
reg r_reset=1'b0;
reg cnt=1'b0;
<版本一>
always @(reset)
begin
cnt<=0;
else
always @(posedge i_clk , negedge i_rts)
begin
if(i_rts==0 ) cnt<=0;
else cnt<=cnt+1b'1;
end
我在ModelSim compile沒問題 但在Quartus 說cnt不能設定2次
後來改了一下
<版本二>
always @(reset)
begin
if(cnt==0) r_reset<=1'b0;
else r_reset<=1'b1;
else
always @(posedge i_clk , negedge i_rts)
begin
if(i_rts==0 || r_reset==1'b1) cnt<=0;
else cnt<=cnt+1b'1;
end
我在ModelSim compile沒問題 但在Quartus 說
Error: Can't elaborate top-level user hierarchy
應該是不能讓r_reset和cnt放在兩個always上??
所以
請教各位大大要如何實做reset按鈕呢><
--
推 steven0529: 小學時會有人說要烙國中生打人 05/20 12:19
→ steven0529: 國中時會有人說要烙高中生打人... 05/20 12:19
→ imanikki: 可是高中沒人說要烙大學生打人 05/20 12:20
→ egg9: 因為大學生都在打魔獸吃泡麵 要烙的話也只會烙賽 05/20 12:22
推 youaten0112:因為大學生認為打人不會增加經驗值也不會掉寶..... 05/20 12:26
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.147.127
※ 文章網址: http://www.ptt.cc/bbs/Electronics/M.1401474948.A.4E0.html
推 Leadgen:第一個問題是,有兩個不同的東西,在推同一個reg。 05/31 12:45
→ Leadgen:你只能用一個always去描述。 05/31 12:46
推 Leadgen:第二個問題,一個是非同步的reset,一個是同步的。 05/31 12:49
→ Leadgen:你把非同步的放在第一層,同步的放在第二層就行了。 05/31 12:50
推 appendixisu:always @(posedge i_clk or negedge i_rts) begin 05/31 16:02
→ appendixisu:if (i_rts==0) cnt <= 0 ; 05/31 16:02
→ appendixisu:else if (reset==0) cnt <= 0 ; 05/31 16:03
→ appendixisu:else cnt <= cnt + 1'b1 ; 05/31 16:03
→ appendixisu:end 05/31 16:03
→ light0617:to a大 reset按一次變成1 這樣不就無法歸零了嗎?? 06/01 00:44
→ light0617:若reset 真的為0 可是這樣不就直接結束的嗎 06/01 00:45
→ light0617:可能我沒說清楚 我是希望 按一次reset 可以歸零重新計時 06/01 00:46
→ light0617:感覺好難做出來QQ 06/01 00:46
→ light0617:L大的同步的放在第一層,同步的放在第二層 是指哪個地方 06/01 00:47
→ haworz:你把a大的code當中的reset==0改為reset==1 應該就能達成你 06/08 23:05
→ haworz:要的功能 06/08 23:05