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

VHDL to Verilog

Всем добра.

Имею доставшийся в наследство модуль

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity n_f0_vhdl is
    port ( clk     : in std_logic;
           n       : in  integer range 0 to 2**24 - 1;
           clk_out : out std_logic
          );
end n_f0_vhdl;

architecture behavioral of n_f0_vhdl is

    signal count_vhdl : unsigned (23 downto 0) := (others => '0');
    signal c_out_vhdl : std_logic := '0';
    begin
        process (clk, count_vhdl) begin
            if rising_edge(clk) then
                count_vhdl <= count_vhdl + to_unsigned(n,24);
                c_out_vhdl <= count_vhdl(23);
            end if;
        end process;
	
	process (clk, c_out_vhdl, count_vhdl) begin
		if rising_edge(clk) then
            if count_vhdl(23) = '1' and c_out_vhdl = '0' 
            then clk_out <= '1';
            else clk_out <= '0';
            end if;
		end if;
	end process;
		
end behavioral;

который переписал на родном для меня verilog-e следующим образом

`define COUNT_DIM 24
`define COUNT_RNG [ `COUNT_DIM - 1 : 0 ]

module n_f0_v (
    input  clk,
    input  `COUNT_RNG n,
    output reg clk_out
);
    reg `COUNT_RNG count_v;
    wire   count_v_msb;
    assign count_v_msb = count_v[`COUNT_DIM - 1];
    reg  c_out_v;
    always @ ( posedge clk ) begin
        count_v <= count_v + n; 
        c_out_v <= count_v_msb;
        clk_out <= count_v_msb && !c_out_v;    
   end
endmodule

Для проверки первый и второй варианты загнал в Quartus и получил RTL модели

image.thumb.png.966bad3e8e0c3eb6e47a7fadba79797d.png

и

image.thumb.png.8dd620406739db1f69c9359faccc693d.png

Можно ли утверждать, что я перевёл описание модуля с одного HDL на другой правильно?

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


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

3 hours ago, AnatolySh said:

Можно ли утверждать, что я перевёл описание модуля с одного HDL на другой правильно?

На это может дать ответ только симуляция и, потом, проверка в железе, ИМХО. Глазами сравнивать синтезированные модули это утопия.

Хотя для данного, конкретного, маленького модуля - похоже, что всё ОК.

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


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

Для этого есть ещё формальная верификация которая проверяет эквивалентность РТЛ описаний или нетлистов (Cadence LEC, Synopsys Formality).

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


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

Для чего в исходном файле что-то, кроме клока, в списке чувствительности указано? Не может это потом в симуляции привести к различиям?

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


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

On 5/11/2022 at 8:32 PM, nice_vladi said:

На это может дать ответ только симуляция и, потом, проверка в железе, ИМХО.

Так-то оно так, но как обеспечить полноту проверки? Хотя для данного конкретного модуля, похоже, это просто.

On 5/12/2022 at 12:31 PM, Zwerg_nase said:

(Cadence LEC, Synopsys Formality).

Давно хотел познакомиться, но, вот, удастся ли поиграться, особенно в современных условиях?

17 minutes ago, Tausinov said:

Для чего в исходном файле что-то, кроме клока, в списке чувствительности указано?

Вот чего не знаю, того не скажу. Я, можно сказать, VHDL почти впервые вижу. Отсюда и трудности перевода..

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


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

2 часа назад, Tausinov сказал:

Для чего в исходном файле что-то, кроме клока, в списке чувствительности указано?

Недостаточная квалификация писавшего.

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


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

4 hours ago, AnatolySh said:
On 5/12/2022 at 12:31 PM, Zwerg_nase said:

(Cadence LEC, Synopsys Formality).

Давно хотел познакомиться, но, вот, удастся ли поиграться, особенно в современных условиях?

На местном фтп это есть под линукс. Cadence LEC = Cadence Conformal

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


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

59 minutes ago, Zwerg_nase said:

На местном фтп это есть под линукс.

Спасибо, гляну. Как раз комп с Убунтой простаивает.

---------------------------------

