fpga基础篇(二):三大并行结构
时间:10-02
整理:3721RD
点击:
fpga基础篇(二):三大并行结构
最近小编比较忙,所以这期给大家介绍一个基础篇,比较简单,但却是FPGA编程的基础。我们知道FPGA与单片机最大的区别就是FPGA是并行执行的,而单片机是串行的,说简单一点,就是FPGA同一时刻有好多语句在执行,而单片机同一时刻只有一条语句在执行。既然FPGA是并行的,那就意味着彼此并行语句之间不能互相包含,比如你在一个并行语句块中又写了一条并行语句,根据规则,并行语句是同时执行的,想想怎么让FPGA执行,所以FPGA从语法层次上就不允许并行套并行。
我把实际编程中经常用到的并行语句给总为一下3大类:
1. 元件例化语句
2. always块语句(注意:initial块等其他块一般只用在测试文件中)
3. assign赋值语句
我们在实际中经常用的就是上述三种,既然他们是并行的就彼此不能相互包含,是互相独立的。例如,有的人想通过if语句来例化原件,这是不可以的(generate块除外),if本身为串行语句,为了保持并行性,所以把if放到并行always块中,always块和元件例化属于并行关系,彼此谁也不能包含谁,所以是不允许的。
这里简单介绍一下assign语句,assign主要给wire类型的变量赋值(注意输入输出端口默认都是wire型),wire型变量与reg型变量最大的区别就是reg有保存的,实际上叫保持的功能更合适,而wire无,所以我们如果想让wire保持某一数值,就必须连续不断地给wire变量赋值,所以assign叫做连续赋值,由于reg本身的保持功能,所以不需要连续赋值,所以reg不能用assign语句赋值。