0

Spartan-S6 シリーズ FPGA の VHDL プロセスを使用して DNA リーダー モジュールを作成しようとしています。問題は、コードを合成できなかったことです。シミュレーションでは機能しますが、合成ではスタックします。合成不可能な VHDL プロセスについてもググってみましたが、私はそれを正しく行っており、適切に合成する必要があると思います。ここに私のプロセスコードがあります:

FSMOutputController:process(state,readDnaCmd)

variable clkCounter    :unsigned(7 downto 0) := "00000000";

begin

    case state is
        when zeroState =>
            if readDnaCmd = '1' then
                DNA_Read <= '1';
                SR_read   <= '0';
            else
                SR_read   <= '1';
            end if;
        when initState =>
            DNA_Read  <= '0';
            SR_read   <= '1';
            SR_clk    <= DNA_CLK_temp;
            DNA_Shift <= '1';

        when endReadState =>
            DNA_shift <= '0';
            SR_read   <= '0';
        when readState =>
            clkCounter := clkCounter + 1;
            --clkCounter2 <= clkCounter2 + X"01";
            SR_read   <= '0';
    end case;

end process FSMOutputController;

合成しようとしたときの ISE のログの一部を次に示します。

=========================================================================
*                           HDL Synthesis                               *
=========================================================================

Synthesizing Unit <testDNALock>.
Related source file is "C:\Projects\Anti clone S6\code\test1\DNATest\testDNALock.vhd".
WARNING:Xst:647 - Input <CLK_98MHz> is never used. This port will be preserved and left unconnected if it belongs to a top-level block or it belongs to a sub-block and the hierarchy of this sub-block is preserved.
WARNING:Xst:2935 - Signal 'DNAVerify', unconnected in block 'testDNALock', is tied to its initial value (0).
Summary:
no macro.
Unit <testDNALock> synthesized.

そして、それはここで立ち往生し、私のプロセスを含む DNALock ファイルには行きません。別のことがあります。割り当て行をコメントアウトすると、正しく合成されます。

FSMOutputController:process(state,readDnaCmd)

variable clkCounter    :unsigned(7 downto 0) := "00000000";

begin

    case state is
        when zeroState =>
            if readDnaCmd = '1' then
                --DNA_Read <= '1';
                --SR_read   <= '0';
            else
                --SR_read   <= '1';
            end if;
        when initState =>
            --DNA_Read  <= '0';
            --SR_read   <= '1';
            --SR_clk    <= DNA_CLK_temp;
            --DNA_Shift <= '1';

        when endReadState =>
        --  DNA_shift <= '0';
        --  SR_read   <= '0';
        when readState =>
            clkCounter := clkCounter + 1;
            --clkCounter2 <= clkCounter2 + X"01";
        --  SR_read   <= '0';
    end case;

end process FSMOutputController;

次に、レポートは次のようになります。

=========================================================================
*                            Design Summary                             *
=========================================================================

Clock Information:
------------------
No clock signals found in this design

Asynchronous Control Signals Information:
----------------------------------------
No asynchronous control signals found in this design

Timing Summary:
---------------
Speed Grade: -3

   Minimum period: No path found
   Minimum input arrival time before clock: No path found
   Maximum output required time after clock: No path found
   Maximum combinational path delay: No path found

=========================================================================

Process "Synthesize - XST" completed successfully

私の完全なコードを確認して、pastebin からログを記録できます。

4

1 に答える 1

2

それだけが間違っているかどうかは完全にはわかりません。しかし、最低限のものとして、DNA_CLK_Temp <= not DNA_CLK_Temp after DNA_CLK_period/2;合成DNAReady <= '0' after 500 ns;することはできません。これは、クロックが変更されないため、ほとんどのコードが最適化されていないことを意味します。

コードをシミュレートするときは、実際のモジュール内で行うのではなく、クロックなどが生成される場所をテストするユニットをラップするテストベンチ モジュールを用意する必要があります。

于 2015-10-17T09:45:02.037 に答える