懂VHDL的高手请进

来源:百度知道 编辑:UC知道 时间:2024/05/19 12:48:09
程序为:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY NoteTabs IS
PORT ( clk,X1,X2 : IN STD_LOGIC;
Counter2 : OUT STD_LOGIC_VECTOR (8 DOWNTO 0);
ToneIndex : OUT STD_lOGIC_VECTOR (3 DOWNTO 0) );
END;
ARCHITECTURE one OF NoteTabs IS
COMPONENT MUSIC --音符数据ROM
PORT(address : IN STD_LOGIC_VECTOR (8 DOWNTO 0);
inclock : IN STD_LOGIC;
q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );
END COMPONENT;
SIGNAL Counter : STD_LOGIC_VECTOR (8 DOWNTO 0);
TYPE STATES IS (ST0,ST1,ST2,ST3);
SIGNAL STX : STATES;
BEGIN
CNT8 : PROCESS(clk,Counter,X1,X2)
BEGIN
IF Counter=479 THEN Counter<="000000000";
ELSIF (clk'EVENT AND clk='1') THEN Counter <=Counter+1;
case Counter is
when '000000000' to '010001111' => STX <= ST0;S2<="00";

'000000000' to '010001111'
这里的单引号应该全部改为双引号。因为他是vector型

你看他的错误提示,最后一句话是选择分支必须是离散的范围,说明你的选择分支可能有重叠,导致报错

这个是因为你把双引号写成了单引号,改成双引号就行了
另外请问一声,在vhkl里case—when有这种写法吗?怎么以前从没见过啊?

g