2017-02-20 51 views
0

まず最初にVHDLの初心者だと言わざるを得ないので、あまりにも愚かな質問を事前にお詫びしたいと思います。 私はADCのソフトIPを動作させようとしています。私はちょうどADCを使用したいのでFIFOも何もありません。 したがって、私はqsysファイルでIPコアを生成し、それを私のプロジェクトに組み込みました。私はプリスケーラでチャンネル8を起動しました。 チャンネル8に接続されている可変抵抗器から値を読み取ろうとし、5つの最上位ビットをLEDでプリントアウトしようとしています。 ケースステートメントは、MAX 10 ADCガイドに記載されているように、ADCを起動するのに必要なパターンを作成する必要があります。MAX 10個のVHDL/Quartus Prime Liteコード最適化コード

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 



entity main is 
    port (CLK_50 : in std_logic; 
      LEDR : out std_logic_vector(4 downto 0)); 
end; 


architecture behave of main is 

    signal Cnt : integer := 0; 
    signal pCnt : integer := 0; 

    signal lock : std_logic; 
    signal CLK_10 : std_logic; 
    signal CLK_1 : std_logic; 
    signal set : std_logic ; 

    signal RESET : std_logic ; 

    signal CMDVal : std_logic; 
    signal CMDCH : std_logic_vector (4 downto 0); 
    signal CMDSOP : std_logic; 
    signal CMDEOP : std_logic; 
    signal CMDRDY : std_logic; 
    signal RESVal : std_logic; 
    signal RESCH : std_logic_vector (4 downto 0); 
    signal RESData : std_logic_vector (11 downto 0); 
    signal RESSOP : std_logic; 
    signal RESEOP : std_logic; 

    component myadc is 
     port (
      clock_clk    : in std_logic      := 'X';    -- clk 
      reset_sink_reset_n  : in std_logic      := 'X';    -- reset_n 
      adc_pll_clock_clk  : in std_logic      := 'X';    -- clk 
      adc_pll_locked_export : in std_logic      := 'X';    -- export 
      command_valid   : in std_logic      := 'X';    -- valid 
      command_channel  : in std_logic_vector(4 downto 0) := (others => 'X'); -- channel 
      command_startofpacket : in std_logic      := 'X';    -- startofpacket 
      command_endofpacket : in std_logic      := 'X';    -- endofpacket 
      command_ready   : out std_logic;          -- ready 
      response_valid   : out std_logic;          -- valid 
      response_channel  : out std_logic_vector(4 downto 0);      -- channel 
      response_data   : out std_logic_vector(11 downto 0);     -- data 
      response_startofpacket : out std_logic;          -- startofpacket 
      response_endofpacket : out std_logic           -- endofpacket 
     ); 
    end component myadc; 

begin 

    CMDCH <= "01000"; 
    RESET <= '0'; 
    set <= '1'; 

    mPLL : entity work.pll 
     port map(
     areset => set, 
     inclk0 => CLK_50, 
     c0 => CLK_10, 
     c1 => CLK_1, 
     locked => lock 
    ); 


    mADC : component myadc 
     port map (
      clock_clk    => CLK_50,     --   clock.clk 
      reset_sink_reset_n  => RESET,      --  reset_sink.reset_n 
      adc_pll_clock_clk  => CLK_10,     -- adc_pll_clock.clk 
      adc_pll_locked_export => lock,       -- adc_pll_locked.export 
      command_valid   => CMDVal,     --  command.valid 
      command_channel  => CMDCH,     --    .channel 
      command_startofpacket => CMDSOP,     --    .startofpacket 
      command_endofpacket => CMDEOP,     --    .endofpacket 
      command_ready   => CMDRDY,     --    .ready 
      response_valid   => RESVal,     --  response.valid 
      response_channel  => RESCH,      --    .channel 
      response_data   => RESData,    --    .data 
      response_startofpacket => RESSOP,     --    .startofpacket 
      response_endofpacket => RESEOP     --    .endofpacket 
     ); 

process 
begin 

    wait until rising_edge(CLK_50); 

    pCnt <= pCnt + 1; 

    case pCnt is 
     when 1 => CMDSOP <= '1'; 
        CMDVal <= '1'; 
     when 114 => CMDRDY <= '1'; 
     when 115 => CMDSOP <= '0'; 
         CMDRDY <= '0'; 
         LEDR <= RESData(11 downto 7); 
     when 214 => CMDRDY <= '1'; 
     when 215 => CMDRDY <= '0'; 
         LEDR <= RESData(11 downto 7); 
     when 314 => CMDRDY <= '1'; 
     when 315 => CMDRDY <= '0'; 
         LEDR <= RESData(11 downto 7); 
     when 414 => CMDRDY <= '1'; 
     when 415 => CMDRDY <= '0'; 
         LEDR <= RESData(11 downto 7); 
     when 514 => CMDRDY <= '1'; 
     when 515 => CMDRDY <= '0'; 
         LEDR <= RESData(11 downto 7); 
     when 614 => CMDRDY <= '1'; 
     when 615 => CMDRDY <= '0'; 
         LEDR <= RESData(11 downto 7); 
     when 714 => CMDRDY <= '1'; 
     when 715 => CMDRDY <= '0'; 
         LEDR <= RESData(11 downto 7); 
     when 814 => CMDRDY <= '1'; 
     when 815 => CMDRDY <= '0'; 
         LEDR <= RESData(11 downto 7); 
     when 914 => CMDRDY <= '1'; 
     when 915 => CMDRDY <= '0'; 
         LEDR <= RESData(11 downto 7); 
     when 1014 => CMDRDY <= '1'; 
     when 1015 => CMDRDY <= '0'; 
         LEDR <= RESData(11 downto 7);  
     when 1114 => CMDRDY <= '1'; 
     when 1115 => CMDRDY <= '0'; 
         CMDEOP <= '1'; 
     when 1116 => CMDEOP <= '0'; 
         CMDVal <= '0'; 


     when 2000 => pCnt <= 0; 
     when others => Cnt <= pCnt ; 
    end case; 
