Jump to content

    

Recommended Posts

Всем добра.

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

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 на другой правильно?

Share this post


Link to post
Share on other sites
3 hours ago, AnatolySh said:

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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 почти впервые вижу. Отсюда и трудности перевода..

Share this post


Link to post
Share on other sites
2 часа назад, Tausinov сказал:

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

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

Share this post


Link to post
Share on other sites
4 hours ago, AnatolySh said:
On 5/12/2022 at 12:31 PM, Zwerg_nase said:

(Cadence LEC, Synopsys Formality).

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

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

Share this post


Link to post
Share on other sites
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;

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

Share this post


Link to post
Share on other sites
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/ тут от ментора, но старое очень

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
On 5/13/2022 at 10:42 PM, AnatolySh said:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.