⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dw8051_intr_1.v

📁 Verilog版的C51核(DW8051)
💻 V
📖 第 1 页 / 共 2 页
字号:
// $Id: DW8051_intr_1.v,v 1.1 1996/07/25 17:43:01 gina Exp $//------------------------------------------------------------------------------////        This confidential and proprietary software may be used only//     as authorized by a licensing agreement from synopsys Inc.//     In the event of publication, the following notice is applicable:////                    (C) COPYRIGHT 1996   SYNOPSYS INC.//                          ALL RIGHTS RESERVED////        The entire notice above must be reproduced on all authorized//        copies.//// FILE: DW8051_intr_1.v//// AUTHOR: Ludwig Rieder//// ABSTRACT: DW8051 interrupt module for 13 interrupt sources (extended)//           (Verilog version)//// MODIFICATION HISTORY://      L.Rieder        28.05.96        Verilog version created////      Bala Needamangalam//                      Sep 15.98       Fix for STAR 58773: DW8051 Extended//                                      Interrupt Unit malfuctions with Timer//                                      0/1 interrupts and read-modify-write//                                      instructions://                                      Changed the qualification for tf0_clr//					and tf1_clr to "ack_l", instead of//					"int_ack".//                      July 20,1999    Removed all DesignWare-Foundation //                                      license checkout commands.//------------------------------------------------------------------------------`include "./DW8051/DW8051_package.inc"`include "./DW8051/DW8051_parameter.v"module DW8051_intr_1 (clk,		      rst_n,                      // sfr bus signals:                      sfr_addr,                      intr_sfr_cs,                      intr_data_out,                      intr_data_in,                      sfr_wr,                          // signals from/to DW8051_cpu:                      cycle,                      int_req,                      int_src,                      int_ack,                      int_clr,                      // interrupt source signals:                      int0_n,		// ext int 0                      int1_n,		// ext int 1                      int2,		// ext int 2                      int3_n,		// ext int 3                      int4,		// ext int 4                      int5_n,		// ext int 5                      tf0_set,		// timer 0 int                      tf1_set,		// timer 1 int                      ri0,		// serial port 0 receive  int                      ti0,		// serial port 0 transmit int                      ri1,		// serial port 1 receive  int                      ti1,		// serial port 1 transmit int                      tf2,		// timer 2 int                      exf2,		// ext timer 2 int                      pfi,		// power fail int                      wdti,		// watchdog timeout int                      // signals to timer module                      ena_t0,                      ena_t1,                      // signal to serial port 1 module                      smod1		      ); input clk; input rst_n; input [7:0]  sfr_addr; input [7:0]  intr_data_in; input sfr_wr; input [1:0]  cycle; input int_ack; input int_clr; input int0_n; input int1_n; input int2; input int3_n; input int4; input int5_n; input tf0_set; input tf1_set; input ri0; input ti0; input ri1; input ti1; input tf2; input exf2; input pfi; input wdti; output intr_sfr_cs; output [7:0]  intr_data_out; output int_req; output [3:0]  int_src; output ena_t0; output ena_t1; output smod1;//------------------------------------------------------------------------------ wire clk; wire rst_n; wire [7:0] sfr_addr; wire [7:0] intr_data_in; wire sfr_wr; wire [1:0] cycle; wire int_ack; wire int_clr; wire int0_n; wire int1_n; wire int2; wire int3_n; wire int4; wire int5_n; wire tf0_set; wire tf1_set; wire ri0; wire ti0; wire ri1; wire ti1; wire tf2; wire exf2; wire pfi; wire wdti; wire intr_sfr_cs; wire [7:0] intr_data_out; wire int_req; wire [3:0] int_src; wire ena_t0; wire ena_t1; wire smod1;//---------------// local signals://---------------reg  [7:0] ie_reg;		// ie registerwire ea;wire et0;wire et1;wire et2;wire es0;wire es1;wire ex0;wire ex1; reg  [6:0] ip_reg;		// ip registerwire pt0;wire pt1;wire pt2;wire ps0;wire ps1;wire px0;wire px1; wire [7:0] tcon_reg;		// tcon registerreg  tf1;reg  tr1;reg  tf0;reg  tr0;reg  ie1;reg  it1;reg  ie0;reg  it0; reg  [7:4] exif_reg;		// exif registerwire ie2;wire ie3;wire ie4;wire ie5; reg  [4:0] eie_reg;		// eie registerwire ewdi;wire ex5;wire ex4;wire ex3;wire ex2; reg  [4:0] eip_reg;		// eip registerwire pwdi;wire px5;wire px4;wire px3;wire px2; wire [7:0] eicon_reg;		// eicon register reg  smod1_reg;reg  epfi;reg  pfi_reg;reg  wdti_reg; wire wdti_set;wire pfi_set; wire ie_cs;			// chip select for ie-registerwire ip_cs;			// chip select for ip-registerwire tcon_cs;			// chip select for tcon-registerwire exif_cs;			// chip_select for exif-registerwire eie_cs;			// chip_select for eie-registerwire eip_cs;			// chip_select for eip-registerwire eicon_cs;			// chip_select for eicon_register				// (includes: smod1reg, epfi, pfi_reg and				// wdti_reg)wire eicon_wr;wire tcon_wr; wire tf0_clr;wire tf1_clr;wire ie0_clr;wire ie1_clr; wire ie0_set;wire ie1_set;wire ie2_set;wire ie3_set;wire ie4_set;wire ie5_set; wire it0_set;wire it1_set; wire it0_clr;wire it1_clr; reg  ack_l;			// latched int_ack reg  x0_l1_n;			// latched external interrupt 0reg  x1_l1_n;			// latched external interrupt 1reg  x2_l1;			// latched external interrupt 2reg  x3_l1_n;			// latched external interrupt 3reg  x4_l1;			// latched external interrupt 4reg  x5_l1_n;			// latched external interrupt 5 reg  x0_l2_n;			// latched x0_l1_nreg  x1_l2_n;			// latched x1_l1_nreg  x2_l2;			// latched x2_l1reg  x3_l2_n;			// latched x3_l1_nreg  x4_l2;			// latched x4_l1reg  x5_l2_n;			// latched x5_l1_n reg  x0_l3_n;			// latched x0_l2_nreg  x1_l3_n;			// latched x1_l2_nreg  x2_l3;			// latched x2_l2reg  x3_l3_n;			// latched x3_l2_nreg  x4_l3;			// latched x4_l2reg  x5_l3_n;			// latched x5_l2_n reg  pfi_l1;			// latched pfireg  pfi_l2;			// latched pfi_l1 reg  wdti_l1;			// latched wdtireg  wdti_l2;			// latched wdti_l1reg  wdti_l3;			// latched wdti_l2 wire x0_req;			// request from int0wire x1_req;			// request from int1wire x2_req;			// request from int2wire x3_req;			// request from int3wire x4_req;			// request from int4wire x5_req;			// request from int5wire t0_req;			// request from timer0wire t1_req;			// request from timer1wire t2_req;			// request from timer2wire s0_req;			// request from serial port 0wire s1_req;			// request from serial port 1wire wd_req;			// request from watchdog timerwire pf_req;			// request from power fail detector wire x0_hp_req;			// high priority request from int0wire x1_hp_req;			// high priority request from int1wire x2_hp_req;			// high priority request from int2wire x3_hp_req;			// high priority request from int3wire x4_hp_req;			// high priority request from int4wire x5_hp_req;			// high priority request from int5wire t0_hp_req;			// high priority request from timer0wire t1_hp_req;			// high priority request from timer1wire t2_hp_req;			// high priority request from timer2wire s0_hp_req;			// high priority request from serial port0wire s1_hp_req;			// high priority request from serial port1wire wd_hp_req;			// high priority request from watchdog timer wire x0_lp_req;			// low priority request from int0wire x1_lp_req;			// low priority request from int1wire x2_lp_req;			// low priority request from int2wire x3_lp_req;			// low priority request from int3wire x4_lp_req;			// low priority request from int4wire x5_lp_req;			// low priority request from int5wire t0_lp_req;			// low priority request from timer0wire t1_lp_req;			// low priority request from timer1wire t2_lp_req;			// low priority request from timer2wire s0_lp_req;			// low priority request from serial port0wire s1_lp_req;			// low priority request from serial port1wire wd_lp_req;			// low priority request from watchdog timer wire [3:0] lp_src;		// source for low  priority requ.wire [3:0] hp_src;		// source for high priority requ.wire [3:0] i_src;		// source for active requestreg  [3:0] i_src_l;		// latched i_src reg  iip0;			// low  priority interrupt in progress flagreg  iip1;			// high priority interrupt in progress flagreg  iip2;			// power fail interrupt in progresswire iip0_set;wire iip1_set;wire iip2_set;wire iip0_clr;wire iip1_clr;wire iip2_clr; reg  pf_req_l;			// latched highest priority request                                // (from power fail detector)wire hp_req;			// high priority requestwire lp_req;			// low  priority requestreg  hp_req_l;			// latched high priority requestreg  lp_req_l;			// latched low  priority request // define interrupt source := interrupt_vector(6 downto 3)`define  x0_src 4'b0000		// vector: 03h`define  x1_src 4'b0010		// vector: 13h`define  t0_src 4'b0001		// vector: 0Bh`define  t1_src 4'b0011		// vector: 1Bh`define  t2_src 4'b0101		// vector: 2Bh`define  s0_src 4'b0100		// vector: 23h`define  s1_src 4'b0111		// vector: 3Bh`define  pf_src 4'b0110		// vector: 33h`define  x2_src 4'b1000		// vector: 43h`define  x3_src 4'b1001		// vector: 4Bh`define  x4_src 4'b1010		// vector: 53h`define  x5_src 4'b1011		// vector: 5Bh`define  wd_src 4'b1100		// vector: 63h //------------------------------------------------------------------------------  // SFR Address decode  assign ie_cs    = (sfr_addr == `ie_addr)    ? 1 : 0;  assign ip_cs    = (sfr_addr == `ip_addr)    ? 1 : 0;  assign tcon_cs  = (sfr_addr == `tcon_addr)  ? 1 : 0;  assign exif_cs  = (sfr_addr == `exif_addr)  ? 1 : 0;  assign eie_cs   = (sfr_addr == `eie_addr)   ? 1 : 0;  assign eip_cs   = (sfr_addr == `eip_addr)   ? 1 : 0;  assign eicon_cs = (sfr_addr == `eicon_addr) ? 1 : 0;  // Write-enables for EICON and TCON  assign eicon_wr = sfr_wr & eicon_cs;  assign tcon_wr  = sfr_wr & tcon_cs;  // Software programming for IT0 set and clear  assign it0_set  = tcon_wr &  intr_data_in[0];  assign it0_clr  = tcon_wr & ~intr_data_in[0];  // Software programming for IT1 set and clear  assign it1_set  = tcon_wr &  intr_data_in[2];  assign it1_clr  = tcon_wr & ~intr_data_in[2];  // Defining the IE0 flag settings  assign ie0_set  = (cycle != `c1) ? 0                    :                    (it0_clr == 1) ?  ~x0_l2_n            : // Low-level sens.                    (it0_set == 1) ? (~x0_l2_n & x0_l3_n) : // Fall-edge sens.                    (it0     == 0) ?  ~x0_l2_n            : // Low-level sens.                                     (~x0_l2_n & x0_l3_n);  // Fall-edge sens.  // Defining the IE1 flag settings  assign ie1_set  = (cycle != `c1) ? 0                    :                    (it1_clr == 1) ?  ~x1_l2_n            : // Low-level sens.                    (it1_set == 1) ? (~x1_l2_n & x1_l3_n) : // Fall-edge sens.                    (it1     == 0) ?  ~x1_l2_n            : // Low-level sens.                                     (~x1_l2_n & x1_l3_n);  // Fall-edge sens.  // Defining the IE2 flag settings  assign ie2_set  = (cycle != `c1) ? 0 : ( x2_l2   & ~x2_l3);   // rise edge  // Defining the IE3 flag settings  assign ie3_set  = (cycle != `c1) ? 0 : (~x3_l2_n &  x3_l3_n); // fall-edge  // Defining the IE4 flag settings  assign ie4_set  = (cycle != `c1) ? 0 : ( x4_l2   & ~x4_l3);   // rise edge  // Defining the IE5 flag settings  assign ie5_set  = (cycle != `c1) ? 0 : (~x5_l2_n &  x5_l3_n); // fall-edge  assign ie0_clr  = (((ack_l & it0) == 1) & (i_src_l == `x0_src)) ? 1 :  					// int-ack cycle                    (cycle != `c1) ? 0       :                    (it0_set == 1) ? 0       : // fall-edge sens & detected                    (it0_clr == 1) ? x0_l2_n : // low-level sens & 1 detected                    (it0     == 0) ? x0_l2_n : // low-level sens & 1 detected                                     0;  assign ie1_clr  = (((ack_l & it1) == 1) & (i_src_l == `x1_src)) ? 1 :  					// int-ack cycle                    (cycle != `c1) ? 0       :                    (it1_set == 1) ? 0       : // fall-edge sens & detected                    (it1_clr == 1) ? x1_l2_n : // low-level sens & 1 detected                    (it1     == 0) ? x1_l2_n : // low-level sens & 1 detected                                     0;  assign tf0_clr  = ((ack_l == 1) & (i_src_l == `t0_src)) ? 1 : 0;  		// TF0 flag is cleared in the int-ack cycle.  assign tf1_clr  = ((ack_l == 1) & (i_src_l == `t1_src)) ? 1 : 0;  		// TF1 flag is cleared in the int-ack cycle.  assign pfi_set  = (cycle != `c1) ? 0 : pfi_l2;  		// PFI is a level-sensitive interrupt.  assign wdti_set = (cycle != `c1) ? 0 : (wdti_l2 & ~wdti_l3);  		// WDTI is an edge-sensitive interrupt

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -