0

我有以下代码:

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. 预期的关键字结尾(对于 when “10” 行)
  3. 预期设计单元声明(与关键字错误在同一行)

解决了问题

4

2 回答 2

0

你想用std_logic_vector'这条线来实现什么?

process (std_logic_vector'(ws1, ws0))

如果您只是将其更改为更传统的

process (ws1, ws0)

我想这会有所帮助。


但我认为ws_combo是一个信号

ws_combo = ws1&ws0;

所以

 process (ws_combo)

会更好。

于 2013-04-26T10:55:42.543 回答
0

就目前而言,这有许多问题,主要是相当基本的语法。

尽管您的意思似乎是 ws0 和 ws1 的组合被视为ws_combo,但您没有做任何事情来告诉合成器,因此它被视为ws_combo简单的未定义。

至少据我所知,您不能像以前那样在过程敏感度列表中组合信号。敏感度列表是告诉这个过程响应什么外部信号,仅此而已。

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

您没有internal_sineinternal_tri或的定义internal_sqr。在不知道wave_out.

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

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;

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

于 2013-04-25T00:04:16.843 回答