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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Вопрос по VHDL
Jenya7
сообщение Feb 8 2017, 12:54
Сообщение #16


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

Группа: Участник
Сообщений: 1 062
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Raven @ Feb 8 2017, 16:54) *
Конечно есть. Прием широко известный и называется "присвоение значения по умолчанию". Переменной в самом начале процесса присваиваете некое удобное вам по каким-то причинам "значение по умолчанию" (например, самое распространенное присвоение в логике процесса), а в нижеследующих case'ах / if'ах присвоение этой переменной будет только для случаев "девиации" от умолчального значения.

можно попробовать. спасибо.
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Feb 8 2017, 13:30
Сообщение #17


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

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



Цитата(Jenya7 @ Feb 8 2017, 15:54) *
можно попробовать. спасибо.


Лучше это все же делать в секции

when others =>
...

Так будет нагляднее.
Go to the top of the page
 
+Quote Post
starley
сообщение Feb 15 2017, 20:27
Сообщение #18


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

Группа: Свой
Сообщений: 178
Регистрация: 9-01-09
Из: Москва
Пользователь №: 43 085



Цитата(Tausinov @ Feb 8 2017, 16:30) *
Лучше это все же делать в секции

when others =>
...

Так будет нагляднее.

В секции when others значения по умолчанию в том смысле, в каком это нужно TC, не присвоить - он ведь просто не хочет постоянно задавать значение, которое одинаково для многих секций when, а у when others => другая семантика.
Для наглядности лучше просто отдельный case сделать для этой переменной.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Feb 20 2017, 09:11
Сообщение #19


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

Группа: Участник
Сообщений: 1 062
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(andrew_b @ Feb 8 2017, 15:10) *
Это legacy crap, не используйте это для математики.

Используйте только его. Для представления чисел используйте типы signed и unsigned и функции to_integer, to_signed, to_unsigned.

Переменные можно использовать только внутри process.


Все равно не получается.
Код
entity REG_FILE is
port
(
    REG_ADDR_IN     : in std_logic_vector(15 downto 0);
    -- какой то код    
);
end REG_FILE;

architecture behavior of REG_FILE is

    -- какой то код
    signal mailbox_idx : integer := 0;

process(REG_CLK)
begin
      -- какой то код
     mailbox_idx <= to_integer(to_unsigned(REG_ADDR_IN));
end process;
end behavior;

результат
Код
mailbox_idx <= to_integer(REG_ADDR_IN);
Error (10405): VHDL error at reg_file.vhd(75): can't determine type of object at or near identifier "to_integer" -- found 0 possible types

или так
mailbox_idx <= to_integer(to_unsigned(REG_ADDR_IN));
Error (10476): VHDL error at reg_file.vhd(75): type of identifier "REG_ADDR_IN" does not agree with its usage as "natural" type
Error (10346): VHDL error at reg_file.vhd(75): formal port or parameter "SIZE" must have actual or default value
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Feb 20 2017, 09:41
Сообщение #20


Местный
***

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



Цитата(Jenya7 @ Feb 20 2017, 12:11) *
Все равно не получается.
Код
entity REG_FILE is
port
(
    REG_ADDR_IN     : in std_logic_vector(15 downto 0);
    -- какой то код    
);
end REG_FILE;

architecture behavior of REG_FILE is

    -- какой то код
    signal mailbox_idx : integer := 0;

process(REG_CLK)
begin
      -- какой то код
     mailbox_idx <= to_integer(to_unsigned(REG_ADDR_IN));
end process;
end behavior;

результат
Код
mailbox_idx <= to_integer(REG_ADDR_IN);
Error (10405): VHDL error at reg_file.vhd(75): can't determine type of object at or near identifier "to_integer" -- found 0 possible types

или так
mailbox_idx <= to_integer(to_unsigned(REG_ADDR_IN));
Error (10476): VHDL error at reg_file.vhd(75): type of identifier "REG_ADDR_IN" does not agree with its usage as "natural" type
Error (10346): VHDL error at reg_file.vhd(75): formal port or parameter "SIZE" must have actual or default value

mailbox_idx <= to_integer(to_unsigned(REG_ADDR_IN));
Функция to_unsigned обычно применяется для конвертирования INTEGER ---> UNSIGNED. Обязательно необходимо указывать количество разрядов. т.е to_unsigned(,length)
Вот тут отличная картинка по преобразованиям типов при работе с библиотекой numeric_std: https://www.doulos.com/knowhow/vhdl_designe...de/numeric_std/

Сообщение отредактировал Flip-fl0p - Feb 20 2017, 09:44
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Feb 20 2017, 09:46
Сообщение #21


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

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



Цитата(Jenya7 @ Feb 20 2017, 12:11) *
Код
mailbox_idx <= to_integer(to_unsigned(REG_ADDR_IN));


Код
mailbox_idx <= to_integer(unsigned(REG_ADDR_IN));
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Feb 20 2017, 10:51
Сообщение #22


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

Группа: Участник
Сообщений: 1 062
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Flip-fl0p @ Feb 20 2017, 14:41) *
mailbox_idx <= to_integer(to_unsigned(REG_ADDR_IN));
Функция to_unsigned обычно применяется для конвертирования INTEGER ---> UNSIGNED. Обязательно необходимо указывать количество разрядов. т.е to_unsigned(,length)
Вот тут отличная картинка по преобразованиям типов при работе с библиотекой numeric_std: https://www.doulos.com/knowhow/vhdl_designe...de/numeric_std/

делал и так
mailbox_idx <= to_integer(TO_unsigned(REG_ADDR_IN,16));
все равно ругается.
Error (10476): VHDL error at reg_file.vhd(78): type of identifier "REG_ADDR_IN" does not agree with its usage as "natural" type


