2

FPGAの出力はデジタルであることがわかっていますが、vhdlコードを使用して純粋なアナログ正弦波を生成できますか。また、正弦波の周波数を指定できますか。

4

5 に答える 5

2

「純粋」を定義してください - 量子化の「ビット」数と、どの周波数で対応できますか?

低いビットで低い周波数の場合、FPGA に単純な PWM またはデルタシグマ DAC を構築し、「外側」にローパス フィルターを配置できます (申し訳ありませんが、それは実際のアナログ ハードウェアである必要があります :) 。この例は参考になるかもしれません

ただし、外部コンポーネントなしではそこに到達することはできません。

于 2010-07-02T12:08:57.460 に答える
1

Direct Digital Synthesisを調べることができます。基本的に、ROM を使用してサイン サンプルを格納し、位相アキュムレータを使用して ROM にインデックスを付け、目的の周波数で出力信号を生成します。解像度と最大周波数は、fpga クロックと ROM サイズによって制限されます。

ただし、アナログ再構成フィルターはまだ必要です。

于 2010-10-01T01:49:50.867 に答える
1

以前にメモリに保存されたサンプルから純粋な正弦波を生成し、さまざまなレート/メモリ位置でメモリを読み取り、正弦波の周波数やスペクトル純度を変更する方法は、直接デジタル合成と呼ばれます。

これにより、必要なスペクトル純度で広範囲の正弦波周波数を生成できます。モバイル、ソフトウェア無線、その他の同様のアプリケーションで役立ちます。DDS ASIC も利用できますが、通常は高価です。

FPGA は安価な代替手段です。FPGAは必要なデジタル出力のみを生成できますが、アナログ信号はフィルターまたはDACといくつかの基本的なフィルタリングなしでは生成できません.

ほとんどの FPGA ベンダーは、IDE (統合開発環境) を備えた無料の DDS IP コアを提供しています。Actel/Xilinx/Altera IP を確認してください。彼らは無料です。IP を取得できない場合は、Matlab で DDS 機能ブロックを取得し、サードパーティ ツール (上記の 3 つのベンダーすべてで利用可能) を利用して、Matlab インターフェイス経由で DDS を合成できます。DDS は、DDFS (Direct Digital Frequency Synthesis) とも呼ばれます。

于 2013-01-16T11:25:49.717 に答える
0
library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.NUMERIC_STD.ALL;  
-- use this library as much as possible.

entity sinewave is

port (clk :in  std_logic;

      dataout : out real range -1.0 to 1.0);

end sinewave;

architecture Behavioral of sinewave is

signal i : integer range 0 to 77:=0;

type memory_type is array (0 to 71) of real range  -1.0000 to 1.0000 ;

--ROM for storing the sine values generated.

signal temp : memory_type :=(0.0,0.0872, 0.1736, 0.2588, 0.3420, 0.4226, 0.5000, 0.5736, 0.6428, 0.7071, 0.7660, 
                             0.8191, 0.8660, 0.9063, 0.9397, 0.9659, 0.9848, 0.9962, 1.0000,0.9962,0.9848,0.9659,
                             0.9397, 0.9063, 0.8660, 0.8191, 0.7660, 0.7071, 0.6428, 0.5000, 0.4226, 0.3420, 0.2588, 
                             0.1736, 0.0872,0.0, 0.0,-0.0872,-0.1736, -0.2588, -0.3420,-0.4226, -0.5000, -0.5736, 
                            -0.6428, -0.7071, -0.7660, -0.8191, -0.8660, -0.9063, -0.9397, -0.9659, -0.9848, -0.9962, 
                            -1.0000,-0.9962,-0.9848,-0.9659,-0.9397, -0.9063, -0.8660, -0.8191, 
                            -0.766, -0.7071, -0.6428, -0.5000, -0.4226, -0.3420, -0.2588, -0.1736, -0.0872,0.0);


begin

process(clk)

begin

  --to check the rising edge of the clock signal

if(rising_edge(clk)) then    

dataout <= temp(i);

i <= i+ 1;

if(i = 71) then

i <= 0;

end if;

end if;

end process;

end Behavioral;

この実装を解決する 式 1.000 に期待される定数値よりもエラーを示します

于 2015-10-09T05:21:24.933 に答える
0

非常に少数の混合信号モデル (一部のアクテル製品など) を除いて、FPGA には必要なアナログ再構成フィルターのコンポーネントがありません。それらは外側に追加する必要があります。

于 2010-07-06T07:33:47.387 に答える