2015-10-17 106 views
0

我正在尝试为Spartan-S6系列FPGA使用VHDL过程制作DNA阅读器模块。问题是我的代码无法合成。它适用于模拟,但在综合它只是stucks。我也搜索了关于不可合成的VHDL过程,但我认为我做得很好,它必须合成得很好。 这里是我的过程代码:不可合成的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. 

,它stucks刚刚在这里不走了包含我DNALock文件我process.There是另一件事:当我注释掉分配线将正确合成:

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查看我的完整codelog

+2

显然你不知道如何处理同步设计中的时钟。恐怕,您最需要的是VHDL书籍或课程。与所有的编程语言一样,如果不具备最低限度的相关知识,就不能编写体面的VHDL代码。所以在这里帮不了忙。 –

+0

雷诺:我知道它有一些重大的错误,我应该更多地了解它。关于VHDL书籍,我搜索了它,但我找不到一个好的。你能介绍一本书吗? – reza

+1

寻找“时钟进程”,而不是阅读和学习...该合成报告说,你有一个98兆赫的时钟可用...使用它。 –

回答

2

我不完全确定它是否唯一错误。但至少像DNA_CLK_Temp <= not DNA_CLK_Temp after DNA_CLK_period/2;DNAReady <= '0' after 500 ns;不能合成。这意味着你的大部分代码都会被优化掉,因为你的时钟永远不会改变。

当你模拟代码时,你应该有一个测试台模块环绕你正在测试的单元,在那里生成时钟等,而不是在你的实际模块中进行测试。