在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7480|回复: 11

移位操作

[复制链接]
发表于 2007-9-24 00:13:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在 verilog 中有移位运算符, v >>i 能把变量右移 i 位,今天看到 VHDL 的93 标准中听说也定义了这样的移位操作
但是我在 quartus 6.0 中试了没有成功,难道  quartus 6.0  版本的还不支持这个 VHDL 的93 标准 吗 ??
发表于 2007-9-24 12:16:34 | 显示全部楼层
可以用函数实现
发表于 2007-9-24 14:48:53 | 显示全部楼层
没搞明白你问题出在哪一步.
首先代码这样写是绝对没有问题的, v>>i 就算i是变量/信号都没问题, Verilog1995都支持这个.
其次, 我一般是先用Synplify pro对设计代码进行综合, 然后使用QuartusII生成FPGA加载问题.
你说"在quartus 6.0中试了没有成功", 怎么个没有成功, 报什么信息, 你期望结果是什么, 实际结果是什么?
 楼主| 发表于 2007-9-25 00:08:30 | 显示全部楼层
en ,在verilog 中是正确的
但是 VHDL 中却不可以
发表于 2007-10-17 12:08:28 | 显示全部楼层

建议

移位操作不要用,当移位大于1 的时候
用数据截取就可以了
例如:
a[7:0] = b[7:0] >>3
应该这样写
a= { {3'b0}, b[7:3]}
发表于 2007-10-17 14:49:31 | 显示全部楼层
貌似楼上的代码综合性更强一些!
>>在定义是逻辑移位,你在modelsim里是可以使用的,而你在quarters里是不是做的应该是RTL吧,那就尽量做的可综合性强一些。毕竟不是行为级看算法的功能要保证可综合阿
发表于 2007-10-17 19:41:14 | 显示全部楼层
VHDL里没有<<这个运算符吧

要移位试试这样 Y(3 downto 0) <= 0 & Y(3 downto 1);
发表于 2007-10-18 11:53:22 | 显示全部楼层
#5 说得极是啊!!
我们公司些RTL代码根本就不允许用>>操作符,只能用连接操作来把相应的位截断就可以实现移位了!!
发表于 2007-10-20 15:29:05 | 显示全部楼层
我觉得最好写成 :a= { {3{b[7]}}, b[7:3]} ;
高位进行符号扩展,对有符号数同样适用



原帖由 aliaoshaer 于 2007-10-17 12:08 发表
移位操作不要用,当移位大于1 的时候
用数据截取就可以了
例如:
a[7:0] = b >>3
应该这样写
a= { {3'b0}, b}

发表于 2007-10-20 16:23:22 | 显示全部楼层
#9 说的很正确,对于有符号数(补码)的移位操作确实是这样
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-7-4 22:31 , Processed in 0.023288 second(s), 9 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表