Re: [問題] 請問VHDL的運算速度以及Count的用法
我來解釋看看
你附上的程式,我想是放置在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
推
07/07 22:45, , 1F
07/07 22:45, 1F
→
07/07 22:47, , 2F
07/07 22:47, 2F
→
07/07 22:48, , 3F
07/07 22:48, 3F
→
07/07 22:48, , 4F
07/07 22:48, 4F
→
07/07 22:48, , 5F
07/07 22:48, 5F
→
07/07 22:49, , 6F
07/07 22:49, 6F
→
07/07 22:50, , 7F
07/07 22:50, 7F
→
07/07 22:51, , 8F
07/07 22:51, 8F
→
07/07 23:49, , 9F
07/07 23:49, 9F
→
07/07 23:50, , 10F
07/07 23:50, 10F
→
07/07 23:50, , 11F
07/07 23:50, 11F
→
07/07 23:50, , 12F
07/07 23:50, 12F
推
07/08 14:59, , 13F
07/08 14:59, 13F
→
07/08 14:59, , 14F
07/08 14:59, 14F
→
07/08 14:59, , 15F
07/08 14:59, 15F
→
07/08 15:00, , 16F
07/08 15:00, 16F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):