Я пытаюсь создать модуль чтения ДНК с использованием процессов 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.
Видимо, вы не знаете, что делать с часами в синхронном дизайне. Боюсь, что вам больше всего нужна книга или курс VHDL. Как и во всех языках программирования, вы не можете писать достойный код VHDL без минимальных знаний об этом. И SO не может помочь здесь. –
Рено: Я знаю, что у него есть некоторые значительные ошибки, и я должен больше узнать об этом. О книге VHDL я искал ее, но я не мог найти хороший. Можете ли вы представить книгу, пожалуйста? – reza
Ищите «синхронизированный процесс» вместо этого, читайте и изучайте ... Синтетический отчет говорит, что у вас есть часы с частотой 98 МГц ... используйте его. –