作者bearpower (big)
看板Programming
標題Re: [問題] 請問VHDL的運算速度以及Count的用法
時間Wed Jul 7 19:48:45 2010
我來解釋看看
你附上的程式,我想是放置在process裡面吧?
如果是放置再process裡面的話,基本上,再cnt2=1000時,
你所要做的事情會全部做完
那您提到用VHDL與Matlab做差異很大,
由於你未將要做的運算列出來,這會影響很大
不過,這主要牽涉到您是使用signal還是variable
如果是signal,則這個時間的用的值會是上一個時間的點值(因為是flip-flop)
例如:你要寫 A <= B;
C <= A;
雖然是同時做完,不過結果不會變成 C <= B;,因為是flip-flop,所以會差一個CLOCK
如果是variable的話,那就會有delay-time,這就不一定來得及做完了。
再者,您使用到加減乘除以及開根號,(如果可以合成的話)
基本上都很耗時間(or耗clock),也就是說,可能在一個CLOCK裡面無法即時做完,
這也可能是與matlab誤差來源,所以建議您可以用模擬來檢查時序與資料看看
應該很容易可以找出問題。
個人淺見,如有錯誤,歡迎討論。
※ 引述《ga006736 (cloudking)》之銘言:
: 目前我是用ADC來擷取外部訊號
: if Khertz_800'event and Khertz_800= '1' then --800K的頻率擷取一次
: ar1(cnt1) <= ("0000"& ADC2IN(12 downto 1));
: cnt1 <= cnt1 + 1;
: if cnt1 = 20 then
: 這邊開始做運算,然後驅動另一個cnt
: 但是下面存的直相當多所以我是用變數來存
: xpoint := data1(32 downto 1);--data1是我在這個cnt內運算的結果
: cnt1<= 1;
: cnt2<= cnt2 + 1;
: if cnt2 = 1000 then
: 這邊開始做相當多的運算
: 開根號與加減乘除
: 最後將我所求得的值丟至LCM觀看
: LCM <= data2;--data2是最後運算的結果
: cnt2<= 1;
: end if;
: end if;
: end if;
: 我想請教的是,我後面一大串的運算
: 能夠在我cnt2變為1之前執行完成嗎?
: 因為我用MATLAB跑的結果跟用VHDL跑出來的結果差異蠻大的
: 想說是不是運算時間拖的過長,導致結果錯誤
: 如果有人有寫過類似程式 也麻煩請提供我一些意見 謝謝
: ps:因為程式有點冗長,所以我盡量簡化
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.235.70
推 ga006736:感謝回答,其實我還有模擬方面的問題175.180.225.163 07/07 22:45
→ ga006736:雖然程式可以燒到版子上,但是看模擬的175.180.225.163 07/07 22:47
→ ga006736:時候,只要一遇到有使用IP的地方就無法175.180.225.163 07/07 22:48
→ ga006736:跨過,但是我把IP個別拿出來測試的結果175.180.225.163 07/07 22:48
→ ga006736:是可以用的175.180.225.163 07/07 22:48
→ ga006736:所以我不知道該如何從模擬去下手175.180.225.163 07/07 22:49
→ ga006736:上面的可以用是指把各別IP拿出來使用175.180.225.163 07/07 22:50
→ ga006736:燒在版子上後 結果是對的175.180.225.163 07/07 22:51
→ bearpower:一般而言 不致於使用到ip會無法模擬才是 220.132.235.70 07/07 23:49
→ bearpower:不過 xilinx我不熟悉 我本身是用ACTEL 220.132.235.70 07/07 23:50
→ bearpower:不過模擬應該都是相同的才是 220.132.235.70 07/07 23:50
→ bearpower:會不會是因為 testbench沒做好? 220.132.235.70 07/07 23:50
推 ga006736:使用IP可以模擬,但是一遇到有IP的地方 203.68.164.75 07/08 14:59
→ ga006736:他就無法顯示出結果 203.68.164.75 07/08 14:59
→ ga006736:例如我丟16去開根號 203.68.164.75 07/08 14:59
→ ga006736:不管怎麼跑輸出永遠都是0 203.68.164.75 07/08 15:00