我不明白这个VHDL代码有什么问题?

时间:2013-04-24 22:32:28

标签: logic std vhdl

我有以下代码:

entity wave_select is
port( address:in std_logic_vector(6 downto 0);
ws1: in std_logic;
ws0: in std_logic;
wave_out: out std_logic_vector(6 downto 0));
end wave_select;


architecture choose_arch of wave_select is
signal internal_sine:std_logic_vector(6 downto 0);
signal internal_tri:std_logic_vector(6 downto 0);
signal internal_sqr:std_logic_vector(6 downto 0); 

begin 
U0: entity sine_tbl port map(addr=>address, sine_val=>internal_sine);
U1: entity triangle_tbl port map(addr=>address, tri_val=>internal_tri);
U2: entity square_tbl port map(addr=>address, square_val=>internal_sqr);

    process (std_logic_vector'(ws1, ws0))
    begin
        case ws_combo is
            when "01" => wave_out<=internal_sine;
            when "10" => wave_out<=internal_tri;
            when "11" => wave_out<=internal_sqr;
            when others =>wave_out<=(others => '-');
        end case;
    end process;


end choose_arch;`

每当我尝试编译时,都会出现以下错误:

  1. 预期的标识符/关键字(针对流程线)
  2. 关键字结束预期(对于“10”行)
  3. 预期的设计单位声明(与关键字错误相同的行)
  4. 修正问题

2 个答案:

答案 0 :(得分:0)

目前看来,这有很多问题,主要是基本的语法。

虽然看起来很可能意味着将ws0和ws1的组合视为ws_combo,但你没有做任何事情来告诉合成器,因此它将ws_combo视为未定义。< / p>

至少据我所知,你不能像过去那样在过程灵敏度列表中组合信号。灵敏度列表用于说明此过程响应的外部信号,而不是其他信号。

您没有wave_out的定义(除非它也在您的实体声明中)。

您没有internal_sineinternal_triinternal_sqr的定义。如果不知道wave_out的类型,很难猜出它们应该是什么类型。

作为对此可能结果的临时想法,我修复了一些语法错误,添加了声明ws0,ws1和wave_out的实体声明,然后将wave_out设置为适合I类型的值已经给出它(在这种情况下,只是采用二进制输入并产生格雷码输出)。

entity controller1 is
port (
    ws1 : in std_logic;
    ws0 : in std_logic;
    wave_out : out std_logic_vector(1 downto 0)
);
end;

architecture whatever of controller1 is
begin
impl: process(ws0, ws1)
    begin
        case std_logic_vector'(ws1,ws0) is
            when "01" => wave_out<="01";
            when "10" => wave_out<="11";
            when "11" => wave_out<="10";
            when others =>wave_out<=(others => '-');
        end case;
    end process;
end whatever;

当然,这也需要典型的libraryusing来获取std_logicstd_logic_vector的声明,但是添加后,合成器似乎接受了它。当然,其他一些合成器(我用Synplify检查过)可能会发现我错过的一个问题,但我认为这可能至少涵盖了大多数明显的问题。

答案 1 :(得分:0)

您试图通过此行中的std_logic_vector'尝试实现什么目标?

process (std_logic_vector'(ws1, ws0))

如果您只是为了更传统的

而改变它
process (ws1, ws0)

我想它会有所帮助。


但我认为ws_combo是一个像

这样的信号
ws_combo = ws1&ws0;

所以

 process (ws_combo)

会更好。