错误(10028):无法解析网络的多个常量驱动程序... VHDL 错误

2024-01-08

我正在尝试编写一个代码来检测 din 信号的上升沿,并在发生后将 doout 提高 5 个时钟周期。我在编译时不断收到不同的错误,但我不确定它们的含义。我认为我对 VHDL 中的一些概念缺乏基本的了解,但遗憾的是在网上查找并没有给我带来太大帮助。我仍然不知道该软件可以接受哪些操作。

在我的代码中,我目前在第一个进程中有一个上升沿检测器,它将 doout 提高到逻辑高电平。第二个进程检查 doout 是否为高电平,然后从 5 倒数到 0,如果为 0,则将 doout 设置为逻辑低电平。

这不会编译并返回以下错误:

错误 (10028):无法解析 raise_ext.vhd(31) 处网络“count[2]”的多个常量驱动程序

错误 (10029):rise_ext.vhd(17) 处的恒定驱动程序

错误 (10028):无法解析 raise_ext.vhd(31) 处网络“count[1]”的多个常量驱动程序

错误 (10028):无法解析 raise_ext.vhd(31) 处网络“count[0]”的多个常量驱动程序

错误 (10028):无法解析 raise_ext.vhd(31) 处网络“dout”的多个常量驱动程序

错误 (10029):rise_ext.vhd(19) 处的恒定驱动程序

错误(12153):无法详细说明顶级用户层次结构

错误:Quartus II 32 位分析和综合失败。 7 个错误,2 个警告 错误:峰值虚拟内存:326 MB 错误:处理结束:2014 年 1 月 11 日星期六 13:13:38 错误:已用时间:00:00:04 错误:总 CPU 时间(在所有处理器上):00:00:02

错误 (293001):Quartus II 完整编译失败。 9 个错误,2 个警告

    entity rise_ext is
    port ( clk:    in  bit ;
           resetN: in  bit ;
           din:    in  bit ;
           count:  buffer integer range 0 to 6 ;
           dout:   buffer bit ) ;
end rise_ext ;

architecture arc_rise_ext of rise_ext is
    signal s1 , s2 : bit ;
begin
    process ( resetN, clk )
    begin
        if resetN = '0' then
           dout <= '0' ;
           count <= 5 ;
        elsif clk'event and clk = '1' then
              s1 <= din ;
              s2 <= s1  ;
              dout <= not s1 and s2 ;
        end if ;
    end process ;

    process ( clk, dout )
    begin
        if clk'event and clk = '1' then
           if dout = '1' then
              if count > 0 then
                 count <= count - 1 ;
              else
                 dout <= '0' ;
                 count <= 5 ;
              end if;
          end if ;
        end if ;
    end process ;
end arc_rise_ext ;

任何帮助将不胜感激!

我将所有数据类型更改为 std_logic 并完成了代码,但我仍然收到这些错误......

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity rise_ext is
    port ( clk:    in  std_logic ;
           resetN: in  std_logic ;
           din:    in  std_logic ;
           count:  buffer integer range 0 to 6 ;
           dout:   buffer std_logic ) ;
end rise_ext ;

architecture arc_rise_ext of rise_ext is
    signal s1 , s2 : std_logic ;
begin
    process ( resetN, clk )
    begin
        if resetN = '0' then
           dout <= '0' ;
            count <= 6 ;
        elsif rising_edge(clk) then
              s1 <= din ;
              s2 <= s1  ;
              dout <= not s1 and s2 ;
        end if ;
    end process ;

    process ( clk )
    begin
        if rising_edge(clk) then
           if dout = '1' then
               count <= 5 ;
            end if ;
        end if ;
    end process ;

    process ( clk )
    begin
        if rising_edge(clk) then
           if count = 0 then
                count <= 6 ;
                dout <= '0' ;
            else
               count <= count - 1 ;
            end if ;
        end if ;
    end process ;
end arc_rise_ext ;

你有dout and count分配在两个进程中。两者都不是已解决的信号。

根据 IEEE 标准 1076-1993:

12.6.1 驱动程序

进程语句中的每个信号赋值语句都为某些标量信号定义了一组驱动程序。进程语句中给定标量信号 S 有一个驱动程序,前提是该进程语句中至少有一个信号赋值语句,并且该信号赋值语句的目标信号的最长静态前缀表示 S 或表示S 是其子元素的复合信号。每个这样的信号分配语句都与该驱动程序相关联。信号分配语句的执行仅影响关联的驱动程序。

这本质上意味着您正在复制两者count and dout.

