第二次集电课笔记

状态机的写法

状态机是用来控制整个运行组件,用来“喊节拍”,告诉什么时候做什么事情。

cnt可以看作是状态机,flag也可以看成是状态机。状态机可以不只有一个。

写法:
写成两部分,一部分是时序逻辑D触发器,另一部分是组合逻辑。如下图:
在这里插入图片描述

  • D触发器①的输入是n_state,也就是 next state 的意思,输出是c_state,也就是current state的意思。
  • 组合逻辑部分②的作用就是告诉在什么情况下,n_state 的值是什么,也就是下一个状态是什么,也就是下一个时钟沿之后的状态是什么。

关于第二次作业强调的地方

要知道,实际中,接收端B和发送端A的时钟可能是不一样的,两个地方的clk_40k也是有不同的。 所以每一个周期都会有些误差。

所以,我们设定:让串口一帧只能发8位,要保证一帧之内累计的误差不会太大;串口发送速度不快。通过这两种方法保证不出错。

同步器

而bit_in 和接收端的 clk_40k是没有什么时序关系的,是会有误差存在的,边沿可能是不对齐的,异步的,(这里老师说了两个名词,叫不满足setup 和 hold 时间,说太快了没怎么听清楚,反正就这个意思)所以要使用一个几个D触发器连接在一起组成的同步器,如下图:

(依然是十分清晰hhh)
在这里插入图片描述
最左边输入的信号就是bit_in,一般经过两个D触发器后得到的输出(我又用蓝色笔标出来了,打勾的地方)就和时钟同步的比较好了。就可以让第一个D出来的信号叫delay_1,第二个叫delay_2,delay_2就比较好用了。

关于接收端的采样

我在自己做的时候就已经分析过了,接收端采样应该在中点处,防止误码,但是……在下确实没想到,这世界上还有各种各样的其他方式可以产生误码 -_-

老师举的例子:

每个比特周期之中中可能会有毛刺存在,如果毛刺恰好在中点,那么也会发生误码。所以一个周期里应该多取样几次,取奇数次值,然后少数服从多数。
比如,设三个采样值sample_0 , sample_1 , sample_2 , 在不同位置采三次。

老师讲的题目分析

其实跟在下先前分析的差不了太多,主要就是加上了上面注意的几点,一些时序要变动了一下,基本思想还是一样的。而且,不像我之前做的那样用了一个 cnt 从0一直计数到399,老师用了两个计数器clk_cnt 和 bit_cnt ,其中 clk_cnt 是用来

下面是手快截了某些大佬的代码

这次老师没有示范写代码,我头有点秃……

状态机范例:
在这里插入图片描述
这是别人产生接受开始信号判断起始位下降沿的代码:
在这里插入图片描述

自己写的

老师说要一个小时完活……可是在下果然不负众望的写了一个半小时,编译纠错又半个小时……

主要是采样的三个值怎么判断上卡住了,我暂时想不出什么聪明的方法,就用一些异或、与、或逻辑 这样判断了一下……反正出结果了(叉腰)。

上图!
在这里插入图片描述
这次虽然没有在调试上花很长时间,但是还是要注意一个地方,simulate的时候,一定要把 enable optimizer 的对勾√给点掉!不然可一个信号都出不来。

第二天的改进

昨天晚上写完上面这些累得不行,几乎十二点了。躺了一会突然,突突然!想到了更好的判断采样的方法!我个傻子嘛!

是这样:
在这里插入图片描述
一共有三个采样值嘛,第一步,判断任意两个是不是相等,如果相等就肯定是这个值!如果不相等,就一定是第三个的值!(好像也没有第二步,就这么着吧)

这么这么简单的逻辑,我写了那么一堆,还用了逻辑与、逻辑或还有异或……好!改完了开心!

然后跟队友交流了一下,发现自己发送端的程序写的不够高级啊,刚开始我是这样写的:
……原来的被我删掉了……反正就是根据bit_cnt的值,手动给bit_out赋值,虽然很清晰明了,但是不太高级啊……

然后我看了队友的是用移位器做的,十分高级!
下面是我改了之后的,自己感觉不是很简洁,有点……乱,先这样,想想再怎么改
在这里插入图片描述
乱的原因其实是因为如果不这么复杂,就会导致din_temp在第一个bit_cnt里面赋值两次,导致后面整体的出错。

然后我又改了改,根据第一次做的crc的思路,让din_temp跟着send_start 接受赋值:这次应该可以了吧。
在这里插入图片描述

好,就这样!

老师的点评

为什么单独把这个列出来呢?

因为在下认为,学习过程中,得到反馈真是太重要了!!!尤其是大学啊,老师的鼓励比啥都重要!!!

老师也鼓励在下了!!!(至少我认为是这样的)

虽然是先指出一点错误,hhh,果然人不能偷懒,我觉得题目只说了发一次就可以,所以就没把计数器清零……hhh,马上改。

然后,我又问还有吗(其实就是想被夸一夸,夸夸整洁也行啊),老师说“别的地方都很好” !!!

我圆满了。不枉在下花了这么长时间。^ _ ^

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值