【问题标题】:Can't compile with VHDL 2008 Quartus Prime无法使用 VHDL 2008 Quartus Prime 编译
【发布时间】:2021-04-25 12:07:22
【问题描述】:

我正在使用 Quartus Prime Lite Edition,我想像这样在 std_logic_vector 上使用一元运算符 nand

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

entity example1 is
    port( 
        BIN : in std_logic_vector (7 downto 0);
        result : out std_logic
    );
end;

architecture Beh of example1 is
begin
    
    result <= nand BIN;
        
end Beh;

我尝试按照this 的说明,在编译器设置VHDL 输入 下更改了VHDL 版本。仍然没有效果并得到: 错误 (10500):lab2.vhd(16) 靠近文本“nand”的 VHDL 语法错误;期望“(”,或标识符(“nand”是保留关键字),或一元运算符

【问题讨论】:

  • nand 是二元运算符,需要两个操作数。
  • @busybee 像这样的二进制操作符被添加到 VHDL 2008 以允许减少二进制数组。
  • @Piotr Chmielewski IIRC,Prime lite 没有完整的 VHDL 2008 支持,只有 prime pro 有。您是否在 Quartus 文档中检查了该功能是否受支持?您是否还检查了该文件是否指定或编译为 VHDL 2008?

标签: vhdl intel quartus


【解决方案1】:
【解决方案2】:

这个错误是因为“nand”需要两个输入。

根据您的问题,在我看来您想对输入执行按位 nand 操作。

如果是,您可以按如下方式替换架构。我假设您熟悉“generate for”语法!

architecture Beh of example1 is 
--Signals for Storing Intermediate Bitwise Values
signal temp1:std_logic_vector(3 downto 0);
signal temp2:std_logic_vector(1 downto 0);

begin
-- First level of NAND Operations

label_1: for i in 0 to 3 generate
temp1(i)<=BIN(2*i) nand BIN(2*i+1);
end generate label_1;

-- Second level of NAND Operations

label_2: for j in 0 to 1 generate
temp2(j)<= temp1(2*j) nand temp1(2*j+1);
end generate label_2;

-- Getting the Final Output 

result<= temp2(1) nand temp2(0);
end Beh;

谢谢, 雷博士

【讨论】:

  • 感谢您的回复!我在 2008 年看到 nand 只能与一个向量一起使用,所以我问如何。现在我知道 Quartus Prime Lite 不支持它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
相关资源
最近更新 更多