Vhdl 近;循环";:期待如果;近;“过程”:期望循环
这就是错误所在Vhdl 近;循环";:期待如果;近;“过程”:期望循环,vhdl,modelsim,Vhdl,Modelsim,这就是错误所在 错误:C:/modeltech64_10.5/examples/zarb.vhd(51):接近“循环”:(vcom-1576)应为IF 错误:C:/modeltech64_10.5/examples/zarb.vhd(56):接近“进程”:(vcom-1576)预期循环 IEEE库; 使用IEEE.std_logic_1164.all; 使用IEEE.std\u logic\u signed.all; 使用IEEE.numeric_std.all; 实体MULT是 泛型(
- 错误:C:/modeltech64_10.5/examples/zarb.vhd(51):接近“循环”:(vcom-1576)应为IF
- 错误:C:/modeltech64_10.5/examples/zarb.vhd(56):接近“进程”:(vcom-1576)预期循环
IEEE库;
使用IEEE.std_logic_1164.all;
使用IEEE.std\u logic\u signed.all;
使用IEEE.numeric_std.all;
实体MULT是
泛型(n:整数=4);
端口(A,B:标准逻辑向量中(n-1向下至0);
P:out标准逻辑向量(2*n-1到0));--产品
终端实体;
MULT的建筑展台是
开始
展位:流程(A、B)
变量X:std_逻辑_向量(2*n到0);
变量Y:std_逻辑_向量(n-1到0);
变量Z:std_逻辑_向量(n-1向下至0);
变量U:std_逻辑_向量(n-1到0);
开始
对于0到n-1回路中的J
U(j):='0';
端环;
X:=U&A和“0”;
Y:=B;
对于0到n-1循环中的I
如果(X(1)='1'和X(0)='0'),则
Z:=X(2*n到n+1);
X(2*n向下到n+1):=Z-Y;
X(2*n-1向下到0):=X(2*n向下到1);
如果(X(1)='0'和X(0)='1'),则
Z:=X(2*n到n+1);
X(2*n向下到n+1):=Z+Y;
x(2*n-1向下到0):=x(2*n向下到1);
其他的
X(2*n-1向下到0):=X(2*n向下到1);
如果结束;
端环;
P(2*n-1到0)让我们试着理解编译器在这里告诉您的内容。在
结束循环
中,它希望在结束时
。这意味着当您尝试关闭循环时,实际上您在另一个if
中。下一个错误只是第一个错误的结果
为什么会这样
让我们检查所讨论的块的起点可能在哪里。根据编译器的说法,在结束循环
上方的结束if
处,显然您成功地关闭了一个if
,但您仍在另一个内。如果(X(1)='1'和X(0)='0'),您认为您关闭了,那么,但显然您没有,否则我们就不会出现该错误
在那一个和end if
之间是否还有另一个if
是的它在这行:否则如果(X(1)='0'和X(0)='1'),那么
显然,您认为这是原始if
的一部分,但编译器认为不是,因此,如果vhdl
,您可以在这里搜索else。然后您会发现正确的语法实际上是elsif
,因为否则您会在else
中添加一个新的、单独的if
,这就是此处发生的情况
要可视化所发生的情况,请使用与编译器现在看到的内容相匹配的缩进:
0到n-1循环中的I的
如果(X(1)='1'和X(0)='0'),则
...
其他的
如果(X(1)='0'和X(0)='1'),则
...
其他的
...
如果结束;
??? (若此处缺失,则结束)
端环 让我们试着理解编译器在这里告诉您的内容。在结束循环
中,它希望在结束时
。这意味着当您尝试关闭循环时,实际上您在另一个if
中。下一个错误只是第一个错误的结果
为什么会这样
让我们检查所讨论的块的起点可能在哪里。根据编译器的说法,在结束循环
上方的结束if
处,显然您成功地关闭了一个if
,但您仍在另一个内。如果(X(1)='1'和X(0)='0'),您认为您关闭了,那么,但显然您没有,否则我们就不会出现该错误
在那一个和end if
之间是否还有另一个if
是的它在这行:否则如果(X(1)='0'和X(0)='1'),那么
显然,您认为这是原始if
的一部分,但编译器认为不是,因此,如果vhdl
,您可以在这里搜索else。然后您会发现正确的语法实际上是elsif
,因为否则您会在else
中添加一个新的、单独的if
,这就是此处发生的情况
要可视化所发生的情况,请使用与编译器现在看到的内容相匹配的缩进:
0到n-1循环中的I的
如果(X(1)='1'和X(0)='0'),则
...
其他的
如果(X(1)='0'和X(0)='1'),则
...
其他的
...
如果结束;
??? (若此处缺失,则结束)
结束循环。减去或添加Y作为有符号值会导致ALU的符号扩展为2*N-1位。Booth乘法器工作(并且)…减去或添加Y作为有符号值会导致ALU的符号扩展为2*N-1位。你的展位倍增器工作(和)。