《小梅哥FPGA学习视频之路》 FPGA小白—强仔 1. 二选一选择器 lesson_1 2. 3_8译码器 lesson_2 (1)作业:4_16译码器 (2) 时序逻辑描述译码器。观察后仿真出现的乱码数据。 (3)modelsim中如何显示模拟波形 (4)三段式状态机的描述 3.计数器设计 lesson_3 (1)LED灯每500ms翻转一次,开发板或者FPGA的时钟频率是50Mhz或者100Mhz,周期分别是20ns或者10ns. (2)计数个数的计算:500_000_000ns/20ns=25_000_000 (3)modelsim中设置线条的颜色和时间显示单位。如果仿真时间很长,对于时钟信号,可以删除,不会影响进程。 (4)define的使用,`define clk_period 20 调用 always #( `clk_period/2 ) clk =~clk (5)parameter 和define在后仿真中的使用区别。使用parameter后仿真出现问题,报错。 4.Quartus II 中的LPM_counter IP核的调用 (1)FPGA的设计方法 ;原理图输入、Verilog HDL 设计方式、IP核输入方式 (2)repeat关键词在仿真中的使用 (3)IP核生成之后,可以把自动生成的.v文件直接作为顶层。也可以自己建立个文件,作为顶层文件。 (4)在仿真中,如果改变了对应的设计文件,只需要在Quartus II 中点击那个分析和综合按钮检查有无语法错误,然后在modelsim中library中找到work文件夹,点击对应改变的文件,右键recompile即可,最后点击restart和run_all即可看到波形。 (5)使用2个4位计数器,构成一个8位计数器 ,计数值最大是255.(计数器级联问题 )。实验中的153换成十六进制就是99,也就是BCD码。 (6)后仿真出现问题,前仿真没有问题。 (7)后仿真报错:Instantiation of 'counter_top' failed. The design unitwas not found 5.BDC码计数器 BCD码就是用4位二进制数来表示一位10进制数,这个十进制数字最大就是9.这个用途在数码管以及一些相关的显示应用中,很有用,同时节约很多FPGA内部的逻辑资源。当得到一个十进制数字之后,一般会按照这种方法去求出每位上的数字。 128/100=1; (128/10)%10=2; 128%10=8. 这样就可以求出每个位上要显示的数字,但是使用的资源是很多的。 (1)设计一个4位的BCD码计数器,在进位信号的到来后,计数自动加1,计数到9清零。 (2)通过计数器级联设计一个12位的BCD码计数器,计数的最大十进制数是999. (3)进位输出选择时序逻辑和组合逻辑2种,方式比较结果 误解1:这里的BCD码就是十进制数,所以仿真的时候就是用十六进制,而不是十进制,这一点一定要明白,用4位二进制数表示十进制数。 误解2:D触发器(寄存器)会有一拍的延迟,这个在实验中,计数的仿真中都有注释,于是使用了组合逻辑输出结果。 误解3:实验代码中,有2种判断cnt的方式,两种使用的资源数目不相同。 技巧总结:在modelsim中有几个快捷键 (1)ctrl+A是选中波形中所有的信号; (2)ctrl+G是自动将波形中的信号自动分组; (3)波形中信号路径过长,有一个按钮点击之后就只剩下信号名。在信号列表最下方,锁定测量工具的旁边。 6.阻塞赋值(=)和非阻塞赋值(<=) 区分阻塞和非阻塞赋值的区别,以及如何使用它们2者,完成我们的设计。 阻塞赋值就是:语句在执行的过程中,是按先后顺序执行的。 非阻塞赋值:代码在执行过程中,会同时并行执行。 一般都会建议:在always 块中尽可能的使用费阻塞赋值。 (1)代码验证这2个区别的过程中,提到了代码中加入延时的语句:#`tp.这条语句加入的是我们的源设计文件,和仿真中的延时后很大的区别。它在综合的时候,不会被综合成实际电路,但是在仿真的时候,会模拟代码被综合后实际电路中门结构的延时。 (2)如:D<=#`tp b+c; (3)观察当在使用阻塞赋值语句的时候,语句的先后顺序对于生成的电路影响。 7.状态机的理解 (1)状态的划分和设计 (2)1段式、2段式、3段式分别描述这个状态机 (3)状态机的编码类型:binary码、gray码、one_hot码 8.独立按键消抖——状态机进一步学习 机械按键就是按照机械原理制成,并且在按键按下和释放的时候,会有一定的抖动时间,这个时间是不超过20ms. 按键的一个触点接地,另一个触点接上拉电阻接电源,然后送给FPGA.按键按下就输出0,未按下就输出1. (1)状态设计: 未按下时是空闲状态IDLE。 按下抖动滤除Filter 按下稳定状态DOWN 释放抖动滤除状态Filter1(滤波) (2)边沿(下降沿)检测 使用2级寄存器分别寄存前后2次的采样值,判断出事下降沿还是上升沿。 (3)逻辑和按位的一些操作区别和注意 (4)仿真模型的概念理解 (5)task任务的使用,在仿真中实现代码的简洁 (6)随机数发生函数$random使用, (7)状态图 入手小梅哥开发板块一个礼拜了,学习进度按照自己的掌握情况,一边学习,一边积累技巧和经验。每次听到小梅哥录制的视频的开头和结尾的音乐,我就觉得自己充满了力量,发誓不拿下FPGA这座大山,至少也得挖下一半的山脚。我就是我,我知道自己有几斤几两,我更知道自己想要什么。 外号:小强、强仔、鸡汤小王子,对,它们都是我。
|