|
发表于 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。 |
|