微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 移位操作

移位操作

时间:10-02 整理:3721RD 点击:
在 verilog 中有移位运算符, v >>i 能把变量右移 i 位,今天看到 VHDL 的93 标准中听说也定义了这样的移位操作
但是我在 quartus 6.0 中试了没有成功,难道  quartus 6.0  版本的还不支持这个 VHDL 的93 标准 吗 ?

可以用函数实现

没搞明白你问题出在哪一步.
首先代码这样写是绝对没有问题的, v>>i 就算i是变量/信号都没问题, Verilog1995都支持这个.
其次, 我一般是先用Synplify pro对设计代码进行综合, 然后使用QuartusII生成FPGA加载问题.
你说"在quartus 6.0中试了没有成功", 怎么个没有成功, 报什么信息, 你期望结果是什么, 实际结果是什么?

en ,在verilog 中是正确的
但是 VHDL 中却不可以

建议
移位操作不要用,当移位大于1 的时候
用数据截取就可以了
例如:
a[7:0] = b[7:0] >>3
应该这样写
a= { {3'b0}, b[7:3]}

貌似楼上的代码综合性更强一些!
>>在定义是逻辑移位,你在modelsim里是可以使用的,而你在quarters里是不是做的应该是RTL吧,那就尽量做的可综合性强一些。毕竟不是行为级看算法的功能要保证可综合阿

VHDL里没有<<这个运算符吧
要移位试试这样 Y(3 downto 0) <= 0 & Y(3 downto 1);

#5 说得极是啊!
我们公司些RTL代码根本就不允许用>>操作符,只能用连接操作来把相应的位截断就可以实现移位了!

我觉得最好写成 :a= { {3{b[7]}}, b[7:3]} ;
高位进行符号扩展,对有符号数同样适用

#9 说的很正确,对于有符号数(补码)的移位操作确实是这样

VHDL中我记得有个移位操作符的,是<<吗?

如果需要移位的是个变量,如何实现可综合的代码?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top