咨询个VHDL CASE语句公共分支的问题

[复制链接]
3294|11
 楼主| xdwumin 发表于 2012-2-22 12:48 | 显示全部楼层 |阅读模式
像这样写:

case state is
when x"0" =>
when x"1" =>
when x"2" =>
  a <= '1';
when x"3" =>
  a <= '0';
when others =>
  a <= '0';
end case;

和下面的是等价的吗?

case state is
when x"0" =>
  a <= '1';
when x"1" =>
  a <= '1';
when x"2" =>
  a <= '1';
when x"3" =>
  a <= '0';
when others =>
  a <= '0';
end case;
GoldSunMonkey 发表于 2012-2-22 13:18 | 显示全部楼层
明显第一种是错误的表达方式

因为case的语法是:
CASE语句的语法结构如下:

CASE 表达式 IS

       WHEN 条件表达式 => 顺序执行语句;

       WHEN 条件表达式 => 顺序执行语句;

       ……

END CASE
GoldSunMonkey 发表于 2012-2-22 13:22 | 显示全部楼层
你想写的方式是:
PROCESS(stemp) BEGIN
CASE stemp IS
WHEN "0000" => c <= "100";
--4
WHEN "0001"|"0010"|"0100"|"1000" => c <= "011";
--3
WHEN "0011"|"0101"|"1001"|"0110"|"1010"|"1100" => c <= "010"; --2
WHEN "0111"|"1011"|"1101"|"1110" => c <= "001"; --1
WHEN "1111" => c <= "000"; -- 0;
WHEN OTHERS => c <= "000";
END CASE;
bityoung 发表于 2012-2-22 15:33 | 显示全部楼层
我觉得两种写法语法上应该没错误吧?但是,第一种写法当state=X"0"时,会导致a得到一个不确定值!而第二种写法不会有这种情况吧。
GoldSunMonkey 发表于 2012-2-22 17:33 | 显示全部楼层
第一种写法明显有错。

顺序执行语句在哪里?
bityoung 发表于 2012-2-22 19:41 | 显示全部楼层
但是第一种我试过了,综合不出错啊!不知道猴哥说的错误是不是除语法之外的错误呢?
bityoung 发表于 2012-2-22 21:44 | 显示全部楼层
7# Backkom80 怎么?我说的哪里不对了啊?请指教!呵呵
lirfv 发表于 2012-3-25 12:37 | 显示全部楼层
路过               
学习额
明空 发表于 2012-3-25 23:09 | 显示全部楼层
第一种写法when x"0" =>相当执行空操作,也就是a保持原值,不一定是等于1
coco11 发表于 2012-3-26 12:47 | 显示全部楼层
慢慢看。
diny 发表于 2012-3-26 22:48 | 显示全部楼层
:handshake
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

71

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部