欢迎光临散文网 会员登陆 & 注册

Verilog—顶层模块中调用子模块,及参数化设计

2021-01-14 21:15 作者:小土豆逗土豆  | 我要投稿

  今天学习小梅哥的FPGA视频,现对知识点进行总结。

  1. 使用quartus ii的PLL(锁相环)进行时钟的分频和倍频。PLL的作用主要是为设计提供分频时钟和倍频时钟,以及相移。例如:系统时钟sclk=50MHZ,在系统时钟不满足我们的设计需求时,我们可以通过调用PLL的ip core产生clk1=20MHZ、clk2=75MHZ、clk3=100MHZ的时钟以满足设计需要。

    在进行quartu和modelsim联合仿真时,需要在quartus中菜单栏正确选择使用的仿真软件的名字,并添加testbench。如下图所示。本人使用的是modelsim仿真。

其次,如果是直接使用modelsim进行仿真的话,需要在modelsim中把所调用的ip core文件加入编译,否则无法仿真。一般quartus 的ip core文件位置在安装目录下\quartus\eda\sim_lib文件夹内。例如,本次仿真中调用了PLL ip核,其ip core文件为altera_mf,v。位置如下图所示。

ip core的.v文件位置

最后在进行板级验证,分配管脚后进行综合时遇到问题。软件报错如下。

报错

查询结果如下:(看不太懂),不过给出了解决方法。

 大意是說,每顆FPGA都有nCE與nCEO兩根pin,在多顆FPGA的系統中,第一顆FPGA的nCE接GND,而第一顆FPGA的nCEO將接到下一顆FPGA的nCE,如此這樣繼續接下去,而在最後一顆FPGA時,可以將nCEO floating或者當成普通I/O pin使用。而在單顆FPGA時,nCE直接接GND,nCEO可直接floating或者當普通I/O pin使用。

解决方案如下。

assignments>device>device and pin options>dual-purpose pins里面把nCEO设置成use as regular i/o就可以了

解决方案

2.在顶层模块中调用底层模块。

 底层模块如下:

子模块

底层模块调用格式如下:

<底层文件名>   <底层模块名n> (

.<信号1>(<连接的pin1>),

.<信号2>(<连接的pin2>),

顶层模块调用底层模块

3.参数化设计

 方法一:在子模块中定义了参数变量,然后顶层文件中可以直接在例化每个底层模块时,直接将所需修改的参数值通过例化的方法修改。

子模块参数定义

例化方式如下:

参数修改

代码解读:23行是底层文件名,24-26行是对参数进行修改。格式为:

#(

.<参数名> (修改值),

方法二:使用关键字defparam来声明对某个参数的从新定义。例如下图。

参数修改

格式如下:defparam   <底层文件名> . <底层模块名> . <参数名> = <修改值>


Verilog—顶层模块中调用子模块,及参数化设计的评论 (共 条)

分享到微博请遵守国家法律