VHDL过程

时间:2018-02-08 23:56:58

标签: 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;

    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;

关于这些代码;

Q1:Prescaler初始化为0,第4行,'if'条件,但表现得像一个循环,我是对的吗?我的意思是它的数量是500000.这是真的吗?如果这是真的,为什么?感谢'过程'或并行编码?

Q2:实际上,当释放键时,leds从9倒数到0.但是在代码中,我们声明case键(0)是'0'结果正在计数的时候。我错过了什么? 提前谢谢并原谅我的缺点。

1 个答案:

答案 0 :(得分:2)

Q1:第4行的if条件在clock_50信号的每个上升沿运行(由于前三行代码)。在预分频器初始化为零的情况下,第4-9行的if语句将每个时钟的预分频值增加1,直到它等于500000,此时它将重置为零。这将时钟信号的50 MHz周期(假设基于信号名称)转换为50,000,000 / 500,000或100 Hz。检查开关的更合理的时间范围,特别是如果你没有进行任何其他的去抖动。

Q2:当预分频器= 0(每500000个时钟中有一个)时,结果的值将递增1或递减1,包含在0和1023(即:10位二进制值),具体取决于是否key(0)值为'0'(增量)或'1'(减量)。

没有足够的信息来回答你的问题“但是在代码中,我们声明案例密钥(0)是'0'结果正在计数的时候。我缺少什么?”问题,但是很常见的事情是像交换机那样用一个上拉电阻“倒置”并且开关短路接地(因此一个打开的开关读为'1'而一个闭合的开关读为'0'),但没有看到其余的逻辑,我无法告诉你除了key(0)的值之外应该发生什么。查看其余逻辑(和原理图!)以查看键(0)信号的来源,以及当您按下按钮时该值是“0”还是“1”。