2

ここにはいくつかの質問があります。

最近、SPI マスターを作成し、完全にシミュレートして、期待どおりに動作することを確認しました。ここから、SPI バス上の ADC から受け取った値を取得するように 7 セグメント ディスプレイ コンポーネントをセットアップした別のデザインで使用したいと思いますが、これで混乱したと思います。点。

転送を開始するには、他のパラメーターを含むパルスを SPI マスターに送信し、ビジー信号がアサート解除されるのを待ってから、他のパラメーターを送信する必要があります。新しいデザインで SPI マスターを実装する最善の方法がよくわかりません。

コンポーネントとして設計に使用しますか? より良い方法はありますか?

コンポーネントでなければならない場合、最上位デザインで新しい入力/出力にマップするのではなく、そのコンポーネントからピンに直接出力するように設定する方法はありますか?

たとえば、SCLK、MOSI、MISO、および CS があります。トップレベルでマッピングするのではなく、直接出力することはできますか? トップレベルを簡素化し、扱いにくくするようです。

また、「このデータをSPI経由で送信し、受信したものを返す」という機能を設定することは可能でしょうか?

私はまだこれらのものをまとめる方法について頭を悩ませているので、助け/例は大歓迎です。利用可能なすべての例/チュートリアルは、2 つの半加算器、論理ゲートなどの使用などに基づいているようです。これは、非常に単純な場合にのみ役立ちます。

編集:私のSPIマスターのエンティティ

entity SPI_master is

    generic(data_width: integer := 8;
            clock_select: integer := 0);

    port(SCLK: out std_logic; 
         MOSI: out std_logic;
         MISO: in std_logic;
         CS: out std_logic;

         Mclk_in: in std_logic;
         RST: in std_logic;
         CPOL: in std_logic;
         CPHA: in integer;
         send_packet: in std_logic;
         busy: out std_logic;

         Tx_data: in std_logic_vector(data_width-1 downto 0);
         Rx_data: out std_logic_vector(data_width-1 downto 0));

end SPI_master;
4

1 に答える 1

1

あなたのエンティティは合理的に見えますが、CPOL、CPHA に関するより良い名前やコメントが役立つでしょう!

部分的な回答:

1) 設計でコンポーネントとして使用できますが、前述のように、エンティティの直接インスタンス化はよりシンプルで冗長ではありません。

2) いいえ、階層の深いところから直接出力することはできません。できたとしても、それはひどい考えです!

C++、Ada、または Java プログラミングの「デザイン パターン」に精通していますか? もしそうなら、トップレベルのデザインを「ファサード」パターンと考えてください。

それは、外界があなたのデザインについて知る必要がある唯一のことです。また、多くの場合、構造的な HDL として記述され、他のエンティティをインスタンス化し、サブユニット間の相互接続と外部ポートへの接続を作成します。

これらの相互接続の問題を軽減する方法はありますが、特に階層の複数のレイヤーにまたがっていますが、最終的には、SPI 信号を最上位デザインの個々のピンに分割して、PCB 上の正しいワイヤに接続できるようにする必要があります。

3)「このデータをSPI経由で送信し、受信したものを返す」という関数を設定することは可能でしょうか...関数ではありません。

しかし、ハードウェア ラッパーを導入して、デザインの残りの部分に複雑なタスクを簡単に表示することができます。たとえば (SPI にバイトを書き込むために "send_packet" がアサートされ、書き込みが完了するまで "busy" が高くなると仮定すると)、バイト配列と "start" 信号を入力として受け取るエンティティを作成できます。そのアーキテクチャには、バイトをカウントし、それぞれを SPI に順番に出力し、「ビジー」の間待機するプロセスが含まれており、完了したら「呼び出し元」に通知できます。

于 2012-12-24T15:16:06.093 に答える