У меня много ошибок, несмотря на то, что я пробовал разные способы ввода своей программы, но в основном использовал логическое мышление. Дело в том, что я никогда раньше не пытался объединять разные вещи вместе, поэтому у меня возникла проблема с невозможностью скомпилировать это. Есть требование, и я могу обработать его логически, но мне нужна помощь с кодированием. Можно ли направлять меня? Спасибо.
Прикрепленный ниже код не завершен, но в нем уже много ошибок.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity tracking7 is
port ( sensor : in std_logic;
reset_bar : in std_logic;
D3, D2, D1, D0 : in std_logic;
q : out std_logic;
led : out std_logic;
a4,b4,c4,d4,e4,f4,g4 : out std_logic);
end tracking7;
architecture flow of tracking7 is
signal input : std_logic_vector (3 downto 0); --VECTORS FOR INTERNAL
signal output : std_logic_vector (6 downto 0); --USE IN DECODER STATEMENTS
signal count_sig: unsigned (3 downto 0);
begin
input <= (D3, D2 , D1, D0);
WITH input SELECT
output <= "0000001" when "0000", --DISPLAY 0
"1001111" when "0001", --DISPLAY 1
"0010010" when "0010", --DISPLAY 2
"0000110" when "0011", --DISPLAY 3
"1001100" when "0100", --DISPLAY 4
"0100100" when "0101", --DISPLAY 5
"0100000" when "0110", --DISPLAY 6
"0001111" when "0111", --DISPLAY 7
"0000000" when "1000", --DISPLAY 8
"0000100" when "1001", --DISPLAY 9
"0001000" when "1010", --DISPLAY A
"1100000" when "1011", --DISPLAY B
"0110001" when "1100", --DISPLAY C
"1000100" when "1101", --DISPLAY D
"0110000" when "1110", --DISPLAY E
"0111000" when "1111", --DISPLAY F
"1111111" when others; --BLANK DISPLAY
process ( sensor, reset_bar)
begin
if (reset_bar = '1') then count_sig <= count_sig;
elsif falling_edge (sensor) then if (count_sig = D3& D2& D1& D0) then
count_sig <= "0000";
else
count_sig <= count_sig + 1;
end if;
end if;
end process;
process (D3, D2, D1, D0)
begin
if (q = D3&D2&D1&D0)
then led <= '1'; --LED light up when reach ref no
else
led<= '0';
end if;
end process;
a4 <= output(6);
b4 <= output(5);
c4 <= output(4);
d4 <= output(3);
e4 <= output(2);
f4 <= output(1);
g4 <= output(0);
q <= std_logic_vector (count_sig);
end flow;
Может быть, краткое примечание о том, о чем мой код, в основном для разработки системы управления запасами, которая определяет количество униформ, возвращенных в ящик. Пользователь может установить любое количество униформ, которые он хочет обнаружить на входах: D3D2D1D0. Разработайте систему со следующими характеристиками:
- Как только эталонный номер достигнут, загорается светодиод, и счет останавливается на эталонном номере, даже если входной датчик активирован. Покажите количество обнаруженных униформ на семисегментном дисплее и значение эталона на другом дисплее. Например: если ссылочный номер 15
- Когда сброс активирован, светодиод и семь сегментов должны отражать последний статус обнаруженной униформы.
Пожалуйста, порекомендуйте!
q = D3&D2&D1&D0
не существует оператора равенства, который может проверять между левым операндом с базовым типом std_ulogic и правым операндом неизвестного типа массива с базовым типом элемента std_ulogic. Возможно, эти операторы конкатенации хотели быть операторами И? - person   schedule 19.08.2020