10685|0

7183

帖子

195

TA的资源

五彩晶圆(高级)

楼主
 

【菜鸟FPGA VHDL学习帖】第7帖 基本知识(二) [复制链接]

【菜鸟FPGA VHDL学习帖】第7 基本知识(二)

第一步,我们先来看看原理图


LED2 接的是3脚, LED3接的是2脚 LED4接的是1脚

而软件里对应配置是 dout[7]对应 1脚   LED4
dout[6]对应2脚      LED3
dout[5]对应3脚      LED2

第二步,基本知识(所有例子都在实验板上测试过)
(1)OTHERS省略赋值操作符
短语(OTHERS=> X )是一省略赋值操作符 它可以在较多位的位矢量赋值中作省略化的赋值
(A)  例子一
begin
dout        <=           (OTHERS              => '0' );
end behave;
dout        <=           (OTHERS              => '0' ); 这条语句等同于 dout < = "000000000"  但其优点是在给大的位矢量赋值时,简化了表述,明确了含义,这种表述与位矢量长度无关

(B)  例子二
begin
dout        <=           (7            =>           '1',           6=>         '1',           othERS=> '0');
end behave;
此赋值语句的意义是给位矢量 dout 的第 7 位和第 6位赋值为'1',而其余位赋值为'0' ,dout5为0,即LED2灯亮。

(2)。移位操作符
               VHDL提供了6种预定义的运算操作符,分别是:赋值运算符逻辑运算符,算术运算符,关系运算符,移位运算符,并置运算符。
               
赋值运算符:在VHDL中,赋值运算符用来给信号、变量和常数赋值。
逻辑运算符
在VHDL中,逻辑运算符用来执行逻辑运算操作。操作数必须是BITSTD_LOGIC STD_ULOGIC类型的数据(或者是这些数
据类型的扩展,即BIT_VECTORSTD_LOGIC_VECTORSTD_ULOGIC_VECTOR)
VHDL的逻辑运算符有以下几种:NOT--取反AND--与OR--或-NAND--与非
-NOR--或非  -XOR--异或
算术运算符:
在VHDL中,算术运算符用来执行算术运算操作。操作数可以是INTEGER,SIGNED,UNSIGNED或REAL数据类型,其中REAL类型是不可综合的。如果声明了ieee库中的包集std_logic_signed和std_logic_unsigned,即可对STD_LOGIC_VECTOR类型的数据进行加法和减法运算。
VHDL语言有以下8种算术运算符:+ 加- 减 * 乘 / 除 ** 指数运算MOD 取模REM 取余 ABS 取绝对值
上述运算符中,加法、减法和乘法运算符是可以综合成逻辑电路
对于除法运算,只有在除数为2n次幕时才有可能进行综合,此时除法操作对应的是将被除数向右进行n次移位。
对于指数运算,只有当底数和指数都是静态数值(常量GENERIC参数)
才是可综合的。在算术运算符的使用中,
要注意MOD和REM的区别:
y MOD x运算的结果是y除以x所得的余数,运算结果通过信号x返回;
y REM x运算的结果是y除以x所得的余数,结果通过信号y返回。
ABS运算返回操作数的绝对值。上述后3个运算符
(MODREMABS)通常是不可综合的。
并置运算符:
在VHDL中,提供了一种并置操作符 , 它的符号如下所示 :& -用来进行位和位矢量的连接运算
所谓位和位矢量的连接运算是指将并置操作符右边的内容接在左边的内容之后以形成一个新的位矢量.
位运算符:
在VHDL中,移位操作符用来对数据进行移位操作,它们是在VHDL93中引入
的。其语法结构为:<左操作数><移位操作符><右操作数>
其中,左操作数必须是BIT_VECTOR类型的,右操作数必须是INTEGER类型(前面可以加正负号)的。
VHDL中的移位操作符有以下几种:
sll 逻辑左移------数据左移,右端空出来的位置填充'0'
srl 逻辑右移------数据右移,左端空出来的位置填充'0'
sla 算术左移-------数据左移,同时复制最右端的位,在数据左移操作后填充在右端空出的位置上
sra 算术右移-------数据右移,同时复制最左端的位,在数据右移操作后填充在左端空出的位置上
rol 循环逻辑左移-----数据左移,同时从左端移出的位依次填充到右端空出的位置上
ror 循环逻辑右移------数据右移,同时从右端移出的位依次填充到左端空出的位置上
例子:
VHDL的类型限定过于强,以至于很多时候出问题都是类型错误……
VHDL语言本身的这几个运算符是对bitvector定义的,而我们一般都
std_logic_vector,这样就很导致一般不能编译通过。
而更不爽的是ieee.numeric_bit或者numeric_std包中都有重载sll之类,但是很讨厌的是他们都是对signed/unsigned定义,没办法,要是想给std_logic_vector用这几个移位运算符
(sll, srl, sla, sra,rol, ror)

architecturebehave of ledd is
               signal i: std_logic_vector(7downto 0) := "00100001";
begin
       dout <= to_stdlogicvector(to_bitvector(i) sll 1);
【菜鸟FPGA VHDL学习帖】第7帖基本知识(二).pdf (200.36 KB, 下载次数: 16)












[ 本帖最后由 常见泽1 于 2013-9-29 15:22 编辑 ]

1.JPG (27.27 KB, 下载次数: 1)

1.JPG
此帖出自FPGA/CPLD论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表