Дополнение с 7-сегментным дисплеем

#case #vhdl #seven-segment-display

Вопрос:

Я пытаюсь сложить 2 выхода вместе и показать их результат на третьем/четвертом дисплее на 7-сегментном дисплее. Каждый вывод отображается в своем собственном сегменте соответственно. Четвертый дисплей представляет собой двузначное число (Макс-14, Мин-0). Я получаю сообщение об ошибке, в котором говорится, что мне нужно написать все экземпляры дела «добавить». Не знаю, куда отсюда идти. Любая помощь будет признательна.

 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY Midterm2_Q2_4369 IS PORT (  SW: IN STD_LOGIC_VECTOR(2 DOWNTO 0); SW0: IN STD_LOGIC_VECTOR(2 DOWNTO 0);  ADD: IN STD_LOGIC_VECTOR(6 DOWNTO 0); Y: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); Y0: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); Y1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);  Y2: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END Midterm2_Q2_4369; ARCHITECTURE MUX8 OF Midterm2_Q2_4369 IS  BEGIN PROCESS (SW,SW0,ADD) BEGIN CASE SW IS WHEN "000" =gt; Y lt;= "0000001";  WHEN "001" =gt; Y lt;= "1001111";  WHEN "010" =gt; Y lt;= "0010010";  WHEN "011" =gt; Y lt;= "0000110";  WHEN "100" =gt; Y lt;= "1001100";  WHEN "101" =gt; Y lt;= "0100100";  WHEN "110" =gt; Y lt;= "0100000";  WHEN "111" =gt; Y lt;= "0001111"; END CASE;  CASE SW0 IS WHEN "000" =gt; Y0 lt;= "0000001";  WHEN "001" =gt; Y0 lt;= "1001111";  WHEN "010" =gt; Y0 lt;= "0010010";  WHEN "011" =gt; Y0 lt;= "0000110";  WHEN "100" =gt; Y0 lt;= "1001100";  WHEN "101" =gt; Y0 lt;= "0100100";  WHEN "110" =gt; Y0 lt;= "0100000";  WHEN "111" =gt; Y0 lt;= "0001111"; END CASE;  CASE ADD IS WHEN "0000000" =gt; Y1 lt;= "0000001"; --0  WHEN "0000001" =gt; Y1 lt;= "1001111"; --1  WHEN "0000010" =gt; Y1 lt;= "0010010"; --2  WHEN "0000011" =gt; Y1 lt;= "0000110"; --3  WHEN "0000100" =gt; Y1 lt;= "1001100"; --4  WHEN "0000101" =gt; Y1 lt;= "0100100"; --5  WHEN "0000110" =gt; Y1 lt;= "0100000"; --6  WHEN "0000111" =gt; Y1 lt;= "0001111"; --7  WHEN "0001111" =gt; Y1 lt;= "0000000"; --8  WHEN "0010111" =gt; Y1 lt;= "0000100"; --9  --8421421 WHEN "0011111" =gt; Y2 lt;= "1001111"; --(1)0  WHEN "0100111" =gt; Y2 lt;= "1001111"; --(1)1  WHEN "0101111" =gt; Y2 lt;= "1001111"; --(1)2  WHEN "0110111" =gt; Y2 lt;= "1001111"; --(1)3  WHEN "0111111" =gt; Y2 lt;= "1001111"; --(1)4--  WHEN "1000111" =gt; Y2 lt;= "1001111"; --(1)5  WHEN "1001111" =gt; Y2 lt;= "1001111"; --(1)6  WHEN "1010111" =gt; Y2 lt;= "1001111"; --(1)7--  WHEN "1011111" =gt; Y2 lt;= "1001111"; --(1)8  WHEN "1100111" =gt; Y2 lt;= "1001111"; --(1)9 END CASE;  END PROCESS; END MUX8;  

Комментарии:

1. Просто используйте WHEN OTHERS =gt; Y2 lt;=lt;somethinggt;; для покрытия тех, которые вас не интересуют.

Ответ №1:

При использовании case в VHDL ДОЛЖНЫ быть охвачены все случаи. Потому SW что , SW0 и ADD все std_logic_vector , вы также должны охватывать все мета-случаи, такие как «УУУУУУУУУУ» и т. Д. Самый простой способ сделать это-с others помощью .

Например. В SW0 охвачены все «реальные» случаи, но вы также должны охватывать значения, которые могут возникать только при моделировании, поэтому предоставьте удобное сообщение:

 CASE SW0 IS  WHEN "000" =gt; Y0 lt;= "0000001";  WHEN "001" =gt; Y0 lt;= "1001111";  WHEN "010" =gt; Y0 lt;= "0010010";  WHEN "011" =gt; Y0 lt;= "0000110";  WHEN "100" =gt; Y0 lt;= "1001100";  WHEN "101" =gt; Y0 lt;= "0100100";  WHEN "110" =gt; Y0 lt;= "0100000";  WHEN "111" =gt; Y0 lt;= "0001111";  when others =gt; report "Meta value detected" severity warning;-- simulation only case END CASE;  

Вы также должны убедиться, что все случаи покрываются SW и ADD тоже