首页 文章

在VHDL中增加std_logic_vector

提问于
浏览
0

我开始VHDL,我有一点问题 . 我想将1添加到std_logic_vector . 我看到这个问题已被提出但仍然无法解决 . 这就是我的工作

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

entity lesson10c is 
  port (signal calculateur :  std_ulogic_vector (1 downto 0));
end lesson10c;

architecture behaviour of lesson10c is
begin 
  calculateur <= "00";

  process(calculateur)
  begin
    for i in 0 to 3 loop
    calculateur <= std_ulogic_vector(unsigned(calculateur)+1);
    end loop;
  end process;

end behaviour;

错误是

错误(10028):无法在numeric_std_vhdl1993.vhd(1244)处解析net“calculateur [1]”的多个常量驱动程序 .

这只是一个没有兴趣的练习代码 . 你能告诉我哪里错了吗?

2 回答

  • 2

    您看到的错误是由于您的代码在两个不同的进程中驱动 calculateur . 请记住,这是一种硬件描述语言,而不是编程语言 .

    calculateur <= "00";
    
    process(calculateur)
    begin
      for i in 0 to 3 loop
      calculateur <= std_ulogic_vector(unsigned(calculateur)+1);
      end loop;
    end process;
    

    这里的第一行是并发赋值 . 这没有什么不对,但它确实是另一个过程的简写 .

    考虑到这一点,我们可以看到 calculateur 是在两个过程中驱动的 . 设置信号的每个过程都会为该信号创建驱动程序,而且几乎任何综合工具都不允许多个驱动程序 . 这是错误消息的含义 .

  • 1

    你的问题比增加 std_logic_vector 更为重要 . 你似乎认为自己在编写软件 . 你不是,你在设计硬件 .

    VHDL中的每个进程(无论是显式的还是隐式的)都推断出一块硬件 . 您有两个进程:一个是显式的( process(calculateur) ),另一个是隐式的( calculateur <= "00"; ) . 两者都在驱动信号 calculateur . 因此你有一个短路 .

    您的错误消息是因为您有此短路 . 但是,它比这更糟糕:你的第二个进程也有组合反馈(它的输出与它的输入相连),你也会发现第二个进程没有增加 calculateur 四次(我猜你正在希望这样) .

    不仅如此,您引用的错误消息是来自逻辑合成器的错误消息,这表明您正在尝试合成代码而不进行模拟 . (我这么说,因为我无法相信这段代码的任何模拟输出都会是你希望代码行为的方式) . 始终先模拟您的代码 .

    我认为您需要退一步学习一些VHDL基础知识 . My company's website可能会帮到你 .

相关问题