yuhang 发表于 2009-11-28 15:22:18

VHDL中的移位运算符怎么用

SLL RLL

好多书里面都没有格式
晕死

NJ8888 发表于 2009-11-28 15:28:01

YOUOUT<=YOUOUT;

yuhang 发表于 2009-11-28 15:29:55

楼上这个办法可以

但是 要写 估计 好几十行

yuhang 发表于 2009-11-28 15:46:37

找到了


aRLL 1;

a为 bit vector

lishantian 发表于 2009-12-26 20:28:18

a rll 1;好像不能被综合。

minux 发表于 2009-12-26 21:04:17

【4楼】 lishantian
为什么不能被综合啊?

VHDL的类型限定过于强,以至于很多时候出问题都是类型错误……

VHDL语言本身的这几个运算符是对bitvector定义的,而我们一般都用std_logic_vector,
这样就很导致一般不能编译通过。

而更不爽的是ieee.numeric_bit或者numeric_std包中都有重载sll之类,但是很讨厌的是
他们都是对signed/unsigned定义,没办法,
要是想给std_logic_vector用这几个移位运算符(sll, srl, sla, sra, rol, ror)
只得这样:
o <= to_stdlogicvector(to_bitvector(i) sll 1);

呵呵,不想这么麻烦的话,用Verilog吧,尤其是SystemVerilog,用起来舒服多了~

修改:附另一种形式的完成测试程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity test is
      port (
                i: in std_logic_vector (10 downto 0);
                o: out std_logic_vector (10 downto 0)
      );
end entity test;
architecture a of test is begin
      o <= std_logic_vector(unsigned(i) sll 1);
end architecture a;
这个方法的好处是不会丢失X,因为unsigned和signed其实都是std_logic_vector。

zgq800712 发表于 2009-12-27 12:39:38

VHDL里面有移位函数

meng012 发表于 2009-12-27 14:22:50

像五楼说的一样,强制转换一下类型就是了哇。二楼的办法也可以的啊。

FlashNuk 发表于 2009-12-28 12:42:24

楼主我也跟你一样碰到相同的问题,我现在是用用VHDL语言编写y=a1*x1+a2*x2+a3*x3这样类似的数学表达式,其中乘法都用移位来转换了,但是实现起来真的是很麻烦,移位操作只能是bit_vector类型,而bit_vector又不支持加法减法操作,这个数学表达式,要写的很麻烦,我现在担心的是速度不知道能否达到我要求的60Mhz以上。

FlashNuk 发表于 2009-12-28 12:44:28

1.将要移位的变量转换为bit_vector类型
2.实现移位,并暂存
3.将所有移位暂存后的变量全部转换为integer类型
4.进行最后的interger类型的相加减。

真是很麻烦。

minux 发表于 2009-12-28 17:33:07

呵呵,用verilog就没8/9楼说的麻烦的问题了。
对于工程师来说,VHDL这样strong-typed语言其实不但不会有啥好处,反而会大幅降低工作效率。
工程师们需要的是像C那样灵活的语言,而不是Ada。

batou 发表于 2012-2-22 13:24:28

呵呵 我也碰到了这个问题 没看到有谁用这个移位运算符

beck_ck 发表于 2012-2-22 14:54:30

好多啊

beck_ck 发表于 2012-2-22 14:59:59

我也遇到了这种除法问题,必须用integer,不能用std_logic,要把接口定义为integer类型吗?还是要定义为std_logic后再将其强制类型转换为integer类型?????????

the_wind_blows 发表于 2012-2-23 10:04:29

verilog的优点在门级描述,VHDL优点在系统级描述.

总拿这个数据类型来说事..... 又不是实现不了.

a MOD 5 verilog怎么实现?
并发性语句verilog怎么实现?(同时执行多个指令)
verilog有链接库吗?

不知所云.

catch2000 发表于 2012-2-23 19:22:52

各有所长,每一种语言又有自己的用途。
不然就会被历史抛弃!

suxilong 发表于 2013-12-11 21:17:49

是啊,尤其是左移N位
页: [1]
查看完整版本: VHDL中的移位运算符怎么用