求问以下VHDL程序是不是错误的,还有译码器的输出低电平有效是什么意思
3个回答
展开全部
1. 内层IF语句中的ELSE分支有错误,同时少了一个END IF;。2. 外层IF语句少了ELSE分支。
应当将ELSE XOUT <= "11111011";改成下面3行:
ELSE XOUT <= "01111111";
END IF;
ELSE XOUT <= (OTHERS => '1');
实际上,上述描述采用IF语句是不合适的,因为3-8译码器不必采用优先权结构,而用CASE语句才是恰当的行为描述。
用CASE语句代替内层IF语句的行为描述:
IF EN='1' THEN
CASE DIN IS
WHEN "111" => XOUT <= "11111110";
WHEN "110" => XOUT <= "11111101";
WHEN "101" => XOUT <= "11111011";
WHEN "100" => XOUT <= "11110111";
WHEN "011" => XOUT <= "11101111";
WHEN "010" => XOUT <= "11011111";
WHEN "001" => XOUT <= "10111111";
WHEN "000" => XOUT <= "01111111";
WHEN OTHERS => XOUT <= (OTHERS => '1');
END CASE;
ELSE XOUT <= (OTHERS => '1');
END IF;
至于低电平有效,你可以看成是逻辑0有效。译码器在译码时,只可能对一个二进制码(你的描述中是din)进行译码,因此只可能有一个输出端有效。哪个输出端有效,那个就是低电平(逻辑0),其余的都是高电平(逻辑1)。
应当将ELSE XOUT <= "11111011";改成下面3行:
ELSE XOUT <= "01111111";
END IF;
ELSE XOUT <= (OTHERS => '1');
实际上,上述描述采用IF语句是不合适的,因为3-8译码器不必采用优先权结构,而用CASE语句才是恰当的行为描述。
用CASE语句代替内层IF语句的行为描述:
IF EN='1' THEN
CASE DIN IS
WHEN "111" => XOUT <= "11111110";
WHEN "110" => XOUT <= "11111101";
WHEN "101" => XOUT <= "11111011";
WHEN "100" => XOUT <= "11110111";
WHEN "011" => XOUT <= "11101111";
WHEN "010" => XOUT <= "11011111";
WHEN "001" => XOUT <= "10111111";
WHEN "000" => XOUT <= "01111111";
WHEN OTHERS => XOUT <= (OTHERS => '1');
END CASE;
ELSE XOUT <= (OTHERS => '1');
END IF;
至于低电平有效,你可以看成是逻辑0有效。译码器在译码时,只可能对一个二进制码(你的描述中是din)进行译码,因此只可能有一个输出端有效。哪个输出端有效,那个就是低电平(逻辑0),其余的都是高电平(逻辑1)。
更多追问追答
追问
在吗
追答
如果输入的待译编码本身就是反码的话,“111”就是“000”的反码。题目中没有讲明输入的是反码还是原码,从具体描述来看,输入的是反码。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询