タグ付けされた質問 「vhdl」

VHDL(VHSIC(超高速集積回路)ハードウェア記述言語)は、フィールドプログラマブルゲートアレイや集積回路などのデジタルシステムを記述および設計するための電子設計自動化で使用されるハードウェア記述言語です。

1
合成されたROMコアを使用した単純なテストベンチのシミュレーション
私はFPGAの世界にまったく新しいので、4ビットの7セグメントデコーダーという非常に単純なプロジェクトから始めようと思いました。私が純粋にVHDLで書いた最初のバージョン(それは基本的に単一の組み合わせselectであり、クロックは必要ありません)は機能しているようですが、ザイリンクスISEの「IPコア」の要素を試してみたいと思います。 今のところ、「ISE Project Explorer」GUIを使用しており、ROMコアを使用して新しいプロジェクトを作成しました。生成されるVHDLコードは次のとおりです。 LIBRARY ieee; USE ieee.std_logic_1164.ALL; -- synthesis translate_off LIBRARY XilinxCoreLib; -- synthesis translate_on ENTITY SSROM IS PORT ( clka : IN STD_LOGIC; addra : IN STD_LOGIC_VECTOR(3 DOWNTO 0); douta : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END SSROM; ARCHITECTURE SSROM_a OF SSROM IS -- synthesis translate_off COMPONENT wrapped_SSROM …

4
合成中にラッチを回避する方法
VHDLを使用して組み合わせロジックのブロックを設計したいのですが、合成結果に意図しないラッチが含まれることがあります。 シンセサイザがラッチを推論しないようにするには、どのコーディングガイドラインに従う必要がありますか? 例:コードの小さなセグメントで、if-elseステートメントを使用する必要がありますか?
9 vhdl 

2
このVHDLの行列-ベクトル乗算関数は並列化されていますか?
与えられたmxn行列aをnx1ベクトルで乗算する次のVHDL関数がありますb。 function matrix_multiply_by_vector(a: integer_matrix; b: integer_vector; m: integer; n: integer) return integer_vector is variable c : integer_vector(m-1 downto 0) := (others => 0); begin for i in 0 to m-1 loop for j in 0 to n-1 loop c(i) := c(i) + (a(i,j) * b(j)); end loop; end loop; return …
9 fpga  vhdl  matrix 

3
同じキー行を同時に押す
VHDLでキーパッドを設計しています。キーを1つだけ押すと、すべてが正常に動作します。ステートマシンでキーを押すために各列をスキャンしています。キーが押されていない場合は、pin4pin6pin7pin2 = "0000"次の状態に切り替えて次の列をスキャンする状態です。したがって、私は列に設定pin3pin1pin5順番にし"001"、"010"そして"100"。 スキャン中pin3pin1pin5と"001"している場合pin4pin6pin7pin2され"0100"、その後、単純に「9」を押します。pin4pin6pin7pin2入力pin3pin1pin5ポートおよび出力ポートとしてVHDLで宣言します。私は同時に6と9を押したときpin6とpin7していますhigh。最初に押されたキーが読み取られ、2番目のキーは無視されます。3と7を同時に押すと、最初の数ミリ秒前に最初のキーが押され、最初のキーが読み取られ、2番目のキーは無視され、にpin2なりpin4ますhigh。 ここがトリッキーな部分です。4と6を同時に押すpin7とhigh、そうなるはずですが、とにlowなりpin4pin6pin7pin2 = "0000"、どうして、どうしてかわかりません。"0000"キーが押されていないことが検出されるため、ステートマシンは状態から状態にジャンプします。4と6を押しながら4を数回押して離れると、6が数回押されたことが検出され、大きなバグです。これをデバッグするのを手伝っていただければ幸いです! 同じ行のキーについてのみ、「1」と「2」、「7」と「8」でも同じことが起こります。これは進行中のプロジェクトなので、VHDLコードをオンラインにすることはできません:(これを克服するためのヒントを教えていただければ幸いです! 以下では、ボードにコードをアップロードしていません。コードが実行されていません。Pin5グラウンドに接続して、1、2、4、5、7、8、*、0を1回Pin3押すとPin3LEDはオンになりませんが、6を押してから4を同時に押すと、LEDがオンでPin7LEDがまだオンですが、私のコードが実行されているとき、これは起こりません。多分私は何かを間違って接続し、幸いにもPin7オンになっています、私は知りません... 以下は、キーパッドボードの回路図です。

4
SystemCとHDL
私は現在、既存の命令セットのプロセッサを実装する大学のプロジェクトに参加しています。プロジェクトの終わりまでに、このデザインを合成してFPGAで実行できるようになるはずです。これまでのところすべてが順調に進んでおり、数日前にVerilog HDLでデザインをインプリメントし始め、非常にシンプルなバージョンが機能しました。さて、問題:私は何年もハードウェア設計に携わってきた何人かの人々と連絡を取り、さらに先に進む前に、実装にSystemCの使用に移るべきだと提案しました。これが私の考えだったので、今、私は非常に混乱しました: Verilog-> HDL言語としては、ハードウェアデザインをターゲットにしています。構造的および動作的なVerilogのようないくつかのレベルの抽象化がありますが、デザインのRTLを指定する非常にきちんとした形式です。選択したFPGAに応じて、さまざまなツールを使用して確実に合成できます(私の場合、ザイリンクスVivado 2014およびZynqボードを使用しています)。欠点としては、プレーンなVerilogは検証に十分な抽象化を提供していないため、System Verilogのようなものがあります。 SystemC->これは、C ++で時間の概念を効果的に導入し、イベント駆動型シミュレーションを実行できるようにするC ++クラスライブラリです。明らかに、これはどのHDLよりもはるかに高レベルであり、ここにあるものははるかに迅速に実装できます。これにより、検証やシミュレーターの実装などに非常に適したツールになり、実際に製造する前にドライバーがチップ用のドライバーやモノの設計を開始できるようになります。どうやら、合成可能なSystemCのサブセットもあり(ザイリンクスVivadoでもこれが可能だと思います)、場合によっては、SystemCを使用して、より高度な抽象化が便利な非常に大規模なシステムを設計できます。 だから、私の質問は: systemCとVerilog(または必要に応じてHDL言語)の概念は正しいですか? SystemCとVerilogはいつ使用する必要がありますか? Verilogでも、基本的にコードの合成方法に関する制約を大幅に減らしているため、多くの動作コードを使用すると、実装の重要なセクションで少し問題が発生する可能性があると言われています。より高いレベルの抽象化では、これは問題ではないでしょうか?つまり、systemCを使用すると、非常に遅く、電力を消費し、大きなデザインになる可能性があります... SystemCを提案した人は、私が「アーキテクチャの調査」をしているように見えると述べ、それが彼がVerilogを好む理由です。どういう意味ですか?アーキテクチャは通常、命令セットとマイクロアーキテクチャを参照し、命令セットの実装を参照するという印象を受けました(マイクロアーキテクチャは、命令を実行する実際のRTLです)。それで、アーキテクチャの調査は、命令セットがどれほど実行可能かを確認するためにプロセッサを実装していると彼が考えていることを意味するのでしょうか? 彼は、SystemCを使用することについての議論は、HDLよりも高いレベルの抽象化であるため、はるかに簡単であると述べました。彼はまた、デザインのタイミングを正しくする方が簡単だと主張しました。これはどの程度本当ですか? 助けていただければ幸いです。私は少し混乱しており、これについてオンラインで明確な情報を得るのが難しいと感じています。ありがとう!
9 verilog  vhdl  design  hdl  systemc 

3
Verilogから回路図ブロック図のイメージファイルを生成するにはどうすればよいですか。
どのブロックが他のどのブロックに接続されているかを示す特定のVerilogモジュール階層の回路図を作成したいと思います。Novas / SpringsoftのDebussy / Verdi nschemaツール、またはRTLにグラフィカルなデザインブラウザーを提供する多くのEDAツールのいずれかによく似ています。 verilogまたはvhdlの定義から、または他のテキストベースの入力形式からプログラムで回路図を描画するために利用できるツール領域は何ですか?
9 vhdl  verilog 


1
AXI4LiteがAPBバスよりも優れた選択肢になるのはいつですか?
64ビットデータバスを備えた、すでに機能している大規模なFPGAデザインの改善とクリーンアップに取り組んでいます。出てきた質問の一つは、 「すべてのバスをAXI4Lite / APBに移行する必要がありますか、それともそのままにしておく必要がありますか?」 AXI4LiteとAPBがあります。 チームAXI4Liteのメンバーは、多くのサードパーティFPGA IPブロックがAXIバスを使用していると主張しています。反対側の同僚は、APBバスはより少ないリソース(FFおよびLUT)を使用する可能性があることを示唆しています-私はそれを確認できませんでした。 私は1つを選ぶ側にいて、それにこだわります。 どちらを選ぶかにはどのような理由がありますか?1つのバスが他のバスよりも多くのリソースを必要とするシナリオはありますか?どちらかに移行する強い理由はありますか?

1
シフトレジスタのこの単純なVHDLパターンが期待どおりに機能しないのはなぜですか
一見すると、以下のVHDLソースコードがシフトレジスタとして動作することが予想されます。そのqでは、時間が経つと "UUUU0", "UUU00", "UU000", "U0000", "00000", .... ただし、常にU5(以上)の連続したクロックサイクルの後です。 どうしてこれなの? このコードは、実際にははるかに複雑なシミュレーションを大幅に簡略化したものです。しかし、それは私が見る症状を示しています。 ModelSimとActiveHDLの両方でのシミュレーション中に、この興味深い予想外の結果が示されます。他のシミュレーターを試したことがなく、(原因の説明として)他のシミュレーターが同じように動作するかどうかを知りたいと思っています。 この質問に適切に回答するには、次のことを理解する必要があります。 これはシフトレジスタを実装する最良の方法ではないことを知っています RTL合成の場合、これにはリセットが必要です。 std_logicの配列はstd_logic_vectorです。 集計演算子を知ってい&ます。 私が見つけたもの: 割り当てtemp(0)<='0';がプロセス内で移動された場合、機能します。 ループがラップされていない場合(コメント付きのコードを参照)、ループは機能します。 これは、予想外のシミュレーション結果を純粋に表示するように構成された(パイプラインCPUの)より複雑な設計の非常に簡略化されたバージョンであることを繰り返します。実際の信号タイプは単なる簡略化です。このため、フォームのコードをそのまま使用して回答を検討する必要があります。 私の推測では、VHDLシミュレーションエンジンのオプティマイザーは誤って(または仕様に従って)ループ内の信号を変更しないため、ループ内で式を実行する必要がありませんが、ループにラップされていないループを配置することでこれを反証することができます。 したがって、この質問への答えは、コード例が何かを行う最善の方法であるかどうかではなく、VHDLシミュレーションの標準ではないVHDL構文の標準と、VHDLシミュレーションエンジンが最適化をどのように行うかであると思います。 そして今私がシミュレートしているコードに: library ieee; use ieee.std_logic_1164.all; entity test_simple is port ( clk : in std_logic; q : out std_logic ); end entity; architecture example of test_simple is type t_temp …

2
FPGA VGAバッファ。読み書きする方法は?
私はアルテラDE2ボードを持っており、スプライトを描画しようとしています。画面バッファの実装に問題があります。 25 MHZレートでvgaディスプレイのピクセルを出力するディスプレイエンティティがあります。 SDRAMにバッファを実装したいと思っていました。当初のアイデアは、SDRAMから25 MHZのレートで次のピクセルをロードすることでした。これは機能しますが、この速度でSDRAMにピクセルを書き込むことも、新しいフレームごとに十分な速度で画面をクリアすることもできません。データの書き込みには2クロックかかり、ボードは50 MHZで動作するため、完全な読み取りを実行するのに十分な時間があります。 私はひどく、ひどく間違っていることをしていると思います。このような描画キャンバスは通常、VHDLでどのように実装されていますか? 私が見つけることができる最も近いことは、2-3-3(RGB)カラースキームを使用して各ピクセルを取得し、「ポーチ」(ブランキング)VGA時間中にキャンバスRAMに書き込むことです。これは、25MHzの各クロックで更新できるのは画面の15%だけであり、どういうわけか私の回路はどの15%が更新されているかを認識する必要があるということですか。 読み取り中にメモリにデータを書き込む方法がわからないため、ダブルバッファリングの使用方法を理解できません。プロトコルのビットバンギングを回避する方法はありますか?この男はどうやってやるの?
8 fpga  vhdl  vga  buffer 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.