Vlad362 0 24 декабря, 2007 Опубликовано 24 декабря, 2007 (изменено) · Жалоба Уважаемые коллеги, подскажите, плз. Привожу кусок кода: process(adr) begin case(adr) is when h1=>hout<=B"001"; when h2=>hout<=B"010"; when h3=>hout<=B"011"; when h4=>hout<=B"100"; when h5=>hout<=B"101"; when h6=>hout<=B"110"; when h7=>hout<=B"111"; when others =>hout<=B"000"; end case; end process; h1..h7 - задаваемые извне (а не константами) условия. При компиляции Quartus сказал, что условия WHEN должны быть заданы только константами. А что мне делать, если мне нужно работать с переменными значениями условий? Изменено 24 декабря, 2007 пользователем Vlad362 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aat_81 0 24 декабря, 2007 Опубликовано 24 декабря, 2007 · Жалоба process(adr) begin case(adr) is when adr1=>hout<=B"001"; when adr2=>hout<=B"010"; when adr3=>hout<=B"011"; when adr4=>hout<=B"100"; when adr5=>hout<=B"101"; when adr6=>hout<=B"110"; when adr7=>hout<=B"111"; when others =>hout<=B"000"; end case; end process; а эти значения заведи в шину ADR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
man with no name 0 24 декабря, 2007 Опубликовано 24 декабря, 2007 · Жалоба Если и adr, и h(i) - переменные, то поставить кучу if...elsif...elsif... Только результат будет отличаться от case. В случае case'а был бы мультиплексор, а так - куча схем сравнения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad362 0 24 декабря, 2007 Опубликовано 24 декабря, 2007 · Жалоба Если и adr, и h(i) - переменные, то поставить кучу if...elsif...elsif... Только результат будет отличаться от case. В случае case'а был бы мультиплексор, а так - куча схем сравнения. так уже сделал, так работает. Я надеялся, что можно сделать красиво, через WHEN process(adr) begin case(adr) is when adr1=>hout<=B"001"; when adr2=>hout<=B"010"; when adr3=>hout<=B"011"; when adr4=>hout<=B"100"; when adr5=>hout<=B"101"; when adr6=>hout<=B"110"; when adr7=>hout<=B"111"; when others =>hout<=B"000"; end case; end process; а эти значения заведи в шину ADR Этой идеи я не понял, ведь adr[1..7] это разряды шины adr, а h1..h7 - это вектора с разрядностью шины adr. Фактически я делаю адресный дешифратор с возможностью перенастройки селектируемых адресов извне. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 24 декабря, 2007 Опубликовано 24 декабря, 2007 · Жалоба Наверное в описании языка case подразумевает константы. Мне кажется естественным, что case так устроен. Если и adr, и h(i) - переменные, то поставить кучу if...elsif...elsif... Только результат будет отличаться от case. В случае case'а был бы мультиплексор, а так - куча схем сравнения. Мультиплексор и схемы сравнения будут в микросхеме, в которой есть мультиплексоры и схемы сравнения :) А в FPGA результат будет всегда одинаковый - куча LUT-ов (память или что там есть в ячейках) с проводами. Как ни выпендривайся. Назовем ширину (adr и условий h1..h7) w. Как ни записывай, все равно у вас есть w проводов для addr и еще w*7 для условий. Всего w*8 проводов. Вот из этого вам и нужно получить каждый из трех битов hout. А еще я не понимаю, что должна делать ваша схема, если h1=h2 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 декабря, 2007 Опубликовано 25 декабря, 2007 · Жалоба Уважаемые коллеги, подскажите, плз. Привожу кусок кода: process(adr) begin case(adr) is when h1=>hout<=B"001"; when h2=>hout<=B"010"; when h3=>hout<=B"011"; when h4=>hout<=B"100"; when h5=>hout<=B"101"; when h6=>hout<=B"110"; when h7=>hout<=B"111"; when others =>hout<=B"000"; end case; end process; h1..h7 - задаваемые извне (а не константами) условия. При компиляции Quartus сказал, что условия WHEN должны быть заданы только константами. А что мне делать, если мне нужно работать с переменными значениями условий? учим матчасть IEEE Standard VHDL Language Reference Manual -> 8.8 Case statement -> ........ If the expression is of a one-dimensional character array type, then the expression must be one of the following: The name of an object whose subtype is locally static — An indexed name whose prefix is one of the members of this list and whose indexing expressions are locally static expressions — A slice name whose prefix is one of the members of this list and whose discrete range is a locally static discrete range — A function call whose return type mark denotes a locally static subtype — A qualified expression or type conversion whose type mark denotes a locally static subtype. ........ IEEE Standard VHDL Language Reference Manual -> 7.4 Static expressions -> 7.4.1 Locally static primaries -> ...... locally static primary is defined to be one of the following: ..................... B) A constant (other than a deferred constant) explicitly declared by a constant declaration and initialized with a locally static expression c) An alias whose aliased name (given in the corresponding alias declaration) is a locally static primary d) A function call whose function name denotes an implicitly defined operator, and whose actual parameters are each locally static expressions .... Ждите поддержку VHDL-2006/2007/2008 Удачи! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
saday 0 11 января, 2008 Опубликовано 11 января, 2008 · Жалоба Уважаемые коллеги, подскажите, плз. Привожу кусок кода: process(adr) begin case(adr) is when h1=>hout<=B"001"; when h2=>hout<=B"010"; when h3=>hout<=B"011"; when h4=>hout<=B"100"; when h5=>hout<=B"101"; when h6=>hout<=B"110"; when h7=>hout<=B"111"; when others =>hout<=B"000"; end case; end process; h1..h7 - задаваемые извне (а не константами) условия. При компиляции Quartus сказал, что условия WHEN должны быть заданы только константами. А что мне делать, если мне нужно работать с переменными значениями условий? после when всегда должно следовать либо конкретное число (константа) либо математическое выражение результат которого тоже константа (вычисляемое значение, например при параметризации модуля). Вписать переменную туда никак не удастся т.к. компилятор должен для синтезирования схемы в железе точно рассчитать значение под when. P.S. а то что вы написали по-моему более похоже на with ... select ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться