【菜鸟FPGA VHDL学习帖】第8帖 基本知识(三)
(一) 让我们来学习下上电顺序
(网络转摘)
要注意FPGA上电下电顺序,请大家尽量按照以下步骤进行板子和下载线的上电、下电顺序:
上电顺序:
1.在FPGA板子断电的情况下,插上JTAG下载线接口
2.插上USB Blaster或者ByteBlasterII的电缆
3.插上FPGA板子的电源
下电顺序:
1. 断开FPGA板子的电源
2.断开USB Blaster或者ByteBlasterII的电缆
3.断开JTAG下载线接口
虽然上面的步骤有点繁琐,但是为了保证芯片不被损坏,希望大家按照上面的步骤来操作。
(二) IF语句
例程:
(按键的例程)
port( data_in : in std_logic_vector (2 downto 0);
data_out : out std_logic_vector (2 downto 0)
);
end ledd;
architecture behave of ledd is
begin
process(data_in)
begin
IF data_in = "110" THEN data_out <= "110";-- 0
ELSIF data_in = "101" THEN data_out <= "101";
ELSIF data_in = "011" THEN data_out <= "011";
ELSe data_out <= "111";
END IF;
end process;
end behave;
解析:用IF语句来判断那一个按键按下,在对应让那一个灯亮。
End if 玩不可少。
IF data_in = "110" THEN data_out <= "110";-- 0
else
data_out <= "101";
end if;
(三) 文字规则
与其它计算机高级语言一样 VHDL 也有自己的文字规。
VHDL 文字(Literal)主要包括数值和标识符,数值型文字所描述的值主要有:数字型、字符串型、位串型。
1. 数字型文字
数字型文字的值有多种表达方式 现列举如下
(a)整数文字 整数文字都是十进制的数 如
5 678 0 156E2(=15600) 45_234_287 (=45234287)
数字间的下划线仅仅是为了提高文字的可读性 相当于一个空的间隔符 而没有其它的意义 因而不影响文字本身的数值
(b)实数文字 实数文字也都是十进制的数 但必须带有小数点 如
(c)以数制基数表示的文字 用这种方式表示的数由五个部分组成 第一部分 用十进制数标明数制进位的基数 第二部分 数制隔离符号 # 第三部分 表达的文字,第四部分 指数隔离符号 # 第五部分 用十进制表示的指数部分 这一部分的数如果为0可以省去不写
现举例如下
d1 <= 110#170# ; -- (十进制表示 等于 170)
d2 <= 16#FE# ; -- (十六进制表示 等于 254)
d3 <= 2#1111_1110#; -- (二进制表示 等于 254)
d4 <= 8#376# ; -- (八进制表示 等于 254)
2 字符串型文字
字符是用单引号引起来的ASCII字符 可以是数值 也可以是符号或字母 如
'R' 'a' '*' 'Z' 'U' '0' '11' '-' 'L'
数位字符串也称位矢量 是预定义的数据类型 Bit 的一位数组 数位字符串与文字字符串相似 但所代表的是二进制 八进制或十六进制的数组 它们所代表的位矢量的长度即为等值的二进制数的位数 字符串数值的数据类型是一维的枚举型数组 与文字字符串表示不同 数位字符串的表示首先要有计算基数 然后将该基数表示的值放在双引号中
例如
data1 <= B"1_1101_1110" -- 二进制数数组 位矢数组长度是9
data2 <= O"15" -- 八进制数数组 位矢数组长度是6
data3 <= X"AD0" -- 十六进制数数组 位矢数组长度是12
3 标识符
标识符是最常用的操作符
有效的字符 英文字母包括 26 个大小写字母 a z A Z 数字包括 0 9
及下划线 _
任何标识符必须以英文字母开头
必须是单一下划线 _ 且其前后都必须有英文字母或数字
标识符中的英语字母不分大小写
例1:字符串型
SIGNAL num: std_logic_vector(3_1 downto 0);
num <= "00000000000000000000000000000000";
如果改成
num <= "0000000000_0000000000000000000000";
报错,百思不得其解
错误原因:
Error (10315): VHDL syntax error at ledd.vhd(18): object with std_logic type cannot contain character '_'
如果改成
num <= B"00000000_000000000000000000000000";
编译通过
例子2:
数字型加下划线,不报错
例:SIGNAL num: std_logic_vector(3_1 downto 0);
编译通过
试下另外一种:
SIGNAL num: std_logic_vector(10#3_1# downto 0);
不报错,编译通过。