EDA课程设计、dsp课程设计

这篇博文来说说六月的EDA课程设计、dsp课程设计还有一些零零碎碎的想法。

本来是应该六月尾巴写这篇博文的,一不小心就拖到今天了Orz。

EDA课程设计要求

我们的EDA课程计使用的是学院实验室的Altera试验箱,核心板是Cyclone II EP2C5Q208C8芯片。

课程设计的要求如下:

应用Verilog HDL硬件描述语言,设计一个基于FPGA的空气净化器程序,模拟空气净化器的运行,其功能为:

1 实现5档出风的风力控制,使用控制电机模拟
2 实现当前空气质量的检测,通过设置拨码开关模拟
3 实现当前状态的指示与显示
4 实现睡眠设置功能,在指定的设置时间后风量输出调节至1档
5 实现连续运行时间的记录,并进行更换空气过滤网提示报警
6 具有自动模式和手动模式选择,自动模式根据检测到的空气质量自动调节风速,手动模式通过按键设置风速档位
7 实现时钟功能,并且根据设定的时间自动关机

代码我放在了Github上iszff/Air-cleaner

dsp课程设计要求

dsp课设使用的是TI2812的板子。

课程设计要求如下:

1.设计60hz限波器;
2.采集一段语音信号,加入60hz干扰;
3.对干扰信号进行滤波;
4.展示滤波效果。

EDA课设

这个课设主要有两个模块构成:控制模块,计时模块。另外就是需要考虑到优先级的问题。

最终我们做出的结果如下:

1.四个拨码SW1,2,3,4表示空气质量 ,会自动匹配灭灯的盏数(因为低电平是亮灯,三态情况下所有灯都亮,所以用灭灯表示了)。1111,1110,1100,1000,0000表示空气质量从好到差;自动匹配D0,1,2,3,4,5即电机档数由最弱一档到最强五档的情况为,10000,11000,11100,11110,11111。

2.四位按键(1,1)分十位(1,2)分个位(2,1)秒十位(2,2)秒个位,输入还有多长时间进入睡眠的时长量。(1,4)表示确认输入量,开始倒计时。还有多长时间进入睡眠由右边四位数码管显示。在倒计时即还没有进入睡眠之前仍然可以通过K7重新置数。进入睡眠之后,无论空气质量即拨码开关输入为何种情况,空气净化机自动为一档即只灭一盏灯。想要退出睡眠模式,需要使用K8全局复位。在全局复位后使用K7退出设置睡眠模式。

3.使用按键(1,4),(2,4),(3,4),(4,4)(4,3)分别表示手动控制电机从一档到五档。手动控制优先级高于自动控制,而且具有记录用户习惯的功能,即复位后不会清除手动控制,手动控制需要由用户通过按键(4,2)退出自定义模式。

4.正向记录运行时间,在程序中设定了开始运行10s后蜂鸣提醒更换滤网,该时间可以在程序中设定,在左边四位数码管显示运行时间记录。

代码的部分就不多说了,说说自己的小小感悟吧。Verilog HDL是一种硬件描述语言,硬件描述语言当然是来描述硬件的。这里就不得不提FPGA可编程逻辑门阵列了,他内部的硬件逻辑电路会因为我们的程序而改变,而不是出厂后就规定死的。这一点直接决定了Verilog和C语言的不同,Verilog是并行的,变量在一处改变,在实际电路中就是逻辑门的改变,这会导致整个程序运行结果的改变。所以编程中对同一个变量的操作不能放在不同的进程中,简单理解不能放到不同的always()里。一开始,我没有意识到这一点程序就会报错。后边在处理手动挡控制和进入睡眠模式的逻辑时也是费了一些功夫的。

另外我遇到两个小错误就在顶层例化部分的问题。我在顶层例化在模块中漏例化了拨码开关输入量,而此时编译器不报错,但拨码开关输入量无效,导致程序下载运行后没有出现预期效果。经历了一段非常艰难的调试过程。

还有一个就是顶层声明数码管的时候没有写八段数码管的位宽,导致数码管显示有问题,后来检查让RTL原理图时才找到原因。

不过最后还是实现了所有的功能,还是很开心的。

dsp课设

这个dsp课设可真是让人头秃啊,没用过dsp板子,一上来不知道从何处下手。

板子上自带了AIC23,可以采集语音并播放。需要对语音采样,通常情况下是44.1K的采样率,但这种情况下设计陷波滤波器难度就很大。好几万个点只滤去几个点….那滤波器的阶数自让就会很高。于是我选择用AIC23模块里最低的采样频率8021Hz,但即使这样,用matlab中FDAtool生成的滤波器阶数依然高达1000多阶。最后通过放宽对过渡带的要求才勉强生成了800多阶的滤波器。不过FDAtool生成的滤波器滤波效果并不好,于是我们使用了fir1()函数来生产滤波器,然后把滤波器系数导出为一个CCS中可以使用的头文件。

我们组的方案是想先采集语音,然后加入噪声,再滤波,用CCS中自带的graph工具通过看FFT后的频谱图来观察滤波结果。但是由于CCS中graph功能的FFT输入必须为整数。所以最终显示的结果很差。

这个dsp课设做的就有点失败Orz

题外话

又到了碎碎念的环节QAQ,科技博客迟早变成情感博客…

dsp课设安排在六月的前两个周,Verilog课设安排在后两个周,6月21号有一门《无线电技术与应用》考试,6月26号又《随机过程》的考试。

一上来的dsp课设就让人喘不过气来,哎,主要是自己太菜了。而且由于做课设,留给复习的时间就很少,整个人就很烦。EDA课设做的还算是顺利吧。

我们这两个课设都是小组合作的,小组合作的时候就会有人滑水,而且是全程滑水,我就有点生气,当然最底层的症结就是我自己的水平不行。之前和朋友开玩笑说,当我能做出课设的时候 ,我就是“科技博主”。但是当我做不出来的时候,我就想一些其他的,一些所谓的“哲学问题”吧,我在世界中的位置?我是谁?为什么和他人沟通这么难?我就成了一个“情感博主”。似乎有时候人是需靠摔锅给队友或者“这件事不是因为我做不好,而是因为我不做”这种虚幻的错觉才活得下去,哎,我必须不停的提醒自己“I am a powerful、independent person.‘’而且我老想着蜘蛛侠里边的台词‘’ If you are nothing without the suit, then you shouldn’t have it.‘’要是没有好队友就做不出课设,那这课设我本身也就做不出来Orz。

而且事情都堆在一起的时候,人就会很烦。人的心智带宽是有限的,一旦心智带宽被占得死死的时候,整个人就会很累,是没办法用多余的心智带宽来约束自己的。六月份几乎都睡得挺晚的,有时候,我想睡早点,但一躺到床上,脑子里就想一些有的没的,很难睡着。于是我都故意睡得晚一些,睡觉前哪怕是不做正事,只是看手机,我也要晚点睡觉。因为不想听见自己心中真正的声音就老想着用一些噪音来把它覆盖掉。而且我还故意欺骗自己:”偏执的保持健康的生活习惯这一点本身就很不健康。“Orz

这学期也算是过完了,似乎每个月都有事情在忙,三月、四月上在准备英语竞赛,四月下、五月开始学数学,考了三门试,六月有两门考试和俩课设。希望接下来自己能无所畏惧吧!