2015-10-17 3 views
0

Я пытаюсь создать модуль чтения ДНК с использованием процессов VHDL для FPGA серии Spartan-S6. Проблема в том, что мой код не может быть синтезирован. Он работает над симуляцией, но при синтезе он просто держится. Я также искал информацию о несинтезируемых процессах VHDL, но я думаю, что я делаю это правильно, и это должно быть хорошо синтезировано. Вот мой код процесса:unsynthesizable код 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, содержащий мой 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 

Вы можете проверить мои полные code и log от pastebin.

+2

Видимо, вы не знаете, что делать с часами в синхронном дизайне. Боюсь, что вам больше всего нужна книга или курс VHDL. Как и во всех языках программирования, вы не можете писать достойный код VHDL без минимальных знаний об этом. И SO не может помочь здесь. –

+0

Рено: Я знаю, что у него есть некоторые значительные ошибки, и я должен больше узнать об этом. О книге VHDL я искал ее, но я не мог найти хороший. Можете ли вы представить книгу, пожалуйста? – reza

+1

Ищите «синхронизированный процесс» вместо этого, читайте и изучайте ... Синтетический отчет говорит, что у вас есть часы с частотой 98 МГц ... используйте его. –

ответ

2

Я не совсем уверен, что это единственное, что не так. Но как минимум такие вещи, как DNA_CLK_Temp <= not DNA_CLK_Temp after DNA_CLK_period/2; и DNAReady <= '0' after 500 ns;, не могут быть синтезированы. Это означает, что большинство из вас кода оптимизированы, так как ваши часы никогда не меняются.

Когда вы имитируете код, вы должны иметь модуль testbench, который обертывается вокруг устройства, которое вы тестируете, где генерируются часы и т. Д. Вместо того, чтобы делать это внутри вашего реального модуля.

Смежные вопросы