Worldmaster 0 Вторник в 10:23 Опубликовано Вторник в 10:23 (изменено) · Жалоба Здравствуйте. в примере верилога есть такая строка: module DPHY_TOP( ... output [1:0] probe ); .... reg [63:0] data_out_reg; .... Интересует именно вот эта строка: assign probe[0] = ^data_out_reg; Как ее перевести в vhdl? компилятор код a <= xor b; не понимает. А второй операнд в верилоге мне не понятен. Может кто пояснить? Изменено Вторник в 10:30 пользователем Worldmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 6 Вторник в 10:52 Опубликовано Вторник в 10:52 · Жалоба LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; -- assumed data type is STD_LOGIC (verilog reg/wire) USE ieee.std_logic_misc.ALL; -- required for XOR_REDUCE .... ^data_out_reg === xor_reduce(data_out_reg) .... a <= xor b; такого ни в верилоге, ни в вхдл нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Okie_from_Muskogee 0 Вторник в 14:38 Опубликовано Вторник в 14:38 · Жалоба 3 hours ago, yes said: a <= xor b; такого ни в верилоге, ни в вхдл нет. В 2008 vhdl как раз такое есть🙂 Может Gowin-овский синтезатор не поддерживает 2008 стандарт или просто надо галочку где-нибудь поставить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 6 Среда в 10:58 Опубликовано Среда в 10:58 · Жалоба 20 hours ago, Okie_from_Muskogee said: В 2008 vhdl как раз такое есть🙂 Может Gowin-овский синтезатор не поддерживает 2008 стандарт или просто надо галочку где-нибудь поставить А для std_logic_vector это работает? С любым векторным типом, для которого определен a xor b? Я не люблю vhdl и пишу на нем только тогда, когда это явно прописано в требованиях, это обычно в какихто сафети приложениях (не знаю, кто манагерам внушил, что вхдл более "надежный", но это отдельный вопрос) и там обычно стандарт 92го года разрешен, а 2008 запрещен... Не знал, что так можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 Среда в 11:04 Опубликовано Среда в 11:04 · Жалоба В 21.08.2024 в 13:58, yes сказал: кто манагерам внушил, что вхдл более "надежный" Это очередной холивар. Никакой принципиальной разницы на чем писать нет. Кому на чем нравится. В 20.08.2024 в 17:38, Okie_from_Muskogee сказал: Может Gowin-овский синтезатор не поддерживает 2008 стандарт или просто надо галочку где-нибудь поставить Галочка то есть но я не ставил. Хз к чему это может привести. Везде по умолчанию 93 стоит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 7 Среда в 11:26 Опубликовано Среда в 11:26 · Жалоба 18 минут назад, Worldmaster сказал: Это очередной холивар. Никакой принципиальной разницы на чем писать нет. Кому на чем нравится. Принципиальная разница все же есть. Слишком много надо знать, чтоб поднять vhdl. Многие пишут на vhdl не понимая, что они пишут. 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DSIoffe 5 Среда в 11:50 Опубликовано Среда в 11:50 · Жалоба 22 минуты назад, sazh сказал: Многие пишут на vhdl не понимая, что они пишут. И ещё более многие делают то же самое на Verilog! 🤣 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Okie_from_Muskogee 0 Среда в 13:29 Опубликовано Среда в 13:29 (изменено) · Жалоба 2 hours ago, Worldmaster said: Галочка то есть но я не ставил. Хз к чему это может привести. Везде по умолчанию 93 стоит. Попробовать же можно. Когда-то я пробовал среду GoWin и не увидел в ней возможности просмотреть post-synthesis netlist. В купе с неизвестно-каким синтезатором это привело меня к решению остаться на западных ПЛИС. Если все-таки есть (появилась) аозможность просмотреть результат синтеза, то все не так страшно и можно экспериментировать с настройками. Другой вариант - вместо унарного xor расписать руками что-то вроде g: for i in b'range generate tmp := tmp xor b(i); end generate; a <= tmp; (возможно, tmp не обязательна) Изменено Среда в 13:31 пользователем Okie_from_Muskogee Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Okie_from_Muskogee 0 Среда в 13:45 Опубликовано Среда в 13:45 · Жалоба 2 hours ago, yes said: А для std_logic_vector это работает? С любым векторным типом, для которого определен a xor b? Я не люблю vhdl и пишу на нем только тогда, когда это явно прописано в требованиях, это обычно в какихто сафети приложениях (не знаю, кто манагерам внушил, что вхдл более "надежный", но это отдельный вопрос) и там обычно стандарт 92го года разрешен, а 2008 запрещен... Не знал, что так можно. Унарные операторы определены в пакете std_logic_1164 для std_ulogic_vector с результатом std_ulogic и применимы для тех типов, которые можно привести к ним. Вы, конечно, можете определить свои типы, для них нужно будет переопределить все варианты xor (бинарные, унарные) какие вам нужны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 5 Среда в 15:24 Опубликовано Среда в 15:24 · Жалоба Вот так делать (с for-genarate и однобитным сигналом) точно нельзя (VHDL - это не C/C++): 1 hour ago, Okie_from_Muskogee said: Другой вариант - вместо унарного xor расписать руками что-то вроде g: for i in b'range generate tmp := tmp xor b(i); end generate; a <= tmp; К сожалению, вынужден констатировать, что @sazh был весьма прав в своём недавнем предположении даже в большей степени, чем я мог предположить. For @Worldmaster: в средах, где нет поддержки VHDL'2008, я использую такую функцию: function Vector_Xor (ARG: std_logic_vector) return std_logic is variable X: std_logic := '0'; begin for i in ARG'Range loop X := X xor ARG(i); end loop; return X; end function Vector_Xor; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 23 Среда в 16:03 Опубликовано Среда в 16:03 · Жалоба On 8/21/2024 at 2:50 PM, DSIoffe said: On 8/21/2024 at 2:26 PM, sazh said: Многие пишут на vhdl не понимая, что они пишут. И ещё более многие делают то же самое на Verilog! Удивляет другое! Почему-то все новые IP-Cores Xilinx упорно пишет на Verilog'е (ну или на SV). Открываем любой PG на более-менее современную IP-Core (PG203,PG210,PG211,PG213,PG251,PG302) и видим такую таблицу: Может, Xilinx не знает, что VHDL лучше, эффективнее, безопаснее, удобнее? Может, пора ему всё объяснить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 7 Среда в 17:03 Опубликовано Среда в 17:03 · Жалоба 52 минуты назад, blackfin сказал: Удивляет другое! Почему-то все новые IP-Cores Xilinx упорно пишет на Verilog'е (ну или на SV). Открываем любой PG на более-менее современную IP-Core (PG203,PG210,PG211,PG213,PG251,PG302) и видим такую таблицу: Может, Xilinx не знает, что VHDL лучше, эффективнее, безопаснее, удобнее? Может, пора ему всё объяснить? Это Вы индусам собираетесь объяснить? VHDL - это язык преподавателей и кандидатов наук. Помню купил ТРИ книги Бибило. Доктор наук. И понял, что к синтезируемым конструкциям он подойдет в своей 8-ой книге. А результат нужен сейчас. А на выходе из вузов одни программеры. Си подобные. Простой пример. Храню на память, как о незаурядном члене сообщества. Понятно, эти шашечки не для хлеба насущного. use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity BarrelShifter is generic( N : positive := 3 ); port ( Input : in bit_vector( 2 ** N - 1 downto 0 ); ShiftCount : in natural range 0 to 2 ** N - 1; Output : out bit_vector( 2 ** N - 1 downto 0 ) ); end BarrelShifter; architecture Structure of BarrelShifter is subtype TStageIndex is integer range 0 to N; subtype TVector is bit_vector( 2 ** N - 1 downto 0 ); type TStageResults is array( TStageIndex ) of TVector; signal stageResults : TStageResults; function hasBitSet( number : natural; bitIndex : natural ) return boolean is begin return (number / 2 ** bitIndex) mod 2 /= 0; end function; begin stageResults( 0 ) <= Input; stages: for stage in TStageIndex'Low + 1 to TStageIndex'High generate stageResults( stage ) <= stageResults( stage - 1 ) ror 2 ** (stage - 1) when hasBitSet( ShiftCount, stage - 1 ) else stageResults( stage - 1 ); end generate; Output <= StageResults( N ); end Structure; module barrel_shift #(parameter n = 4) ( input [2**n-1:0] in_data, input [n-1:0] shift, output [2**n-1:0] out_data_a, output [2**n-1:0] out_data_b ); wire [2*2**n-1:0] temp_a; wire [2*2**n-1:0] temp_b; assign temp_a = { in_data, {2**n{1'b0}} } >> shift, out_data_a = temp_a[2*2**n-1:2**n] | temp_a[2**n-1:0]; assign temp_b = { {2**n{1'b0}}, in_data } << shift, out_data_b = temp_b[2*2**n-1:2**n] | temp_b[2**n-1:0]; endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 Среда в 17:07 Опубликовано Среда в 17:07 · Жалоба 4 минуты назад, sazh сказал: Вы просто не умеете готовить VHDL))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 7 Среда в 17:22 Опубликовано Среда в 17:22 · Жалоба 6 минут назад, Flip-fl0p сказал: Вы просто не умеете готовить VHDL))) Есть такое понятие - эволюция. Юзер всегда изучает что то новое, если не хватает чего то изученного старого. Xilinx - на заре своей юности пытался создать свой собственный язык описания аппаратуры. Полный пролет. Altera - Altera_HDL. Просто шедеврально. Практически все Ip_core Altera были написаны на нем (сейчас не знаю). Понятно, после Altera_HDL - слудущий шаг верилог. Язык ремесленника? Да. Что вижу - то и пою. Ну а дальше - систем верилог наступает на пятки vhdl. P. S. Оглянулся вокруг. Был один VHDL. Ушел на пенсию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DSIoffe 5 Четверг в 07:44 Опубликовано Четверг в 07:44 · Жалоба 14 часов назад, sazh сказал: к синтезируемым конструкциям он подойдет в своей 8-ой книге. А результат нужен сейчас. От себя могу посоветовать освоение синтезируемого подмножества VHDL по книге Дж.Ф.Уэйкерли. "Проектирование цифровых устройств". Только закладок надо наделать, а то там очень много сверх того. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться