Zedboard---实验二仿真

Zedboard FPGA 仿真实验
本文介绍如何使用Verilog HDL为Zedboard FPGA板进行仿真测试。包括创建测试平台(TestBench),设置时钟信号,随机开关输入及仿真结束等关键步骤。

Zedboard—实验二仿真

上个试验中,我们创建了简单的工程编程了FPGA并且通过现实的开关测试了代码。这样的测试在实验一这样的简单的工程是足够了,但实际的工程中都是比较复杂的,这使手动的测试很难满足工程需求,这就需要仿真来验证工程。

这里举一个最简单的仿真。

Test Bench

仿真所设计的工程需要人为控制输入以验证输出的正确性。理想的的测试是创建输入激励信号并且验证输出的正确性。实际工程中,当测试进行过程中,需要打印出系统信息。如果测试失败需打印错误信息,不论测试通过还是失败都应打印出系统信息。

在Project Manager窗口中点击Add Source。创建仿真文件,命名为bench.v点击Finish。在新弹出的窗口中编辑命名bench。不用给出任何端口(ports)。点击OK。

Test Bench Contents

test bench的编写不需要任何输入输出端口。所有的仿真行为都发生在这个test bench中。另外就是test bench文件顶端的timescale。


`timescale 1ns/1ns

其中分子是告诉仿真器,延时单位是纳秒;分母是告诉仿真器需要多少的时间精度。通常可以设置精度和分子相同。

声明信号,FPGA的输出需要在test bench中的连接为wire型。FPGA的输入信号可以是wire或者是reg型。首先声明时钟输入。

reg clk = 1;

接着创建100MHz时钟信号:

always #5 clk = ~clk;

由于timesacle的声明,这里 5的单位就是纳秒,5ns CLK信号翻转一次。即CLK周期为10ns,频率为100MHz。

例化FPGA设计

声明开关输入信号为reg型,输出LED信号为reg。

reg [7:0] switch;
wire [7:0] led;

Verilog 的一个重要特点是一个module可以例化其他的module。

top top (.clk(clk),.switch(switch),.led(led));

开关输入信号

通常较好的方法是使用一些随机类型。Verilog有内部函数为$random。这里设置每个时钟下的开关输入为随机值:

always @(posedge clk) switch = $random;

仿真结束语句

如上语句表示仿真将会永远执行下去。所以添加代码使仿真在运行一段时间后结束。内部函数$finish将会使仿真执行完成。这里使用initial等待固定时间后调用$finish函数如下:

initial #10000 $finish;

上述代码只是等待一段时间就终止仿真。不可避免的会多余或者少于时钟周期。因此,这里选择Verilog中repeat模块,实际上是时钟计数。这里设置仿真时间为1000个周期。

initial
  begin
    repeat (1000) @(posedge clk);
    $finish;
  end

运行仿真

在Flow Navigator窗口下点击Run Simulation。选择Run Behavioral Simulation。出现仿真波形窗口,类似于逻辑分析仪。

`timescale 1ns/1ns
module bench;
  reg clk = 1;
  always #5 clk = ~clk;
  reg [7:0] switch;
  wire [7:0] led;
  top top(.clk(clk), .switch(switch), .led(led));
  always @(posedge clk) switch = $random;
  initial
    begin
      repeat (1000) @(posedge clk);
      $finish;
    end
endmodule

这里写图片描述


原文参考地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值