转载原文

上个试验中,我们创建了简单的工程编程了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个周期。

initialbeginrepeat (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;initialbeginrepeat (1000) @(posedge clk);$finish;end
endmodule


Zedboard:仿真相关推荐

  1. zedboard:使用ISE和modelsim搭建仿真环境

    详细步骤: 产生ISE仿真库文件 开始->所有程序->xilinx design tools->simulation library compilation wizard.路径可能不 ...

  2. zedboard板子上呼吸灯的实现(第一版)仿真代码的实现

    为了便于仿真的实现,定义周期数值period_cnt缩小为50,每次改变的数值duty_cycle定义为5,这两个数值本来可以定义在参数中,懒得重写代码直接修改了数值. module breathe_ ...

  3. ros在arm linux上移植,ROS在Zedboard上的移植

    ROS全称robot operaring system,一般ROS是应用在Ubuntu系统中,本次移植是将ROS移植到Zedboard上的Linaro系统中去. 移植环境 开发板 : Zedboard ...

  4. ZedBoard学习(5)-ZedBoard和System Generator

    Zynq中包含了一个FPGA内核和两个Cortex-A9内核,尽管功能十分的强大,又非常的时髦,但是本质上讲和之前Xilinx的FPGA 硬核PowerPC没什么区别,无非是PowerPC换成了更加有 ...

  5. Zedboard学习(四):PS+PL搭建SoC最小系统

    zynq最核心的设计理念就是软件加硬件,即PS+PL.通过软硬件协同设计,结合了FPGA与双arm9内核,对于嵌入式拥有极大的优势. SoC:System on Chip的缩写,称为芯片级系统,也有称 ...

  6. zedboard实现流水灯

    排列成一排的灯依次闪亮0.5s,借助野火的波形图进行说明,定义时钟信号sys_clk,定义复位信号sys_rst_n,控制4个灯闪亮定义位宽为4,每一个比特位控制一个LED灯.定义计数器cnt计数0. ...

  7. ZedBoard+Vivado(一)——纯PL实现流水灯

    硬件:Zedboard 软件:Vivado2018.2 + Win10 本文参考了http://blog.chinaaet.com/cuter521/p/35946,原文代码有错误,已更正. 1 设计 ...

  8. Zedboard系列教程

    下面是我学习Zedboard FPGA开发板时的几个程序.这里算是个目录索引页了. 实验一:PL端的基本使用:Verilog实现按键控制LED灯 仿真 评价:本实验通过编写Verilog实现FPGA可 ...

  9. 【Zedboard】FPGA边缘提取 图像处理 基于ZYNQ完成 灰度图像 在VGA显示与 边缘提取 二值化 Verilog代码实现

    [Zedboard]FPGA边缘提取 图像处理 基于ZYNQ完成 灰度图像 在VGA显示与 边缘提取 二值化 Verilog代码实现 在项目开始到目前为止已经完成了在Zedboard的PL部分即FPG ...

最新文章

  1. UVA10020(最小区间覆盖)
  2. cin.get()和cin.getline()之间的区别
  3. 查看、关闭被占用的端口
  4. .NET Core 小程序开发零基础系列(1)——开发者启用并牵手成功
  5. elinks文字浏览器
  6. 阿里云ECS服务器Linux环境下配置php服务器(二)--phpMyAdmin篇
  7. matlab希尔伯特变换,基于matlab的Hilbert变换详解
  8. 通俗地理解贝叶斯公式(定理)
  9. 智能推荐--协同过滤
  10. 怎样在计算机查找应用程序,电脑打开IE浏览器显示找不到应用程序怎么解决
  11. Python 获取动漫番剧 -XXOO
  12. 【python爬虫】用python编写LOL战绩查询
  13. 苹果电脑macos Ventura 13.0(22A380)dmg原版引导版镜像下载
  14. 软件测试 — 常见的端口整理
  15. UI设计电脑配置要求,UI设计笔记本可以吗?
  16. javaScript:打印等腰三角形
  17. springcloud篇】九. springcloud项目 三 首页,我的信息,添加好友及好友信息处理
  18. 利用Blensor模拟扫描生成点云
  19. 全球五大云巨头“排排坐”,微软令人称奇阿里云需加油
  20. 【GRU时序预测】基于matlab卷积神经网络结合门控循环单元CNN-GRU时间序列预测【含Matlab源码 2287期】

热门文章

  1. Unity- 游戏结束以及重启游戏
  2. 【luogu P5056】【模板】插头dp(插头DP)(分类讨论)
  3. Quartz - 任务调度框架整合使用
  4. CSS无法使用/bootst无法使用
  5. RabbitMQ六种工作模式01
  6. Eureka 和nacos 的区别
  7. 2016 总结:一个应届生的互联网名企逐梦记
  8. Spring 注入static属性值
  9. php 企业号,thinkphp整合企业号的坑
  10. 案例 | LinkSLA智能运维助力智慧医疗加速发展