VHDL中的移位运算符怎么用
SLL RLL好多书里面都没有格式
晕死 YOUOUT<=YOUOUT; 楼上这个办法可以
但是 要写 估计 好几十行 找到了
aRLL 1;
a为 bit vector a rll 1;好像不能被综合。 【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。 VHDL里面有移位函数 像五楼说的一样,强制转换一下类型就是了哇。二楼的办法也可以的啊。 楼主我也跟你一样碰到相同的问题,我现在是用用VHDL语言编写y=a1*x1+a2*x2+a3*x3这样类似的数学表达式,其中乘法都用移位来转换了,但是实现起来真的是很麻烦,移位操作只能是bit_vector类型,而bit_vector又不支持加法减法操作,这个数学表达式,要写的很麻烦,我现在担心的是速度不知道能否达到我要求的60Mhz以上。 1.将要移位的变量转换为bit_vector类型
2.实现移位,并暂存
3.将所有移位暂存后的变量全部转换为integer类型
4.进行最后的interger类型的相加减。
真是很麻烦。 呵呵,用verilog就没8/9楼说的麻烦的问题了。
对于工程师来说,VHDL这样strong-typed语言其实不但不会有啥好处,反而会大幅降低工作效率。
工程师们需要的是像C那样灵活的语言,而不是Ada。 呵呵 我也碰到了这个问题 没看到有谁用这个移位运算符 好多啊 我也遇到了这种除法问题,必须用integer,不能用std_logic,要把接口定义为integer类型吗?还是要定义为std_logic后再将其强制类型转换为integer类型????????? verilog的优点在门级描述,VHDL优点在系统级描述.
总拿这个数据类型来说事..... 又不是实现不了.
a MOD 5 verilog怎么实现?
并发性语句verilog怎么实现?(同时执行多个指令)
verilog有链接库吗?
不知所云. 各有所长,每一种语言又有自己的用途。
不然就会被历史抛弃! 是啊,尤其是左移N位
页:
[1]