Цитата(andrew_b @ Feb 20 2017, 14:46) *
Код
mailbox_idx <= to_integer(unsigned(REG_ADDR_IN));

ругается.
Error (10621): VHDL Use Clause error at reg_file.vhd(78): more than one Use Clause imports a declaration of simple name "unsigned" -- none of the declarations are directly visible
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Feb 20 2017, 11:01
Сообщение #23


Местный
***

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



Цитата(Jenya7 @ Feb 20 2017, 13:51) *
делал и так
mailbox_idx <= to_integer(TO_unsigned(REG_ADDR_IN,16));
все равно ругается.
Error (10476): VHDL error at reg_file.vhd(78): type of identifier "REG_ADDR_IN" does not agree with its usage as "natural" type



ругается.
Error (10621): VHDL Use Clause error at reg_file.vhd(78): more than one Use Clause imports a declaration of simple name "unsigned" -- none of the declarations are directly visible

А не затруднит ли Вас выложить полный текст модуля, на который ругается Quartus. То, что Вы выложили не содержит REG_ADDR_IN

Сообщение отредактировал Flip-fl0p - Feb 20 2017, 11:02
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Feb 20 2017, 11:12
Сообщение #24


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

Группа: Участник
Сообщений: 1 062
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Flip-fl0p @ Feb 20 2017, 16:01) *
А не затруднит ли Вас выложить полный текст модуля, на который ругается Quartus. То, что Вы выложили не содержит REG_ADDR_IN

вот полный файл. REG_ADDR_IN находиться и поиском и подсветкой.

Прикрепленные файлы
Прикрепленный файл  reg_file.vhd ( 4.24 килобайт ) Кол-во скачиваний: 7
 
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Feb 20 2017, 11:45
Сообщение #25


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

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



Цитата(Jenya7 @ Feb 20 2017, 14:12) *
вот полный файл. REG_ADDR_IN находиться и поиском и подсветкой.

Я уже устал повторять: не используйте эти пакеты вместе:
Код
use ieee.numeric_std.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

если вы не понимаете, что вы делаете.

Более того,
Код
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

не используйте вообще никогда. Точка.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Feb 20 2017, 11:47
Сообщение #26


Местный
***

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



Цитата(Jenya7 @ Feb 20 2017, 14:12) *
вот полный файл. REG_ADDR_IN находиться и поиском и подсветкой.

1. use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

Не используйте эти библиотеки.

2. STD_LOGIC_VECTOR каждый разряд может принять 9 значений. И когда применяете CASE надо полностью все состояния описать when others =>
Я поправил, вроде компилируется, но правильность я не проверяю. Не умею с Record работать, не было необходимости. crying.gif

3. Уверены, что вообще Record нужен ?

4. А нужен ли асинхронный сброс ? Допустим, сброс вы синхронизировали и REG_DATA_OUT сброситься. А на остальные триггеры этот сигнал будет работать как ENABLE. Это точно то, что вам надо ?

Сообщение отредактировал Flip-fl0p - Feb 20 2017, 12:01
Прикрепленные файлы
Прикрепленный файл  ONE_DFF.vhd ( 4.94 килобайт ) Кол-во скачиваний: 5
 
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Feb 20 2017, 12:35
Сообщение #27


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

Группа: Участник
Сообщений: 1 062
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Flip-fl0p @ Feb 20 2017, 16:47) *
1. use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

Не используйте эти библиотеки.

2. STD_LOGIC_VECTOR каждый разряд может принять 9 значений. И когда применяете CASE надо полностью все состояния описать when others =>
Я поправил, вроде компилируется, но правильность я не проверяю. Не умею с Record работать, не было необходимости. crying.gif

3. Уверены, что вообще Record нужен ?

4. А нужен ли асинхронный сброс ? Допустим, сброс вы синхронизировали и REG_DATA_OUT сброситься. А на остальные триггеры этот сигнал будет работать как ENABLE. Это точно то, что вам надо ?

спасибо.
я их не использую. просто искал проблему, пробовал все подряд. оказалось это и есть проблема use ieee.std_logic_arith.all;.
а что вместо рекорд? память?
насчет рисета я еще не уверен. это только заготовка.

Сообщение отредактировал Jenya7 - Feb 20 2017, 12:36
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Feb 20 2017, 12:39
Сообщение #28


Местный
***

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



Цитата(Jenya7 @ Feb 20 2017, 15:35) *
спасибо.
я их не использую. просто искал проблему, пробовал все подряд. оказалось это и есть проблема use ieee.std_logic_arith.all;.
а что вместо рекорд? память?
насчет рисета я еще не уверен. это только заготовка.

А какая задача стоит ? По тексту схемы у меня появилось примерное понимание что необходимо сделать. Но лучше услышать это от Вас.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Feb 20 2017, 13:03
Сообщение #29


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

Группа: Участник
Сообщений: 1 062
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Flip-fl0p @ Feb 20 2017, 17:39) *
А какая задача стоит ? По тексту схемы у меня появилось примерное понимание что необходимо сделать. Но лучше услышать это от Вас.

есть 32 пакета по 17 байт. надо в них писать/читать. мне показалоь рекорд удобней.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Feb 20 2017, 13:16
Сообщение #30


Местный
***

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



Цитата(Jenya7 @ Feb 20 2017, 16:03) *
есть 32 пакета по 17 байт. надо в них писать/читать. мне показалоь рекорд удобней.

А не проще ли использовать классическую блочную память, которая есть почти во всех FPGA ?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th April 2017 - 23:42
Рейтинг@Mail.ru


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