【发布时间】:2012-02-09 05:36:57
【问题描述】:
我一直在尝试用 VHDL 代码为我在 Altera DE1 板上实现的简单 16 位处理器编写有限状态机。在有限状态机中,我有一个 CASE 语句来处理不同的 16 位指令,这些指令由 16 位 STD_LOGIC_VECTOR 带入 FSM。但是,在有限状态机对指令进行解码的解码状态下,我遇到了一些麻烦。其中一条指令是 ADD,它将两个寄存器作为操作数,第三个作为目标寄存器。但是,我也有一条 ADD 指令,它将一个寄存器和一个 5 位立即数作为操作数,并将第二个寄存器作为目标。我的问题是在CASE 语句中,我需要能够区分两个不同的 ADD 指令。所以,我认为如果我在CASE 语句中使用通配符值,如“-”或“X”,我将能够仅用两种情况区分两者,而不是列出所有可能的寄存器/立即数组合.例如:
CASE IR IS --(IR stands for "Instruction Register")
WHEN "0001------0-----" => (Go to 3-register add);
WHEN "0001------1-----" => (Go to 2-register/immediate value add);
WHEN OTHERS => (Do whatever);
END CASE;
这不是我仅有的两条指令,我只是将这两条指令缩短了一点。当我编译并运行这段代码时,处理器在进入“解码”状态时停止执行。此外,Quartus 给出了许多警告,例如“LC3FSM.vhd(37) 处的 VHDL 选择警告:忽略包含元值的选择”“0001------0-----”“” 我不知道如何去做。我真的不需要也可能不需要定义每一个 16 位组合,我希望有一种方法可以在 STD_LOGIC_VECTOR 中使用通配符来最小化我必须定义的组合数量。
有人知道怎么做吗?
谢谢
【问题讨论】:
标签: wildcard vhdl stdvector lc3