реклама на сайте
подробности

 
 
6 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Не работает схема верхнего уровня, Помощь в освоении VHDL
Tausinov
сообщение May 10 2018, 09:12
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795



Цитата(призрак @ May 10 2018, 12:06) *
То есть если на элемент ИЛИ на один вход подаётся 1 а другой - неопределённый - логика не сработает?


Выход просто окажется в том же самом неопределенном состоянии.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение May 10 2018, 09:23
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(призрак @ May 10 2018, 12:06) *
И вопрос остался - надо делать отдельный проект для каждого уровня или в одном можно, сейчас вот так
...
Вот симуляция триггера - всё работает
...
То есть если на элемент ИЛИ на один вход подаётся 1 а другой - неопределённый - логика не сработает?

Ну теперь понятнее - судя по всему у Вас что то с выходами Q - как они в TB подключенны ?
Поэтому вместо 1 выход триггеров в X переключается - кофликтует с другим источником на Q.

Давно в Aledc не работал - но насколько помню можете выбрать любой файл в иерархии и сгенерировать для него TB в том же самом проекте.

В доке Aldec или в сети можно (и нужно) найти табличку результата логических операций в зависимости от типа сигналов (0,1,X,U...).

Удачи! Rob.
Go to the top of the page
 
+Quote Post
призрак
сообщение May 10 2018, 10:52
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 12-12-06
Из: Москва
Пользователь №: 23 439



Добавил установку в триггер, но теперь вопрос - где делать установку в правой программе? Потому что не повлияло на работу обнуление триггера в правой.

Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение May 10 2018, 10:59
Сообщение #19


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Потому-что начальное значение задается в области декларации сигнала
Например:
Код
architecture RTL of testing
    signal shreg : std_logic_vector(2 downto 0) := (others => '0'); -- вот тут задаем начальное значние !
begin


И вообще. Я боюсь представить себе, как бы у Вас выглядел 256 битный регистр...
Go to the top of the page
 
+Quote Post
Tausinov
сообщение May 10 2018, 11:15
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795



Цитата(призрак @ May 10 2018, 13:52) *
Потому что не повлияло на работу обнуление триггера в правой.


Если сигналу в процессе значение присваивается несколько раз, то актуальным окажется самое последнее из выполненных присвоений, поэтому ничего и не изменилось.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение May 10 2018, 11:17
Сообщение #21


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(призрак @ May 10 2018, 13:52) *
Добавил установку в триггер, но теперь вопрос - где делать установку в правой программе? Потому что не повлияло на работу обнуление триггера в правой.
...


Правая часть генерируется автоматом из вашей схемы. Там нет сигналов из которых получается "триггеры" - только соединения - Добавлять какую либо инициализацию туда бессмыслено.

Покажите лучше TB для модуля 3REG

Удачи! Rob.
Go to the top of the page
 
+Quote Post
призрак
сообщение May 10 2018, 11:31
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 12-12-06
Из: Москва
Пользователь №: 23 439



Цитата(Flip-fl0p @ May 10 2018, 13:59) *
Потому-что начальное значение задается в области декларации сигнала
Например:
Код
architecture RTL of testing
    signal shreg : std_logic_vector(2 downto 0) := (others => '0'); -- вот тут задаем начальное значние !
begin


И вообще. Я боюсь представить себе, как бы у Вас выглядел 256 битный регистр...




Регистры инициализировались.но ..не работают..
А разработка планируется чтобы не использовать 3 1024-битных регистра)))

Цитата(RobFPGA @ May 10 2018, 14:17) *
Приветствую!

Правая часть генерируется автоматом из вашей схемы. Там нет сигналов из которых получается "триггеры" - только соединения - Добавлять какую либо инициализацию туда бессмыслено.

Покажите лучше TB для модуля 3REG

Удачи! Rob.


А разве вставленный блок 4DFF не должен выполнять функцию логики?
Go to the top of the page
 
+Quote Post
призрак
сообщение May 10 2018, 13:16
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 12-12-06
Из: Москва
Пользователь №: 23 439



Я так понимаю у меня где-то должна появиться функция process(CLK,RS,RST)
Go to the top of the page
 
+Quote Post
KalashKS
сообщение May 10 2018, 13:57
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 7-02-11
Пользователь №: 62 755



