1

我正在编写一个具有通用参数的状态机,并且某些状态的存在取决于此。由于我在枚举之类的东西中定义了我的状态(不知道它的 vhdl 术语),我想知道我是否可以根据泛型来定义这个枚举,有点像这样:

generic(x: bool);  -- in the entity
....

architecture ...
    if x then generate
        type states_t is (State1, State2, State3ifX)
    else
        type states_t is (State1, State2)
    end generate;
    variable state : states_t;
begin
   case state is
       ....
       if x then generate
           when State3ifX =>
                ...
       end if;
   end case
end architecture;

我是否必须承担自重(状态 3 的逻辑,掉入其中的危险(在我的情况下无关紧要,因为我不希望有辐射),额外的一点,因为ceil(ld(3))=2 > ld(2)=1),或者是否有可能去除不必要的状态?

(在我的情况下,有几个状态可以被剥离,但是单独的架构不值得付出努力)

4

3 回答 3

2

您可以在可选地使用泛型生成的过程中定义“状态”类型。请参阅下面的参考示例:

entity blabla is
   generic(sel: std_logic := '0');
port(
...

architecture Behavioral of blabla is
begin

q1: if sel='0' generate
p: process(clk)
    type t_state is (s1, s2, s3);
    variable state: t_state;
begin
    if rising_edge(clk) then
       ...
    end if;
end process;
end generate;

q2: if sel='1' generate
p: process(clk)
    type t_state is (s1, s2);
    variable state: t_state;
begin
    if rising_edge(clk) then
        ...
    end if;
end process;
end generate;
于 2013-05-30T17:12:48.543 回答
1

我想不出一种方法来实现你所需要的。

从好的方面来说,您不必担心必须“承担自重(状态 3 的逻辑,陷入其中的危险)”不是您需要担心的 - 合成器将优化逻辑,因此状态寄存器只会对于您实际可以到达的状态,它需要尽可能大。

于 2013-05-31T09:39:43.903 回答
0

我知道它是一个旧的踏板,但仍然在谷歌上很受欢迎,所以我添加了我是如何做到的

标签:如果 x 生成

声明 <- 将类型、信号和属性放在这里!!!!

开始

ur code

结束生成标签;

您可能需要考虑第二种架构,甚至更简单的只是一个不同的实体 - 只是另一个名称略有不同的 vhd 文件(如 _x1,然后是 _x2)

我发现“通用系统”在更高级的情况下并不实用(要编写很多臃肿的代码),然后您可能会使用不同的合成器,因此具有一个实体的两个架构可能无法正常工作,内部带有 decalrations 的生成可能无法正常工作...... . 我会为此创建不同的 vhd - 它适用于所有情况)

干杯

于 2016-10-28T10:26:43.640 回答