FPGA 学习分享-- 05 例化与仿真

这篇具有很好参考价值的文章主要介绍了FPGA 学习分享-- 05 例化与仿真。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 实验内容

  通过具体例程,学习vivado软件的下述功能:
  1.例化:04节fifo核的使用
  2.仿真:01节流水灯

二. 例化

2.1 概论

依我看,例化其实就是C语言的函数调用。这样做方便整体代码修改,以及模块化编写程序。咱们就带着函数调用的思想去学习例化的语法规则就好。

2.2 例化框架

例化的大体框架如下:

引用的外部模块名字  此模块的新名字 (
  .外部参数1					(对应的内部参数1),         
  .外部参数2					(对应的内部参数2),   		
  .外部参数3					(对应的内部参数3),     
  .外部参数4					(对应的内部参数4),  
  ......
  ......
  .外部参数n					(对应的内部参数n)
             //注意:最后一个参数的括号后面没有逗号
);

这是fifo核的例化。

fifo_generator_0 u_fifo_generator_0 (
  .clk					(clk),         
  .srst					(~rst_n),   		
  .din					(wr_data),     
  .wr_en				(wr_en),  
  .rd_en				(rd_en),  
  .dout					(rd_data),    
  .full					(full),    
  .empty				(empty)  
);

外部模块名为fifo_generator_0,
一般的,新名字都是 “u_模块名” ,即u_fifo_generator_0

再来看看参数。

外部参数名 内部参数名
clk clk
srst ~rst_n
din wr_data
dout rd_data

没有列举完哈,这几个参数比较典型,拉出来说说。


fifo核自带的时钟名字为clk,我们定义的时钟名为clk
fifo核自带的复位名字为srst,我们定义的复位名为rst_n
(但因为srst为高电平有效,rst_n为低电平有效,所以取反)
fifo核自带的写数据名字为din,我们定义的写数据为wr_data
fifo核自带的读数据名字为dout,我们定义的读数据为rd_data


由此可见,外部参数和内部参数的名字不要求一致,只要他们代表的意义一样即可。
但内部参数对应的数据类型一般都是wire类型,这点还希望大家注意一下。

同理,ILA例化也是一样的框架。

ila_0 u_ila_0 (
	.clk             (clk), 	// input wire clk
	.probe0          (probe0) 	// input wire [26:0] probe0
);

值得一提的是,probe0参数有27位,但只是一个参数!
所以只占用一个外部参数名。

wire   [26:0]  probe0;

assign probe0[0] = clk;          
assign probe0[1] = rst_n;
assign probe0[2] = wr_rd_flag;
assign probe0[3] = wr_en;
assign probe0[4] = rd_en;
assign probe0[12:5] = wr_data[7:0];
assign probe0[20:13] = rd_data[7:0];
assign probe0[21] = full;
assign probe0[22] = empty;
assign probe0[26:23] = cnt_dly[3:0];

三. 仿真

3.1 概论

选择仿真大致有两个情况:

  1. 不上电,先行验证代码的正确性
  2. 没有板子,只能通过仿真来进行观看结果

据我所知,一般在实验或者工程上电之前,都会进行仿真,一旦连仿真结果都是失败的错误的,那么也就不必去上电了。所以学会仿真是必要的。

3.2 建立仿真文件

我在01节仿真部分已经带着大家一起建立过仿真文件了,在此处就不耽误大家时间了,有需要的同学可以去01节看看喔。

FPGA学习分享–01 led流水灯的实现

3.3 编写仿真代码

仿真仿真,就是要模仿真的。真的具有什么,放出来的结果应该也具有什么特点。
所以,我们在仿真中需要实现
1.系统时钟的编写
2.复位信号的切换
3.结合具体情况的一些其他功能
当然,也要确保仿真模块的代码语法的正确性。下面我们就以01节仿真代码为例,来看看这一必要的仿真模块到底长什么样。

`timescale 1ns / 1ps   

module tb_led_stream();

reg         sys_clk;       
reg         sys_rst_n;    

wire  [3:0] led;
              
initial begin         //初始化                        
	sys_clk = 1'b0;
	sys_rst_n = 1'b0;
	#1 sys_rst_n = 1'b1;
end 

always #10 sys_clk = ~sys_clk;    //定义一个50M赫兹的时钟

led_stream u_led_stream(      //例化
.clk                  (sys_clk),        
.rst_n                (sys_rst_n),      

.led                  (led)   
);

endmodule

咱们一个部分一个部分的讲解:

  1. 单位时间:
`timescale 1ns / 1ps   

这个代表了在仿真模块中的单位时间为1ns,精度为1ps。
举个例子,"#10"就代表经过10ns.

  1. 仿真变量:
reg         sys_clk;       
reg         sys_rst_n;    

我要实现时钟和复位信号,就必然要先定义他们。

  1. 初始化:
initial begin         //初始化                        
	sys_clk = 1'b0;
	sys_rst_n = 1'b0;
	#1 sys_rst_n = 1'b1;
end 

代码翻译如下:
最开始,时钟信号为低电平,复位信号为低电平,1ns之后复位信号拉高。
这和真正的板子是一致的。板子真正的复位信号,是上电瞬间为低电平有效,之后就拉高为1。时钟也是相似的道理(详见下一模块)。

  1. 时钟模块
always #10 sys_clk = ~sys_clk;    //定义一个50M赫兹的时钟

先来讲讲真正的系统时钟。
时钟信号就是不断地拉高拉低,通过记录时钟信号的上升沿即可得到时间。那么一个上升沿是多少时间呢。这就和系统的晶振有关系了。博宸电子的ZYNQ7020DEV开发板采用的是50M的晶振,即1s震动50M次。也就是时钟信号1s翻转50M次。
FPGA 学习分享-- 05 例化与仿真,fpga开发,学习
也就是说,时钟信号每隔10ns都是前一个瞬间的取反。
FPGA 学习分享-- 05 例化与仿真,fpga开发,学习
在仿真模块中,10ns后取反是
#10 sys_clk = ~sys_clk;
而时钟信号是一直每隔10ns就取反,所以必然有always语句。