Попробовал тут утилиту vhdl2verilog из пакета SynaptiCAD (последняя на текущий момент версия выложена собственноручно в вышеупомянутые закрома), который с разной степенью настойчивости дёргаю за усы. Вот, что он выдал при преобразовании первого листинга:

Вывод в консоль:
 

// VHDL2verilog version 20.51

//       Copyright (c) SynaptiCAD Inc. 1992-2014, All Rights Reserved.
//                      UNPUBLISHED, LICENSED SOFTWARE.
//           CONFIDENTIAL AND PROPRIETARY INFORMATION WHICH IS THE
//         PROPERTY OF ALTERNATIVE SYSTEM CONCEPTS OR ITS LICENSORS.
//

Running..

Loading d:\FPGA\SynaptiCAD\v2v\lib\standard.vhd, Package standard

Loading input file n_f0_vhdl.vhd
Loading d:\FPGA\SynaptiCAD\v2v\lib\std_logic_1164_header.vhd, Package std_logic_1164
Loading d:\FPGA\SynaptiCAD\v2v\lib\numeric_std_header.vhd, Package numeric_std
n_f0_vhdl.vhd(19) : WARNING: Assignment to a sensitivity signal 'count_vhdl' in a process
n_f0_vhdl.vhd(19) : NOTE: This may put a Verilog simulator in an infinite loop; see $SYNCAD_HOME/v2v/doc/vhdl2v_rel for a suggested manual fix
Reading function mapping files...
Reading function mapping file 'd:\FPGA\SynaptiCAD/v2v/lib/standard.fm'
Reading function mapping file 'd:\FPGA\SynaptiCAD/v2v/lib/std_logic_1164.fm'
Reading function mapping file 'd:\FPGA\SynaptiCAD/v2v/lib/std_logic_arith.fm'
Reading function mapping file 'd:\FPGA\SynaptiCAD/v2v/lib/std_logic_unsigned.fm'
Finished reading function mapping files
Top-level module is 'n_f0_vhdl'

    NOTE: Using vector range instead for VHDL type 'integer'
d:\FPGA\SynaptiCAD\v2v\lib\standard.vhd(74) : NOTE: Using Verilog type 'wire' for VHDL type 'bit_vector'
d:\FPGA\SynaptiCAD\v2v\lib\numeric_std_header.vhd(40) : NOTE: Using Verilog type 'reg' for VHDL type 'UNSIGNED'
    NOTE: Created equivalent Verilog model for 'process_1' in architecture 'behavioral' of entity 'n_f0_vhdl'
    NOTE: Created equivalent Verilog model for 'process_2' in architecture 'behavioral' of entity 'n_f0_vhdl'
    NOTE: Adding port 'clk' of mode 'IN' to module 'n_f0_vhdl'
    NOTE: Adding port 'n' of mode 'IN' to module 'n_f0_vhdl'
    NOTE: Adding port 'clk_out' of mode 'OUT' to module 'n_f0_vhdl'
    NOTE: Adding 'initial' statement corresponding to process 'process_4' to module
    NOTE: Adding 'initial' statement corresponding to process 'process_3' to module
    NOTE: Adding 'always' statement corresponding to process 'process_1' to module
    NOTE: Adding 'always' statement corresponding to process 'process_2' to module
d:\FPGA\SynaptiCAD\v2v\lib\numeric_std_header.vhd(690) : WARNING: The return size of the function is not determined.
d:\FPGA\SynaptiCAD\v2v\lib\standard.vhd(71) : ERROR: Cannot elaborate 'high attribute without a 'range' in 'integer'
d:\FPGA\SynaptiCAD\v2v\lib\standard.vhd(71) : ERROR: Cannot elaborate 'high attribute without a 'range' in 'integer'

<<<<<< Basic translation of VHDL functions/procedures used in 'n_f0_vhdl' written to "n_f0_vhdl_behavioral.v" >>>>>>>>

Due to unsupported VHDL constructs, Verilog file may not compile

//

<<<<<<  Verilog translation of VHDL file "n_f0_vhdl.vhd" written to "n_f0_vhdl_SynaptiCAD.v"  >>>>>>>>

