FPGA时序逻辑要点总结

in WhereIN3 years ago

FPGA时序逻辑要点总结

💎时序逻辑都是基于触发器的,所以最基本的时序电路就是触发器,而我们最常用的就是D触发器。所谓的时序电路使用的是带时钟的always块always@(posedge clk),并且使用非阻塞赋值。需要注意的是一定不要忘了posedge,因为编译器查不出错误,但结果肯定会出问题。
💎触发器可以加一个复位信号,用来对触发器进行重置。可以是同步复位,也可以是异步复位。同步复位需要有时钟参与触发,而异步复位不需要。
💎触发器的复位值不一定是0,根据需要可以复位成其它值。
💎同步复位可以说reset,rst等,异步复位可以说areset,arst等,而低电平复位可以写成在其后面加个n,比如resetn。
💎有一种触发器是字节使能的触发器,可以选择对高8位操作或低8位操作,这使我想到了一些有字节使能的总线的操作。
💎锁存器,非触发器,但有存储功能。通常在FPGA里出现锁存器往往意味着错误。一般是组合逻辑里if…else或case不全面,除非故意,否则一定要避免。
💎或许跟编译器有关,有时always块里的被赋值变量并未声明成reg,但并未报错。
💎【注意】要学会分析时序电路的特性方程,除了输入变量外,还有一个输入变量就是current Q(现态),然后它们的输出就是next Q(次态)。
💎JK的特性方程,由D触发器构成就是JQ'+K'Q。它的特点是全0保持,全1翻转,J为1置1,K为1置0。
💎上升沿或下降沿检测,其实简单的说将输入经触发器打一拍后,也就是说当前的输入会延迟一个时钟后输出,那么再与下一个时钟的输入比较(与运算),比如输出为高,输入为低,表示产生了下降沿,而输出为低,输入为高,表示产生了上升沿。但要注意这时边沿信号应该没有延迟,因为只打了一拍,如果打两拍的话,也就是多用一个寄存器,比较两个寄存器的输出,那么边沿信号实际延迟了一拍。所以关于节拍的问题,组合逻辑不会产生延迟,而一个触发器会产生一个节拍的延迟。
💎行为模型,一位加法器是assign {c,sum}=a+b,n位加法器也是这样,这就是行为模型,用好行为模型,事半功倍。
💎【重要】双边沿触发器,有两种思路,①同时用上升沿触发器和下降沿触发器,clk高电平时上升沿触发器输出,clk低电平下降沿触发器输出。其实开始没怎么理解,后来想想是没理解触发器,没理解打一拍的含义,其实时钟上升沿到来时,q就更新为当前的d了,只不过这个值至少保持一个时钟周期,所以如果在此期间有新的值产生了,那么新值至少得等1个时钟周期才能更新,所以叫打一拍,〖可笑!我原先的理解是时钟边沿采集,一个时钟后更新!〗这样上面的思路就理解了。整体的效果是数据输出与d滞后半个时钟周期。②这种思路应该算是算法,将原信号分成两个信号p<=d^n(上升沿触发)与n<=d^p(下降沿触发),那么q=p^n(其实根据d等于d^n^n的性质)。〖哎,好难!〗
💎然后更进一步的时序电路就是计数器,二进制,十进制等,N进制也可以(有了行为模型,可以高枕无忧了)。计数器可以加一个使能端来对计数进行控制。比如10进制级联成100进制。我原先的思路是对时钟进行分频,来控制计时器的时钟。但是我后来看到了在顶层利用enable信号进行计数控制也可以,不过计数器子模块的enable输入在顶层却成了输出。〖有趣!〗
💎然后就是移位寄存器,含有使能,复位和装载。这种移位寄存器一般使用移位操作运算符<<或>>完成。但有一种循环移位寄存器,采样位拼接的方法,如{a[0],[7:1]}为循环右移,{a[6:0],a[7]}为循环左移。
💎【有趣】有一种寄存器是线性反馈移位寄存器。通过将移位寄存器的某些输入替换为前级寄存器输出与移位寄存器的输出的异或。线性移位寄存器有很多应用,这里仅做说明。
💎【重要】串并转换,{in,q[7:1]},q为寄存器。一个时钟更新一次。
💎查找表,查找表是一个有寄存器(触发器)加多路选择器的结构,其实是FPGA构成逻辑电路的基础。就是将输入的变量看做地址,将逻辑结果看做存储在该地址下的一个值,事先将所有的可能的值存入,根据不同的地址输出不同的逻辑值。不过有的存储器结构竟然采用移位寄存器,〖不理解〗。
💎【有趣】自动细胞机,rule90,一个Vector,其每个元素的值由其相邻元素的异或决定,以q[7:0]为例,则规定q[8]和q[-1]为0。那么初始值为十进制数的90,故名。可以用来构成谢尔宾斯基三角形(Sierpiński triangle)。听说有很多用处,这里不多说。
💎【有趣】还有一种rule110,其元素值由左边的元素,自身,右边的元素共同决定,以q[7:0]为例,则规定q[8]和q[-1]为0,则任意一个元素的值是(~L)C+(~C)R+LC(~R),其特性是图灵完备性,很深奥。
💎【有趣】有一种二维细胞自动机,叫康威生命游戏,有意思。说的是周围元素的值≤1,它的值为0;如果为2,它不变;如果为3,它为1;如果为≥4,它为0。或许是一种细胞繁殖模型。从它得到的体会是一个always块里可以有多个循环,而一个for循环里面也可以有if…else判断语句。
💎算术移位寄存器,右移保留符号位,但符号位也被移入到下一位,左移和普通的一样。由于是英文的,当时没读明白,以为左移也保留符号位了。😅

嗯,总而言之,对于触发器,节拍,循环,常用的电路,移位寄存器,计数器,锁存器又有了一定认识,幸甚至哉!

[WhereIn Android] (http://www.wherein.io)

Sort:  

这看起来真难!shop

[WhereIn Android] (http://www.wherein.io)

难的还在后面,😂

[WhereIn Android] (http://www.wherein.io)

谢谢

[WhereIn Android] (http://www.wherein.io)

你好鸭,lucienyong!

@boylikegirl给您叫了一份外卖!

南瓜糕点

吃饱了吗?跟我猜拳吧! 石头,剪刀,布~

如果您对我的服务满意,请不要吝啬您的点赞~

厉害了😂😂

[WhereIn Android] (http://www.wherein.io)

谢谢,😀

[WhereIn Android] (http://www.wherein.io)

This post has been rewarded by the Steem Community Curation Project #wherein

昨天明明把手机放在桌上,今天又找不到了 ( ˘︹˘ )
咦?你是谁?我又是谁?
加入我们微信群没?还没的话赶快加我们瓜子老板。很帅的 iguozi <(^,^)>

Ha recibido un voto a favor de la comunidad WHEREIN, impulsada por STEEMIT INC. Gracias por usar WHEREIN

Terimakasih Sudah Menggunakan WhereIn, Postingan Anda Terpilih Untuk Mendapatkan Upvote Dari WhereIn Dan Di Dukung Oleh Steemit.inc !

Coin Marketplace

STEEM 0.16
TRX 0.15
JST 0.028
BTC 54960.01
ETH 2314.51
USDT 1.00
SBD 2.32