[VHDL]VHDL to Verilog Translator (OCEAN LOGIC、Veritak、SynaptiCAD、X-HDL、CQ誌DWM-2004/7月Verilog-VHDL変換ツール)
NEEKを使っていて、DDRコントローラ含んだ回路をQsysで組んだ。
Qsysの無償IPでなく、DDRを制御するロジックを組もうとしたら、
DDRソース内にVHDLが1つ?混じってる。
混在SimできるフリーツールはISIMとの事だが、前記事の通り、上手くいかない。
VHDLが1つだけだから、フリーのVHDL to Verilog変換ツールで対応しようと調査。
SynaptiCAD社のツールもあったが、ライセンス取得方法分からず、断念。
結果、ここに行き着いた。
http://www.ocean-logic.com/downloads.htm
カウンタを変換してみた結果、Verilog生成されて、ModelSimでコンパイル成功。
次は、目的のDDRコントローラのSimへ。
P.S. 1ヶ月に1回は更新しないと連続更新記録が終わってしまうので
忘れないうちに記事書いておこう。
(2012/8/16追記)
OCEAN LOGICのツールで目的のファイル「*_qsys_ddrc_phy_alt_mem_phy_seq.vhd」を変換してみた。
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
--
package CG_2D_qsys_ddrc_phy_alt_mem_phy_constants_pkg is ← ★ここ★
-- -------------------------------
-- Register number definitions
-- -------------------------------
constant c_max_mode_reg_index : natural := 13; -- number of MR bits..
結果、上の★記述で次のエラー。
# // File CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd translated with vhd2vl v2.0 VHDL to Verilog RTL translator
# syntax error, unexpected NAME, expecting ENTITY or ARCHITECTURE at "package" in line 16.
(2012/8/17追記)
OCEAN LOGICのコンバーターはエラーが出たので、今度はVeritak Pro試用期間を利用。
メニュー > VHDL -> Verilogトランスレータ > 新しいプロジェクト作成
でプロジェクトを作る際、対象のソースを登録して、プロジェクトウィンドウ内の
VHDL->Verilog
というボタンを押して実行。しかし、以下エラーが出た。
これ手作業で直るもんか?
個人的な変換ツールにしようとちょっと期待していたんだが。。。
----------Starting VHDL to Verilog Translation Process--------------
VHDL to Verilog Source Translator
Ver.1.24 thanks to T.I. Build May.8.2006
Read All files Done. Parse Analysis begins...
library Set =work
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(1)::Parse Analysing
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(16):: package cg_2d_qsys_ddrc_phy_alt_mem_phy_constants_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(189):: package cg_2d_qsys_ddrc_phy_alt_mem_phy_record_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(619):: package body cg_2d_qsys_ddrc_phy_alt_mem_phy_record_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(1677):: package cg_2d_qsys_ddrc_phy_alt_mem_phy_addr_cmd_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(1984):: package body cg_2d_qsys_ddrc_phy_alt_mem_phy_addr_cmd_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(3437):: package cg_2d_qsys_ddrc_phy_alt_mem_phy_iram_addr_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(3481):: package body cg_2d_qsys_ddrc_phy_alt_mem_phy_iram_addr_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(3643):: package cg_2d_qsys_ddrc_phy_alt_mem_phy_regs_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(3936):: package body cg_2d_qsys_ddrc_phy_alt_mem_phy_regs_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(4763):: entity cg_2d_qsys_ddrc_phy_alt_mem_phy_mmi
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(4871):: architecture struct of cg_2d_qsys_ddrc_phy_alt_mem_phy_mmi
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(5343):: entity cg_2d_qsys_ddrc_phy_alt_mem_phy_admin
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(5420):: architecture struct of cg_2d_qsys_ddrc_phy_alt_mem_phy_admin
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(6783):: entity cg_2d_qsys_ddrc_phy_alt_mem_phy_iram_ram
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(6800):: architecture struct of cg_2d_qsys_ddrc_phy_alt_mem_phy_iram_ram
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(6887):: entity cg_2d_qsys_ddrc_phy_alt_mem_phy_iram
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(6944):: architecture struct of cg_2d_qsys_ddrc_phy_alt_mem_phy_iram
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(7734):: entity cg_2d_qsys_ddrc_phy_alt_mem_phy_dgrb
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(7840):: architecture struct of cg_2d_qsys_ddrc_phy_alt_mem_phy_dgrb
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(10906):: entity cg_2d_qsys_ddrc_phy_alt_mem_phy_dgwb
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(10973):: architecture rtl of cg_2d_qsys_ddrc_phy_alt_mem_phy_dgwb
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(11558):: entity cg_2d_qsys_ddrc_phy_alt_mem_phy_ctrl
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(11623):: architecture struct of cg_2d_qsys_ddrc_phy_alt_mem_phy_ctrl
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(12666):: entity cg_2d_qsys_ddrc_phy_alt_mem_phy_seq
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(12889):: architecture struct of cg_2d_qsys_ddrc_phy_alt_mem_phy_seq
Parse Done with 0 errors.
Sematics Analysis begins...
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(16):: package cg_2d_qsys_ddrc_phy_alt_mem_phy_constants_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(189):: package cg_2d_qsys_ddrc_phy_alt_mem_phy_record_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(619):: package body cg_2d_qsys_ddrc_phy_alt_mem_phy_record_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(1677):: package cg_2d_qsys_ddrc_phy_alt_mem_phy_addr_cmd_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(1984):: package body cg_2d_qsys_ddrc_phy_alt_mem_phy_addr_cmd_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(3437):: package cg_2d_qsys_ddrc_phy_alt_mem_phy_iram_addr_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(3481):: package body cg_2d_qsys_ddrc_phy_alt_mem_phy_iram_addr_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(3643):: package cg_2d_qsys_ddrc_phy_alt_mem_phy_regs_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(3936):: package body cg_2d_qsys_ddrc_phy_alt_mem_phy_regs_pkg
C:\user\work\veritak\CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd(3960):: Error Semantics: overload error
X-HDLというのを発見。ここから「X-HDL 4.2.5 - 32-bit Windows 2000/XP/Vista/7」をゲット。
http://www.x-tekcorp.com/download.html
インストールして、ライセンスが無いって指摘されるから、Get Evaluation Licenseみたいな項目を
選択したら、そのままデモモードになった。試しに変換してみたらファイルがデカイというエラー。
どっかのページにFull Functional Evaluation Licenceはアプリ画面から入手出来るって書いてあったが。
ライセンス入手方法不明で断念。
File too large for demo mode
次はこれ。
http://doolittle.icarus.com/~larry/vhd2vl/
ここのDownloadから「vhd2vl-2.4.tar.gz」を入手。
展開して、「vhd2vl-2.4/src」のフォルダでmakeと実行してexeを作成。
vhd2vl vhdl_file_name
と実行したら、なんか見た事あるエラーが。。
これOCEAN LOGICと同じやつか。
w510: vhd2vl CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd
// File CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd translated with vhd2vl v2.4 VHDL to Verilog RTL translator
// vhd2vl settings:
// * Verilog Module Declaration Style: 1995
// vhd2vl is Free (libre) Software:
// Copyright (C) 2001 Vincenzo Liguori - Ocean Logic Pty Ltd
// http://www.ocean-logic.com
// Modifications Copyright (C) 2006 Mark Gonzales - PMC Sierra Inc
// Modifications (C) 2010 Shankar Giri
// Modifications Copyright (C) 2002, 2005, 2008-2010 Larry Doolittle - LBNL
// http://doolittle.icarus.com/~larry/vhd2vl/
//
// vhd2vl comes with ABSOLUTELY NO WARRANTY. Always check the resulting
// Verilog for correctness, ideally with a formal verification tool.
//
// You are welcome to redistribute vhd2vl under certain conditions.
// See the license (GPLv2) file included with the source for details.
// The result of translation follows. Its copyright status should be
// considered unchanged from the original VHDL.
syntax error, unexpected NAME, expecting ENTITY or ARCHITECTURE at "package" in line 16.
次はこれ。
http://www002.upp.so-net.ne.jp/morioka/v2v.html
ここのHEREから「cqv2v_v100.zip」をダウンロード。
解凍して「/cygdrive/c/USER/APP/cqv2v_v100/vhdl2verilog」でmake実行。
w510: make
bison -d vhdlparse.y
vhdlparse.y: conflicts: 18 reduce/reduce
あら、exe更新必要かと思ってmake実行したけど、make上書きされてない。。。
実行してみたけど以下エラー。
w510: vhdl2verilog CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd
bash: /cygdrive/c/user/app/cqv2v_v100/vhdl2verilog/vhdl2verilog: バイナリファイルを実行できません
当たり前だが、同梱されてるサンプルファイルは変換成功。
w510: vhdl2verilog.exe sample.vhd
VHDL2Verilog ver1.00(2004/05/06) Copyright(c) S.Morioka (http://www02.so-net.ne.jp/~morioka/v2v.htm)
Input file: sample.vhd
WARNING(2) in line 27: Please specify signal width of return value.
Complete.
自分が用意したVHDLソースの改行問題かな?
Windows版Gvimで以下のように改行コード編集。
Gvimメニュー > 編集 > ファイル設定 > 改行記号選択 > DOS
これで実行出来たが、16行目でエラー指摘されてる。
w510: vhdl2verilog.exe CG_2D_qsys_ddrc_phy_alt_mem_phy_seq.vhd
VHDL2Verilog ver1.00(2004/05/06) Copyright(c) S.Morioka (http://www02.so-net.ne.jp/~morioka/v2v.htm)
Input file: CG_2D_qsys_ddrc_phy_alt_mem_phy_seq_kaigyou_DOS.vhd
ERROR: parse error in line 16
Complete.
16行目って以下の箇所であり、これは最初に試したOCEAN LOGICのツールでの結果と同じ。
package CG_2D_qsys_ddrc_phy_alt_mem_phy_constants_pkg is
ここは文法的に違反なのかな?
ModelSimでコンパイルしてみると以下。
w510: vcom CG_2D_qsys_ddrc_phy_alt_mem_phy_seq_kaigyou_DOS.vhd
Model Technology ModelSim ALTERA vcom 10.0d Compiler 2012.01 Jan 18 2012
-- Loading package STANDARD
-- Loading package TEXTIO
-- Loading package std_logic_1164
-- Loading package NUMERIC_STD
-- Compiling package CG_2D_qsys_ddrc_phy_alt_mem_phy_constants_pkg
-- Compiling package CG_2D_qsys_ddrc_phy_alt_mem_phy_record_pkg
-- Compiling package body CG_2D_qsys_ddrc_phy_alt_mem_phy_record_pkg
-- Loading package CG_2D_qsys_ddrc_phy_alt_mem_phy_record_pkg
-- Compiling package CG_2D_qsys_ddrc_phy_alt_mem_phy_addr_cmd_pkg
-- Compiling package body CG_2D_qsys_ddrc_phy_alt_mem_phy_addr_cmd_pkg
-- Loading package CG_2D_qsys_ddrc_phy_alt_mem_phy_addr_cmd_pkg
-- Compiling package CG_2D_qsys_ddrc_phy_alt_mem_phy_iram_addr_pkg
-- Compiling package body CG_2D_qsys_ddrc_phy_alt_mem_phy_iram_addr_pkg
-- Loading package CG_2D_qsys_ddrc_phy_alt_mem_phy_iram_addr_pkg
-- Loading package CG_2D_qsys_ddrc_phy_alt_mem_phy_record_pkg
-- Loading package CG_2D_qsys_ddrc_phy_alt_mem_phy_constants_pkg
-- Compiling package CG_2D_qsys_ddrc_phy_alt_mem_phy_regs_pkg
-- Compiling package body CG_2D_qsys_ddrc_phy_alt_mem_phy_regs_pkg
-- Loading package CG_2D_qsys_ddrc_phy_alt_mem_phy_regs_pkg
-- Compiling entity CG_2D_qsys_ddrc_phy_alt_mem_phy_mmi
-- Loading package CG_2D_qsys_ddrc_phy_alt_mem_phy_regs_pkg
-- Loading package CG_2D_qsys_ddrc_phy_alt_mem_phy_iram_addr_pkg
-- Compiling architecture struct of CG_2D_qsys_ddrc_phy_alt_mem_phy_mmi
-- Loading package CG_2D_qsys_ddrc_phy_alt_mem_phy_addr_cmd_pkg
-- Compiling entity CG_2D_qsys_ddrc_phy_alt_mem_phy_admin
-- Compiling architecture struct of CG_2D_qsys_ddrc_phy_alt_mem_phy_admin
-- Compiling entity CG_2D_qsys_ddrc_phy_alt_mem_phy_iram_ram
-- Compiling architecture struct of CG_2D_qsys_ddrc_phy_alt_mem_phy_iram_ram
-- Loading entity CG_2D_qsys_ddrc_phy_alt_mem_phy_iram_ram
-- Compiling entity CG_2D_qsys_ddrc_phy_alt_mem_phy_iram
-- Compiling architecture struct of CG_2D_qsys_ddrc_phy_alt_mem_phy_iram
-- Compiling entity CG_2D_qsys_ddrc_phy_alt_mem_phy_dgrb
-- Compiling architecture struct of CG_2D_qsys_ddrc_phy_alt_mem_phy_dgrb
-- Compiling entity CG_2D_qsys_ddrc_phy_alt_mem_phy_dgwb
-- Compiling architecture rtl of CG_2D_qsys_ddrc_phy_alt_mem_phy_dgwb
-- Compiling entity CG_2D_qsys_ddrc_phy_alt_mem_phy_ctrl
-- Compiling architecture struct of CG_2D_qsys_ddrc_phy_alt_mem_phy_ctrl
-- Compiling entity CG_2D_qsys_ddrc_phy_alt_mem_phy_seq
-- Loading entity CG_2D_qsys_ddrc_phy_alt_mem_phy_admin
-- Loading entity CG_2D_qsys_ddrc_phy_alt_mem_phy_mmi
-- Loading entity CG_2D_qsys_ddrc_phy_alt_mem_phy_iram
-- Loading entity CG_2D_qsys_ddrc_phy_alt_mem_phy_dgrb
-- Loading entity CG_2D_qsys_ddrc_phy_alt_mem_phy_dgwb
-- Loading entity CG_2D_qsys_ddrc_phy_alt_mem_phy_ctrl
-- Compiling architecture struct of CG_2D_qsys_ddrc_phy_alt_mem_phy_seq
** Warning: [5] CG_2D_qsys_ddrc_phy_alt_mem_phy_seq_kaigyou_DOS.vhd(12941): Nonresolved signal 'mmi_ctrl'
may have multiple sources.
Drivers:
CG_2D_qsys_ddrc_phy_alt_mem_phy_seq_kaigyou_DOS.vhd(13207):Statement mmi
CG_2D_qsys_ddrc_phy_alt_mem_phy_seq_kaigyou_DOS.vhd(13358):Process line__13358
Driven at:
CG_2D_qsys_ddrc_phy_alt_mem_phy_seq_kaigyou_DOS.vhd(13364)
** Warning: [5] CG_2D_qsys_ddrc_phy_alt_mem_phy_seq_kaigyou_DOS.vhd(12974): Nonresolved signal 'parameter
isation_rec' may have multiple sources.
Drivers:
CG_2D_qsys_ddrc_phy_alt_mem_phy_seq_kaigyou_DOS.vhd(13207):Statement mmi
CG_2D_qsys_ddrc_phy_alt_mem_phy_seq_kaigyou_DOS.vhd(13358):Process line__13358
Driven at:
CG_2D_qsys_ddrc_phy_alt_mem_phy_seq_kaigyou_DOS.vhd(13362)
** Warning: [5] CG_2D_qsys_ddrc_phy_alt_mem_phy_seq_kaigyou_DOS.vhd(12987): Nonresolved signal 'mmi_pll'
may have multiple sources.
Drivers:
CG_2D_qsys_ddrc_phy_alt_mem_phy_seq_kaigyou_DOS.vhd(13207):Statement mmi
CG_2D_qsys_ddrc_phy_alt_mem_phy_seq_kaigyou_DOS.vhd(13358):Process line__13358
Driven at:
CG_2D_qsys_ddrc_phy_alt_mem_phy_seq_kaigyou_DOS.vhd(13363)