首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在VHDL块中使用“case”

如何在VHDL块中使用“case”
EN

Stack Overflow用户
提问于 2019-07-15 19:55:46
回答 1查看 99关注 0票数 0

我想重用一些代码块,为了使其更具可读性,我尝试将其放入块中。代码块用于将一些数据保存到一些缓冲区中。这还包括一条case语句。这个块在状态机的几个状态中使用。

代码语言:javascript
运行
复制
      someBlock: block
      begin
        destinationAddr <= destinationAddr_i;
        sourceAddr <= sourceAddr_i

        case type is
          when typeA =>
            someData <= dataA;
            dataLength <= 1;
          when typeB =>
            someData <= dataB;
            dataLength <= 2;
          when typeC =>
            someData <= dataC;
            dataLength <= 3;
        end case;

    end block;

代码只是我想要做的一个例子。我想把这段代码插入到我称之为someBlock的地方。如果我这样做,Sigasi和Vivado会抱怨案例陈述。(输入'case‘不匹配,应为'end')。我将块声明放在体系结构开始之后,而不是放在进程内。

这是块的错误使用方式吗?有没有其他方法可以创建一个可以操纵架构中所有信号的“函数”?

编辑: ok解决了这个问题。我以前试过使用一个过程,我把它放在架构中,但没有放在过程中。根据vivado的说法,这些信号是不可访问的,因为它不能确定不会有多个驱动程序(来自不同的进程)。如果我把这个过程放在进程中,它就能工作。

感谢大家的帮助:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-15 21:31:52

首先,type是保留字,不能用于对象名称。也不能使用基于检查对象类型的case语句。

它之所以抱怨,是因为Block语句的内部不是代码的连续区域。Case语句必须在顺序区域中使用,例如进程、函数或过程。此外,块不能被重用,它们只是为了作用域的目的而添加一个本地区域。

要使其可重用,您可能希望改用过程。这将在声明性区域中声明-即。在“开始”之前。下面是一个示例:

代码语言:javascript
运行
复制
  procedure mux(constant s    : in  std_logic; 
                constant bits : in  std_logic_vector(1 downto 0);
                signal   o    : out std_logic
               ) is  
  begin
    case s is
      when '1'    => o <= bits(1);
      when '0'    => o <= bits(0);
      when others => o <= 'X';    -- for simulation only
    end case;
  end procedure;
begin

  -- create a synchronous mux
  process(clk)
  begin
    if rising_edge(clk) then
      mux(s0, ipA, opA);
    end if;
  end process;

  -- you can call it outside a process also - this infers an async process, sensitive to s1, ipB, opB
  mux(s1, ipB, opB);

end architecture;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57039239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档