summaryrefslogtreecommitdiff
path: root/rtl/dma_axi32/dma_axi32_reg.v
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/dma_axi32/dma_axi32_reg.v')
-rw-r--r--rtl/dma_axi32/dma_axi32_reg.v286
1 files changed, 286 insertions, 0 deletions
diff --git a/rtl/dma_axi32/dma_axi32_reg.v b/rtl/dma_axi32/dma_axi32_reg.v
new file mode 100644
index 0000000..1239642
--- /dev/null
+++ b/rtl/dma_axi32/dma_axi32_reg.v
@@ -0,0 +1,286 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Author: Eyal Hochberg ////
+//// eyal@provartec.com ////
+//// ////
+//// Downloaded from: http://www.opencores.org ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2010 Provartec LTD ////
+//// www.provartec.com ////
+//// info@provartec.com ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer.////
+//// ////
+//// This source file is free software; you can redistribute it ////
+//// and/or modify it under the terms of the GNU Lesser General ////
+//// Public License as published by the Free Software Foundation.////
+//// ////
+//// This source is distributed in the hope that it will be ////
+//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
+//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
+//// PURPOSE. See the GNU Lesser General Public License for more////
+//// details. http://www.gnu.org/licenses/lgpl.html ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//---------------------------------------------------------
+//-- File generated by RobustVerilog parser
+//-- Version: 1.0
+//-- Invoked Fri Mar 25 23:34:50 2011
+//--
+//-- Source file: dma_reg.v
+//---------------------------------------------------------
+
+
+
+module dma_axi32_reg(clk,reset,pclken,psel,penable,paddr,pwrite,pwdata,prdata,pslverr,core0_idle,ch_int_all_proc0,int_all_proc,core0_clkdiv,core0_ch_start,joint_mode0,rd_prio_top0,rd_prio_high0,rd_prio_top_num0,rd_prio_high_num0,wr_prio_top0,wr_prio_high0,wr_prio_top_num0,wr_prio_high_num0,periph_rx_req_reg,periph_tx_req_reg,periph_rx_clr,periph_tx_clr);
+
+ input clk;
+ input reset;
+
+ input pclken;
+ input psel;
+ input penable;
+ input [7:0] paddr;
+ input pwrite;
+ input [31:0] pwdata;
+ output [31:0] prdata;
+ output pslverr;
+
+ input core0_idle;
+ input [8*1-1:0] ch_int_all_proc0;
+ output [1-1:0] int_all_proc;
+ output [3:0] core0_clkdiv;
+ output [7:0] core0_ch_start;
+ output joint_mode0;
+ output rd_prio_top0;
+ output rd_prio_high0;
+ output [2:0] rd_prio_top_num0;
+ output [2:0] rd_prio_high_num0;
+ output wr_prio_top0;
+ output wr_prio_high0;
+ output [2:0] wr_prio_top_num0;
+ output [2:0] wr_prio_high_num0;
+ output [31:1] periph_rx_req_reg;
+ output [31:1] periph_tx_req_reg;
+ input [31:1] periph_rx_clr;
+ input [31:1] periph_tx_clr;
+
+`include "dma_axi32_reg_params.v"
+
+
+ wire [31:0] user_def_stat;
+ wire [31:0] user_def0_stat0;
+ wire [31:0] user_def0_stat1;
+
+ wire user_def_proj;
+ wire [3:0] user_def_proc_num;
+ wire user_def_dual_core;
+ wire user_def_ic;
+ wire user_def_ic_dual_port;
+ wire user_def_clkgate;
+ wire user_def_port0_mux;
+ wire user_def_port1_mux;
+
+ wire wr_joint0;
+ wire wr_clkdiv0;
+ wire wr_start0;
+ wire wr_prio0;
+
+ wire [7:0] proc0_int_stat0;
+ wire [15:0] proc0_int_stat;
+ wire proc0_int;
+ wire [1-1:0] int_all_proc_pre;
+ reg [1-1:0] int_all_proc;
+
+
+ wire wr_periph_rx;
+ wire wr_periph_tx;
+ reg [31:1] periph_rx_req_reg;
+ reg [31:1] periph_tx_req_reg;
+
+ wire [7:0] gpaddr;
+ wire gpwrite;
+ wire gpread;
+
+ reg [31:0] prdata_pre;
+ reg pslverr_pre;
+ reg [31:0] prdata;
+ reg pslverr;
+
+
+ assign wr_joint0 = gpwrite & gpaddr == CORE0_JOINT;
+ assign wr_clkdiv0 = gpwrite & gpaddr == CORE0_CLKDIV;
+ assign wr_start0 = gpwrite & gpaddr == CORE0_START;
+ assign wr_prio0 = gpwrite & gpaddr == CORE0_PRIO;
+
+dma_axi32_reg_core0 dma_axi32_reg_core0(
+ .clk(clk),
+ .reset(reset),
+ .wr_joint(wr_joint0),
+ .wr_clkdiv(wr_clkdiv0),
+ .wr_start(wr_start0),
+ .wr_prio(wr_prio0),
+ .pwdata(pwdata),
+ .clkdiv(core0_clkdiv),
+ .ch_start(core0_ch_start),
+ .joint_mode(joint_mode0),
+ .rd_prio_top(rd_prio_top0),
+ .rd_prio_high(rd_prio_high0),
+ .rd_prio_top_num(rd_prio_top_num0),
+ .rd_prio_high_num(rd_prio_high_num0),
+ .wr_prio_top(wr_prio_top0),
+ .wr_prio_high(wr_prio_high0),
+ .wr_prio_top_num(wr_prio_top_num0),
+ .wr_prio_high_num(wr_prio_high_num0),
+ .user_def_stat0(user_def0_stat0),
+ .user_def_stat1(user_def0_stat1),
+ .ch_int_all_proc(ch_int_all_proc0),
+ .proc0_int_stat(proc0_int_stat0)
+ );
+
+
+ assign user_def_proj = 0;
+ assign user_def_proc_num = 1;
+ assign user_def_dual_core = 0;
+ assign user_def_ic = 0;
+ assign user_def_ic_dual_port = 0;
+ assign user_def_clkgate = 0;
+ assign user_def_port0_mux = 0;
+ assign user_def_port1_mux = 0;
+
+ assign user_def_stat =
+ {user_def_proj, //[31]
+ {20{1'b0}}, //[30:11]
+ user_def_port1_mux, //[10]
+ user_def_port0_mux, //[9]
+ user_def_clkgate, //[8]
+ user_def_ic_dual_port, //[7]
+ user_def_ic, //[6]
+ user_def_dual_core, //[5]
+ 1'b0, //[4]
+ user_def_proc_num //[3:0]
+ };
+
+
+
+
+
+ assign gpaddr = {8{psel}} & paddr;
+ assign gpwrite = psel & (~penable) & pwrite;
+ assign gpread = psel & (~penable) & (~pwrite);
+
+
+
+ assign wr_periph_rx = gpwrite & gpaddr == PERIPH_RX_CTRL;
+ assign wr_periph_tx = gpwrite & gpaddr == PERIPH_TX_CTRL;
+
+ always @(posedge clk or posedge reset)
+ if (reset)
+ periph_rx_req_reg <= #1 {31{1'b0}};
+ else if (wr_periph_rx | (|periph_rx_clr))
+ periph_rx_req_reg <= #1 ({31{wr_periph_rx}} & pwdata[31:1]) & (~periph_rx_clr);
+
+ always @(posedge clk or posedge reset)
+ if (reset)
+ periph_tx_req_reg <= #1 {31{1'b0}};
+ else if (wr_periph_tx | (|periph_tx_clr))
+ periph_tx_req_reg <= #1 ({31{wr_periph_tx}} & pwdata[31:1]) & (~periph_tx_clr);
+
+ assign proc0_int_stat = {proc0_int_stat0};
+
+ assign proc0_int = |proc0_int_stat;
+
+ assign int_all_proc_pre = {proc0_int};
+
+ always @(posedge clk or posedge reset)
+ if (reset)
+ int_all_proc <= #1 {1{1'b0}};
+ else
+ int_all_proc <= #1 int_all_proc_pre;
+
+
+ always @(*)
+ begin
+ prdata_pre = {32{1'b0}};
+
+ case (gpaddr)
+ PROC0_STATUS : prdata_pre = {{16{1'b0}}, proc0_int_stat0};
+
+ CORE0_JOINT : prdata_pre = {{31{1'b0}}, joint_mode0};
+
+ CORE0_PRIO : prdata_pre = {{16{1'b0}}, wr_prio_high0, wr_prio_high_num0, wr_prio_top0, wr_prio_top_num0, rd_prio_high0, rd_prio_high_num0, rd_prio_top0, rd_prio_top_num0};
+
+ CORE0_CLKDIV : prdata_pre = {{28{1'b0}}, core0_clkdiv};
+
+ CORE0_START : prdata_pre = {32{1'b0}};
+
+ PERIPH_RX_CTRL : prdata_pre = {periph_rx_req_reg, 1'b0};
+ PERIPH_TX_CTRL : prdata_pre = {periph_tx_req_reg, 1'b0};
+
+ IDLE : prdata_pre = {{30{1'b0}}, core0_idle};
+
+ USER_DEF_STAT : prdata_pre = user_def_stat;
+ USER_DEF0_STAT0 : prdata_pre = user_def0_stat0;
+ USER_DEF0_STAT1 : prdata_pre = user_def0_stat1;
+
+ default : prdata_pre = {32{1'b0}};
+ endcase
+ end
+
+
+ always @(/*AUTOSENSE*/gpaddr or gpread or gpwrite or psel)
+ begin
+ pslverr_pre = 1'b0;
+
+ case (gpaddr)
+ PROC0_STATUS : pslverr_pre = gpwrite; //read only
+
+ CORE0_JOINT : pslverr_pre = 1'b0; //read and write
+
+ CORE0_PRIO : pslverr_pre = 1'b0; //read and write
+
+ CORE0_CLKDIV : pslverr_pre = 1'b0; //read and write
+
+ CORE0_START : pslverr_pre = gpread; //write only
+
+ PERIPH_RX_CTRL : pslverr_pre = 1'b0; //read and write
+ PERIPH_TX_CTRL : pslverr_pre = 1'b0; //read and write
+
+ IDLE : pslverr_pre = gpwrite; //read only
+
+ USER_DEF_STAT : pslverr_pre = gpwrite; //read only
+ USER_DEF0_STAT0 : pslverr_pre = gpwrite; //read only
+ USER_DEF0_STAT1 : pslverr_pre = gpwrite; //read only
+
+ default : pslverr_pre = psel; //decode error
+ endcase
+ end
+
+
+ always @(posedge clk or posedge reset)
+ if (reset)
+ prdata <= #1 {32{1'b0}};
+ else if (gpread & pclken)
+ prdata <= #1 prdata_pre;
+ else if (pclken) //zero to allow or in apb_mux
+ prdata <= #1 {32{1'b0}};
+
+ always @(posedge clk or posedge reset)
+ if (reset)
+ pslverr <= #1 1'b0;
+ else if ((gpread | gpwrite) & pclken)
+ pslverr <= #1 pslverr_pre;
+ else if (pclken)
+ pslverr <= #1 1'b0;
+
+
+endmodule
+
+
+
+
+