Syntax 用于寄存器的VHDL代码,用于二进制乘法电路

Syntax 用于寄存器的VHDL代码,用于二进制乘法电路,syntax,vhdl,cpu-registers,binary-logic,Syntax,Vhdl,Cpu Registers,Binary Logic,我为二进制乘法电路中的寄存器(构成移位寄存器电路)编写了一段VHDL代码。当我在Quartus II中分析它时,显示了几个语法错误 这是我的代码: ENTITY memory IS PORT (can_load, can_shift, can_ad, sb_input, ab_input, UserInput : IN BIT; Out_Bit, Z : OUT BIT); END memory; ARCHITECTURE logic OF memory IS SIG

我为二进制乘法电路中的寄存器(构成移位寄存器电路)编写了一段VHDL代码。当我在Quartus II中分析它时,显示了几个语法错误

这是我的代码:

ENTITY memory IS
PORT (can_load, can_shift, can_ad, sb_input, ab_input, UserInput : IN BIT;
        Out_Bit, Z : OUT BIT);
END memory; 

ARCHITECTURE logic OF memory IS
    SIGNAL State: BIT := '0';
    BEGIN
        IF (can_load = '1') THEN
            State <= UserInput;
        ELSE
            IF (can_ad = '1') THEN
                Z <= State; --Z is the output that goes to the 4 bit adder
                State <= ab_input;
            END IF;
            IF (can_shift = '1') THEN
                Out_Bit <= State;
                State <= sb_input;
            END IF;
        END IF;
END logic;
有这样的东西:

IF (can_load = '1') THEN
IF can_load = '1' THEN
但我最终还是犯了大部分相同的语法错误


我很感激能为解决这个问题提供任何帮助。多谢各位

我使用了不同的工具来演示错误:

ghdl—一种内存。vhdl
memory.vhdl:9:9:generate语句必须有一个标签
memory.vhdl:9:29应为“generate”而不是“then”
ghdl:编译错误

注意,分析器正在抱怨生成语句。这是因为if语句是仅在进程或其他并发语句或子程序中找到的顺序语句

带有条件方案的generate语句(因此,
if
)是并发进程语句,需要一个标签

将if语句放入进程中:

entity memory is
port (can_load, can_shift, can_ad, sb_input, ab_input, userinput : in bit;
        out_bit, z : out bit);
end memory; 

architecture logic of memory is
    signal state: bit := '0';
begin
SOME_PROCESS:
    process (userinput, ab_input, state, sb_input)
    begin
        if can_load = '1' then
            state <= userinput;
        else
            if can_ad = '1' then
                z <= state; --z is the output that goes to the 4 bit adder
                state <= ab_input;
            end if;
            if can_shift = '1' then
                out_bit <= state;
                state <= sb_input;
            end if;
        end if;
    end process;
end logic;
实体内存不可用
端口(can_加载、can_移位、can_ad、sb_输入、ab_输入、用户输入:位;
out_位,z:out位);
终端存储器;
内存的体系结构逻辑是
信号状态:位:='0';
开始
一些程序:
过程(用户输入、ab_输入、状态、sb_输入)
开始
如果can_load='1',则

状态如果…那么是一个顺序语句。您正在架构的并行处理区域中使用它。在体系结构内部的过程中使用它。谢谢,我做到了,它成功了。我不知道我不能用如果…那么在一个过程之外。谢谢。你的回答真的很有帮助。我一定会考虑你的所有建议。:)