VHDL FSM多驱动网Q连接到常量驱动程序,其他驱动程序被忽略,我的代码有什么问题?

2024-04-23

这段代码是一个 FSM,它是一个摩尔机

艾莉莎·P·哈克 (Alyssa P. Hacker) 有一只蜗牛 沿着纸带爬下去 上面有 1 和 0。蜗牛 每当最后两个时都会微笑 它爬过的数字是 01.设计摩尔和米利 蜗牛大脑的 FSM。

代码如下所示

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;


entity simpfsm is
Port ( A : in STD_LOGIC;
       clk : in STD_LOGIC;
       r   : in STD_LOGIC;
       Y : out STD_LOGIC);
end simpfsm;


architecture Behavioral of simpfsm is
type state_type is (SA,SB,SC);
signal state,next_state:state_type;
begin
SYNC_PROC:process(clk)
begin
if(clk'event and clk='1') then
if(r='1') then
next_state <= SA; -- removed trailing grave accent
else
state <= next_state;
end if;
end if;
end process;

OUTPUT_DECODE:process(state)
begin
case (state) is
when SA =>
Y <= '0';
when SB =>
Y <= '0';
when SC =>
Y <= '1';
when others =>
Y <= '0';
end case;
end process;

NEXT_STATE_DECODE:process(state,A)
begin
next_state <= state;
case (state) is

    when SA =>
        if(A='0') then
            next_state <= SB;
        end if;

    when SB =>
        if(A='1') then
            next_state <= SC;
        end if;

    when SC =>
        if(A='0') then
            next_state <= SB;
        elsif(A='1') then
            next_state <= SA;
        end if;
    when others =>
        next_state <= SA;                       --"if not state then begin with SA"
end case;
end process;
end Behavioral;  -- removed trailing grave accent

错误为 [XSIM 43-3249] 文件 D:/Users/93443/project_4/project_4.srcs/sources_1/new/A_11_fsm.vhd,第 22 行。未解析的信号“next_state”是多重驱动的。


state_type不是已解析的子类型。在精化过程中识别后,在模型执行之前的加载过程中会检测到多个驱动程序。

IEEE 标准 1076-2008

14.5 声明部分的阐述
14.5.5 其他并发语句

所有其他并发语句要么是过程语句,要么是具有等效过程语句的语句。 流程说明的详细说明如下:

a) 流程声明部分进行了阐述。
b) 确定流程声明所需的驱动因素。

6.4.2.3 信号声明

...如果在详细描述之后,一个信号有多个源并且不是一个已解析的信号,则这是一个错误。 ...

有驱动程序next_state在进程 SYNC_PROC 和 NEXT_STATE_DECODE 中

14.7 模型的执行
14.7.2 驱动程序

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

state_type枚举类型并且是标量类型:

5.2 标量类型
5.2.1 概述

标量类型包括枚举类型, 整数类型, 物理类型, and 浮点类型. ...

解决方案似乎是重置state在 SYNC_PROC 而不是next_state.

如果删除两个无关的重音符号(“`”,15.2 字符集),您的代码将是最小、完整且可验证的示例 https://stackoverflow.com/help/mcve尽管Tricky表达了怀疑。我从您的代码示例中删除了它们,之后您的代码分析并详细说明了处理 SYNC_PROC 的更改:

if(r='1') then
state <= SA;  -- WAS next_state

(请注意,条件周围的括号(此处 r='1')是多余的。在 VHDL 中,已知条件是具有 BOOLEAN 值的表达式。)

如果您的模拟器允许使用顶级端口执行,它将报告多个驱动程序。对于那些不需要的模拟器,您需要实例化测试平台simpfsm:

14.2 设计层次结构的阐述

实现可以允许(但不要求允许)位于设计层次结构根部的设计实体具有泛型和端口。如果实现允许这些顶层接口对象,它可以限制它们允许的形式(即,是否允许它们是接口类型、子程序、包或对象),并且对于接口对象,以实现定义的方式限制它们允许的类型和模式。

正如您可能收集到的那样,这代表了在没有测试平台或依赖于脚本驱动模拟器的交互的情况下检测错误的可移植性问题。在信号分配目标更改之前可以使用 ghdl 演示该错误:

ghdl -r simpfsm
对于信号:.simpfsm(behavioral).next_state
./simpfsm:error: 未解析信号的几个来源
./simpfsm:error: 阐述期间出错

将详细设计规范加载到内存中会延迟到基于编译器的 VHDL 模拟器中的“程序”执行:

14.2 设计层次结构的阐述

设计层次结构的阐述完成如下:

— 创建在制定过程陈述(见 14.5.5)期间确定的驱动因素。
— 由与流程语句驱动的每个标量信号关联的默认值定义的初始事务被插入到相应的驱动程序中。

next_state and state两者都有默认值 state_type'LEFT (SA).

6.4.2.3 信号声明

在没有显式默认表达式的情况下,将为标量子类型的信号或复合信号的每个标量子元素假定隐式默认值,其中每个标量子元素本身就是标量子类型的信号。标量子类型 T 的信号的隐式默认值定义为由 T'LEFT 给出的值。

这意味着在识别每个网络时,在详细说明的加载部分期间会检测多个驱动程序:

14.7.3.4 信号更新

A net是驱动程序、信号(包括端口和隐式信号)、转换函数和分辨率函数的集合,它们共同确定网络上每个信号的有效值和驱动值。

我们看到在执行期间(ghdl 的 -r 命令)发生了详细阐述(此处加载)的部分:

14.2 设计层次结构的阐述

设计层次结构的阐述创建了通过网络互连的过程集合;然后可以执行该进程和网络的集合来模拟设计的行为。

Tricky的怀疑有些道理,重音会在分析过程中导致错误,而你提供的错误则发生在阐述过程中。通过首先调查您报告的错误,可以将它们假定为转录错误。

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

VHDL FSM多驱动网Q连接到常量驱动程序,其他驱动程序被忽略,我的代码有什么问题? 的相关文章

  • VHDL——连接开关和LED

    我有 Xilinx Spartan6 和下一个 VHDL 代码 library ieee use ieee std logic 1164 all use ieee numeric std all entity Switches Leds i
  • 我需要多少个进程来监视两个信号?

    我是一名 vhdl 初学者 需要帮助解决我的问题 我有两个需要监控的信号 一个是 CHECK 另一个是 OK 每次我要求检查时 我都应该得到好的结果 高或低 我需要连续监测6个连续的CHECK脉冲 并计数OK 如果我有 6 OK 低 那么我
  • 使用 VHDL 实例化 FPGA 中的 RAM

    我试图按照中的指导实现双端口 RAM这篇优秀的博文 http danstrother com 2010 09 11 inferring rams in fpgas 然而 ModelSim 在编译时给出以下警告 Warning fifo ra
  • 如何在 Sphinx 运行时预处理源文件?

    我已经为我的项目设置了 Sphinx 文档 并希望提取源文件的文档字符串并将它们嵌入到最终文档中 不幸的是 Sphinx 不支持源文件的语言 VHDL VHDL 似乎没有 Sphinx 域 所以我的想法如下 挂钩 Sphinx 运行并在 S
  • “警告 C0007:架构具有未绑定的实例”问题!

    我从 数字设计基础 一书随附的 CD 中获取了以下源代码 当我尝试运行该程序时 出现以下错误 Compiling Fig17 13 vhd C Users SPIDER Desktop EE460 The Final Project Fig
  • Doxygen:使用 C++ 和 VHDL 进行项目的无缝文档

    我正在建立一个关于某种库的文档 该库由 C C 部分和 VHDL 部分以及一些仅包含 doxygen 的指导性页面组成 他们必须被放入一个独立的组中 到目前为止一切正常 漂亮又蓬松 但是如果我想通过使用优化 vhdl 子目录中的输出怎么办O
  • 有没有办法使用 std textio 在 vhdl 中多次读取文件?

    我试图了解如何在 vhdl 中读取文件 如果我打开一个文件 通读它 测试文件结尾 关闭文件 然后重新打开该文件 然后再次开始读取 它会从开头开始吗 文件 非常感谢 向 VHDL 语言的权威寻求答案 IEEE 标准 1076 2008 5 5
  • 模拟器和合成器之间初始化状态机的差异

    我的问题是关于合成状态机中使用的第一个状态 我正在使用莱迪思 iCE40 FPGA 用于仿真的 EDA Playground 和用于综合的莱迪思 Diamond Programmer 在下面的示例中 我生成一系列信号 该示例仅显示引用状态机
  • 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 中将整数作为十六进制写入标准输出?

    我可以打印一个integer作为十进制到标准输出 library std use std textio all entity min is end min architecture behav of min is begin process
  • 敏感列表中的哪个信号触发该过程

    在VHDL中 当模拟测试平台时 我有一个过程和一个敏感度列表 是否可以查看敏感列表中的哪个信号触发了该过程 我知道这可能取决于工具 我正在使用 Xilinx ISE 模拟器是否提供此信息 您可以使用 transaction属性结合 even
  • ACTIV HDL - VHDL -“信号无法合成,同步描述错误”

    我在 Xilinx 中综合此代码时遇到错误 这个错误是 信号 Z 1 无法合成 同步描述错误 entity uk3 is port rst in BIT C in INTEGER clk in BIT S out INTEGER end u
  • 在VHDL中将8位二进制数转换为BCD

    该算法众所周知 您进行 8 次左移 并在每次移位后检查个位 数十位或数百位 每个 4 位 如果它们超过 4 个 则将 3 个添加到该组中 依此类推 这是一个基于流程的解决方案 但不起作用 它会编译 但输出不是我想要的 有什么想法可能是什么问
  • 将 n 位的 std_logic_vector 向右或向左移位

    我有一个向量signal tmp std logic vector 15 downto 0 我必须将它向左或向右移动 n 位 我怎样才能实现这个操作 我想到了串联操作 但我不知道如何使用它 Use the ieee numeric std库
  • VHDL 中的进程是可重入的吗?

    一个进程是否可以连续运行两次或多次VHDL 如果在进程的顺序执行未完成的情况下发生另一个事件 在敏感信号列表上 会发生什么 有可能还是我的VHDL流程中的模型完全错误 进程运行时不会发生任何事件 当进程被事件唤醒时 它会运行到完成 结束进程
  • VHDL - 为什么直接在函数上使用长度属性会产生警告?

    我有一个 VHDL 函数 它返回记录的 std logic vector 表示形式 并且我想要该 std logic vector 的长度 我可以直接在函数上使用长度属性 为什么这会在 ModelSim 中产生警告 我是否会引发一些微妙的问
  • vhdl代码(for循环)

    描述 我想编写 vhdl 代码来查找数组 A 中的最大整数 该数组是一个由 20 个整数组成的数组 问题 我的算法应该是什么样子 以输入顺序语句的位置 我的VHDL代码 highnum for i in 0 to 19 loop i 0 i
  • VHDL:如何声明可变宽度通用[重复]

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

    我有一个关于 VHDL 中 if 语句的问题 请参见下面的示例 signal SEQ bit vector 5 downto 0 signal output bit if SEQ 000001 and CNT RESULT 111111 t

随机推荐

  • TVirtualStringTree 中的自动调整列大小

    攀登 TVirtualTreeView 的学习之山 我尝试创建一个自定义后代 以确保在调整控件大小时 最后一列的宽度完全填充控件的宽度 而不需要水平滚动条 我看到许多与 AutoFitColumns 相关的项目 一个方法和许多事件 但没有涵
  • 如何使用 LINQ 计算与条件匹配的元素数量

    我尝试了很多事情 但对我来说最合乎逻辑的似乎是这个 int divisor AllMyControls Take p gt p IsActiveUserControlChecked Count AllMyControls是一个集合UserC
  • 在屏幕上滑动手指激活按钮,就像按下按钮一样

    如果我的标题不够清楚 我会详细解释一下 假设我们有一个充满多个按钮 10 多个 的屏幕 我们按下一个按钮 激活 onTouch onClick 如果我们现在移动手指而不抬起它 我希望它激活它滑过的任何其他按钮 在这种特殊情况下 我希望当您滑
  • 使用 PHP 将音频文件转换为波形

    我正在寻找 PHP 类 它将获取音频文件并返回波形的图像文件 可以在此处看到类似的效果http soundcloud com rollin fire cru sets house house house house http soundcl
  • 如何获取Linux发行版名称和版本?

    在 Windows 中我读取注册表项SOFTWARE Microsoft Windows NT CurrentVersion ProductName获取操作系统的全名和版本 但在Linux中 代码 struct utsname ver un
  • 如何获取 CD/DVD 驱动器上文件更改的通知?

    我是 C 新手 必须使用 C 开发 Windows 窗体应用程序 该应用程序应跟踪以下内容 监控外部和内部的 CD DVD 驱动器 监控 CD DVD 驱动器上创建 修改和删除的文件 我可以通过以下方式获取 CD DVD 驱动器插入的系统通
  • 有没有办法在jupyter中一次删除所有单元格?

    我每天都会在堆栈溢出中回答 pandas 问题之前尝试我的解决方案 通常两到三天后 我使用的 jupyter 笔记本将有 n 个单元 除了通过删除当前笔记本创建新笔记本之外 还有其他方法可以一次性删除所有单元吗 D D一次删除一个单元格 您
  • VideoView 未从所需位置播放视频

    我正在使用VideoView和搜索栏 但是当我通过seekBar在所需位置上seekTo 时 它从头开始播放视频 我尝试这段代码 public void onProgressChanged SeekBar seekBar int progr
  • 如何将 ToolbarItem 放置在后缘?

    我试图将工具栏项目放置在工具栏 MacOS 的后缘上 我浏览了文档 发现以下内容 automatic 项目被放置在center bottomBar 对于 MacOS 不适用 cancellationAction 与工作表相关 confirm
  • Android针对不同屏幕应用样式

    我有一个应用程序 需要在两个不同的设备上运行 600x1024 480x800 对于这些设备 我想应用不同的样式 它们具有不同的比例 我该怎么做 因为它们都有 hdpi values hdpi values mdpi没有效果 P S And
  • 确定 python 函数是否已更改

    Context 我正在尝试在数据处理框架中缓存执行 kedro http kedro readthedocs io 为此 我想为 python 函数开发一个独特的哈希值 以确定函数体 或该函数调用的函数和模块 中的任何内容是否已更改 我调查
  • Dispose 如何与实体框架配合使用

    有人可以向我解释一下我们如何以及为什么需要使用 Dispose 吗 它是 ASP NET MVC 4 附带的默认控制器模板的一部分 当对象 在本例中是数据库中的数据 不再使用时 NET 中的垃圾收集器是否应该自动启动 从数据库加载时应使用
  • 在 Bash 中循环元组

    是否可以在 Bash 中循环元组 举个例子 如果以下内容有效 那就太好了 for i j in c 3 e 5 do echo i and j done 有没有一种解决方法可以让我循环遍历元组 for i in c 3 e 5 do IFS
  • HTML中有透明的颜色代码吗?

    我正在构建一个新网站 并且正在寻找一个透明的导航栏 以便背景可见 没有透明颜色代码 但有不透明样式 查看有关它的文档 开发者 mozilla org https developer mozilla org en US docs Web CS
  • 为什么 godbolt 生成的 asm 输出与我在 Visual Studio 中的实际 asm 代码不同?

    这是生成的代码godbolt https godbolt org z 1F1t6Z 以下是 Visual Studio 在我的 main asm 文件上生成的相同代码 通过 汇编器输出 字段下的 项目 gt C C gt 输出文件 gt 使
  • HRESULT:工作表上的 0x800A03EC。范围

    我在 Worksheet range 方法上收到 HRESULT 0x800A03EC 行数超过70K 办公室2007 Code Microsoft Office Interop Excel Range neededRange curren
  • 如何在表上选择并计算某些值的出现次数

    我请求你的帮助 因为我不太了解 SQL 我需要计算表列中某些值的出现次数 以达到类似统计表的效果 如下图所示 需要的结果 Comment 我的结果表需要有前两列 国家和站点 来自第一个表 Violations 接下来的 5 列将包含状态表中
  • 配置规范未选择 ClearCase 签出版本

    从使用基本 ClearCase 的快照视图中 我想从快照视图中未选择的分支中签出文件的最新版本 我希望这是可能的 因为您可以通过版本树浏览器工具来完成此操作 然而 的文档checkout command http publib boulde
  • Visual Studio 2015 中的 TypeScript、Html 和 JS 文件嵌套

    如何在 Visual Studio 中管理 控制 TypeScript 文件的嵌套 我得到了嵌套和非嵌套文件的混合 我不确定如何 为什么 如下所示 TypeScript 项目中 JavaScript 文件的默认设置是排除它们而不是嵌套它们
  • VHDL FSM多驱动网Q连接到常量驱动程序,其他驱动程序被忽略,我的代码有什么问题?

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