verilog 支持定义数组参数,这样工程很大时,例化模块时可以使代码更简洁:详见实例

module dma_controller #(
parameter integer C0_MAX_MIG_BL[3:0] = {2048,2048,2048,2048},
parameter integer C0_APP_DATA_WIDTH[3:0] = {64,64,64,64} ,
parameter integer C0_DMA_WR_DATA_WIDTH[3:0] = {16,16,16,16} ,
parameter integer C0_DMA_RD_DATA_WIDTH[3:0] = {16,16,16,16} ,
parameter [1 : 8*11] C0_READ_WRITE[3:0] = {"Write Only","Bidirection","Bidirection","Bidirection"},
parameter integer C1_MAX_MIG_BL[3:0] = {2048,2048,2048,2048},
parameter integer C1_APP_DATA_WIDTH[3:0] = {128,128,128,128} ,
parameter integer C1_DMA_WR_DATA_WIDTH[3:0] = {32,32,32,32} ,
parameter integer C1_DMA_RD_DATA_WIDTH[3:0] = {32,32,32,32} ,
parameter [1 : 8*11] C1_READ_WRITE[3:0] = {"Write Only","Bidirection","Bidirection","Bidirection"}
) (
input main_clk ,//I,W:01,main_clk主系统时钟:200MHz
input sys_rst ,

。。。。。。

genvar gv_dma_i;
generate
for (gv_dma_i=0;gv_dma_i<=3;gv_dma_i=gv_dma_i+1)
begin : c0_dma_blk
dma
#(
.MAX_MIG_BL (C0_MAX_MIG_BL[gv_dma_i]),
.APP_DATA_WIDTH (C0_APP_DATA_WIDTH[gv_dma_i]),
.DMA_WR_DATA_WIDTH(C0_DMA_WR_DATA_WIDTH[gv_dma_i]),
.DMA_RD_DATA_WIDTH(C0_DMA_RD_DATA_WIDTH[gv_dma_i]),
.READ_WRITE (C0_READ_WRITE[gv_dma_i]) //3 option : "Write Only" , "Read Only" , "Bidirection"
)
inst_c0_dma(
//与MIG(arbitor)接口
.ui_clk (c0_dma_ui_clk[gv_dma_i]),//I,W:01,UI接口输出时钟,200Mhz
.ui_clk_sync_rst (c0_dma_ui_clk_sync_rst[gv_dma_i]),//I,W:01,同步时钟复位
.init_calib_complete(c0_dma_init_calib_complete[gv_dma_i]),//I,W:01,PHY校准完成,DMA可以在校准完成之前发送读写操作命令信息
.app_req (c0_dma_app_req[gv_dma_i]),//O,W:01,MIG UI接口使用请求
.app_resp (c0_mig2dma_app_resp[gv_dma_i]),//I,W:01,MIG UI接口使用应答
.app_done (c0_dma2mig_app_done[gv_dma_i]),//O,W:01,MIG UI接口使用结束,数据搬移完成
.app_addr (c0_dma2mig_app_addr[gv_dma_i]),//O,W:28or27,当前操作地址信息,第一个控制器地址位宽为28,第二个为27
.app_cmd (c0_dma2mig_app_cmd[gv_dma_i]),//O,W:03,操作命令 Read 001,Write 000
.app_en (c0_dma2mig_app_en[gv_dma_i]),//O,W:01,命令参数使能,UI接口在该信号有效时采集app_addr[]和app_cmd[2:0]
.app_wdf_data (c0_dma2mig_app_wdf_data[gv_dma_i]),//O,W:APP_DATA_WIDTH,写数据端口,位宽视MIG controller而定,当连接controller1时,位宽为128bit,连接另一个controller时位宽为64bit
.app_wdf_end (c0_dma2mig_app_wdf_end[gv_dma_i]),//O,W:01,指示当前时钟周期app_wdf_data总线上的数据为本次写请求的最后一个数据
.app_wdf_mask (c0_dma2mig_app_wdf_mask[gv_dma_i]),//O,W:APP_DATA_WIDTH/8,数据屏蔽位,位宽视MIG controller而定,当连接controller1时,位宽为16bit,连接另一个controller时位宽为8bit
.app_wdf_wren (c0_dma2mig_app_wdf_wren[gv_dma_i]),//O,W:01,写使能,指示app_wdf_data总线上的数据有效
.app_rd_data (c0_mig2dma_app_rd_data[gv_dma_i]),//I,W:APP_DATA_WIDTH,读数据端口,位宽视MIG controller而定,当连接controller1时,位宽为128bit,连接另一个controller时位宽为64bit
.app_rd_data_end (c0_mig2dma_app_rd_data_end[gv_dma_i]),//I,W:01,指示当前时钟周期app_rd_data总线上的数据为本次读请求的最后一个数据
.app_rd_data_valid (c0_mig2dma_app_rd_data_valid[gv_dma_i]),//I,W:01,读有效,指示app_rd_data总线上的数据有效
.app_rdy (c0_mig2dma_app_rdy[gv_dma_i]),//I,W:01,指示UI接口是否已经接收刚才发送的操作请求,当app_en有效后,如果UI接口没有使能app_rdy,表示刚才操作请求无效,需要从新发起读写请求
.app_wdf_rdy (c0_mig2dma_app_wdf_rdy[gv_dma_i]),//I,W:01,指示写FIFO准备好接受数据,数据在app_wdf_rdy 和 app_wdf_wren都有效时被写入FIFO

genvar gv_dma_j;
generate
for (gv_dma_j=0;gv_dma_j<=2;gv_dma_j=gv_dma_j+1)
begin : c1_dma_blk
dma
#(
.MAX_MIG_BL (C1_MAX_MIG_BL[gv_dma_j]),
.APP_DATA_WIDTH (C1_APP_DATA_WIDTH[gv_dma_j]),
.DMA_WR_DATA_WIDTH(C1_DMA_WR_DATA_WIDTH[gv_dma_j]),
.DMA_RD_DATA_WIDTH(C1_DMA_RD_DATA_WIDTH[gv_dma_j]),
.READ_WRITE (C1_READ_WRITE[gv_dma_j]) //3 option : "Write Only" , "Read Only" , "Bidirection"
)
inst_c1_dma(
//与MIG(arbitor)接口
.ui_clk (c1_dma_ui_clk[gv_dma_j]),//I,W:01,UI接口输出时钟,200Mhz
.ui_clk_sync_rst (c1_dma_ui_clk_sync_rst[gv_dma_j]),//I,W:01,同步时钟复位
.init_calib_complete(c1_dma_init_calib_complete[gv_dma_j]),//I,W:01,PHY校准完成,DMA可以在校准完成之前发送读写操作命令信息
.app_req (c1_dma_app_req[gv_dma_j]),//O,W:01,MIG UI接口使用请求
.app_resp (c1_mig2dma_app_resp[gv_dma_j]),//I,W:01,MIG UI接口使用应答
.app_done (c1_dma2mig_app_done[gv_dma_j]),//O,W:01,

verilog 数组参数的更多相关文章

  1. mvc ajax提交数组参数(转)

    http://blog.csdn.net/lonestar555/article/details/10192595/ 在action中的参数以数组方式接收数据 一.表单方式 1.提交Form < ...

  2. Atitit main函数的ast分析  数组参数调用的ast astview解析

    Atitit main函数的ast分析  数组参数调用的ast astview解析 1.1. Xxcls.main(new String[]{"","bb"}) ...

  3. webAPI 数组参数

    今天终于解决了一个坑的问题. 写了一个接口,调试了好几天都没成功. 一直以为是我的错误,直到我们部门的大牛来告诉我不是我的错误,是前端传参数有问题. 应该是参数是数组参数的问题,可能不好拼接,才导致接 ...

  4. springMVC 接收数组参数,mybatis 接收数组参数,mybatis批量插入/批量删除案例

    案例是给一个用户赋予多个权限,多个权限用其对应的主键 id 为参数,组成了 一个id数组,传给springMVC,然后springMVC传给mybatis,然后mybatis批量插入.其实类似的场景还 ...

  5. ThinkPHP分页链接支持数组参数的办法

    这几天在用ThinkPHP做系统,搜索页有个数组参数提交 <input class="params_t" name="t[]" type="ch ...

  6. 解决JavaScript中使用$.ajax方式提交数组参数

    一般的,可能有些人在一个参数有多个值的情况下,可能以某个字符分隔的形式传递,比如页面上有多个checkbox: $.ajax{ url:"xxxx", data:{ p: &quo ...

  7. 在ASP.NET MVC中以post方式传递数组参数的示例

    最近在工作中用到了在ASP.NET MVC中以post方式传递数组参数的情况,记录下来,以供参考. 一.准备参数对象 在本例中,我会传递两个数组参数:一个字符串数组,一个自定义对象数组.这个自定义对象 ...

  8. [Swift 语法点滴]——数组参数

    Swift语言一如既往的继承了苹果公司卓尔不群的奇葩思维方式,总是要弄得跟别的语言不一样,才能显出它的特殊 比如用数组作为参数上,这格式实在是没有试出来,找了stackoverflow,才找到相应信息 ...

  9. 使用javaScript解决asp.net中mvc使用ajax提交数组参数的匹配问题

    想到在asp.net的mvc中如果使用ajax向服务端传递参数时如果参数是一个类或者是个数组(或List集合)以及更复杂的对象时,服务端总是会发生取不到值的情况,当然网上也有很多解决的例子,但都是在服 ...

随机推荐

  1. 【转】MFC中用CFile读取和写入文件2

    原文网址:http://blog.sina.com.cn/s/blog_623a7fa40100hh1u.html CFile提供了一些常用的操作函数,如表1-2所示. 表1-2  CFile操作函数 ...

  2. XML新增、修改、选择

    using System; using System.Linq; using System.Xml.Linq; using DFS.Kiosk.Provider.Simulator.Common.Ut ...

  3. 查看tablespace的使用情况

    by tablespace(使用单位G): SELECT a.tablespace_name,(all_size-b.unuse_size) use_size,b.unuse_size,a.all_s ...

  4. C# 中判断程序是否启动使用Mutex使用异常

    [背景] 在最近的一个项目中,我负责客户端模块的工作.需求要求,在启动客户端时需要判断客户端是否已经启动(单例).于是我决定使用Mutex来实现此功能,代码如下: bool initiallyOwne ...

  5. 【CSS】Intermediate8:Page Layout

    1.Layout with CSS is easy. You just take a chunk of your page and shove it wherever you choose 2.pos ...

  6. synchronize学习

    这个例子我们看到,java中将对象或者Class对象当做锁 package synchronized简单使用; public class Test7 extends Thread{ public st ...

  7. Java笔记(十八)……包

    概述 对类文件进行分类管理. 给类提供多层命名空间. 写在程序文件的第一行. 类名的全称的是 包名.类名. 包也是一种封装形式. 访问权限 引用<The Complete Reference&g ...

  8. Clean Code – Chapter 3: Functions

    Small Blocks and Indenting The blocks within if statements, else statements, while statements, and s ...

  9. POJ1159 - Palindrome(区间DP)

    题目大意 给定一个字符串S,问最少插入多少个字符可以使字符串S变为回文串 题解 用dp[i][j]表示把字符串s[i-j]变为回文串需要插入的最小字符数 如果s[i]==s[j]那么dp[i][j]= ...

  10. 问题-Delphi编译到最后Linking时总是出现与ntdll.dll有关的错误还有Fatal Error Out of memory错误

    1.跳出错误法  ===================================================在主界面的implementation  {$R *.dfm} 下放入以下代码: ...