Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PISO VHDL
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Языки проектирования на ПЛИС (FPGA)
MAXHAX
Всем день добрый. Необходима некоторая помощь с регистром, т.к. я уже не могу найти где моя ошибка.
CODE
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity shift is
Port ( clk : in STD_LOGIC;
reset: in STD_LOGIC;
load : in STD_LOGIC;
shift: in STD_LOGIC;
D : in STD_LOGIC_VECTOR (7 downto 0);
Q : out STD_LOGIC);
end shift;

architecture Behavioral of shift is

signal sr: std_logic_vector(7 downto 0) := (others=>'0');

begin

process (clk,load,D,)
begin
if (load = '1') then
sr <= D;
elsif (clk'event and clk = '1') then
if (shift = '1') then
sr <= sr(0) & sr(7 downto 1);
end if;
end if;
end process;

Q <= sr(0);

end Behavioral;

В общем проблема состоит в том, что на выходе выводит неверный сигнал. На скрине я выделил лишнее, т.е. он заканчивает этот сигнал по спаду, хотя должен по фронту по сути идти



Да и второй сигнал тоже смещен на 1 такт по clk
Burenkov Sergey
У вас timing simulation, сделайте behavioral
С кодом все ок, должно работать
iosifk
Цитата(MAXHAX @ Apr 12 2018, 15:16) *
begin

process (clk,load,D,)
begin
if (load = '1') then
sr <= D;
elsif (clk'event and clk = '1') then
if (shift = '1') then
sr <= sr(0) & sr(7 downto 1);
end if;
end if;
end process;

Q <= sr(0);


Да и второй сигнал тоже смещен на 1 такт по clk

У Вас на картинке load и shift присутствуют одновременно. Так должно быть? И что при этом происходит? Кто имеет более высокий приоритет?
Tausinov
На первый взгляд, никакого криминала в коде нет. Единственное, что смущает - запятая после последнего сигнала в списке чувствительности.
Было бы удобнее, если бы вы добавили еще и тестбенч, чтобы была возможность самому "пощупать".
MAXHAX
Цитата(iosifk @ Apr 12 2018, 15:48) *
У Вас на картинке load и shift присутствуют одновременно. Так должно быть? И что при этом происходит? Кто имеет более высокий приоритет?

Shift - это тот же enable, просто разрешающий сигнал
Load - использую как сигнал загрузки

Цитата(Burenkov Sergey @ Apr 12 2018, 15:47) *
У вас timing simulation, сделайте behavioral
С кодом все ок, должно работать

В квартусовском симуляторе могу выбрать только timing и functional
Burenkov Sergey
Цитата(MAXHAX @ Apr 12 2018, 15:59) *
В квартусовском симуляторе могу выбрать только timing и functional

functional значит выбирайте
iosifk
Цитата(MAXHAX @ Apr 12 2018, 15:59) *
Shift - это тот же enable, просто разрешающий сигнал
Load - использую как сигнал загрузки

Ответ не принимается!
Так все таки, когда два эти сигнала действуют одновременно, что происходит? Сдвиг или загрузка?
MAXHAX
Цитата(Burenkov Sergey @ Apr 12 2018, 16:03) *
functional значит выбирайте

теперь здесь идет не по clk, а по load идет, на скрине видно что по первому и 3-ему time bar они идут неверно



Цитата(iosifk @ Apr 12 2018, 16:11) *
Ответ не принимается!
Так все таки, когда два эти сигнала действуют одновременно, что происходит? Сдвиг или загрузка?

Насколько я понимаю, чтобы ачать разрешать сдвигать, сперва должна произойти загрузка, значит load в большем приоритете?
Tausinov
Цитата(MAXHAX @ Apr 12 2018, 16:20) *
теперь здесь идет не по clk, а по load идет, на скрине видно что по первому и 3-ему time bar они идут неверно


Почему неверно? Сейчас все четко.
Burenkov Sergey
Цитата(MAXHAX @ Apr 12 2018, 16:20) *
теперь здесь идет не по clk, а по load идет, на скрине видно что по первому и 3-ему time bar они идут неверно

load у вас асинхронный, так и будет. Хотите чтоб он был синхронный, перенесите его внутрь if (clk'event and clk = '1')
Все достаточно прозрачно - если load - параллельная загрузка. если не load, то ждем клок. load главнее
if (load = '1') then
...
elsif (clk'event and clk = '1')
...
MAXHAX
Цитата(Tausinov @ Apr 12 2018, 16:24) *
Почему неверно? Сейчас все четко.

мне надо, чтобы перед 3-им time bar было пол такта в нуле

Цитата(Burenkov Sergey @ Apr 12 2018, 16:24) *
load у вас асинхронный, так и будет. Хотите чтоб он был синхронный, перенесите его внутрь if (clk'event and clk = '1')

что-то я вообще не могу придумать как это сделать, вообще под конец дня голова не варит
Burenkov Sergey
Цитата(MAXHAX @ Apr 12 2018, 16:31) *
мне надо, чтобы перед 3-им time bar было пол такта в нуле


что-то я вообще не могу придумать как это сделать, вообще под конец дня голова не варит

У вас данные при загрузке 0x81, младший бит в 1. Сделайте его в 0 и тогда будет пол такта в 0
MAXHAX
Цитата(Burenkov Sergey @ Apr 12 2018, 16:33) *
У вас данные при загрузке 0x81, младший бит в 1. Сделайте его в 0 и тогда будет пол такта в 0

ок, а как сделать синхронный load
iosifk
Цитата(MAXHAX @ Apr 12 2018, 16:58) *
ок, а как сделать синхронный load

А что такое "список чувствительности" у процесса?
Что означает вот эта строка: process (clk,load,D,) ? Когда и по какому сигналу запускается процесс?
Что такое "синхронное проектирование"?

Много вопросов, да? sm.gif
MAXHAX
Цитата(iosifk @ Apr 12 2018, 17:01) *
А что такое "список чувствительности" у процесса?
Что означает вот эта строка: process (clk,load,D,) ? Когда и по какому сигналу запускается процесс?
Что такое "синхронное проектирование"?

Много вопросов, да? sm.gif

от всех вопросов голова сейчас взорвется))
Tausinov
Цитата(MAXHAX @ Apr 12 2018, 16:31) *
мне надо, чтобы перед 3-им time bar было пол такта в нуле


Из каких соображений "надо"? До прихода load или shift сдвиговый регистр хранит свое предыдущее состояние,
в котором в младшем бите он имеет '1', почему вдруг на полтакта выход должен просесть в '0'?


Цитата(MAXHAX @ Apr 12 2018, 16:58) *
ок, а как сделать синхронный load


С точки зрения того самого "надо" это ничего не изменит. А так "синхронный" означает, что любые изменения выходных
сигналов возможны только в момент одного из фронтов клока.
iosifk
Цитата(MAXHAX @ Apr 12 2018, 17:07) *
от всех вопросов голова сейчас взорвется))

А Вы не волнуйтесь, я к такому давно привык. Как-то несколько лет поработал на заправке, у которой тротиловый эхквивалент был как 8 Хиросим... Ну и перестал обращать на это внимание.
Начните с "синхронная установка" данных в триггере... "Синхронное проектирование" - это следующий этап...
Потом почитайте по теме "Тестбенч"...
А там лабораторка и получится...

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.