当前位置:  开发笔记 > 编程语言 > 正文

如果句子与各种值相比较,我如何构建?

如何解决《如果句子与各种值相比较,我如何构建?》经验,为你挑选了1个好方法。

我怎样才能if更好地写出这种陈述条件?

if ((data_in(8 downto 1)=x"70") or (data_in(8 downto 1)=x"69") or 
    (data_in(8 downto 1)=x"72") or (data_in(8 downto 1)=x"7A") or
    (data_in(8 downto 1)=x"6B") or (data_in(8 downto 1)=x"73") or
    (data_in(8 downto 1)=x"74") or (data_in(8 downto 1)=x"6C") or
    (data_in(8 downto 1)=x"75") or (data_in(8 downto 1)=x"7D")) then
      data_make_code <= data_in (8 downto 1); -- enter key to buffer
      wrong_data <='0';
      cnt_bit :=0;
      -- if valid key then
      current_state <= break_code_receive; 
elsif
 ...
end if;

Morten Zilme.. 6

一个case语句可以使用多个值进行比较,并且others该部分case可以被用来作为"else",如:

case data_in(8 downto 1) is
  when x"70" | x"69" | x"72" | x"7A" | x"6B" |
       x"73" | x"74" | x"6C" | x"75" | x"7D" =>
    ...  -- if part of code
  when others =>
    ...  -- else part of code
end case;

另一种方法是使用带有值的arrayof std_logic_vector,然后创建一个函数,该函数可以确定该data_in值是否等于数组中的任何一个值.该typefunction然后声明可以是在architectureprocess声明部分.VHDL-2008中的代码可能如下所示:

type slv_array is array (natural range <>) of std_logic_vector;

function in_array(val : std_logic_vector; set : slv_array) return boolean is
begin
  for idx in set'range loop
    if val = set(idx) then
      return TRUE;
    end if;
  end loop;
  return FALSE;
end function;

...

if in_array(data_in, (x"70", x"69", x"72", x"7A", x"6B", 
                      x"73", x"74", x"6C", x"75", x"7D")) then
  ...  -- if part of code
else
  ...  -- else part of code
end if;

替代方法需要一些声明,但更通用.



1> Morten Zilme..:

一个case语句可以使用多个值进行比较,并且others该部分case可以被用来作为"else",如:

case data_in(8 downto 1) is
  when x"70" | x"69" | x"72" | x"7A" | x"6B" |
       x"73" | x"74" | x"6C" | x"75" | x"7D" =>
    ...  -- if part of code
  when others =>
    ...  -- else part of code
end case;

另一种方法是使用带有值的arrayof std_logic_vector,然后创建一个函数,该函数可以确定该data_in值是否等于数组中的任何一个值.该typefunction然后声明可以是在architectureprocess声明部分.VHDL-2008中的代码可能如下所示:

type slv_array is array (natural range <>) of std_logic_vector;

function in_array(val : std_logic_vector; set : slv_array) return boolean is
begin
  for idx in set'range loop
    if val = set(idx) then
      return TRUE;
    end if;
  end loop;
  return FALSE;
end function;

...

if in_array(data_in, (x"70", x"69", x"72", x"7A", x"6B", 
                      x"73", x"74", x"6C", x"75", x"7D")) then
  ...  -- if part of code
else
  ...  -- else part of code
end if;

替代方法需要一些声明,但更通用.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有