abstractaccelerator/opene906/smart_run/logical/gpio/gpio.v

175 lines
5.8 KiB
Verilog

/*Copyright 2020-2021 T-Head Semiconductor Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// &ModuleBeg; @22
module gpio(
b_pad_gpio_porta,
gpio_intr,
paddr,
pclk,
pclk_intr,
penable,
prdata,
presetn,
psel,
pwdata,
pwrite
);
// &Ports; @23
input [6 :2] paddr;
input pclk;
input pclk_intr;
input penable;
input presetn;
input psel;
input [31:0] pwdata;
input pwrite;
output [7 :0] gpio_intr;
output [31:0] prdata;
inout [7 :0] b_pad_gpio_porta;
// &Regs; @24
// &Wires; @25
wire [7 :0] b_pad_gpio_porta;
wire [7 :0] gpio_ext_porta;
wire [7 :0] gpio_ext_porta_rb;
wire [7 :0] gpio_int_polarity;
wire [7 :0] gpio_inten;
wire [7 :0] gpio_intmask;
wire [7 :0] gpio_intr;
wire gpio_intr_flag_int;
wire gpio_intrclk_en;
wire [7 :0] gpio_intstatus;
wire [7 :0] gpio_inttype_level;
wire gpio_ls_sync;
wire [7 :0] gpio_porta_ddr;
wire [7 :0] gpio_porta_dr;
wire [7 :0] gpio_porta_eoi;
wire [7 :0] gpio_porta_oe;
wire [7 :0] gpio_raw_intstatus;
wire [7 :0] gpio_swporta_ctl;
wire [7 :0] gpio_swporta_ddr;
wire [7 :0] gpio_swporta_dr;
wire [6 :2] paddr;
wire pclk;
wire pclk_intr;
wire penable;
wire [31:0] prdata;
wire presetn;
wire psel;
wire [31:0] pwdata;
wire pwrite;
// &Force("nonport", "gpio_intstatus"); @27
// &Force("nonport", "gpio_intr_flag"); @28
// &Force("nonport", "gpio_intr_flag_n"); @29
// &Force("nonport", "gpio_intr_int"); @30
// &Force("nonport", "gpio_intr_n"); @31
// &Force("nonport", "gpio_intr_flag_int"); @32
// &Force("nonport", "gpio_intrclk_en"); @33
// &Force("inout", "b_pad_gpio_porta"); @34
// &Instance("gpio_apbif"); @36
gpio_apbif x_gpio_apbif (
.gpio_ext_porta_rb (gpio_ext_porta_rb ),
.gpio_int_polarity (gpio_int_polarity ),
.gpio_inten (gpio_inten ),
.gpio_intmask (gpio_intmask ),
.gpio_intstatus (gpio_intstatus ),
.gpio_inttype_level (gpio_inttype_level),
.gpio_ls_sync (gpio_ls_sync ),
.gpio_porta_eoi (gpio_porta_eoi ),
.gpio_raw_intstatus (gpio_raw_intstatus),
.gpio_swporta_ctl (gpio_swporta_ctl ),
.gpio_swporta_ddr (gpio_swporta_ddr ),
.gpio_swporta_dr (gpio_swporta_dr ),
.paddr (paddr ),
.pclk (pclk ),
.penable (penable ),
.prdata (prdata ),
.presetn (presetn ),
.psel (psel ),
.pwdata (pwdata ),
.pwrite (pwrite )
);
// &Instance("gpio_ctrl"); @37
gpio_ctrl x_gpio_ctrl (
.gpio_ext_porta (gpio_ext_porta ),
.gpio_ext_porta_rb (gpio_ext_porta_rb ),
.gpio_int_polarity (gpio_int_polarity ),
.gpio_inten (gpio_inten ),
.gpio_intmask (gpio_intmask ),
.gpio_intr (gpio_intr ),
.gpio_intr_flag_int (gpio_intr_flag_int),
.gpio_intr_int (gpio_intstatus ),
.gpio_intrclk_en (gpio_intrclk_en ),
.gpio_inttype_level (gpio_inttype_level),
.gpio_ls_sync (gpio_ls_sync ),
.gpio_porta_ddr (gpio_porta_ddr ),
.gpio_porta_dr (gpio_porta_dr ),
.gpio_porta_eoi (gpio_porta_eoi ),
.gpio_raw_intstatus (gpio_raw_intstatus),
.gpio_swporta_ctl (gpio_swporta_ctl ),
.gpio_swporta_ddr (gpio_swporta_ddr ),
.gpio_swporta_dr (gpio_swporta_dr ),
.pclk (pclk ),
.pclk_intr (pclk_intr ),
.presetn (presetn )
);
// &Connect(.gpio_intr_int(gpio_intstatus)); @38
assign gpio_porta_oe[0] = gpio_porta_ddr[0];
assign gpio_ext_porta[0] = b_pad_gpio_porta[0];
assign b_pad_gpio_porta[0] = gpio_porta_oe[0] ? gpio_porta_dr[0] : 1'bz;
assign gpio_porta_oe[1] = gpio_porta_ddr[1];
assign gpio_ext_porta[1] = b_pad_gpio_porta[1];
assign b_pad_gpio_porta[1] = gpio_porta_oe[1] ? gpio_porta_dr[1] : 1'bz;
assign gpio_porta_oe[2] = gpio_porta_ddr[2];
assign gpio_ext_porta[2] = b_pad_gpio_porta[2];
assign b_pad_gpio_porta[2] = gpio_porta_oe[2] ? gpio_porta_dr[2] : 1'bz;
assign gpio_porta_oe[3] = gpio_porta_ddr[3];
assign gpio_ext_porta[3] = b_pad_gpio_porta[3];
assign b_pad_gpio_porta[3] = gpio_porta_oe[3] ? gpio_porta_dr[3] : 1'bz;
assign gpio_porta_oe[4] = gpio_porta_ddr[4];
assign gpio_ext_porta[4] = b_pad_gpio_porta[4];
assign b_pad_gpio_porta[4] = gpio_porta_oe[4] ? gpio_porta_dr[4] : 1'bz;
assign gpio_porta_oe[5] = gpio_porta_ddr[5];
assign gpio_ext_porta[5] = b_pad_gpio_porta[5];
assign b_pad_gpio_porta[5] = gpio_porta_oe[5] ? gpio_porta_dr[5] : 1'bz;
assign gpio_porta_oe[6] = gpio_porta_ddr[6];
assign gpio_ext_porta[6] = b_pad_gpio_porta[6];
assign b_pad_gpio_porta[6] = gpio_porta_oe[6] ? gpio_porta_dr[6] : 1'bz;
assign gpio_porta_oe[7] = gpio_porta_ddr[7];
assign gpio_ext_porta[7] = b_pad_gpio_porta[7];
assign b_pad_gpio_porta[7] = gpio_porta_oe[7] ? gpio_porta_dr[7] : 1'bz;
// &ModuleEnd; @72
endmodule