fpga verilog语法篇 1基本概念
本节继续分享一些基本概念,
其中模块是核心,
其他的几个: 综合,输入输出端口,时序,例化... 都是说的模块的特性.
verilog的工程里面,是一个一个的模块组成的.
比如,之前提到的,温度采集系统.
就可以设计三个核心模块,
1,ad转换模块;
2,温度值处理模块;
3,温度值输出模块;
模块分为可以综合,和不可以综合的.
什么是综合?
如果verilog的模块所描述的功能,是可以通过fpga内部的硬件搭建,那么就是可以综合的,否则就是不可以综合的.
比如上面的,
1,ad转换模块; (可以综合)
2,温度值处理模块; (可以综合)
3,温度值输出模块; (可以综合)
除了这三个模块,我们还需要对每个模块设计一个测试模块(tb模块),
测试模块里面就有时钟,是调用fpga官方函数实现的,这个时钟就是不可以综合的.
模块总会有输入和输出端口.
输入端口是为了进行数据的输入,
输出端口是为了让处理后的数据输出,提供给下一个模块使用,或者显示出来.
输入输出端口是有固定类型的.
输出输出的设计很重要,
因为verilog程序,最终编写出来,都是流水线式的工作,
比如,还是采集温度的系统.
流水线上就有三个环节(模块)
1,ad转换
2,数据处理
3,温度值输出
这三个环节是配合的,如何才能默契的配合,
需要时序,我们按照相同的步调.
或者,需要标志,第一个模块工作完成之后,输出一个脉冲,提醒第二个模块,
第二个模块工作完成之后,输出一个脉冲,"叫醒"第三个模块工作...
如果不一致,就会乱掉,流水线上就会产生堆积,或者提前处理不完整数据,这样整个系统就会崩溃.
既然大部分fpga系统都是按照流水线式进行工作的,
那么时序就很重要.
上面提到的脉冲和时序,都是输入输出端口中的某个变量.
所以,好的输入输出端口,可以让系统更加稳定.
例化是什么?
我们设计了三个模块,
1,ad转换
2,数据处理
3,温度值输出
这里只是相当于模具,如果想要三个模块配合运行起来,
就需要设计一个主模块.
在主模块中,例化上面三个模块,
在例化的时候,传入的变量是真实的数据.
数据处理模块,例化的时候,输入端口的数据是ad转换处理后的数据.
输出端口的数据是给温度值输出模块的数据.
这样三个模块通过例化联系在了一起,
然后运行主模块,整个流水线才会工作起来.