verilog 定义位宽为1的_「干货」Verilog代码转VHDL代码经验总结

本文总结了Verilog代码转换为VHDL过程中遇到的问题,包括状态机转换、数据类型匹配、逻辑操作转换等,并提供了相应的解决策略。通过Vivado和XHDL软件对比查看两种语言差异,指出在转换时应注意的问题,如信号赋值、数据类型转换、if语句逻辑错误等。
摘要由CSDN通过智能技术生成

Verilog语言和VHDL语言是两种不同的硬件描述语言,但并非所有人都同时精通两种语言,所以在某些时候,需要把Verilog代码转换为VHDL代码。本文以通用的XHDL工具为例对Verilog转换到VHDL过程中存在的问题进行了总结,欢迎批评指正。

当我们刚开始学习FPGA时,一定会遇到一个问题:

学习Verilog还是VHDL?

等我们学习FPGA到一定程度参加面试时,面试者也会问你一个问题:

你以前用Verilog还是VHDL开发?

你已经习惯某种语言,也发现语言不是学习FPGA时需要考虑的问题,它仅仅是硬件描述语言工具而已。可是,当你发现一份和你使用语言不同的代码作为参考时,你又开始想:

我以后的工作是不是要二种语言都会,这样工作才会得心应手?

事实上,两种语言之间是可以相互转换的。

对于我们做FPGA开发人员来说,如何快速在Verilog和VHDL之间互转,加快开发产品的进度,而不是因为只懂某一种语言而局限了自己的开发。

Vivado可以看两种语言的差异

Verilog与VHDL语法是互通且相互对应的,如何查看二者对同一硬件结构的描述,可以借助EDA工具,如Vivado,打开Vivado后它里面的语言模板后,也可以对比查看Verilog和VHDL之间的差异。

3404cdf2bb51f47ea0c63320c7528cd6.png
3f8cb6f528750eec6e7298a5e27b5e83.png
ec819c74f8600c7244da3e5662a61d19.png

XHDL软件

转换所用软件如下图所示:

fd1575d167cce1f568ae72a53c541646.png
85259618d1fb40d8de12d5f1fe0a8ffa.png
97223fff7d609193c6d95dc7d3591c27.png

上图是把转换成VHDL格式的代码,再转换回verilog后与原代码对比的图,可以看出,一些注释之类的信息都没有了,原来的代码规范和风格也发生了变化。

在转换的过程,该软件对代码中的汉语注释不支持,如果出现汉字就无法转换。

笔者之前就曾试着写过Verilog转VHDL代码的工具,见:Verilog HDL代码转VHDL代码,无奈因为不是软件开发出身,写出来的东西通用性和完善性很差。写到此处,再次想起汉天下董事长杨清华所说的话,互联网讲究的是差异化的商业模式,很牛的产品定义,早期

library IEEE; Library UNISIM; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use UNISIM.vcomponents.all; entity pin_test is port ( rst_manu_h :in std_logic; clk_in :in std_logic; FPGA_CR2 :out std_logic; FPGA_CR1 :out std_logic; FPGA_PR :out std_logic; FPGA_TCK :out std_logic; test_out :out std_logic; FPGA_RST :out std_logic --LED : out std_logic_vector(3 downto 0) ); end pin_test; architecture rtl of pin_test is signal clk_div1 : integer range 0 to 2086; signal clk_div : std_logic_vector(27 downto 0); signal clk_div2 : std_logic_vector(27 downto 0); signal clk0 : std_logic; signal clk180 : std_logic; signal clk_180 : std_logic; signal clk2x : std_logic; signal CLKFX : std_logic; signal clk : std_logic; signal clkdv : std_logic; signal clkin_buf : std_logic; signal clk_sys : std_logic; signal reset : std_logic; signal TX_CLK : std_logic; signal tem1: std_logic; signal tem2 : std_logic; begin clk <= clkin_buf ; reset <= not rst_manu_h; CLK_DIVIDOR1:process(clk) begin if(clk'event and clk = '1')then if clk_div1=2086 then --clk_div1 '0'); clk_div1 <=0; else clk_div1<= clk_div1 + 1; end if; end if; end process CLK_DIVIDOR1; CLK_DIVIDOR:process(CLKFX) begin if(CLKFX'event and CLKFX= '1') then clk_div<= clk_div + 1; end if; end process CLK_DIVIDOR; CLK_DIVIDOR2:process(CLKFX) begin if(CLKFX'event and CLKFX = '0') then clk_div2<= clk_div2 + 1; end if; end process CLK_DIVIDOR2; tem1 2068 else '0'; tem2 <= clk or tem1; test_out <= CLKFX ; FPGA_CR2 <= not tem2; FPGA_CR1 <= clk or tem1; FPGA_PR <= clk_div(15); FPGA_TCK 2068 else '0'; FPGA_RST <= clk_div(0)and clk_div2(0); --------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值