При обратном отсчете беззнаковых чисел не хватает 9 и 8 каждые 10 - PullRequest
0 голосов
/ 12 июля 2020

Я не знаю, где я ошибаюсь и как это исправить. Я в основном строю счетчик состояний, и он начинается с 33 и отсчитывается до 0 перед сбросом, но 29,28,19,18,9 и 8 все пропадают. Я застрял там, где ошибаюсь.

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


entity sequencer is
 PORT(clk:      IN  std_logic;             
        count   : out unsigned (5 downto 0)); 
End sequencer;

ARCHITECTURE behavior OF sequencer IS
SIGNAL dSig, qSig   : unsigned (5 downto 0);

BEGIN

    PROCESS (clk, dSig)  
    BEGIN 
     
     dSig <= "011011";

    if rising_edge(clk) Then
        qSig <= dSig;
    end if;
     
     if qSig = "000000" then 
       dSig <= "011011"; 
    else
       dSig <= qSig - 1 ; 
    End if;
     
     count <= qSig;
     
    End Process;
END behavior; 

Ответы [ 2 ]

2 голосов
/ 12 июля 2020

Весь процесс можно упростить до

process (clk, reset)  
begin 
    if reset then -- use an asynchronous reset for initial value
        dSig <= "011011";

    elsif rising_edge(clk) Then -- keep everything else within the synchronized block
        count <= dSig;
        if dSig = "000000" then
            dSig <= "011011";
        else
            dSig <= dSig - 1 ; 
        end if;
    end if;
end process;

Работайте с одним сигналом счетчика и сохраняйте все в рамках синхронизированного блока вашего процесса, или есть причина для оценки вывода asyn c?

2 голосов
/ 12 июля 2020

Я подозреваю, что это происходит из-за того, что вы смешиваете синхронные и асинхронные элементы внутри одного процесса, а сбои вызывают пропуск счетчика. Предлагаю сделать его полностью синхронным.

ARCHITECTURE behavior OF sequencer IS
  SIGNAL count_i   : unsigned (5 downto 0) := (others => '0')

BEGIN

    PROCESS (clk)  
    BEGIN 
        if rising_edge(clk) Then
            count_i <= count_i + 1;
        end if;
    End Process;
 
    count <= count_i;

END behavior; 
...