Перейти к содержанию
    

Перевод кода с verilog на vhdl

Здравствуйте.

в примере верилога есть такая строка:

 

module DPHY_TOP(
  ...
 
          output  [1:0] probe            
        );

....
reg  [63:0] data_out_reg;
....
  

  
  Интересует именно вот эта строка:
assign probe[0] = ^data_out_reg;

 

Как ее перевести в vhdl? 

компилятор код a <= xor b; не понимает. А второй операнд в верилоге мне не понятен. 

Может кто пояснить?

 

 

Изменено пользователем Worldmaster

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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;

такого ни в верилоге, ни в вхдл нет. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, yes said:

a <= xor b;

такого ни в верилоге, ни в вхдл нет. 

В 2008 vhdl как раз такое есть🙂

Может Gowin-овский синтезатор не поддерживает 2008 стандарт или просто надо галочку где-нибудь поставить

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 hours ago, Okie_from_Muskogee said:

В 2008 vhdl как раз такое есть🙂

Может Gowin-овский синтезатор не поддерживает 2008 стандарт или просто надо галочку где-нибудь поставить

А для std_logic_vector это работает? С любым векторным типом, для которого определен a xor b?

Я не люблю vhdl и пишу на нем только тогда, когда это явно прописано в требованиях, это обычно в какихто сафети приложениях (не знаю, кто манагерам внушил, что вхдл более "надежный", но это отдельный вопрос) и там обычно стандарт 92го года разрешен, а 2008 запрещен...

Не знал, что так можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 21.08.2024 в 13:58, yes сказал:

кто манагерам внушил, что вхдл более "надежный"

Это очередной холивар. Никакой принципиальной разницы на чем писать нет. Кому на чем нравится.

 

В 20.08.2024 в 17:38, Okie_from_Muskogee сказал:

Может Gowin-овский синтезатор не поддерживает 2008 стандарт или просто надо галочку где-нибудь поставить

Галочка то есть но я не ставил. Хз к чему это может привести. Везде по умолчанию 93 стоит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 минут назад, Worldmaster сказал:

Это очередной холивар. Никакой принципиальной разницы на чем писать нет. Кому на чем нравится.

 

 Принципиальная разница все же есть. Слишком много надо знать, чтоб поднять vhdl.   Многие пишут на vhdl не понимая, что они пишут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 минуты назад, sazh сказал:

Многие пишут на vhdl не понимая, что они пишут.

И ещё более многие делают то же самое на Verilog! 🤣

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 не обязательна)

Изменено пользователем Okie_from_Muskogee

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, yes said:

А для std_logic_vector это работает? С любым векторным типом, для которого определен a xor b?

Я не люблю vhdl и пишу на нем только тогда, когда это явно прописано в требованиях, это обычно в какихто сафети приложениях (не знаю, кто манагерам внушил, что вхдл более "надежный", но это отдельный вопрос) и там обычно стандарт 92го года разрешен, а 2008 запрещен...

Не знал, что так можно.

Унарные операторы определены в пакете std_logic_1164 для std_ulogic_vector с результатом std_ulogic и применимы для тех типов, которые можно привести к ним. Вы, конечно, можете определить свои типы, для них нужно будет переопределить все варианты xor (бинарные, унарные) какие вам нужны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот так делать (с 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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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) и видим такую таблицу:

PG213.png


Может, Xilinx не знает, что VHDL лучше, эффективнее, безопаснее, удобнее?

 

Может, пора ему всё объяснить? :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

52 минуты назад, blackfin сказал:

Удивляет другое!
Почему-то все новые IP-Cores Xilinx упорно пишет на Verilog'е (ну или на SV).


Открываем любой PG на более-менее современную IP-Core (PG203,PG210,PG211,PG213,PG251,PG302) и видим такую таблицу:

PG213.png


Может, Xilinx не знает, что VHDL лучше, эффективнее, безопаснее, удобнее?

 

Может, пора ему всё объяснить? :biggrin:

Это Вы индусам собираетесь объяснить?

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
 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, sazh сказал:


 

 

Вы просто не умеете готовить VHDL))) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, Flip-fl0p сказал:

Вы просто не умеете готовить VHDL))) 

Есть такое понятие - эволюция. Юзер всегда изучает что то новое, если не хватает чего то изученного старого.

Xilinx - на заре своей юности пытался создать свой собственный язык описания  аппаратуры. Полный пролет.

Altera - Altera_HDL. Просто шедеврально. Практически все Ip_core Altera были написаны на нем (сейчас не знаю).

Понятно, после Altera_HDL - слудущий шаг верилог. Язык ремесленника? Да. Что вижу - то и пою.

Ну а дальше - систем верилог наступает на пятки vhdl. 

P. S. Оглянулся вокруг. Был один VHDL. Ушел на пенсию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 часов назад, sazh сказал:

к синтезируемым конструкциям он подойдет в своей 8-ой книге. А результат нужен сейчас.

От себя могу посоветовать освоение синтезируемого подмножества VHDL по книге Дж.Ф.Уэйкерли. "Проектирование цифровых устройств". Только закладок надо наделать, а то там очень много сверх того.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...