VHDL中的进程

VHDL中的进程,vhdl,Vhdl,我是VHDL的初学者,这里有一些关于我代码的问题 process(clock_50) begin if(clock_50'event and clock_50='1') if(prescaler<500000) then --prescaler to slow down and initialized by 0 prescaler<=prescaler+1; else prescaler<=0; end if; i

我是VHDL的初学者,这里有一些关于我代码的问题

process(clock_50)
begin
if(clock_50'event and clock_50='1') 
    if(prescaler<500000) then --prescaler to slow down and initialized by 0
       prescaler<=prescaler+1;
    else
       prescaler<=0;
    end if;

    if(prescaler=0) then
        case key(0) is --key representing button 
            when '0' =>  
                if(result<1023) then --result is a signal counter for 10 bit led value
                                     --and initialized by 0

                    result<=result+1;
                else
                    result<=0;
                end if;
            when '1' =>       
                if(result>0) then
                    result<=result-1; 
                else
                    result<=1023;
                end if;
       end case;
    end if;
end if; 
end process;
过程(时钟50)
开始
if(时钟50'事件和时钟50='1')

if(预分频器Q1:第4行上的if条件运行时钟_50信号的每个上升沿(由于前三行代码).当预分频器初始化为零时,第4-9行上的if语句将每时钟增加一个预分频器值,直到它等于500000,在这一点上它被重置回零。这将使时钟信号的50 MHz周期变为零(假设基于信号名)到50000000/500000或100赫兹。这是一个更合理的时间范围来检查开关,尤其是在您没有进行任何其他去抖动的情况下

问题2:当预分频器=0(每500000个时钟中有一个)时,结果值将递增1或递减1,根据键(0)值是“0”(递增)还是“1”(递减),以0和1023(即:10位二进制值)换行


没有足够的信息来回答您的“但在代码中,我们声明大小写键(0)是在“0”结果计数时。我缺少什么?”问题,但很常见的情况是,开关用上拉电阻器“反向”连接,开关对地短路(因此,打开的开关读取“1”,关闭的开关读取“0”),但如果没有看到其余的逻辑,我无法告诉您超出键(0)的值应该发生什么。查看其余的逻辑(和示意图!)以查看键(0)的位置信号来自,并且当您实际按下按钮时,值应该是“0”还是“1”。

我投票将此问题作为离题题结束,因为最好在@MadPhysical上结束。此问题不是CR的主题。我们不做“解释为什么我的代码工作”…或“解释为什么我的代码不工作”。甚至“帮助我使其工作”.CR真的只接受“这可行,但我认为它看起来很难看”缺少一个。@JHBonarius我认为这是非常简单和清楚的。与其把你的时间花在批评上,不如试着去帮助或问你在代码上没有什么。无论如何,我得到了我的答案都要感谢Charles。不,你倒过来了。我帮你是出于好意。不过,我也有一份全职工作和一个家庭,就像这里的许多其他人一样。我必须自己完成您的示例,并编写一个测试台来模拟您的代码。考虑到我们是免费的,这需要时间和相当多的努力。这就是为什么我们对问题有一个质量标准,请参阅有关提问的链接和其他帮助主题。感谢您的时间和考虑。我打赌现在就开始吧。