Active HDL 7.2 |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Active HDL 7.2 |
Fanat |
Сообщение
#1
|
Fanat Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: 5 |
Задача такая: необходимо написать декодер который взависимости от того что получает на свои 4 входа (нули или единички) выдаёт на 7 выходов тоже нули или единички. Как нибудь это можно сделать не через if'ы а то уж слишком длинный код получиться. Может как то через swith? Если он вообще есть в vhdl. Я тут совсем новичок.
|
Michael_Rybak |
Сообщение
#2
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
в таких ситуациях лучше всего константную табличку пар вход-выход делать, и бегать по ней.
|
Fanat |
Сообщение
#3
|
Fanat Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: 5 |
|
hardcase |
Сообщение
#4
|
code warrior Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: 8 |
Не мог-бы ты поточнее рассказать как её делать...или сказать где почитать про это?.. switch есть в VHDL, насчет Active HDL не знаю. Тебе требуется синхронный декодер или комбинаторный? Если синхронный, то описываешь процесс с тактированием и сигналом сброса, внутри него будет твой switch. Если комбинаторный, то внутри описания декодера прописываешь when-конструкцию, аналогичную switch'у. -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Michael_Rybak |
Сообщение
#5
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Я не знаю языка, поэтому пример схематический, почти на паскале (не компилил):
const inout: array[1 .. 16, 1 .. 4 + 7] of byte = |
xds |
Сообщение
#6
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Пока писал только на AHDL, но
Цитата 13. В части AHDL-файла, называемой Logic Section, могут находиться выражения, называемые таблицами истинности. Выражение из AHDL, соответствующее таблице истинности, выглядит следующим образом: (http://www.compitech.ru/html.cgi/arhiv/03_01/stat_126.htm)Код TABLE __node_name,__node_name =>__node_name, __node_name; __input_value,__input_value =>__output_value, __output _value; __input_value,__input_value =>__output_value, __output _value; END TABLE; Данному выражению нет прямой аналогии в VHDL, поэтому необходимо воспользоваться выражениями типа Concurrent_signal, «IF — THEN » или CASE, в зависимости от того,входит ли таблица истинности в выражение PROCESS или нет. Цитата Я не знаю языка, поэтому пример схематический, почти на паскале (не компилил): VHDL - это не алгоритмический язык, а язык описания аппаратуры (по-сути - конечных автоматов). Характерная черта языков этой группы (VHDL, Verilog HDL, AHDL и пр.) - внутри некоторого блока все предложения выполняются одновременно -------------------- The idiots are winning.
|
Michael_Rybak |
Сообщение
#7
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Цитата VHDL - это не алгоритмический язык Ну я, прежде чем постить, в википедию заглянул; в примерах увидел там ифы, решил, что можно |
hardcase |
Сообщение
#8
|
code warrior Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: 8 |
Ну я, прежде чем постить, в википедию заглянул; в примерах увидел там ифы, решил, что можно Написать,то можно. И даже парсер подобный код (процедурный) может пропустить. Проблема в том, что практически любой синтезатор нафиг отвергнет такое издевательство над собой. Каждый, кто с ПК переходил к программированию логики наступал на эти грабли. -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Fanat |
Сообщение
#9
|
Fanat Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: 5 |
Спасибо всем за помошь...
Код architecture Decoder73 of Decoder73 is begin process(Input0, Input1,Input2, Input3) variable Eop : STD_LOGIC_Vector(3 downto 0); variable Eos : STD_LOGIC_Vector(6 downto 0); begin Eop(3):=Input0; Eop(2):=Input1; Eop(1):=Input2; Eop(0):=Input3; C1: case Eop is when "0001" => Eos := "0000001"; when "0010" => Eos := "0000010"; when "0100" => Eos := "0000100"; ........................ when others => Eos := "0000000"; end case C1; Output0 <= Eos(0); Output1 <= Eos(1); Output2 <= Eos(2); Output3 <= Eos(3); Output4 <= Eos(4); Output5 <= Eos(5); Output6 <= Eos(6); end process; end Decoder73; А я вот так сделал...Языка тоже незнаю...Но всё работает... |
Текстовая версия | 24.12.2024 0:56 |