FPGAをVHDLプログラミングするのは初めてですが、モジュール(以下の完全なコードを参照)が機能しません。
このモジュールは、ユーザーが使用できるレジスタに基づいて、ユーザーI / O設定を処理することになっています(したがって、FPGAファームウェアに触れることなくレジスタを介してモードを変更できます)。8つの入力ピンと8つの出力ピンがあり、1x8、2x8、4x8、8x8の4つの動作モードがあります。出力は遅延/ゲートジェネレータモジュールに入り、次に出力されます。このモジュールのもう1つの機能は、32ビット入力ベクトルを変換することです。実際には8ピンのみが割り当てられ、値(FPGA-ボードの相互作用に固有)をより意味のあるものに変換します。
現在のように、clockcontrolREGの値に関係なく、1x8モードに対応するelse catch all(00)モードが機能しています。(私はオシロスコープで正しい出力を観察しています)ので、ピンの割り当てに問題はありません。何らかの理由で、すべてのwhen句が無視されているように見えます。
clockcontrolREGの初期値を「00000011」(モードを8x8に設定する必要があります)に設定し、レジスタにアクセスして、値が実際に存在することを確認しました。
同じものを記述する2つの異なる構文方法(行:signalforclkgen(1))を試しましたが、効果はありませんでした。
非常に基本的なものが欠けているようですが、3日目ですが結果はありません。事前にすべての助けをありがとう。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity clkgencontrol is
port(
clockcontrolREG : in std_logic_vector(31 downto 0);
signalinput : in std_logic_vector(31 downto 0);
signalforclkgen : out std_logic_vector(7 downto 0)
);
end clkgencontrol;
architecture rtl of clkgencontrol is
begin
signalforclkgen(0) <= signalinput(31);
signalforclkgen(1) <= signalinput(15) when (clockcontrolREG(0) = '1' and clockcontrolREG(1) = '1') else
signalinput(31);
signalforclkgen(2) <= signalinput(30) when (clockcontrolREG = "00000011") else
signalinput(15) when (clockcontrolREG = "00000010") else
signalinput(31);
signalforclkgen(3) <= signalinput(14) when (clockcontrolREG = "00000011") else
signalinput(15) when (clockcontrolREG = "00000010") else
signalinput(31);
signalforclkgen(4) <= signalinput(19) when (clockcontrolREG = "00000011") else
signalinput(30) when (clockcontrolREG = "00000010") else
signalinput(15) when (clockcontrolREG = "00000001") else
signalinput(31);
signalforclkgen(5) <= signalinput(3) when (clockcontrolREG = "00000011") else
signalinput(30)when (clockcontrolREG = "00000010") else
signalinput(15)when (clockcontrolREG = "00000001") else
signalinput(31);
signalforclkgen(6) <= signalinput(18) when (clockcontrolREG = "00000011") else
signalinput(14) when (clockcontrolREG = "00000010") else
signalinput(15) when (clockcontrolREG = "00000001") else
signalinput(31);
signalforclkgen(7) <= signalinput(2) when (clockcontrolREG = "00000011") else
signalinput(14) when (clockcontrolREG = "00000010") else
signalinput(15) when (clockcontrolREG = "00000001") else
signalinput(31);
end rtl;