end process; 

end; 

しかし、コンパイル中にQuartusは常に自分のコードをすべて削除します。したがって、最終的にはLEDをGNDに引き込み、どちらもADCまたはPLLを使用しません。 誰かがアイデアを持っているなら、あなたが間違って何をしているのか教えていただけたら本当に感謝しています。

よろしくお願いいたします。

編集: 私が持っている問題を十分に説明できませんでした。それは正確にsynthetziseしかし、それはPLLが必要ではないと思うので、クロックを除いて、同様にそれを削除するADCのIPコアを残して、それを削除します。 エラーは以下のとおりです(すべてのハードウェア記述言語であり、基本的)

Warning (14284): Synthesized away the following node(s): 
    Warning (14285): Synthesized away the following RAM node(s): 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[0]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[1]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[2]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[3]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[4]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[5]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[6]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[7]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[8]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[9]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[10]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[11]" 
Warning (14284): Synthesized away the following node(s): 
    Warning (14285): Synthesized away the following RAM node(s): 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[0]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[1]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[2]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[3]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[4]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[5]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[6]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[7]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[8]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[9]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[10]" 
     Warning (14320): Synthesized away node "madc:myadc|madc_modular_adc_0:modular_adc_0|altera_modular_adc_control:control_internal|altera_modular_adc_control_fsm:u_control_fsm|altera_modular_adc_control_avrg_fifo:ts_avrg_fifo|scfifo:scfifo_component|scfifo_ds61:auto_generated|a_dpfifo_3o41:dpfifo|altsyncram_rqn1:FIFOram|q_b[11]" 
Warning (14284): Synthesized away the following node(s): 
    Warning (14285): Synthesized away the following PLL node(s): 
     Warning (14320): Synthesized away node "mpll:myPLL|altpll:altpll_component|mpll_altpll:auto_generated|wire_pll1_clk[0]" 
+0

最適化中にロジックが食べられ、出力がレールに結びついた場合、ロジック設計エラーまたはツール使用エラーの兆候です。このケースでは、LEDR値を駆動するために使用されるmyadcからのResDataを中心にしています。 myadcの潜在的なロジック問題に加えて、ResDataが駆動されず、設計の残りの部分がゲートで食い止められる(LEDRのみの出力)ように、精緻化に縛られる可能性があります。合成中の警告やエラーについては、コンソール出力(またはログ)を調べる必要があります。 – user1155120

+0

ええ、問題は出力が駆動されないことに気づいたので、ADCのデータを別のstd_logic_vectorに保存し、すべてのクロックサイクルで出力をドライブしようとしましたが、問題は変わりませんでした。 欠点は、私がADCロジックの中で何かを変更する方法を知らないことです。私は、サンプルストーレッジを持つadcコントロールのチュートリアルしか見つけることができませんでした。 私はアルファのドキュメントを理解する限り、ADCを駆動するロジックは正しいはずですが、悲しいことに私はそれが正しいことを確認できません。 – nuclear

+0

あなたの読者がブラックボックスに仲間入りして、同様に噛まれていないと何が間違っているかを教えてくれるようには思われません。あなたは世代中のIPコア構成を扱っているようです。FIFOを使用していないと言ってきました。myadcコンポーネント宣言にPLLが表示されています。 – user1155120

答えて

1
VHDLで

、あなたはあなたのコードがsynthetizableでなければならないことを心に留めておく必要があります:それはあなたのプログラム可能な構成要素で利用可能なハードウェアコンポーネントを記述する必要があります。これはあなたのプロセスでは当てはまりません。

waitステートメントのため、次の行:wait until rising_edge(CLK_50);を合成できません。あなたは、リセット信号を使用することが義務付けされていない

my_seq_proc : process (clk, rst) 
begin 
    if (rst = '1') then 
     ... -- reset your signals 
    elsif (rising_edge(clk)) then 
     ... -- what you need to do 
    end if; 
end process; 

注:あなたがこれを必要とする一連の処理を作成するには

。 また、プロセスの宣言(clk, rst)には、クロック(clk_50)とリセット信号のある感度リストが必要です。

別の間違いがあるかどうかは確認していません。まずこれをやろうとするべきです。

+0

推奨されるコーディングスタイルと推論レジスタのサポートされるスタイルには違いがあります。推奨スタイルは、第1巻「デザインと合成ハンドブック」に記載されています。サポートされているスタイルは、廃止されたIEEE Std 1076.6-2004 VHDLレジスタ転送レベル(RTL)合成のIEEE標準にあります。この特定のケースでは、OPの使用状況に一致する、単一のwait文を使用するEdge-sensitiveストレージ。アルテラの合成ツールは、撤回されたIEEE標準に準拠することが期待できます。 – user1155120

+1

私が知る限り rising_edge(clk)まで待つ は、リセットしたくない限り、完全に有効なオプションです。 とにかく問題なく合成されました。しかし、sythetizingは何らかの理由でpllを削除していたので、もちろんロジックのすべてが全く動いていません。 しかし、私はそれをあなたがそれをどのように推薦したのか変えましたが、それでも仕事はできません。 – nuclear

+0

合成のためにアルテラが待機することを知らなかった。私の謝罪。 –