Итак, у меня есть счетчик по модулю, идущий от 1-> 15, а затем постоянно обходя вокруг отдельного объекта. Я бы хотел, чтобы в выражении case, зависящем от некоторых выходов, пробовал это значение на нарастающем значении часов, но делайте это только один раз, иначе значение будет постоянно изменяться. Есть ли способ сделать это? Назначить сигнал и оставаться неподвижным? Я разместил код, который, я надеюсь, продемонстрирует, что я пытаюсь сказать немного лучше.Как «пробовать» значение в VHDL?
process(all)
begin --sensitivity list?
if(reset) then
playerCards <= "0000000000000000";
dealerCards <= "0000000000000000";
elsif rising_edge(clock) then
case? deal & dealTo & dealToCardSlot is
when "1100" =>
playerCards(3 downto 0) <= singleCard;
playerCards(15 downto 4) <= (others => '0');
when "1101" =>
playerCards(7 downto 4) <= singleCard;
playerCards(15 downto 8) <= (others => '0');
when "1110" =>
playerCards(11 downto 8) <= singleCard;
playerCards(15 downto 12) <= (others => '0');
when "1111" =>
playerCards(15 downto 12) <= singleCard;
when "1000" =>
dealerCards(3 downto 0) <= singleCard; --dcard1
dealerCards(15 downto 4) <= (others => '0');
when "1001" =>
dealerCards(7 downto 4) <= singleCard; --dcard2
dealerCards(15 downto 8) <= (others => '0');
when "1010" =>
dealerCards(11 downto 8) <= singleCard; --dcard3
dealerCards(15 downto 12) <= (others => '0');
when "1011" =>
dealerCards(15 downto 12) <= singleCard; --dcard4
when "0--0" => null; --do nothing when in win/end
when others => --this covers the start case --sets cards to 0
playerCards <= "0000000000000000";
dealerCards <= "0000000000000000";
end case?;
end if;
end process;
Здесь у меня есть одна карта, привязанная к выходу моего счетчика, которая увеличивает каждый край часов. Поэтому в основном я бы хотел, чтобы мой оператор case только обновлял значение playerCards один раз, а затем останавливался. Спасибо за любую помощь.
Будет ли он быть своего рода государственной машиной внутри моего датапата? Я спрашиваю об этом, как предположительно (это для школьной лаборатории), это можно сделать, не добавляя больше сигналов между моим FSM и datapath. Мне было интересно, будет ли что-то вроде deal'event & dealTo'event & dealToCardSlot'event работать? В настоящее время мои транзисторы FSM при нажатии кнопки, где я использую очень похожий FSM к тому, который вы описали, затем обновляются значения deal/dealTo/dealToCardSlot. Спасибо за помощь, я застрял на этом уже несколько дней. – gurtn
'deal'event & dealTo'event & dealToCardSlot'event' звучит как очень плохая идея для меня, обычно вы смотрите только на событие на тактовый сигнал, а объединение событий в агрегат ... странно. Зачем? –
Сделка, dealTo, dealToCardSlot удерживает свои значения для нескольких тактовых циклов, оператор case постоянно присваивает singleCard моему сигналу cardCards. Мне просто интересно, возможно ли, возможно, иметь постоянный тип, который после того, как назначенный больше не может измениться? – gurtn