时间:2024-07-23 来源:网络搜集 关于我们 0
我们知道FPGA所实现的电路都是数字电路,而数字电路可以分成两大类,一类叫组合逻辑电路,另一类叫做时序逻辑电路。
我们最好简单来回顾一下组合逻辑和时序逻辑的定义。
组合逻辑电路
若一个逻辑电路在任何时刻产生的稳定输出信号仅仅取决于该时刻的输入信号,而与过去的输入信号无关,即与输入信号作用前的电路状态无关,则称该电路为组合逻辑电路。说人话就是:凡是不存在记忆元件的数字电路都可以称为组合逻辑电路,就比如说由各种门电路组合而成的就可以称为组合逻辑电路。
时序逻辑电路
时序逻辑电路是指任意时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态的数字电路。说人话就是:时序逻辑电路包含了记忆元件,比如各式各样的锁存器或触发器,通常时序逻辑电路还包含时钟和复位,有时钟的时序逻辑称为同步时序逻辑电路。
既然FPGA所实现的电路可以简单分为组合逻辑电路和时序逻辑电路,那我们就可以简单地只用两种结构来分别描述组合逻辑和时序逻辑。
组合逻辑可以用连续赋值语句assign来描述:
上述语句描述的是一个三态buffer,意思是如果enable为1那么output=input,否则output输出高阻态,显然它是一个组合逻辑。
时序逻辑可以always语句来描述:
可以看到,always语句是在描述一个寄存器led_cnt的行为,所以它是一个时序逻辑。上述代码实现的是计数器的功能,复位时清零,复位释放后在每个时钟的上升沿开始计数,直到达到10000后再度归零,如此不断往复,实际上这段代码实现了分频的功能。
如果再配合如下这段代码,我们就可以实现LED闪烁的效果。
代码非常简单,相信有一定编程语言基础的人一看便知。
如何你已经掌握了这两个语句,那么恭喜你,你已经是一个会写FPGA的工程师。