前言
- 对FPGA进行开发, PCB原理图、芯片手册、硬件用户手册是进行相关测试的必备工具。PCB原理图介绍电路板的连接情况,芯片手册介绍芯片的管脚信息、封装类型、功能信息,硬件用户手册介绍配置信息,FPGA的运行代码只占整个开发流程的小部分时间,大部分时间都是花在测试和查找资料上。查资料主要去xilinx的官网上去找!官网的资料最权威、最全!
- 比如我们对Spartan6进行开发,首先要对其进行功能验证。我们选取FPGA开发板Mis603A作为测试平台。
- Mis603A的处理器为Spartan6系列的XC6SLX16 管脚为256 系统时钟为50MHz。
开发软件为Xilinx的ISE
实例一
- 测试发送端和接收端之间是否正常通信。
- 验证方案:一个功能是发送端相接收端发8位的信息,然后接收的信息和目标信息进行比对,相同的话,接收端计数器加一,否则接收端保持不变。代码量不大,半个小时就可完成。
`timescale 1ns / 1ps
//
// Company: cuc_ecdav_604c
// Designer name:JuHan
// E-mail:1107033204@qq.com
// Create Date: 11:07:19 07/13/2017
// Design Name:
// Module Name: test_8bit
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module test_8bit(
input sys_rst,
input sys_clk,
input [7:0]rec,
output [7:0]trn,
output [3:0]cnt
);
parameter TARGET = 8'h0A;
wire [7:0]rec_reg;
reg [7:0]trn_reg;
reg [3:0]cnt_reg;
//transmit message
always@(posedge sys_clk or negedge sys_rst)
begin
if(sys_rst==0)
begin
trn_reg[7:0]<=trn_reg[7:0]+8'h1;
end
else
trn_reg[7:0]<=0;
end
always@(posedge sys_clk or negedge sys_rst)
begin
if(sys_rst==0)
begin
if(rec_reg[7:0]%TARGET==0)//每隔十加一
begin
cnt_reg[3:0]<=cnt_reg[3:0]+4'h1;
end
else
cnt_reg[3:0]<=cnt_reg[3:0];
end
else
cnt_reg[3:0]<=0;
end
assign rec_reg[7:0] =rec[7:0];
assign trn[7:0] =trn_reg[7:0];
assign cnt[3:0] =cnt_reg[3:0];
endmodule
- 主要时间都花在波形仿真验证上
- 方法一:测试波形法
- 方法二:测试代码法
- 测试代码法采用的是Testbench。
- Testbench相当于一个测试平台,给输入加激励,把输出端和另外一个输出端相连。(具体描述还得查查再写)
首先在工程管理区将“Sources for”设置为Behavioral Simulation,在任意位置单击鼠标右键,并在弹出的菜单中选择“New Source”命令,然后选中“Verilog Test Fixture”类型,输入文件名为“test_test”,再点击“Next”进入下一页。这时,工程中所有Verilog Module的名称都会显示出来,设计人员需要选择要进行测试的模块。用鼠标选中test,点击“Next”后进入下一页,直接点击“Finish”按键,ISE会在源代码编辑区自动显示测试模块的代码。
`timescale 1ns / 1ps
// Company: cuc_ecdav_604c
// Designer name:JuHan
// E-mail:1107033204@qq.com
// Create Date: 17:29:22 07/14/2017
// Design Name: test_8bit
// Module Name: D:/My_study/master_study/difference/test_8bit/test_test.v
// Project Name: test_8bit
// Target Device:
// Tool versions:
// Description:
//
// Verilog Test Fixture created by ISE for module: test_8bit
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
module test_test;
// Inputs
reg sys_rst;
reg sys_clk;
// Outputs
wire [7:0] trn;
wire [3:0] cnt;
// Instantiate the Unit Under Test (UUT)
test_8bit uut (
.sys_rst(sys_rst),
.sys_clk(sys_clk),
.rec(trn),
.trn(trn),
.cnt(cnt)
);
initial begin
// Initialize Inputs
sys_rst = 1;
#10;
sys_clk = 0;
#10;
sys_clk = 1;
#10;
sys_rst = 0;
end
// Wait 100 ns for global reset to finish
always
begin
#10 sys_clk = !sys_clk;
end
// Add stimulus here
Endmodule
- 测试波形:
- 波形显示接收端每接收十个数据,计数器cnt就会加一。此外,接收端在第一个时刻时,cnt就加一,原因是0/10=0,符合if的判断条件,所以计数器加一。