有很多方法可以对行为进行建模dout and count你渴望。根据开始和结束事件将其操作分叉到两个进程并不是其中之一。这将需要三个进程,一个用于创建事件,一个用于中断事件,一个用于时钟存储。您可能需要单独的事件来操作count.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误(10028):无法解析网络的多个常量驱动程序... VHDL 错误 的相关文章

  • 来自不同进程的VHDL驱动信号

    我对以下 VHDL 代码有一个小问题 process zbroji begin if rising edge zbroji then oduzima lt 0 ucitanPrvi lt 1 broj1 lt ulaz broj end i
  • VHDL:使用输入端口是不好的做法吗?

    我有一个程序 我按照以下方式使用 inout 端口 port inout unsigned 9 downto 0 if port gt 10 then port lt port 1 end if 我正在使用 inout 端口 这样我就可以读
  • 无法使用 VHDL 2008 Quartus Prime 进行编译

    我正在使用 Quartus Prime Lite Edition 并且我想使用一元运算符nand像这样的 std logic vector library ieee use ieee std logic 1164 all use ieee
  • 子状态机

    我有一个有 5 个州的 FSM 其中3个是通过子FSM UML模式 设计的 对于 VHDL 中的实现 恕我直言 有两种方法可以做到这一点 将它们总结为一个 这样我就有了一份包含子 FSM 的文档和一个包含一个大 FSM 的产品 与所有州建立
  • 二进制补码 VHDL

    我只是想用 VHDL 制作一个简单的二进制补码设备 但它抛出了这个非常烦人的错误 我不确定我做错了什么 可能是一些非常愚蠢的事情 错误是 错误 10327 twocompliment vhd 21 处的 VHDL 错误 无法确定运算符 na
  • VHDL——连接开关和LED

    我有 Xilinx Spartan6 和下一个 VHDL 代码 library ieee use ieee std logic 1164 all use ieee numeric std all entity Switches Leds i
  • 如何在 VHDL 中读取文件时消除空格

    我的输入文件中有以下数据可供读取 10101100 11010100 10101100 11010100 11111110 10111001 11111110 10111001 我需要读取每个半字节并将它们写入数组 但由于空格 行的长度会变
  • 是否需要初始化?

    在VHDL中 创建信号或向量时是否需要初始化 如果忘记初始化信号或整数值会发生什么 In 模拟 如果你这样做not设置一个初始值 向量的每个元素都会得到default值 这是由 VHDL 语言规范定义的 对于枚举类型 这是枚举类型中定义的第
  • “等待上升沿(clk)”与“如果上升沿(clk)”有什么区别?

    我在 VHDL 中遇到了两种风格的过程语句 process clk begin if rising edge clk do something 另一种是 process begin wait until rising edge clk do
  • Lex VHDL '(勾号)令牌

    在 VHDL 中 字符可用于封装字符标记ie 或者它可以作为属性分隔符 类似于 CPP 的 token ie string hello 解析包含字符的属性名称时出现问题ie string a b c 在这种情况下 天真的词法分析器将错误地标
  • Quartus初始化RAM

    我制作了一个实体 其中 quartus 成功识别 RAM 并为其实例化 RAM 宏功能 如果我可以从文件初始化 RAM 那就太好了 我找到了制作此类文件 mif 文件 的教程 现在我已经创建了该文件 我不知道如何让 quartus 初始化该
  • 触发器在两个信号的边沿触发

    我需要一个对两个不同信号的边缘做出反应的触发器 像这样的东西 if rising edge sig1 then bit lt 0 elsif rising edge sig2 then bit lt 1 end if 这样的触发器是否存在或
  • 将 *.vhdl 编译到库中时出现编译器错误 - Altera Quartus II

    我已经从以下位置下载了浮点包http www vhdl org fphdl http www vhdl org fphdl 并做了以下事情 我在项目中包含了 math utility pkg vhd fixed pkg c vhd 和 fl
  • vhdl中process语句的顺序执行

    对于vhdl中的process语句 据说process语句内部的执行顺序是连续的 我的问题是 请先看下面的代码 a b和c信号在进程语句中的if语句中是同时还是顺序分配给它们的新值 process clk is begin if risin
  • VHDL - FSM 未启动(仅在时序仿真中)

    我正在写我的硕士论文 而且我对 VHDL 还很陌生 但我仍然必须实现一些复杂的东西 这是我必须编写的最简单的结构之一 但我仍然遇到了一些问题 它是一个 FSM 采用低电平有效同步信号 用于对 DAC 进行编程 实现 24 位移位寄存器 这只
  • vhdl代码(for循环)

    描述 我想编写 vhdl 代码来查找数组 A 中的最大整数 该数组是一个由 20 个整数组成的数组 问题 我的算法应该是什么样子 以输入顺序语句的位置 我的VHDL代码 highnum for i in 0 to 19 loop i 0 i
  • Simulink/HDL Coder 中的反馈循环

    我有一个 Simulink HDL 编码器系统 请参见下图 我有 3 个输出和 3 个输入 我希望我的系统运行 10 次 每次迭代后 它应该选择输出并将它们用作输入 我怎样才能做到这一点 使用存储器和每个信号的初始值块构建一个循环 内存块允
  • VHDL FSM多驱动网Q连接到常量驱动程序,其他驱动程序被忽略,我的代码有什么问题?

    这段代码是一个 FSM 它是一个摩尔机 艾莉莎 P 哈克 Alyssa P Hacker 有一只蜗牛 沿着纸带爬下去 上面有 1 和 0 蜗牛 每当最后两个时都会微笑 它爬过的数字是 01 设计摩尔和米利 蜗牛大脑的 FSM 代码如下所示
  • 32x8 寄存器文件 VHDL 测试台

    我已经用 vhdl 编写了该电路的汇编代码 我想用测试台来模拟它 RegWrite 1 位输入 时钟 写寄存器个数 3位输入 写地址 写入数据 32 位输入 数据输入 读取 寄存器编号 A 3 位输入 读取地址 读取寄存器编号 B 3 位输
  • VHDL:如何声明可变宽度通用[重复]

    这个问题在这里已经有答案了 我想创建一个 VHDL 实体 其中一个泛型可以更改另一个泛型的宽度 entity lfsr n is generic WIDTH integer 32 counter width POLYNOMIAL std l

随机推荐