Внесу свои пять копеек.
Первое, из-за чего код нерабочий: сигналы Q0...Q3 присваиваются одновременно внутри процесса и вне его. Симулятор создаст для них по два драйвера один - в '0' по изменению любого сигнала из списка чувствительности, второй - в значение сигналов FF0...FF3. В результате при моделировании получите либо '0', либо 'X'. Про синтез пока даже говорить не стоит.
Cудя по коду вы хотите сделать схему, в которой '1' циклически бегает по выхохам Q0...Q3. Сдвиг вы описали, зацикливание тоже. Осталось задать то, что должно там крутиться. Например, сразу по сбросу выставить схему в одно из устраивающих вас состояний. Потом посмОтрите, как вы будете это все рушить своим входным сигналом.
Go to the top of the page
 
+Quote Post
призрак
сообщение May 10 2018, 14:14
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 12-12-06
Из: Москва
Пользователь №: 23 439



Цитата(KalashKS @ May 10 2018, 16:57) *
Внесу свои пять копеек.
Первое, из-за чего код нерабочий: сигналы Q0...Q3 присваиваются одновременно внутри процесса и вне его. Симулятор создаст для них по два драйвера один - в '0' по изменению любого сигнала из списка чувствительности, второй - в значение сигналов FF0...FF3. В результате при моделировании получите либо '0', либо 'X'. Про синтез пока даже говорить не стоит.
Cудя по коду вы хотите сделать схему, в которой '1' циклически бегает по выхохам Q0...Q3. Сдвиг вы описали, зацикливание тоже. Осталось задать то, что должно там крутиться. Например, сразу по сбросу выставить схему в одно из устраивающих вас состояний. Потом посмОтрите, как вы будете это все рушить своим входным сигналом.


Да, предполагается потом на логике реализовать чтобы при сбросе всё выставлялось в ноль, а младший регистр в 1, которая при каждом следующем клоке будет сдвигаться в следующий разряд и переходить в нулевой через или, при этом схема не будет зависеть от количества триггеров (сейчас 4 потом хоть 10) а обнуление приходится делать чтобы не было неопределённых значений.
И можжно ссылку на номера строк листинга где двойное присваивание?
Go to the top of the page
 
+Quote Post
KalashKS
сообщение May 10 2018, 14:31
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 7-02-11
Пользователь №: 62 755



Цитата(призрак @ May 10 2018, 17:14) *
младший регистр в 1

Вот этого пока не описано. А стоило бы.

Цитата(призрак @ May 10 2018, 17:14) *
а обнуление приходится делать чтобы не было неопределённых значений.

Необязательно обнулять. Достаточно чтобы были какие-либо определенные значения. В вашем случае "0001".

Цитата(призрак @ May 10 2018, 17:14) *
И можжно ссылку на номера строк листинга где двойное присваивание?

30-я строка блока 4DFF и строки 56-59.

Цитата(призрак @ May 10 2018, 17:14) *
при этом схема не будет зависеть от количества триггеров (сейчас 4 потом хоть 10).

Почитайте, как пишутся сдвиговые регистры на VHDL, про тип std_logic_vector и про generic. Как уже намекали выше, ваш код можно сделать параметризируемым и сжать его до нескольких строк (без учета заголовков и объявлений).

Сообщение отредактировал KalashKS - May 10 2018, 14:31
Go to the top of the page
 
+Quote Post
призрак
сообщение May 10 2018, 15:07
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 12-12-06
Из: Москва
Пользователь №: 23 439



Цитата(KalashKS @ May 10 2018, 17:31) *
Вот этого пока не описано. А стоило бы.

Необязательно обнулять. Достаточно чтобы были какие-либо определенные значения. В вашем случае "0001".

30-я строка блока 4DFF и строки 56-59.

Почитайте, как пишутся сдвиговые регистры на VHDL, про тип std_logic_vector и про generic. Как уже намекали выше, ваш код можно сделать параметризируемым и сжать его до нескольких строк (без учета заголовков и объявлений).

1. Для этого я пока ввёл промежуточный сигнал и 1 генерю им
2. Без обнулений были неопределённые значения
3. 56-59 - почему? это же просто сброс, он может потом раздельным быть, да и на не подключенные выводы ругается симулятор, до этого просто на земле сидел.
4. до generic я ещё не дошёл, мне бы простую схему запустить чтобы с ней разобраться
Go to the top of the page
 
