该系类博客序言和资源简介可浏览该博客:PREFACE FPGA经典案例序言 快速了解该系列博客的内容与可用 资源。
目录
1 案例引导
1.1 硬件设计初窥
1.2 逻辑设计初窥
2 模块级逻辑设计
2.1 时钟分频模块
2.2 数码管译码模块
2.3 主逻辑运行模块
3 系统逻辑设计
4 硬件设计
4.1 电源接口电路设计
4.2 电源系统设计
4.3 时钟设计
4.4 JTAG端口和FPGA配置电路设计
4.5 FPGA芯片的电源引脚
4.6 A方向信 灯电路
4.7 B方向信 灯电路
4.8 复位电路
4.9 PCB设计图
4.10 实物图
5 实物验证
5.1 管脚分配
5.2 实物验证
资料合集包传送门:
1 案例引导
1.1 硬件设计初窥
如图所示是实际生活中的一个十字路口,看这个图是作为交通灯硬件设计的输入,说明白一点就是需要哪些元器件。
图中的设计是为了让每个方向的人和车辆都能看到信 灯,所以红绿黄灯的数量加上人行道上的灯总共是48个灯。那么在实际设计中真的要在板卡上设计那么多灯吗显然是不需要的,通过观察可以发现只要是同一方向上的灯,所显示的状态都是一样的。所以实际设计时按A方向和B方向把灯分为两组即可,同样显示倒计时的数码管也是同样的道理。
于是可以得出初步的硬件设计框图,如下:
在A方向和B方向上分别由红、绿、黄、左转四个信 灯和两个数码管组成。这里解释一下为什么有左转信 灯,在一般的路口只有红、绿、黄三个信 灯,当该方向上的绿灯亮时车是可以直行和左转的,但是在一些大型路口,车流量大,所以一般将左转单独进行时间控制,做这个功能是为了让交通灯功能更完备,提高设计的通用性。
到这里初步可以确定硬件设计需要的东西,但是具体硬件设计在这里是得不出结论的,因为在没有进行FPGA/CPLD逻辑设计之前,是很难评估需要多少资源来进行设计的,所以芯片选型这一步还要往后放一放。
1.2 逻辑设计初窥
虽然硬件设计尚未定稿,但这并不妨碍进行逻辑设计,这就是FPGA/CPLD设计的优点。可以在逻辑设计仿真验证完毕之后,再进行硬件电路的设计,这样可以大大降低先期考虑不充分,导致设计的硬件不能使用或者芯片选型不合理所带来的风险。
结合需要驱动外围设备,以及系统逻辑。可以大致推断出逻辑设计的框图如下:
到这里得不出详细的逻辑设计输入,但是可以大致了解到设计分为这几个部分,在接下来的工作里将这几个部分分别实现就能完成设计。
2 模块级逻辑设计
2.1 时钟分频模块
时钟分频,为什么要进行时钟分频呢为信 灯在进行倒计时是按秒信 倒计时的,而FPGA/CPLD一般采用晶振或者一些频率较高的信 源来提供时钟,所以需要对高频时钟进行分频来得到需要的秒信 。
时钟分频的原理很简单,而且对于成偶数被时钟关系的分频也十分容易实现。
举个例子:如果的主时钟12hz,如何来生成1hz的秒信 呢简单只需要用计数器每计到5个数时对一个信 进行取反,就刚好能生成的秒信 。
如下为时钟分频的代码,工程位于Traffic_lightmodule_testCLK_div中。
仿真结果如下图:
如果把clk看作是12hz的时钟,那么clk_1s便是秒信 了。可以看出CLK每12个周期CLK_1S完成了自己的一个周期。
如果主时钟的频率更高呢么获得秒信 呢简单只要加大计数的周期就可以了,计数的个数可以通过如下的公式获得:
N = fclk /2 – 1
N:分频系数 (即程序中div_parameter的值) fclk :主时钟的频率
2.2 数码管译码模块
这里指的数码管就是最常见的七段显示数码管,如图:
为什么叫七段,因为可以看出它是由7段小灯组成的,通过点亮小灯的组合不同可以组成不同的文字。管脚图如下:
对于交通灯来讲,单个的只需要数码管显示0~9这10个数字,按照管脚状态的组合,可以得到如下的数字管脚组合组合表,就称它为译码表(小数点忽略,该设计不涉及小数点的使用):
图中用‘1’表示该关键状态为高,点亮该管脚对应的段码;‘0’则相反;
数字 管脚 |
a |
b |
c |
d |
e |
f |
g |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
2 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
3 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
4 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
5 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
6 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
7 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
8 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
9 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
到这里就可以进行数码管译码模块的程序编写了,如下便是数码管的译码模块的代码了,该例程位于Traffic_lightmodule_testNixie_tube中。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!