問題タブ [vhdl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
string - 文字列からシリアル信号を生成するには?
"01011101000100111"
固定遅延またはクロック信号のいずれかを指定して、バイナリ文字列 (たとえば、長さは可変) で表されるデータを std_logic 信号に送信するにはどうすればよいですか? これはテストベンチ用に欲しいのでバイナリ文字列を任意に変更できるようにしたいので手間をかけずにgenerate
.
process - VHDL - 初めて process() が実行されるのはいつですか?
考慮してください:プロセス(a)私が持っているテキストによると:
プロセスは、最初にシミュレーション時に入力され、その時点で、wait ステートメントまたはセンシティビティ リストによって中断されるまで実行されます。
機密リストにイベントがなくても、プロセスを 1 回実行する必要があると推測するのは正しいですか? また、アーキテクチャ内に複数のプロセスがある場合、それらはすべて一度に実行されるのでしょうか?
vhdl - VHDL で rom_type からデータを読み取る方法は?
rom_type からデータを読み取るにはどうすればよいですか?
vhdl - VHDL-std_logic_vectorの問題
アキュムレータを使用して4ビットのバイナリ加算器をコーディングしています。
出力 :
--binadderのアーキテクチャbinadderをコンパイルします
**エラー:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(15):
中置演算子「xor」の実行可能なエントリはありません。
**エラー:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(15):
中置式「xor」をstd.standard.bit型として解決するエラーを入力します。
**エラー:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(16):
中置演算子「and」の実行可能なエントリはありません。
**エラー:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(16):
中置式「または」の右オペランドの式が正しくありません。
**エラー:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(16):
中置演算子「and」の実行可能なエントリはありません。
**エラー:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(16):
中置式「または」の左オペランドの式が正しくありません。
**エラー:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(16):
中置式「または」の右オペランドの式が正しくありません。
**エラー:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(16):
中置式「または」をタイプstd.standard.bitとして解決するタイプエラー。
**エラー:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(28):
中置演算子「&」の実行可能なエントリはありません。
**エラー:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(28):
タイプieee.std_logic_1164.std_logic_vectorとして、中置式「&」を解決するエラーを入力します。
**エラー:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(39):
VHDLコンパイラが終了します
std_logic_vectorを正しく処理していないと思います。方法を教えてください。:(
types - VHDL でデジタル時計の時間モードを 12 時間から 24 時間に変更する
皆さん、こんにちは。
FPGA で合成することになっている VHDL でデジタル クロックを設計しています。S1、S2、M1、M2、H1、および H2 をカスケードしています (S1 = 秒 1、M1 = 分 1、H1 = 時間 1 など)。要件の 1 つは、時計が 24 時間表示から 12 時間表示形式に切り替わることです。H1 と H2 がそれぞれ 4 ビット、つまり現在の時間を表示するために合計 8 ビットで表されるとすれば、どうすればよいでしょうか。HR1 と HR2 を連結してから 12 を引いてから、再度連結を解除する必要がありますか? X mod 12 は、FPGA に実装するための合成可能な操作ではないことに注意してください。
どうもありがとうございました。
programming-languages - VHDLクローンの構築
最終年度のプロジェクトでは、VHDLのようなハードウェアシミュレーション言語を設計することを計画しています。どうすればいいですか?
どんな助けでも大歓迎です。
vhdl - IEEE vhdl 標準ライブラリが STL ではないのはなぜですか?
IEEE vhdl 言語リファレンス マニュアルでは、標準パッケージの限られたセットしか定義されていません。また、STD_LOGIC などの標準タイプの機能は定義されていません。そのため、標準の AND2、INV コンポーネント/演算子はありません。
Altera の MAX+Plus II は AND2、INV コンポーネントをサポートしていないようですが (ある場合はお気軽に訂正してください)、Xilinx Foundation はサポートしています。
IEEE vhdl 標準ライブラリが C++ の世界で STL のようなものにならないのはなぜですか?
ありがとう。
makefile - makefile からの VHDL 条件付き生成
さまざまなバリアントに適応する必要がある vhdl 設計があります。メイクファイルから構成を生成できると便利です。1 つのプロジェクトを生成するためのメイクファイルが準備され、機能しています。
プロジェクトごとに非常によく似たファイルが異なることは避けたいと思います。プロジェクト間の唯一の違いは、いくつかの行がどこかにあり、そのうちの 1 つには、もう 1 つには必要のない一連の vhdl ファイル (およびコンポーネント) が含まれていることです。
たとえば、2 つの異なる最上位レベルの vhd ファイルを作成することは避けたいと考えています。代わりに、プロジェクトに応じて、他の vhdl ファイルとコンポーネントを含める (または含めない) ために、トップ ファイル内で条件を使用したいと考えています。
これを行う方法について何か提案はありますか?
外部のプリコンパイラ (gcc) を使用しようとしましたが、機能しませんでした。さらに、他の開発者に gcc のインストールを強制したり、ザイリンクス IDE 内から vhdl ファイルを使用できないようにしたりしたくありません。
編集:例の追加
A と B の 2 つの製品があります。両方の製品に同じファイルを使用し、製品 B の一部のパーツを除外する条件、異なる HW パーツの構成を生成する条件、およびその他のものを使用したいと考えています。
コマンドラインから構成を生成したい:
make product_A
、およびmake product_B
.
ターゲットに応じてコードを含めたり除外したりするためgenerates
に vhdl を挿入した場合、xst はどのターゲットがビルドされているかを知る必要があります。問題は、現在のターゲットを makefile から xst に渡す方法についてです。
gcc でコンパイルする C コードでは、ソース コードを次のように記述します。
、次に makefile で定義を設定します。
vhdl - シングル サイクル データパスでハーフ ワードをロードし、バイトをロードする
データ メモリを変更せずにロード バイトをシングル サイクル データパスに実装することについて尋ねられたこの問題があり、解決策は次のようなものでした。
代替テキスト http://img214.imageshack.us/img214/7107/99897101.jpg
This is actually quite a realistic question; most memory systems are entirely word-based, and individual bytes are typically only dealt with inside the processor. When you see a “bus error” on many computers, this often means that the processor tried to access a memory address that was not properly word-aligned, and the memory system raised an exception. Anyway, because byte addresses might not be a multiple of 4, we cannot pass them to memory directly. However, we can still get at any byte, because every byte can be found within some word, and all word addresses are multiples of 4. So the first thing we do is to make sure we get the right word. If we take the high 30 bits of the address (i.e., ALUresult[31-2]) and combine them with two 0 bits at the low end (this is what the “left shift 2” unit is really doing), we have the byte address of the word that contains the desired byte. This is just the byte’s own address, rounded down to a multiple of 4. This change means that lw will now also round addresses down to multiples of 4, but that’s OK since non-aligned addresses wouldn’t work for lw anyway with this memory unit. OK, now we get the data word back from memory. How do we get the byte we want out of it? Well, note that the byte’s byte-offset within the word is just given by the low-order 2 bits of the byte’s address. So, we simply use those 2 bits to select the appropriate byte out of the word using a mux. Note the use of big-endian byte numbering, as is appropriate for MIPS. Next, we have to zero-extend the byte to 32 bits (i.e., just combine it with 24 zeros at its high end), because the problem specifies to do so. Actually, this was a slight mistake in the question: in reality, the lbu instruction zero-extends the byte, but lb sign-extends it. Oh, well. Finally, we have to extend the MemtoReg-controlled mux to accept one new input: the zero-extended byte for the lb case. The MemtoReg control signal must be widened to 2 bits. The original 0 and 1 cases change to 00 and 01, respectively, and we add a new case 10 which is only used in the case of lb.
I don't quite actually understand on how this works even after reading the explanation, especially about left shift the ALU result by 2 would give the byte address... how is this possible?? so if I would like to load a half word then I would do one left shift and I would get the address of the half word?? what would be a better way to do load byte, load half word by modifying the data memory? (the question above puts constraints that we can't modify the data memory)