数字系统作业之程序改错
前言
本次作业所用软件为Quartus||9.0
,所用板载为EPF10K20T144-4
。本篇博客仅供参考学习。
注意事项
(1)创建VHDL工程时选择板载系列一定要按照板载芯片上的系列选中。
(2)目前使用的Quartus || 9.0
不支持输入汉字的功能,只支持显示汉字的功能,所以想要在上面显示汉字,得先在记事本中写好自己要写的汉字内容,然后再复制粘贴到Quartus || 9.0
上的文件中。
(3)安装驱动程序前一定要记得禁止驱动程序签名。
(4)配置完引脚以后一定要记得要再编译一次。
创建一个VHDL工程
1、点击File->new project Wzarid
。
2、默认Next
即可。
3、在图中灰圈所圈中地方选择工程保存文件,红圈所圈中地方输入项目名称(注:项目名称为自定义,不要出现空格,且当使用VHDL语言编写硬件程序时,要注意实体名一定要和工程名一致,要不然会编译报错),然后点击Next
即可。
4、如果需要添加自己已经写好的文件,在红圈圈中的地方找到文件路径,然后点击Add
即可添加,若不需要,则默认Next
即可。
5、在图中灰圈所圈中地方选择程序所要烧入板载系类,红圈所圈中地方选择板载芯片上所标系列,然后点击Next
即可。
6、默认Next
即可。
7、默认Finish
即可。
创建一个VHDL程序文件
1、点击File->new
或直接点击图中红线所圈按钮即可。
2、点击VHDL File
即可。
3、在此界面输入自己要写的程序即可。
更改VHDL程序中的错误
1、错误程序如下
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164
ENTITY ADD8bit IS
PORT(A,b:IN STD_LOGIC_VECTOR(7 DOWNTO 0); --两个加数
Cin:IN STD_LOGIC; --低位的进位输入信号
8_y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --和
Cout:OUT STD_LOGIC;); --高位进位输出
END;
ARCHITECTURE ONE IS
Signal AA,BB,temp:STD_LOGIC_VECTOR;
BEGIN
AA<=0&A;
BB<=0&B;
temp<=AA+BB+Cin;
8_Y<=temp(7 downto 0);
Cout<=temp[8];
END ONE;
报错一:Error (10500): VHDL syntax error at diy.vhd(4) near text "ENTITY"; expecting "(", or "'", or "."
错误原因:
这一行代码少了.ALL;
解决办法:将此行代码改成如下代码即可。
USE IEEE.STD_LOGIC_1164.ALL;
报错二:Error (10500): VHDL syntax error at diy.vhd(7) near text "8"; expecting an identifier, or "constant", or "file", or "signal", or "variable"
错误原因:
这一行代码标识符8_y
起始为数字,因此为非法标识符。
解决办法:将此行代码改成如下代码即可。
Sum8_y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --和
报错三:Error (10500): VHDL syntax error at diy.vhd(8) near text ")"; expecting an identifier, or "constant", or "file", or "signal", or "variable"
错误原因:
这一行代码在STD_LOGIC
后多加了一个;
(注:端口声明的最后一个端口在声明完不需要添加;
)
解决办法:将此行代码改成如下代码即可。
Cout:OUT STD_LOGIC); --高位进位输出
报错四:Error (10500): VHDL syntax error at diy.vhd(11) near text "IS"; expecting "of"
错误原因:
这一行代码缺少了实体声明。
解决办法:将此行代码改成如下代码即可。
ARCHITECTURE ONE OF ADD8bit IS
报错五:Error (10500): VHDL syntax error at diy.vhd(17) near text "8"; expecting "end", or "(", or an identifier, or a concurrent statement
错误原因:
这一行代码标识符8_y
起始为数字,因此为非法标识符,并且按照程序,Y
应为小写字母y
。
解决办法:将此行代码改成如下代码即可。
Sum8_y<=temp(7 downto 0);
报错六:Error (10327): VHDL error at diy.vhd(14): can't determine definition of operator ""&"" -- found 0 possible definitions
错误原因:
这两行代码中0是字符没有加' '
。
解决办法:将此行代码改成如下代码即可。
AA<='0'&A;
BB<='0'&B;
报错七:Error (10327): VHDL error at diy.vhd(17): can't determine definition of operator ""+"" -- found 0 possible definitions
错误原因:
没有载入操作符+
所要应用的程序包。
解决办法:在添加程序包的地方加上要用的程序包即可。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
报错八:Error (10482): VHDL error at diy.vhd(5): object "STD_LOGIC_VECTOR" is used but not declared
错误原因:实体名与工程名不一致。
解决办法:修改工程名使其一致即可。
报错九:Error (10529): VHDL error at ADD8bit.vhd(13): variable must be constrained Error: Can't elaborate top-level user hierarchy
错误原因:
没有定义逻辑矢量的位数。
解决办法:将此行代码改成如下代码即可
Signal AA,BB,temp:STD_LOGIC_VECTOR(8 DOWNTO 0);
2、正确程序如下
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADD8bit IS
PORT(A,b:IN STD_LOGIC_VECTOR(7 DOWNTO 0); --两个加数
Cin:IN STD_LOGIC; --低位的进位输入信号
Sum8_y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --和
Cout:OUT STD_LOGIC); --高位进位输出
END;
ARCHITECTURE ONE OF ADD8bit IS
Signal AA,BB,temp:STD_LOGIC_VECTOR(8 DOWNTO 0);
BEGIN
AA<='0'&A;
BB<='0'&B;
temp<=AA+BB+Cin;
Sum8_y<=temp(7 downto 0);
Cout<=temp(8);
END ONE;
对VHDL程序(流水灯程序)进行仿真
1、点击File->new->Vector Waveform File
创建一个Vector Waveform File文件。
2、填添加仿真的引脚并设置好波形。(注:如下图所示)
3、点击图中红线所圈中的时序仿真按钮得到如图所示结果即可。
将VHDL程序文件(流水灯程序)烧入板载测试
1、点击Assignments->Pins
在图中红线圈中的地方设置对应板载的引脚,设置完引脚后一定要记得再编译一次。
2、点击烧入按钮,再在弹出的界面上点击start
将VHDL程序烧入板载
3、调整好输入,得到输出,成功界面如下。
(注:输出进位信号引脚为PIN_95。)