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个周期。
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:仿真相关推荐
- zedboard:使用ISE和modelsim搭建仿真环境
详细步骤: 产生ISE仿真库文件 开始->所有程序->xilinx design tools->simulation library compilation wizard.路径可能不 ...
- zedboard板子上呼吸灯的实现(第一版)仿真代码的实现
为了便于仿真的实现,定义周期数值period_cnt缩小为50,每次改变的数值duty_cycle定义为5,这两个数值本来可以定义在参数中,懒得重写代码直接修改了数值. module breathe_ ...
- ros在arm linux上移植,ROS在Zedboard上的移植
ROS全称robot operaring system,一般ROS是应用在Ubuntu系统中,本次移植是将ROS移植到Zedboard上的Linaro系统中去. 移植环境 开发板 : Zedboard ...
- ZedBoard学习(5)-ZedBoard和System Generator
Zynq中包含了一个FPGA内核和两个Cortex-A9内核,尽管功能十分的强大,又非常的时髦,但是本质上讲和之前Xilinx的FPGA 硬核PowerPC没什么区别,无非是PowerPC换成了更加有 ...
- Zedboard学习(四):PS+PL搭建SoC最小系统
zynq最核心的设计理念就是软件加硬件,即PS+PL.通过软硬件协同设计,结合了FPGA与双arm9内核,对于嵌入式拥有极大的优势. SoC:System on Chip的缩写,称为芯片级系统,也有称 ...
- zedboard实现流水灯
排列成一排的灯依次闪亮0.5s,借助野火的波形图进行说明,定义时钟信号sys_clk,定义复位信号sys_rst_n,控制4个灯闪亮定义位宽为4,每一个比特位控制一个LED灯.定义计数器cnt计数0. ...
- ZedBoard+Vivado(一)——纯PL实现流水灯
硬件:Zedboard 软件:Vivado2018.2 + Win10 本文参考了http://blog.chinaaet.com/cuter521/p/35946,原文代码有错误,已更正. 1 设计 ...
- Zedboard系列教程
下面是我学习Zedboard FPGA开发板时的几个程序.这里算是个目录索引页了. 实验一:PL端的基本使用:Verilog实现按键控制LED灯 仿真 评价:本实验通过编写Verilog实现FPGA可 ...
- 【Zedboard】FPGA边缘提取 图像处理 基于ZYNQ完成 灰度图像 在VGA显示与 边缘提取 二值化 Verilog代码实现
[Zedboard]FPGA边缘提取 图像处理 基于ZYNQ完成 灰度图像 在VGA显示与 边缘提取 二值化 Verilog代码实现 在项目开始到目前为止已经完成了在Zedboard的PL部分即FPG ...
最新文章
- linux系统python截图不显示中文_Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题...
- Spring-AOP @AspectJ进阶之切点复合运算
- java 发送 接受 xml请求
- 在过程中要正式批准可交付成果_干货!软考高项项目管理知识体系5大过程组47个过程...
- 使用jQuery异步传递含复杂属性及集合属性的Model到控制器方法
- 信息学奥赛一本通C++语言——1097:求阶乘的和
- python mysql扩展_关于python:构建’_mysql’扩展错误:无法找到vcvarsall.bat
- GNU Call 开源的Skype替代项目
- 1024 科学计数法(C语言详解)
- ubuntu20.04装机教程
- 华为2021届实习面试(技术面+主管面)
- 如何从零开始成为一名优秀的程序员?---转载、翻译自Quora
- matlab gevfit,基于MATLAB和Scipy-GEV-fi的不同参数估计
- 【java校招你不知道的那些事儿】校招和社招的区别是什么?为什么不参加社招
- echars基本使用
- unity2D:对话框Dialog——弹出、渐入渐出
- 什么是SOLID原则(第1部分)
- 多伦多大学计算机ib成绩要求,QS世界Top30大学 A-level及IB 成绩详细要求!
- python异常处理的作用_Python 中的异常处理方式
- HTML的快速入门(六)
热门文章
- MacDown使用方法
- fsck exited with status code 4
- 优秀的 Verilog/FPGA开源项目介绍(十)- H.264和H.265
- 《艺术·设计的色彩构成》全书速读
- 5月跳槽会有风险,不跳也会有?
- 电商直播+元宇宙,虚拟人结合虚拟场景直播打开双十一营销新局面
- docker 启动报Cannot set property TasksAccounting, or unknown property.
- android全局监听onkeydown,Android中的几个onTouch()事件、onKeyDown监听返回键无效
- 本杰明·富兰克林式编程练习模式
- 有关于路由的基础使用(一级路由和二级路由)