lcytms
发表于 2017-1-17 22:48:27
1434
因为共阳电路的公共开关是打开着的,它没有费电。
只有它是亮着的。它亮着,就显示它的七段码。
地址为0,送D0的七段码。地址为1,送D1的七段码。
地址为5,送D5的七段码。
这样的话呢,我们的地址只需要做一件事,就是定期地切换即可。
切换的速度是多少呢?
是不是我们50MHz可以直接带得动呢?
由于共阳电路的公共电路的切换开关它是受时间限制的,那个开关带功率的,所以说那个开关的速度并不是特别高。
我们现在的开发板上多少合适呢?
10k周,100us的周期,它带得动。
所以说,我们只需要做一个10k周的时钟,这个FPGA上用10k周的时钟来驱动,驱动这个地址的一个计数器。
lcytms
发表于 2017-1-17 22:51:31
1435
这个计数器就是从0数到5以后清零,接着数,012345,012345,周而复始,永远是这样的,012345,012345。
实际上这个计数器是一个模6的计数器,012345,它永远是模6的。
这个呢,就是第一个模块。
称之为counter的这个模块。
我们现在这个里面已经改变了,不用这个counter了。
只需要发送地址,它就是从0数到5,这样呢,这个单元我们应该会。
就是你写一个计数器,从0写到5,到了5以后,接着清零,这个我们应该会。
模6的一个计数器。
lcytms
发表于 2017-1-17 22:55:12
1436
接着,另外一个单元,因为每一个8字一共可以显示24个bit的二进制。
所以说,我们如果写成LED的一个Driver,这个Driver它可以把任何逻辑的二进制和十六进制显示出来。
显示总共多少位呢?
6个8字嘛,1个8字是4位,总共是四六二十四。
1个8字是显示4个bit,6盏灯,四六二十四。
这样的话呢,总共能显示23:0的一个二进制或者16进制的信号。
那么这个时候,我们就需要另外一个部件,就是mux这个部件。
mux这个部件,很简单。
地址为谁,选谁。
地址是0,是十万位,你就把23/22/21/20这4根线送出来。
1437
地址为1,然后把19/18/17/16送出来。
依次选4根。依次选4根。总共有6嘛,四六二十四。
每一个地址选4根线。这就是mux的功能。
注意,它是一个组合逻辑。
它是一个电平敏感的多路器。
这个多路器会不会写?
我们会写,是不是?
我们讨论了这么多。
最后,就是一个SEG的driver,实际上就是一个encoder,一个编码器。
这个编码器是起什么作用呢?
它是把4个bit的二进制或者16进制转成七段码,转成那个8字应该显示的字样,这个我们不需要同学去考虑了。
我直接发一个头文件给你,你只需要写一个case语句,用行为。
什么样的输入的数据,我要找到我们对应的ppt,就是跟这个开发板对应的,因为这个ppt是不对的。
这个是早期的ppt。看看能不能找得到。
找到我们做起来就方便一点。
没有找到。
我来修改一下。
lcytms
发表于 2017-1-17 23:00:01
1438
什么样的data,data是4个bit的,是从24根线上挑出来的。
它为什么样的值,我们就显示什么样的值。
它为数值的0,我们就显示七段码的0。
它为数值的1,我们就显示七段码的1。
你用case语句写,不难。
关键是七段码是什么样子的。
0应该是那个字段写成?
1应该是那个字段写成?
你不必想它,不必动脑筋。
我们有一个头文件发给你。
你只要引用头文件,只要在seg上面写个driver。
case的data是0,显示七段码的0。
case的data是1,显示七段码的1。
等等。
一直到15。
然后呢,我们实现这个的过程中,我们仍然是自上而下的,并且建议用攀岩法,并且要做验证。
如果说逐级验证时间不够,我们就直接做顶层的验证。
顶层验证的时候,我会给同学说一下,尽可能地我们要做一个monitor。
因为这个时候显示的时候呢,我们在这验证的过程中,verification,仿真的时候,我们要看七段码,就是seg_n嘛。
我们是很难分辨它显示什么值的嘛。
看不到嘛,对不对?
1439
边上一圈亮,abcde,究竟显示的是一个什么数字呢?
要猜老半天,还要估计一下,要算一下。
所以说我们在这写一个monitor,显示一个监视器。
监视器怎么写呢?
在testbench里面用一段行为写,也用case语句写。
Case(seg_n)是什么,那段ASCII就是什么。
写的时候呢,我会和同学说一下,或者说,我会请一个同学,帮助一个同学来做的时候呢,我会把它广播出来。
就是这段monitor怎么写,我会把它广播出来。
其它的问题,我相信我都已经交代了。
1440
这节课稍微长了10分钟,休息一下。
还是休息10分钟。
之后我们就可以开始做练习,我把ppt发给大家。
至于下板的操作,我会跟办公室联系。
休息
练习
lcytms
发表于 2017-1-17 23:02:32
1554
辅导练习。
新建文件夹LED_Driver。
打开新工程向导。
1555
新建LED_Driver.v文件。
lcytms
发表于 2017-1-17 23:16:45
本帖最后由 lcytms 于 2017-1-17 23:18 编辑
1556
新建led_counter.v文件。
1557
Ctrl+S、Ctrl+K。检查程序。
练习
lcytms
发表于 2017-1-17 23:19:06
1620
编写led_counter.v代码。Ctrl+S、Ctrl+K。检查程序。
lcytms
发表于 2017-1-17 23:20:18
1621
编写led_mux.v代码。
lcytms
发表于 2017-1-17 23:23:15
1622
编写led_mux.v代码。
1623
编写led_mux.v代码。
1624
编写led_mux.v代码。
1625
编写led_mux.v代码。
1626
编写led_mux.v代码。
Ctrl+S、Ctrl+K。
检查程序。
lcytms
发表于 2017-1-17 23:25:11
1627
编写led_encoder.v代码。