Я только что начал кодирование VHDL, и я использую XILINX Artix-7/NEXYS 4 для практики. Я только хочу спроектировать семисегментный дисплей и дать ему dsiplay номера от 0 до 9. Мой английский не очень хорошо, пожалуйста, простите меня, я попытался выразить свой вопрос.VHDL. В этом дизайне есть 2 без нагрузки сигнала
В моем коде я разбил архитектуру на четыре шага. Во-первых, я вниз по clk (100MHZ) до 1hz. Во-вторых, я использую счетчик, чтобы подсчитать число от 0 до 9, а затем использовать алгоритм двойного барабана, разделяющий число. Позднее я написал BCD для 7-сегментного декодера и выберет первый анод.
Проблема заключается в том, что предупреждение появляется, когда я реализую схемы, хотя синтез в порядке (но RTL показывает, что сигнал явно не соединяется). Проблема заключается в том, что между алгоритмом двойного барабана и счетчиком? (так как он имеет неправильный код после добавления этого кода) Я действительно хочу знать, как я могу решить эту проблему? И когда появится это предупреждение? Возможно, мой код сильно ошибается?
ВНИМАНИЕ: Параметр: 288 - Сигнал clk_IBUF не имеет нагрузки. PAR не будет пытаться маршрутизировать этот сигнал.
Готовый первоначальный анализ времени. ПРЕДУПРЕЖДЕНИЕ: Параметр: 288 - Сигнал btnD_IBUF не имеет нагрузки. PAR не будет пытаться маршрутизировать этот сигнал.
ВНИМАНИЕ: Параметр: 283 - В этом дизайне есть 2 без нагрузки. Эта конструкция заставит Bitgen выдавать предупреждения DRC.
Кстати, я знаю, что есть много способов достичь моей цели, но я действительно хочу знать, что с этим не так. Если кто-нибудь может мне помочь, СПАСИБО МНОГО.
Вот мой код:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
USE ieee.std_logic_unsigned.all;
use IEEE.numeric_std.all;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity top is
Port (clk : in STD_LOGIC;
btnD : in STD_LOGIC;
an : out STD_LOGIC_VECTOR (7 downto 0);
seg : out STD_LOGIC_VECTOR (6 downto 0));
end top;
architecture Behavioral of top is
signal clk_1hz_s : STD_LOGIC := '1';
signal clk_1hz : STD_LOGIC;
signal counter_clock : integer range 0 to 5000000 := 0;
signal sec_turth : STD_LOGIC_VECTOR (7 downto 0);
signal sec_1 : STD_LOGIC_VECTOR (3 downto 0);
begin
--new clk--
process(clk,btnD)
begin
if (clk' event and clk='1') then
if (btnD = '1') then
counter_clock <= 0;
clk_1hz_s <= '1';
elsif (counter_clock = 5000000 - 1) then
counter_clock <= 0;
clk_1hz_s <= NOT(clk_1hz_s);
else
counter_clock <= counter_clock + 1;
end if;
end if;
end process;
clk_1hz <= clk_1hz_s;
--counter--
process(clk_1hz)
variable sec :integer range 0 to 9 :=0;
begin
if (clk_1hz' event and clk_1hz='1') then
if sec > 8 then
sec := 0;
else
sec := sec + 1;
end if;
end if;
sec_turth <= STD_LOGIC_VECTOR(to_unsigned(sec,8)(7 downto 0));
end process;
--double dabble algorithm--
process(sec_turth)
variable temp_sec : STD_LOGIC_VECTOR (7 downto 0);
variable bcd_sec : unsigned (7 downto 0):= (others => '0');
begin
temp_sec := sec_turth;
bcd_sec := (others => '0');
for i in 0 to 7 loop
if bcd_sec(3 downto 0) > 4 then
bcd_sec(3 downto 0) := bcd_sec(3 downto 0) + 3;
end if;
-- if bcd_sec(7 downto 4) > 4 then
-- bcd_sec(7 downto 4) := bcd_sec(7 downto 4) + 3;
-- end if;
bcd_sec := bcd_sec(7 downto 1) & temp_sec(7);
temp_sec := temp_sec(7 downto 1) & '0';
end loop;
sec_1 <= STD_LOGIC_VECTOR(bcd_sec(3 downto 0));
--sec_2 <= STD_LOGIC_VECTOR(bcd_sec(7 downto 4));
end process;
--decoder--
with sec_1 select
seg <= "1000000" when "0000",--0
"1111001" when "0001",--1
"0100100" when "0010",--2
"0110000" when "0011",--3
"0011001" when "0100",--4
"0010010" when "0101",--5
"0000010" when "0110",--6
"1011000" when "0111",--7
"0000000" when "1000",--8
"0011000" when "1001",--9
"0001110" when "1111",--F
"1111111" when others;--close all
an <= "11111110";--choose the first anode
end Behavioral;
Спасибо за ваш ответ и посоветуйте, это очень полезно для меня. После изменения моего кода это выглядит более разумным, , что я должен заметить?. Спасибо снова. –
@HankLin: да, это возможно. Если вы поместите 'STD_LOGIC_VECTOR' в список чувствительности, тогда процесс будет комбинаторно реагировать на каждое изменение на каждом элементе вектора (при синтезе, неиспользованные будут оптимизированы). – Sanyok
Теперь я смог синтезировать ваш код и воспроизводить предупреждения (которые действительно такие же серьезные, как ошибки) – Sanyok