always #10 sys_clk = ~sys_clk;    //定义一个50M赫兹的时钟
  1. 例化模块
    现在该把module模块例化到仿真模块中了,让仿真模块实现它的功能。
led_stream u_led_stream(      //例化
.clk                  (sys_clk),        
.rst_n                (sys_rst_n),      

.led                  (led)   
);

led_stream是module模块的模块名,直接从module中复制过来就行。剩下的例化知识就和上面讲例化是相同的。大家可以自行理解。

3.4 启动仿真

点击vivado左边的Run Simulation后就可以看到仿真图啦!文章来源地址https://www.toymoban.com/news/detail-785389.html

到了这里,关于FPGA 学习分享-- 05 例化与仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vivado仿真数据导出至.txt文件——FPGA开发

    在FPGA开发过程中,仿真是验证设计的重要环节。在Vivado设计套件中,我们可以使用仿真工具来验证设计的功能和性能。本文将介绍如何将Vivado仿真数据导出至.txt文件,以方便后续分析和处理。 步骤如下: 打开Vivado设计套件并创建一个新的工程。 在工程中添加设计文件和约

    2024年02月05日
    浏览(127)
  • ZYNQ之FPGA学习----Vivado功能仿真

    阅读本文需先学习: FPGA学习----Vivado软件使用 典型的FPGA设计流程,如图所示: 图片来自《领航者ZYNQ之FPGA开发指南》 Vivado 设计套件内部 集成了仿真器 Vivado Simulator ,能够在设计流程的不同阶段运行设计的功能仿真和时序仿真,结果可以在 Vivado IDE 集成的波形查看器中显示。

    2023年04月18日
    浏览(42)
  • [ZYNQ]开发之MATALB与FPGA联合仿真平台设计

    本实验在之前两篇文章的基础上设计的MATLAB与FPGA联合仿真平台设计,主要用于在MATLAB于FPGA之前提供收发数据的通道。该实验的应用背景为极化码的编译码流程,极化码的编译码的仿真流程如下: [ZYNQ]开发之基于 AN108 模块的ADC 采集以太网传输_Laid-back guy的博客-CSDN博客 [ZYNQ

    2024年02月04日
    浏览(43)
  • FPGA学习笔记(二)——Modelsim仿真、testbench编写

    我的Modelsim-Altera是在安装Quartus13.0时下载的,里面会有选项,安装初学者版本就可以,在Quartus18.0里也可以使用。 这样就完成了关联设置,再次进行仿真就不会出现上篇文章出现的报错了。  sel为1的时候,out与a一致;sel为0的时候,out与b一致。  这只是简单的波形仿真,下面

    2023年04月15日
    浏览(34)
  • 紫光同创 FPGA 开发跳坑指南(三)—— 联合 Modelsim 仿真

        Modelsim 是 FPGA 开发中重要的 EDA 设计仿真工具,主要用于验证数字电路设计是否正确。紫光 Pango Design Suite 开发套件支持联合 Modelsim 仿真,这里作简要的介绍。 方法一     打开 Pango Design Suite,点击 Tools - Compile Simulation Libraries,在弹出来的窗口中,设置需要编译

    2023年04月10日
    浏览(45)
  • FPGA学习小例子:38译码器设计与仿真

    译码器74x138是数字电路课程重点内容之一。译码器的设计比 较简单,使用Verilog语言实现译码器就更为简单。本教程设计了一个3-8译码器并做了仿真。 打开vivado,点击File 填写项目名,以及选择项目路径 并勾选“Do not specify sources at this time”,意思是先创建工程,后期再添加

    2024年02月09日
    浏览(38)
  • 安路FPGA-TangDynasty软件学习笔记二 仿真

    前面学习了安路FPGA-tangDynasty的大部分操作,现在具体学习TD和modelsim联合仿真。在查阅官方软件操作的手册时,惊叹于手册语言是中文,操作过程描述很详细。软件操作指南如图所示 大型模块在生成bit流之前一般需要进行功能仿真和时序仿真,TD软件不能直接仿真,需要借助

    2024年04月10日
    浏览(30)
  • FPGA学习笔记:verilog基础代码与modelsim仿真(三)

    1. 分频器——偶分频 方法1: verilog代码实现: modelsim仿真波形图: 方法2(推荐): 比起方法一直接使用计数器定义一个新的时钟波形,方法二使用flag_out作为分频变量从而实现分频器的功能。虽然二者都使用了计数器,但方法二显然更符合“分频”的定义,且此方法在告诉

    2024年02月06日
    浏览(34)
  • FPGA学习经验分享——入门篇

    FPGA是一个高度集成化的芯片,其学习过程既需要编程,又需要弄懂硬件电路和计算机架构。涉及到的知识和基础非常多,如果不合理地安排学习内容,学习过程会非常漫长和枯燥。这篇文章主要阐述了对于入门FPGA的一些经验分享,希望能够给想学FPGA的人一些引导,少走一些

    2024年02月03日
    浏览(31)
  • FPGA 学习笔记:Vivado simulation 仿真波形二进制显示

    最近在学习FPGA,发现除了烧写到FPGA上验证功能,最有效的方式就是软件仿真 软件仿真:simulation,就像是模拟器一样,写好测试用例,然后看是否可以输出想要的结果,用于验证FPGA逻辑的准确性 当前仿真成功后,还是需要真机实测验证 当前安装了好几个版本的Vivado ,当然

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包