zxazx 0 11 июля, 2006 Опубликовано 11 июля, 2006 (изменено) · Жалоба Добрый день как в VHDL присвоить значение одного вектора с инверсным порядком бит другому вектору Изменено 11 июля, 2006 пользователем _zx_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 11 июля, 2006 Опубликовано 11 июля, 2006 · Жалоба Совет: давайте теме осмысленное название. как в VHDL пристоить ИНВЕРСНОЕзначение одного вектора другому вектору(т.е. поменять местами порядокбит в векторе) Это не т. е. Это разные операции. Инверсноезначение --- это результат функции not. Для того, что вам нужно,готовой функции в стандартной библиотеке нет. Когда мне такое надо было, я написал свою. Ловите: -- reverse bit order function Reverse(constant X : in std_logic_vector) return std_logic_vector is alias alX : std_logic_vector(X'length - 1 downto 0) is X; variable Y : std_logic_vector(alX'range); begin for i in alX'range loop Y(i) := alX(alX'left - i); end loop; return Y; end; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopart 0 11 июля, 2006 Опубликовано 11 июля, 2006 · Жалоба А что в VHDL нельзя написать также просто как в Verilog? B[3:0] <= A[0:3] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 11 июля, 2006 Опубликовано 11 июля, 2006 · Жалоба А что в VHDL нельзя написать также просто как в Verilog? B[3:0] <= A[0:3] /////////////////////// И в верилоге это не имеет смысла. Нужно всегда придерживаться одного вида разрядности старший младший. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopart 0 11 июля, 2006 Опубликовано 11 июля, 2006 · Жалоба И в верилоге это не имеет смысла. Нужно всегда придерживаться одного вида разрядности старший младший. Ну человеку очень хочется/надо Синтезатор поругается но сделает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_andrew_ 0 11 июля, 2006 Опубликовано 11 июля, 2006 · Жалоба B[3:0] <= A[0:3] /////////////////////// а помоему вполне съест такое Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksya 0 11 июля, 2006 Опубликовано 11 июля, 2006 · Жалоба LIBRARY IEEE; USE IEEE.std_logic_1164.all; ENTITY conv IS PORT( A : in std_logic_vector(7 downto 0); B : out std_logic_vector(0 to 7) ); END conv; ARCHITECTURE rus OF conv IS BEGIN B <= A; END rus; Только смысла в этом мало. Это примерно как пиво из одного ящика переставлять в другой, вместо того, чтобы его пить (тем более в такую жару) :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 11 июля, 2006 Опубликовано 11 июля, 2006 · Жалоба Только смысла в этом мало. Это примерно как пиво из одного ящика переставлять в другой, вместо того, чтобы его пить (тем более в такую жару)////// Истину глаголите. Потом все равно придется делать преобразование. А вот пример того как получить результат, которого не ожидаешь: module a ( input [0:3] dcr_addr_mask, input [3:0] DCR_ABus_l, output dcr_valid ); parameter C_DCR_BASEADDR = 4'ha; assign dcr_valid = (dcr_addr_mask & C_DCR_BASEADDR) == (DCR_ABus_l & dcr_addr_mask); endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 4 11 июля, 2006 Опубликовано 11 июля, 2006 · Жалоба А что в VHDL нельзя написать также просто как в Verilog? B[3:0] <= A[0:3] B[3:0] <= A[0:3] /////////////////////// а помоему вполне съест такое Вы будете очень смеяться, но я сам думал, что так писать можно, пока однажды не столкнулся (в Верилоге) с реальной необходимостью заюзать сию конструкцию. Так вот - синтезатором был послан далеко и надолго. Низзя так писать. Если вы задали вектор как wire [15:0] ddd; то писать потом ddd[0:15] неправомерно ЗЫ: cинтезатор XST от комплекта ISE6.1 (юзаю ка кудобный редактор - по сравнению с 8кой он не тормозит так жутко) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maior 0 11 июля, 2006 Опубликовано 11 июля, 2006 · Жалоба 2andrew_b: А зачем сложности с alias и constant, а почему не попроще: -- reverse bit order function Reverse(X : in std_logic_vector) return std_logic_vector is variable Y : std_logic_vector(X'range); begin for i in X'range loop Y(i) := X(X'left - i); end loop; return Y; end; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба 2andrew_b: А зачем сложности с alias и constant, Про constant: просто так. Привычка. Если вы заметили, то указан еще и in для параметра. Хотя этого не надо. У функции все параметры входные. Можно убрать. Использование псевдонима позволяет задать порядок индексации (в данномслучае -- descending) объектов, используемых внутри функции, независимоот порядка индексации фактического параметра при вызове функции(подробности см. ниже), а также установить левую границу этих самых внутренних объектов равной 0. а почему не попроще На первый взгляд да, ваш вариант проще. Но. Есто одно но, делающее вашу функцию не универсальной. Представьте,что ваша функция вызывается для сигнала, определенного так: signal X : std_logic_vector(0 to 7); Индексация восходящая (ascending). При этом получается X'left=0. При заходе в цикл получаем: -- цикл 0 to 7 -- первая итерация Y(0) := X(0 - 0); -- уже неправильно -- вторая итерация Y(1) := X(0 - 1); -- тем более неправильно -- выходим за границы массива Могу предложить два варианта патча на вашу функцию: 1. Использовать в цикле X'high вместо X'left. 2. Использовать для определения пременной Y атрибут 'reverse_range вместо 'range и тело цикла упростить до Y(i) := X(i); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopart 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба А что в VHDL нельзя написать также просто как в Verilog? B[3:0] <= A[0:3] B[3:0] <= A[0:3] /////////////////////// а помоему вполне съест такое Вы будете очень смеяться, но я сам думал, что так писать можно, пока однажды не столкнулся (в Верилоге) с реальной необходимостью заюзать сию конструкцию. Так вот - синтезатором был послан далеко и надолго. Низзя так писать. Если вы задали вектор как wire [15:0] ddd; то писать потом ddd[0:15] неправомерно ЗЫ: cинтезатор XST от комплекта ISE6.1 (юзаю ка кудобный редактор - по сравнению с 8кой он не тормозит так жутко) Так задача - нужно одному регистру присвоить другой но в обратной последовательности бит. Если так то регистр A[3:0] нужно воспринимать как временный заданный как wire|reg [3:0] A Те сделать присвоение через временый регистр/линию!!! Так даже по Вашему всё оk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 4 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба Так задача - нужно одному регистру присвоить другой но в обратной последовательности бит. Если так то регистр A[3:0] нужно воспринимать как временный заданный как wire|reg [3:0] A Те сделать присвоение через временый регистр/линию!!! Так даже по Вашему всё оk не могу тут согласиться: вот представьте что вам надо разработать такой блок, оформив его как module реальный пример - бит-реверсивная адресация для БПФ. input [3:0]a; output [3:0]b; и какие бы внутренние wire не вводить, исхитряясь - операцию дающую в итоге "B[3:0] <= A[0:3]" без доп-х манипуляций не получить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopart 0 12 июля, 2006 Опубликовано 12 июля, 2006 · Жалоба Так задача - нужно одному регистру присвоить другой но в обратной последовательности бит. Если так то регистр A[3:0] нужно воспринимать как временный заданный как wire|reg [3:0] A Те сделать присвоение через временый регистр/линию!!! Так даже по Вашему всё оk не могу тут согласиться: вот представьте что вам надо разработать такой блок, оформив его как module реальный пример - бит-реверсивная адресация для БПФ. input [3:0]a; output [3:0]b; и какие бы внутренние wire не вводить, исхитряясь - операцию дающую в итоге "B[3:0] <= A[0:3]" без доп-х манипуляций не получить Да чего то я поверхностно последнее прикинул... Сейчас на проверялся - Verilog 2001 в одну строчку не может переварить :( :( :( А в AHDL это было очень удобно :a14: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksya 0 13 июля, 2006 Опубликовано 13 июля, 2006 · Жалоба И чего здесь перевернется?Все перевернется ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться