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