Ну и выходные файлы:

n_f0_vhdl_SynaptiCAD.v:

/*******************************************************************************

-- File Type:    Verilog HDL 
-- Tool Version: VHDL2verilog 20.51
-- Input file was: n_f0_vhdl.vhd
-- Command line was: d:\FPGA\SynaptiCAD\bin\win32\vhdl2verilog.exe n_f0_vhdl.vhd n_f0_vhdl_SynaptiCAD.v
-- Date Created: Fri May 13 22:33:13 2022

*******************************************************************************/

`define false 1'b 0
`define FALSE 1'b 0
`define true 1'b 1
`define TRUE 1'b 1

`timescale 1 ns / 1 ns // timescale for following modules


module n_f0_vhdl (
   clk,
   n,
   clk_out);
 

input   clk; 
input   [31:0] n; 
output   clk_out; 

reg     clk_out; 
reg     [23:0] count_vhdl; 
reg     c_out_vhdl; 

initial 
   begin : process_4
   c_out_vhdl = 1'b 0;   
   end

initial 
   begin : process_3
   count_vhdl = {24{1'b 0}};   
   end


always @(posedge clk)
   begin : process_1
   if (clk === 1'b 1)
      begin
      count_vhdl <= count_vhdl + TO_UNSIGNED(n, 24);   
      c_out_vhdl <= count_vhdl[23];   
      end
   end


always @(posedge clk)
   begin : process_2
   if (clk === 1'b 1)
      begin
      if (count_vhdl[23] === 1'b 1 & c_out_vhdl === 1'b 0)
         begin
         clk_out <= 1'b 1;   
         end
      else
         begin
         clk_out <= 1'b 0;   
         end
      end
   end


// including file with called functions and tasks
`include "n_f0_vhdl_behavioral.v"

endmodule // module n_f0_vhdl

n_f0_vhdl_behavioral.v:

function /*[add proper size here]*/ TO_UNSIGNED;
input   [0:integer /* ignored attribute: 'high */] ARG;
input   [0:integer /* ignored attribute: 'high */] SIZE;

В общем даже и не знаю.

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


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

1 hour ago, Zwerg_nase said:

На местном фтп это есть под линукс. Cadence LEC = Cadence Conformal

Не нашёл ни того, ни другого. Прошу ткнуть носом.

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


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

../EDA/_Cadence_/CONFRML****/  Conformal

../EDA/_Synopsys_/fm_****/    Formality

../EDA/_Mentor_/FormalPro/ тут от ментора, но старое очень

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


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

26 minutes ago, honinbo said:

../EDA/_Cadence_/CONFRML****/  Conformal

Спасибо! А это все

CONFRML_12.10.420/
CONFRML_13.10.100/
CONFRML_14.10.140_lnx86_Hotfix/
CONFRML10.10.100/
CONFRML11.10.300/
CONFRML12.10.100/
CONFRML12.10.160/
CONFRML15.20.100_Base/
CONFRML17.10.100/
CONFRML19.20.100/

чем отличаются? Брать последнюю версию, и не думать?

Тот же вопрос про ../EDA/_Synopsys_/fm_****/    Formality

27 minutes ago, honinbo said:

../EDA/_Mentor_/FormalPro/ тут от ментора, но старое очень

Если старое, то какой интерес может представлять?

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


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

Лопата тоже древнее орудие, но с некоторыми задачами вполне справляется. =) 

Да, там разные версии одного продукта. Брать которую завести сможете (начиная со свежей). 

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


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

On 5/13/2022 at 10:42 PM, AnatolySh said:

Попробовал тут утилиту vhdl2verilog из пакета SynaptiCAD

А какой вообще смысл в подобно рода утилитах? Verilog и VHDL вполне могут сосуществовать в рамках одного проекта. А всевозможные конвертации - это вероятность внесения ошибок, причем далеко ненулевая вероятность.

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


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

18 minutes ago, attaboy said:

А какой вообще смысл в подобно рода утилитах?

Если звёзды зажигают ... дальше понятно? Мне - да.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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