【问题标题】:vhdl to verilog bintobcd convertingvhdl 到 verilog bintobcd 转换
【发布时间】:2015-12-19 15:28:25
【问题描述】:

大家好,我正在尝试将以下 vhdl 代码翻译成 verilog,但是即使它们看起来非常相似,它也不起作用。我没有收到任何错误,但是它不适用于 verilog 之一,但可以与 vhdl 一起使用。你们能帮我解决这个问题吗? :

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
entity binbcd8 is

port(
b: in unsigned(7 downto 0);
p: out unsigned(9 downto 0)
);
end binbcd8;

architecture Behavioral of binbcd8 is

begin

bcd1: process(b)
variable z: unsigned(17 downto 0);
begin
for i in 0 to 17 loop
    z(i):='0';
end loop;

z(10 downto 3):=b;

for i in 0 to 4 loop
    if z(11 downto 8)>4 then
        z(11 downto 8):=z(11 downto 8)+3;
    end if;
    if z(15 downto 12)>4 then
        z(15 downto 12):=z(15 downto 12)+3;
    end if; 
    z(17 downto 1):=z(16 downto 0);
end loop;
p<=z(17 downto 8);

end process;    
end Behavioral;

到 Verilog 代码,这是我的代码,但它不起作用。你能帮帮我吗?:

 module binbcd8(input[7:0] b,output reg[9:0] p);
 reg[17:0] z;

 integer i;

 always@(b)
     begin
         z <=17'b0;
         z[10:3] <=b;
         for(i=0;i<4;i=i+1) begin
             if(z[11:8]>4)
                 z[11:8]<=z[11:8]+3;
             else
                 z<=z;
             if(z[15:12]>4)
                 z[15:12]<=z[15:12]+3;
             else
                 z<=z;
             z[17:1]<=z[16:0];
         end
         p<=z[17:8];
     end
 endmodule

【问题讨论】:

  • 请澄清您的问题:您遇到什么错误?预期的输出是什么?
  • 没有错误,但是当我将此代码的 vhdl 版本放到顶部模块时它无法正常工作,但是当我将 verilog 版本放入它时它无法正常工作,它仅在带有 verilog 的七段中显示 0000代码,但使用 vhdl one 正确显示距离
  • electronics.stackexchange.com/questions/206874/… 的副本。请不要交叉发布。

标签: binary type-conversion vhdl verilog bcd


【解决方案1】:

您的主要问题可能是 (a) VHDL 循环 5 次 (0 to 4) 而 Verilog 循环 4 次 (for(i=0; i&lt;4;...),以及 (b) Verilog 代码在z,它应该使用阻塞(z = x,而不是z &lt;= x)。如果你不明白,请单独询问。

两组代码都可以进行清理。在 Verilog 中,您对 z 的第一次分配分配了 17 位,而不是 18 位。z &lt;= z 分配是不必要的。 VHDL 使用了一种奇怪的方法来清除z - 试试variable z: unsigned(17 downto 0) := (others =&gt; '0');

【讨论】:

  • 我没有得到问题的 (b) 部分。你能解释一下吗
  • 顺便说一句,我在代码上实现了您的建议,但它再次不起作用
  • 在 VHDL 代码中,z 是一个变量,它在分配给p 之前 进行评估。在 Verilog 代码中,z 具有非阻塞分配,因此在分配给 p 之前,它进行评估。新计算的值计划在未来更新。只需查看阻塞与非阻塞。如果模组不起作用,那么您需要发布您为特定输入获得的输出,以及您期望的输出。
  • 没问题。另请注意,VHDL 代码同时使用 std_logic_unsignednumeric_std,这不好 - 去掉 std_logic_unsigned
  • 好的,我也想问你我该怎么做,例如 sig
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
相关资源
最近更新 更多