1、595.5 常见错误及其原因分析初学 VHDL,往往会碰到不少问题和错误。例如:综合时出现警告和错误、编译无法通过等问题,使得设计无法实现;或者程序,综合等均通过,但不能得到正确的仿真结果,即所设计的硬件与原意要求不符等等。通过资料的收集和归纳,总结出以下一些注意事项,常见问题及错误,并提出改正方案,以供参考。5.5.1 避免语法错误VHDL 规定了一些固定的描述格式,用于描述各种不同的功能,在 Xilinx 或Max+plus环境下,关键字会以蓝色显示,端口宽度会以紫色显示,以示区别,黑色字则是可由用户自定义的名称、数值等。下面几个简单的例子作说明:1.端口的定义端口的定义为:port (
2、端口名,端口名:端口类型(空格)端口宽度) ; entity sztop isPort ( clk : in std_logic ; ring , sz : out std_logic ; 定义多个相同类型的端口,用逗号格开hour : in std_logic_vector(3 downto 0) ; 4 位数据sec : out std_logic_vector(6 downto 0) 7 位数据);end sztop;2. 信号和变量的定义信号定义:SIGNAL 信号名: 数据类型 ;signal a : std_logic;signal b : std_logic_vector(2 d
3、ownto 0); 变量定义:VARIABLE 变量名 : 数据类型 ;variable c0 , c1 : integer ;variable d : integer range 0 to 256; variable cnt : std_logic_vector(3 downto 0);3. CASE 语 句60case seg iswhen “0000“ = q q q q b then qb then qcnt0:=1;cnt1:=2;when“0001“=cnt0:=2;cnt1:=3;when“0010“=cnt0:=3;cnt1:=6 ;when“0011“=cnt0:=3 ;cn
4、t1:=4;when others=cnt0:=0;cnt1:=0;end case;elsif clkevent and clk=1 thencount:=count+1;if count=cnt0 thenclk0:=1;elsif count=cnt1 thencount:=0;clk0:=0;end if;end if;clockcnt0:=1;cnt1:=2;when“0001“=cnt0:=2;cnt1:=3;when“0010“=cnt0:=3;cnt1:=6 ;when“0011“=cnt0:=3 ;cnt1:=4;when others=cnt0:=0;cnt1:=0;end case;if count=cnt0 thenclk0:=1;elsif count=cnt1 thencount:=0;