VHDL判断按键程序

来源:百度知道 编辑:UC知道 时间:2024/05/26 16:25:11
求助,四个按键S1,S2控制PC1和DR3,S3,S4控制PC2和DR4,0为按键触发,要求是当S1触发时PC1=0,DR3=0,从触发到非触发转变后DR3值不变为0,PC1=1,当S2触发时PC1=0,DR3=1,从触发到非触发转变后DR3值不变为1,PC1=1。时钟为CLK。我写的是 IF(S1='0')THEN
DR3<='0';
PC1<='0';
ELSE
DR3<='0';
PC1<='1';
END IF;
IF(S2='0')THEN
DR3<='1';
PC1<='0';
ELSE
DR3<='1';
PC1<='1';
END IF;这样写肯定是不对的,因为如果按下S2了,他在每次判断的时候先判断了S1是不是按下,没按下的话给一个状态,判断S2时候又改变一次状态,如果把S2嵌入S1里边仔细想想也没法实现,求高手帮给个想法也好,最好能帮忙看看怎么改这个程序

我觉得你说的状态是矛盾的 如果S1、S2同时为1 DR3<=?; PC1<=? 不管你S1,S2为什么状态 都只能输出一组DR3<=; PC1<= 如果你要4组DR3<=; PC1<=输出数据,你只能用S1、S2的四个状态来判定

signal a:std_logic_vector(1 downto 0);
a<=s1&s2;
if a="00" then
DR3<='0';
PC1<='0';
elsif a="01" then
--add yourself
elsif a="11" then
--add yourself
elsif a="00" then

end if;

我就不具体给你改了,只能提示一下,希望对你有所帮助,你可用状态机的形式写,另外要注意你的if语句的嵌套应用。