verilog 數組參數


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,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM