【发布时间】:2016-08-29 12:05:39
【问题描述】:
我正在尝试为玩具处理器编写控制逻辑模块。它循环读取/解码/执行状态,从内存的各个位读取和写入,并设置一堆控制信号。它有点大,据我所知,它不能真正细分为更小的模块。
我不想将所有状态的逻辑放在一个进程中——它很难阅读,而且大量的中间别名和信号在使用模拟器时是一种痛苦。
我尝试将每个状态的逻辑拆分到自己的进程中,但后来我遇到了多个驱动程序的问题。
我还尝试在一个主进程的头部为每个状态的逻辑声明单独的过程,并让进程根据当前状态调用正确的过程。这非常好用,具有模块化的“功能”和更易读的结构......但是每个过程的中间信号在模拟器中不可见(并且可能无法访问测试台?我之前放弃了尝试那个。)。我正在使用 ISim,以防万一。
我是不是做错了什么?我可以使用一些技巧来避免拥有一个庞大的单体进程吗?
编辑:模块的代码是here。
【问题讨论】:
-
证明在抽象信号中描述问题的风险不是子程序声明项(IEEE Std 1076-2008, 4.3 Subprogram body),您指的是变量(“...中间信号不可见......”)。你能提供一个specific programming problem吗?如果没有细节或描述,如何最好地用 VHDL 表示硬件可能无法回答。
-
您的链接 control.vhd 代码无法正常工作,原因是其解释不适合多个 cmets 所允许的空间。我预计如果您要提供功能代码,那么您在可读性方面可能遇到的问题类别可能会大不相同。例如,您应该在单个进程中使用 case 语句,而不是为状态使用单独的进程。每个分配信号的进程都有该信号的驱动程序。对于已解析信号,已解析值是有效值。 is_uop 将始终为 false,is_call 和 is_direct 也是如此。
标签: vhdl xilinx-ise