【菜鸟 FPGA VHDL学习帖】第 8帖 基本知识(三) (一) 让我们来学习下上电顺序 (网络转摘) 要注意FPGA上电下电顺序,请大家尽量按照以下步骤进行板子和下载线的上电、下电顺序:
! G" [, G* r: P% L上电顺序:
$ p) t' @& _1 y9 @, w& I9 ~1.在FPGA板子断电的情况下,插上JTAG下载线接口( t2 H G( f% g5 r
2.插上USB Blaster或者ByteBlasterII的电缆" V( E5 L' P: N
3.插上FPGA板子的电源
, R# }: O9 ?# u- @- @下电顺序:# o: s3 J+ [. ^1 u d
1. 断开FPGA板子的电源5 f' e8 T' O: C2 E
2.断开USB Blaster或者ByteBlasterII的电缆! ^8 R" _% H5 l4 q( s1 b2 ]
3.断开JTAG下载线接口
' Y8 B; l) b$ N. l虽然上面的步骤有点繁琐,但是为了保证芯片不被损坏,希望大家按照上面的步骤来操作。 (二) 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; (三) 文字规则
# e7 t, F- s3 f, w与其它计算机高级语言一样 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) % W. @0 X1 \& c8 D# W
2 字符串型文字 字符是用单引号引起来的ASCII字符 可以是数值 也可以是符号或字母 如 'R' 'a' '*' 'Z' 'U' '0' '11' '-' 'L' 数位字符串也称位矢量 是预定义的数据类型 Bit 的一位数组 数位字符串与文字字符串相似 但所代表的是二进制 八进制或十六进制的数组 它们所代表的位矢量的长度即为等值的二进制数的位数 字符串数值的数据类型是一维的枚举型数组 与文字字符串表示不同 数位字符串的表示首先要有计算基数 然后将该基数表示的值放在双引号中 例如 data1 <= B"1_1101_1110" -- 二进制数数组 位矢数组长度是9 data2 <= O"15" -- 八进制数数组 位矢数组长度是6 data3 <= X"AD0" -- 十六进制数数组 位矢数组长度是12 ; k; s2 w+ J( g, y) J# a
3 标识符 标识符是最常用的操作符 有效的字符 英文字母包括 26 个大小写字母 a z A Z 数字包括 0 9 及下划线 _ 任何标识符必须以英文字母开头 必须是单一下划线 _ 且其前后都必须有英文字母或数字 标识符中的英语字母不分大小写 7 D: J" D9 r: ?3 U6 G. r
例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 '_'
/ N# a; F3 H* _7 V- ~如果改成 num <= B"00000000_000000000000000000000000"; 编译通过
: I+ K6 o$ y9 _1 ]( \/ d例子2: 数字型加下划线,不报错 例:SIGNAL num: std_logic_vector(3_1 downto 0); 编译通过 6 U) R* K5 L6 [! T. w+ m$ y( o
试下另外一种: SIGNAL num: std_logic_vector(10#3_1# downto 0); 不报错,编译通过。 |