+Quote Post
Tausinov
сообщение May 10 2018, 16:25
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795



Цитата(призрак @ May 10 2018, 18:07) *
1. Для этого я пока ввёл промежуточный сигнал и 1 генерю им
2. Без обнулений были неопределённые значения


Если все равно уже добавлен ресет, то можно устанавливать начальное значение по нему, без всяких промежуточных сигналов. Еще раз - дело не в обнулении, а в присвоении конкретных значений вместо дефолтных U, а нулевые они или нет - роли не играет.

Цитата
3. 56-59 - почему? это же просто сброс, он может потом раздельным быть, да и на не подключенные выводы ругается симулятор, до этого просто на земле сидел.


Не важно, что это в вашем или чьем-либо другом понимании, с точки зрения языка сигнал может иметь несколько драйверов только в одном процессе. Из приведенного описания получается, что Qi ВСЕГДА равен FFi, но при этом по любому изменению сигналов из списка чувствительности еще и оказывается равен нулю - так не бывает.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение May 11 2018, 04:50
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Tausinov @ May 10 2018, 19:25) *
с точки зрения языка сигнал может иметь несколько драйверов только в одном процессе.
С точки зрения языка сигнал может иметь сколько угодно драйверов в сколько угодном количестве процессов. Результат определяется функцией разрешения (если для используемого типа она определена). Вот с точки зрения железа -- да, драйвер может быть только один.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение May 11 2018, 05:25
Сообщение #30


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Вообще я бы посоветовал автору делать сразу правильно. Всё Ваше устройство легко уместить в такой код:
CODE
library ieee;
use ieee.std_logic_1164.all;

entity reg_aclr is
port
(
clk : in std_logic;
aclr : in std_logic;
D : in std_logic;
Q : out std_logic_vector(3 downto 0)
);
end entity;

architecture RTL of reg_aclr is
signal shreg: std_logic_vector(3 downto 0) := (others => '0');
begin
process(aclr, clk)
begin
if (aclr = '1') then
shreg <= (others => '0');
elsif (rising_edge(clk)) then
shreg <= shreg(2 downto 0) & (D or shreg(3));
end if;
end process;
Q <= shreg;
end architecture;

Более того, при необходимости можно добавить параметры для настройки разрядности такого регистра и хоть 1000 разрядов делайте rolleyes.gif

Если цель состоит описать именно из отдельных триггеров (правда зачем ?) то можно:
1. Описать отдельно DFF с асинхронным сбросом :

CODE
library ieee;
use ieee.std_logic_1164.all;

entity DFF_aclr is
port
(
clk : in std_logic;
aclr : in std_logic;
D : in std_logic;
Q : out std_logic := '0'
);
end entity;
architecture RTL of DFF_aclr is
begin
reg_proc : process(aclr, clk)
begin
if (aclr = '1') then
Q <= '0';
elsif (rising_edge(clk)) then
Q <= D;
end if;
end process;
end architecture;


2. И описать соединение триггеров между собой:
CODE
library ieee;
use ieee.std_logic_1164.all;

entity reg_aclr is
port
(
clk : in std_logic;
aclr : in std_logic;
D : in std_logic;
Q : out std_logic_vector(3 downto 0)
);
end entity;

architecture RTL of reg_aclr is
signal iQ: std_logic_vector(3 downto 0) := (others => '0');
begin
--===============================================
-- Первый триггер в цепочке сдвигового регистра
--===============================================
DFF0_aclr_comp : entity work.DFF_aclr
port map
(
clk => clk,
aclr => aclr,
D => D or iq(3),
Q => iQ(0)
);

--===============================================
-- Остальные триггера
--===============================================
reg_3to1generate : for i in 0 to 2 generate
DFF_aclr_comp : entity work.DFF_aclr
port map
(
clk => clk,
aclr => aclr,
D => iQ(i),
Q => iQ(i + 1)
);
end generate;
Q <= iQ;
end architecture;

И опять же. В такое описание легко добавить параметры для задания разрядности регистра.

Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 22:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01597 секунд с 7
ELECTRONIX ©2004-2016