首先,FPGA可以做两种类型的芯片,数字电路与微处理器
微处理器一般和SOPC片上系统(就是把微处理器和一些片内外设都集成到了一块芯片上)一起做,比如NIOS-II,这些之后再说
数字电路分为:
组合逻辑电路(各种与或非门组成的电路,输出只取决于当前输入),如编译码器,加法器
时序逻辑电路(具有记忆功能,触发器),如计数器,移位器,分频器
时序逻辑电路又分为同步与异步,同步电路只有一个时钟源,所有的触发器同时被触发,异步相反,触发时间有先后
常用的数字电路语言有两种VHDL与verilog HDL,verilog HDL用的比较多也更简单,我们先说verilog HDL
首先说下时序电路
先说下Verilog HDL程序结构
分为模块程序与测试程序(testbench),每个模块程序实例化后就是一个元件,测试程序就是把所有可能的输入都模拟一遍,观看结果
模块程序(module)
module test(X,Y,Z,S,CO)//module 模块名(端口1,端口2,......);
input X,Y;//输入输出端口声明
output Z;
wire S,CO //wire reg等各类型变量声明
assign S = X&Y//逻辑、功能描述
endmodule//结束
测试文件(testbench)
.itimescale 1ns/100ps//一个时间单位1ns,精度100ps
module 模块名加上,_tb(x,y,z)
端口类型
reg//输入激励端口
wire//输出端口
halfadder u1(.X(x),.Y(y),.Z(z));//实例化器件与testbench端口连接
initial
begin
初始化输入端,eg x=0;y=0;z=0;
//输入端加入激励信号,穷举描述 #延迟时间 begin 输入激励信号赋值;eg #10 x =1;
end
赋初值,遍历各种可能
end module
上面是程序的模板
需要注意的是,模块文件里的输入输出到了测试文件里,要相应的改为reg与wire,还有实例化时端口连接要对应好
还有就是测试文件有两种写法,上面的是第一种,直接端口对应实例化,第二种与之主要区别是在程序最后把模块与测试文件分别实例化