小编Eri*_*end的帖子

VHDL STD_LOGIC_VECTOR通配符值

我一直在尝试用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;
Run Code Online (Sandbox Code Playgroud)

这些并不是我唯一的两条指令,我只是将这两条指令缩短了一点.当我编译并运行此代码时,处理器在进入"解码"状态时停止执行.此外,Quartus给出了许多警告,说"LC3FSM.vhd(37)中的VHDL选择警告:忽略包含元值的选择""0001 ------ 0 -----"""我在关于如何实现这一目标的损失.我真的不需要也可能不需要定义每个16位组合,我希望有一种方法可以在STD_LOGIC_VECTOR中使用通配符来最小化我必须定义的组合数.

有人知道怎么做到这一点吗?

谢谢

wildcard vhdl stdvector lc3

6
推荐指数
2
解决办法
3017
查看次数

两个 STD_LOGIC_VECTORS 的按位 ANDING

嘿,我想知道在 VHDL 中是否有可能将两个STD_LOGIC_VECTORS放在一起。例如,我正在编写一个 VHDL 程序,它将向 VGA 监视器输出一个字符。我有一个向量PixelRow: IN STD_LOGIC_VECTOR(9 DOWNTO 0)PixelColumn: IN STD_LOGIC_VECTOR(9 DOWNTO 0)。我想要做的是有一个STD_LOGIC输出,它采用两个像素向量并将它们与另一个向量进行 AND 运算,例如。

    Output <= (PixelRow AND NOT "0000000000") OR (PixelColumn AND NOT "0000000000") OR      
              (PixelRow AND NOT "0111011111") OR (PixelColumn AND NOT "1001111111");
Run Code Online (Sandbox Code Playgroud)

我希望这段代码可用于简化以下代码:

    Output <= ((NOT PixelRow(0) AND NOT PixelRow(1) AND NOT PixelRow(2) AND NOT   
              PixelRow(3) AND NOT PixelRow(4) AND NOT PixelRow(5) AND NOT PixelRow(6)      
              AND NOT PixelRow(7) AND NOT PixelRow(8) AND NOT PixelRow(9)))
          OR ((NOT …
Run Code Online (Sandbox Code Playgroud)

controller vhdl vga

3
推荐指数
2
解决办法
4万
查看次数

标签 统计

vhdl ×2

controller ×1

lc3 ×1

stdvector ×1

vga ×1

wildcard ×1