mirror of
https://github.com/retroSoC/retroSoC.git
synced 2026-11-04 22:32:36 +00:00
18 files changed
+567
-69
No files matched your search
@@ -90,7 +90,8 @@ ifeq ($(SOC), MINI)
|
||||
endif
|
||||
|
||||
ifeq ($(SYNTH), YOSYS)
|
||||
DEF_LIST += +define+SYNTHESIS #HACK: for some core
|
||||
#HACK: for some core
|
||||
DEF_LIST += +define+SYNTHESIS
|
||||
$(info SYNTH DEF_LIST: $(DEF_LIST))
|
||||
$(file > $(RTL_PATH)/filelist/def.fl, $(DEF_LIST))
|
||||
include syn/yosys/yosys.mk
|
||||
|
||||
+103
@@ -27,6 +27,108 @@ INTER_LOOP:
|
||||
CHECK:
|
||||
addi t1, t1, 1
|
||||
ble t1, t2, APP_LOOP
|
||||
|
||||
|
||||
# NEW ===========================
|
||||
la a0, 0x0
|
||||
la a1, 2000
|
||||
WAIT_PSRAM_RESET:
|
||||
lw t0, 0(a0)
|
||||
addi a0, a0, 4
|
||||
blt a0, a1, WAIT_PSRAM_RESET
|
||||
|
||||
LDSD_TEST:
|
||||
jal ra, WRITE_8B_TEST
|
||||
jal ra, READ_8B_TEST
|
||||
jal ra, WRITE_16B_TEST
|
||||
jal ra, READ_16B_TEST
|
||||
jal ra, WRITE_32B_TEST
|
||||
jal ra, READ_32B_TEST
|
||||
j TEST_DONE
|
||||
|
||||
WRITE_8B_TEST:
|
||||
li t0, 0x40000000
|
||||
li t1, 0x40000010
|
||||
li t2, 1
|
||||
WR_8B_LOOP:
|
||||
sb t2, 0(t0)
|
||||
addi t2, t2, 1
|
||||
addi t0, t0, 1
|
||||
blt t0, t1, WR_8B_LOOP
|
||||
ret
|
||||
|
||||
WRITE_16B_TEST:
|
||||
li t0, 0x40000000
|
||||
li t1, 0x40000010
|
||||
li t2, 1
|
||||
WR_16B_LOOP:
|
||||
sh t2, 0(t0)
|
||||
addi t2, t2, 1
|
||||
addi t0, t0, 2
|
||||
blt t0, t1, WR_16B_LOOP
|
||||
ret
|
||||
|
||||
WRITE_32B_TEST:
|
||||
li t0, 0x40000000
|
||||
li t1, 0x40000010
|
||||
li t2, 1
|
||||
WR_32B_LOOP:
|
||||
sw t2, 0(t0)
|
||||
addi t2, t2, 1
|
||||
addi t0, t0, 4
|
||||
blt t0, t1, WR_32B_LOOP
|
||||
ret
|
||||
|
||||
|
||||
READ_8B_TEST:
|
||||
li t0, 0x40000000
|
||||
li t1, 0x40000010
|
||||
li t2, 1
|
||||
RD_8B_LOOP:
|
||||
lb t3, 0(t0)
|
||||
bne t2, t3, READ_ERROR
|
||||
addi t0, t0, 1
|
||||
addi t2, t2, 1
|
||||
blt t0, t1, RD_8B_LOOP
|
||||
ret
|
||||
|
||||
READ_16B_TEST:
|
||||
li t0, 0x40000000
|
||||
li t1, 0x40000010
|
||||
li t2, 1
|
||||
RD_16B_LOOP:
|
||||
lh t3, 0(t0)
|
||||
bne t2, t3, READ_ERROR
|
||||
addi t0, t0, 2
|
||||
addi t2, t2, 1
|
||||
blt t0, t1, RD_16B_LOOP
|
||||
ret
|
||||
|
||||
READ_32B_TEST:
|
||||
li t0, 0x40000000
|
||||
li t1, 0x40000010
|
||||
li t2, 1
|
||||
RD_32B_LOOP:
|
||||
lw t3, 0(t0)
|
||||
bne t2, t3, READ_ERROR
|
||||
addi t0, t0, 4
|
||||
addi t2, t2, 1
|
||||
blt t0, t1, RD_32B_LOOP
|
||||
ret
|
||||
|
||||
|
||||
READ_ERROR:
|
||||
j READ_ERROR
|
||||
|
||||
TEST_DONE:
|
||||
la s0, msg_succ
|
||||
li a0, 77
|
||||
NEW_INTER_LOOP:
|
||||
addi s0, s0, 1
|
||||
jal ra, PUTC
|
||||
lbu a0, 0(s0)
|
||||
bnez a0, NEW_INTER_LOOP
|
||||
|
||||
END:
|
||||
j END
|
||||
|
||||
@@ -38,3 +140,4 @@ PUTC:
|
||||
.section .data
|
||||
msg_hello: .string "Hello retroSoC!\n"
|
||||
msg_luck: .string "Have a good luck!\n"
|
||||
msg_succ: .string "Mem wr/rd test succ!\n"
|
||||
@@ -139,6 +139,13 @@
|
||||
#define reg_sysctrl_ipsel (*(volatile uint32_t*)0x1000B004)
|
||||
#define reg_sysctrl_i2csel (*(volatile uint32_t*)0x1000B008)
|
||||
#define reg_sysctrl_qspicsel (*(volatile uint32_t*)0x1000B00C)
|
||||
// clint
|
||||
#define reg_clint_clkdiv (*(volatile uint32_t*)0x1000C000)
|
||||
#define reg_clint_mtimel (*(volatile uint32_t*)0x1000C004)
|
||||
#define reg_clint_mtimeh (*(volatile uint32_t*)0x1000C008)
|
||||
#define reg_clint_mtimecmpl (*(volatile uint32_t*)0x1000C00C)
|
||||
#define reg_clint_mtimecmph (*(volatile uint32_t*)0x1000C010)
|
||||
#define reg_clint_msip (*(volatile uint32_t*)0x1000C014)
|
||||
// apb
|
||||
// archinfo
|
||||
#define reg_archinfo_sys (*(volatile uint32_t*)0x20000000)
|
||||
|
||||
@@ -45,7 +45,7 @@ void app_info() {
|
||||
printf(" license: MulanPSL-2.0 license\n\n");
|
||||
|
||||
printf("Processor:\n");
|
||||
printf(" CORE: %s\n", HW_CORE);
|
||||
printf(" CORE: %s user id: %d\n", HW_CORE, reg_sysctrl_coresel);
|
||||
printf(" ISA: %s\n", SW_ISA);
|
||||
printf(" FREQ: %dMHz\n\n", CPU_FREQ);
|
||||
|
||||
@@ -70,6 +70,7 @@ void app_info() {
|
||||
printf(" 1 x QSPI0 @0x%x\n", ®_qspi0_mode);
|
||||
printf(" 1 x DMA @0x%x\n", ®_dma_mode);
|
||||
printf(" 1 x SYSCTRL @0x%x\n", ®_sysctrl_coresel);
|
||||
printf(" 1 x CLINT @0x%x\n", ®_clint_clkdiv);
|
||||
printf(" 1 x ARCHINFO @0x%x\n", ®_archinfo_sys);
|
||||
printf(" 1 x RNG @0x%x\n", ®_rng_ctrl);
|
||||
printf(" 1 x UART1(ADV) @0x%x\n", ®_uart1_lcr);
|
||||
|
||||
@@ -4,7 +4,7 @@ import os
|
||||
|
||||
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
ip = ['archinfo', 'common', 'crc', 'i2c', 'ps2', 'pwm', 'rng', 'rtc', 'spi', 'timer', 'uart', 'wdg']
|
||||
ip = ['archinfo', 'clint', 'common', 'crc', 'gpio', 'i2c', 'i2s', 'plic', 'ps2', 'pwm', 'rng', 'rtc', 'spi', 'timer', 'uart', 'wdg']
|
||||
|
||||
for v in ip:
|
||||
# print(f'git clone git@github.com:retroSoC/{v}.git')
|
||||
|
||||
+22
-20
@@ -14,17 +14,17 @@ module ahbl2nmi (
|
||||
nmi_if.master nmi
|
||||
);
|
||||
|
||||
localparam TRANS_IDLE = 2'b00;
|
||||
localparam TRANS_BUSY = 2'b01;
|
||||
localparam TRANS_NONSEQ = 2'b10;
|
||||
localparam TRANS_SEQ = 2'b11;
|
||||
localparam AHBL_TRANS_IDLE = 2'b00;
|
||||
localparam AHBL_TRANS_BUSY = 2'b01;
|
||||
localparam AHBL_TRANS_NSEQ = 2'b10;
|
||||
localparam AHBL_TRANS_SEQ = 2'b11;
|
||||
|
||||
localparam SIZE_BYTE = 3'b000;
|
||||
localparam SIZE_HWORD = 3'b001;
|
||||
localparam SIZE_WORD = 3'b010;
|
||||
localparam AHBL_SIZE_BYTE = 3'b000;
|
||||
localparam AHBL_SIZE_HWRD = 3'b001;
|
||||
localparam AHBL_SIZE_WORD = 3'b010;
|
||||
|
||||
localparam RESP_OKAY = 1'b0;
|
||||
localparam RESP_ERROR = 1'b1;
|
||||
localparam AHBL_RESP_OKAY = 1'b0;
|
||||
localparam AHBL_RESP_EROR = 1'b1;
|
||||
|
||||
localparam STATE_IDLE = 2'b00;
|
||||
localparam STATE_DATA = 2'b01;
|
||||
@@ -38,12 +38,13 @@ module ahbl2nmi (
|
||||
logic [2:0] s_hsize_d, s_hsize_q;
|
||||
|
||||
// ahbl if
|
||||
// NOTE: need to gurantee `ahbl.hready` and `ahbl.hrdata` sampled in same cycle
|
||||
assign ahbl.hready = (s_fsm_q == STATE_IDLE) || nmi.ready;
|
||||
assign ahbl.hresp = RESP_OKAY;
|
||||
assign ahbl.hresp = AHBL_RESP_OKAY;
|
||||
always_comb begin
|
||||
ahbl.hrdata = '0;
|
||||
unique case (s_hsize_q)
|
||||
SIZE_BYTE: begin
|
||||
AHBL_SIZE_BYTE: begin
|
||||
unique case (s_haddr_q[1:0])
|
||||
2'b00: ahbl.hrdata = {24'b0, nmi.rdata[7:0]};
|
||||
2'b01: ahbl.hrdata = {24'b0, nmi.rdata[15:8]};
|
||||
@@ -52,13 +53,13 @@ module ahbl2nmi (
|
||||
default: ahbl.hrdata = {24'b0, nmi.rdata[7:0]};
|
||||
endcase
|
||||
end
|
||||
SIZE_HWORD: begin
|
||||
AHBL_SIZE_HWRD: begin
|
||||
unique case (s_haddr_q[1])
|
||||
1'b0: ahbl.hrdata = {16'b0, nmi.rdata[15:0]};
|
||||
1'b1: ahbl.hrdata = {16'b0, nmi.rdata[31:16]};
|
||||
endcase
|
||||
end
|
||||
SIZE_WORD: ahbl.hrdata = nmi.rdata;
|
||||
AHBL_SIZE_WORD: ahbl.hrdata = nmi.rdata;
|
||||
default: ahbl.hrdata = nmi.rdata;
|
||||
endcase
|
||||
end
|
||||
@@ -71,7 +72,7 @@ module ahbl2nmi (
|
||||
nmi.wdata = '0;
|
||||
if (s_hwrite_q) begin
|
||||
unique case (s_hsize_q)
|
||||
SIZE_BYTE: begin
|
||||
AHBL_SIZE_BYTE: begin
|
||||
unique case (s_haddr_q[1:0])
|
||||
2'b00: begin
|
||||
nmi.wstrb = 4'b0001;
|
||||
@@ -95,7 +96,7 @@ module ahbl2nmi (
|
||||
end
|
||||
endcase
|
||||
end
|
||||
SIZE_HWORD: begin
|
||||
AHBL_SIZE_HWRD: begin
|
||||
unique case (s_haddr_q[1])
|
||||
1'b0: begin
|
||||
nmi.wstrb = 4'b0011;
|
||||
@@ -107,7 +108,7 @@ module ahbl2nmi (
|
||||
end
|
||||
endcase
|
||||
end
|
||||
SIZE_WORD: begin
|
||||
AHBL_SIZE_WORD: begin
|
||||
nmi.wstrb = 4'b1111;
|
||||
nmi.wdata = ahbl.hwdata;
|
||||
end
|
||||
@@ -120,7 +121,7 @@ module ahbl2nmi (
|
||||
end
|
||||
|
||||
|
||||
// ahb.hready,
|
||||
// ahb.hready,
|
||||
always_comb begin
|
||||
s_fsm_d = s_fsm_q;
|
||||
s_haddr_d = s_haddr_q;
|
||||
@@ -129,7 +130,7 @@ module ahbl2nmi (
|
||||
unique case (s_fsm_q)
|
||||
STATE_IDLE: begin
|
||||
// just for no-burst ahbl
|
||||
if (ahbl.htrans == TRANS_NONSEQ && ahbl.hburst == '0) begin
|
||||
if (ahbl.htrans == AHBL_TRANS_NSEQ && ahbl.hburst == '0) begin
|
||||
s_fsm_d = STATE_DATA;
|
||||
s_haddr_d = ahbl.haddr;
|
||||
s_hwrite_d = ahbl.hwrite;
|
||||
@@ -138,7 +139,8 @@ module ahbl2nmi (
|
||||
end
|
||||
STATE_DATA: begin
|
||||
if (~nmi.ready) s_fsm_d = STATE_WAIT;
|
||||
else if (ahbl.htrans == TRANS_NONSEQ && ahbl.hburst == '0) begin
|
||||
// nmi.ready == 1'b1
|
||||
else if (ahbl.htrans == AHBL_TRANS_NSEQ && ahbl.hburst == '0) begin
|
||||
s_fsm_d = STATE_DATA;
|
||||
s_haddr_d = ahbl.haddr;
|
||||
s_hwrite_d = ahbl.hwrite;
|
||||
@@ -147,7 +149,7 @@ module ahbl2nmi (
|
||||
end
|
||||
STATE_WAIT: begin
|
||||
if (nmi.ready) begin
|
||||
if (ahbl.htrans == TRANS_NONSEQ && ahbl.hburst == '0) begin
|
||||
if (ahbl.htrans == AHBL_TRANS_NSEQ && ahbl.hburst == '0) begin
|
||||
s_fsm_d = STATE_DATA;
|
||||
s_haddr_d = ahbl.haddr;
|
||||
s_hwrite_d = ahbl.hwrite;
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
// Copyright (c) 2023-2025 Yuchi Miao <miaoyuchi@ict.ac.cn>
|
||||
// retroSoC is licensed under Mulan PSL v2.
|
||||
// You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
// You may obtain a copy of Mulan PSL v2 at:
|
||||
// http://license.coscl.org.cn/MulanPSL2
|
||||
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
// MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
// See the Mulan PSL v2 for more details.
|
||||
|
||||
`ifndef CLINT_DEF_SV
|
||||
`define CLINT_DEF_SV
|
||||
|
||||
// verilog_format: off
|
||||
`define NATV_CLINT_CLKDIV 8'h00
|
||||
`define NATV_CLINT_MTIMEL 8'h04
|
||||
`define NATV_CLINT_MTIMEH 8'h08
|
||||
`define NATV_CLINT_MTIMECMPL 8'h0C
|
||||
`define NATV_CLINT_MTIMECMPH 8'h10
|
||||
`define NATV_CLINT_MSIP 8'h14
|
||||
// verilog_format: on
|
||||
|
||||
`endif
|
||||
|
||||
interface simp_clint_if ();
|
||||
logic tmr_irq_o;
|
||||
logic sfr_irq_o;
|
||||
|
||||
modport dut(output tmr_irq_o, output sfr_irq_o);
|
||||
endinterface
|
||||
|
||||
module nmi_clint (
|
||||
// verilog_format: off
|
||||
input logic clk_i,
|
||||
input logic rst_n_i,
|
||||
nmi_if.slave nmi,
|
||||
simp_clint_if.dut clint
|
||||
// verilog_format: on
|
||||
);
|
||||
|
||||
logic s_nmi_wr_hdshk, s_nmi_rd_hdshk;
|
||||
logic s_nmi_ready_d, s_nmi_ready_q;
|
||||
logic s_nmi_rdata_en;
|
||||
logic [31:0] s_nmi_rdata_d, s_nmi_rdata_q;
|
||||
|
||||
logic s_clint_clkdiv_en;
|
||||
logic [7:0] s_clint_clkdiv_d, s_clint_clkdiv_q;
|
||||
logic s_clint_mtime_en;
|
||||
logic [63:0] s_clint_mtime_d, s_clint_mtime_q;
|
||||
logic s_clint_mtimecmp_en;
|
||||
logic [63:0] s_clint_mtimecmp_d, s_clint_mtimecmp_q;
|
||||
logic s_clint_msip_en;
|
||||
logic s_clint_msip_d, s_clint_msip_q;
|
||||
// utils
|
||||
logic [7:0] s_clk_cnt_d, s_clk_cnt_q;
|
||||
|
||||
assign s_nmi_wr_hdshk = nmi.valid && (~s_nmi_ready_q) && (|nmi.wstrb);
|
||||
assign s_nmi_rd_hdshk = nmi.valid && (~s_nmi_ready_q) && (~(|nmi.wstrb));
|
||||
assign nmi.ready = s_nmi_ready_q;
|
||||
assign nmi.rdata = s_nmi_rdata_q;
|
||||
|
||||
assign clint.tmr_irq_o = s_clint_mtime_q >= s_clint_mtimecmp_q;
|
||||
assign clint.sfr_irq_o = s_clint_msip_q;
|
||||
|
||||
|
||||
assign s_clint_clkdiv_en = s_nmi_wr_hdshk && nmi.addr[7:0] == `NATV_CLINT_CLKDIV;
|
||||
assign s_clint_clkdiv_d = nmi.wdata[7:0];
|
||||
dffer #(8) u_clint_clkdiv_dffer (
|
||||
clk_i,
|
||||
rst_n_i,
|
||||
s_clint_clkdiv_en,
|
||||
s_clint_clkdiv_d,
|
||||
s_clint_clkdiv_q
|
||||
);
|
||||
|
||||
always_comb begin
|
||||
s_clk_cnt_d = s_clk_cnt_q;
|
||||
if (s_clk_cnt_q == s_clint_clkdiv_q) begin
|
||||
s_clk_cnt_d = '0;
|
||||
end else begin
|
||||
s_clk_cnt_d = s_clk_cnt_q + 1'b1;
|
||||
end
|
||||
end
|
||||
dffr #(8) u_clk_cnt_dffr (
|
||||
clk_i,
|
||||
rst_n_i,
|
||||
s_clk_cnt_d,
|
||||
s_clk_cnt_q
|
||||
);
|
||||
|
||||
|
||||
assign s_clint_mtime_en = s_clk_cnt_q == s_clint_clkdiv_q;
|
||||
assign s_clint_mtime_d = s_clint_mtime_q + 1'b1;
|
||||
dffer #(64) u_clint_mtime_dffer (
|
||||
clk_i,
|
||||
rst_n_i,
|
||||
s_clint_mtime_en,
|
||||
s_clint_mtime_d,
|
||||
s_clint_mtime_q
|
||||
);
|
||||
|
||||
|
||||
assign s_clint_mtimecmp_en = s_nmi_wr_hdshk && (nmi.addr[7:0] == `NATV_CLINT_MTIMECMPL || nmi.addr[7:0] == `NATV_CLINT_MTIMECMPH);
|
||||
always_comb begin
|
||||
s_clint_mtimecmp_d = s_clint_mtimecmp_q;
|
||||
if (nmi.addr[7:0] == `NATV_CLINT_MTIMECMPL) begin
|
||||
if (nmi.wstrb[0]) s_clint_mtimecmp_d[7:0] = nmi.wdata[7:0];
|
||||
if (nmi.wstrb[1]) s_clint_mtimecmp_d[15:8] = nmi.wdata[15:8];
|
||||
if (nmi.wstrb[2]) s_clint_mtimecmp_d[23:16] = nmi.wdata[23:16];
|
||||
if (nmi.wstrb[3]) s_clint_mtimecmp_d[31:24] = nmi.wdata[31:24];
|
||||
end else if (nmi.addr[7:0] == `NATV_CLINT_MTIMECMPH) begin
|
||||
if (nmi.wstrb[0]) s_clint_mtimecmp_d[39:32] = nmi.wdata[7:0];
|
||||
if (nmi.wstrb[1]) s_clint_mtimecmp_d[47:40] = nmi.wdata[15:8];
|
||||
if (nmi.wstrb[2]) s_clint_mtimecmp_d[55:48] = nmi.wdata[23:16];
|
||||
if (nmi.wstrb[3]) s_clint_mtimecmp_d[63:56] = nmi.wdata[31:24];
|
||||
end
|
||||
end
|
||||
dfferh #(64) u_clint_mtimecmp_dfferh (
|
||||
clk_i,
|
||||
rst_n_i,
|
||||
s_clint_mtimecmp_en,
|
||||
s_clint_mtimecmp_d,
|
||||
s_clint_mtimecmp_q
|
||||
);
|
||||
|
||||
|
||||
assign s_clint_msip_en = s_nmi_wr_hdshk && nmi.addr[7:0] == `NATV_CLINT_MSIP;
|
||||
assign s_clint_msip_d = nmi.wdata[0];
|
||||
dffer #(1) u_clint_msip_dffer(
|
||||
clk_i,
|
||||
rst_n_i,
|
||||
s_clint_msip_en,
|
||||
s_clint_msip_d,
|
||||
s_clint_msip_q
|
||||
);
|
||||
|
||||
assign s_nmi_ready_d = nmi.valid && (~s_nmi_ready_q);
|
||||
dffr #(1) u_nmi_ready_dffr (
|
||||
clk_i,
|
||||
rst_n_i,
|
||||
s_nmi_ready_d,
|
||||
s_nmi_ready_q
|
||||
);
|
||||
|
||||
assign s_nmi_rdata_en = s_nmi_rd_hdshk;
|
||||
always_comb begin
|
||||
s_nmi_rdata_d = s_nmi_rdata_q;
|
||||
unique case (nmi.addr[7:0])
|
||||
`NATV_CLINT_CLKDIV: s_nmi_rdata_d = {24'd0, s_clint_clkdiv_q};
|
||||
`NATV_CLINT_MTIMEL: s_nmi_rdata_d = s_clint_mtime_q[31:0];
|
||||
`NATV_CLINT_MTIMEH: s_nmi_rdata_d = s_clint_mtime_q[63:32];
|
||||
`NATV_CLINT_MTIMECMPL: s_nmi_rdata_d = s_clint_mtimecmp_q[31:0];
|
||||
`NATV_CLINT_MTIMECMPH: s_nmi_rdata_d = s_clint_mtimecmp_q[63:32];
|
||||
`NATV_CLINT_MSIP: s_nmi_rdata_d = {31'd0, s_clint_msip_q};
|
||||
default: s_nmi_rdata_d = s_nmi_rdata_q;
|
||||
endcase
|
||||
end
|
||||
dffer #(32) u_nmi_rdata_dffer (
|
||||
clk_i,
|
||||
rst_n_i,
|
||||
s_nmi_rdata_en,
|
||||
s_nmi_rdata_d,
|
||||
s_nmi_rdata_q
|
||||
);
|
||||
|
||||
endmodule
|
||||
@@ -51,6 +51,7 @@ Emulator::Emulator(cxxopts::ParseResult &res)
|
||||
flash_init(args.image.c_str());
|
||||
|
||||
dutPtr = new Vretrosoc_top;
|
||||
dutPtr->core_sel_i = 0;
|
||||
reset();
|
||||
|
||||
if (args.dumpWave)
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
../../ip/native/dma_core.sv
|
||||
../../ip/native/dma.sv
|
||||
../../ip/native/sysctrl.sv
|
||||
../../ip/native/clint.sv
|
||||
../../ip/native/simple_timer.sv
|
||||
../../ip/native/simple_uart.sv
|
||||
../../ip/native/simple_gpio.sv
|
||||
|
||||
@@ -104,6 +104,7 @@ LDS_PATH := $(ROOT_PATH)/crt/flash_$(LINK_TYPE).lds
|
||||
asm:
|
||||
cd app/asm && make
|
||||
cp -rf app/asm/hello-asm.flash .sw_build/retrosoc_fw.hex
|
||||
cp -rf app/asm/hello-asm.bin .sw_build/retrosoc_fw.bin
|
||||
|
||||
firmware:
|
||||
@mkdir -p .sw_build
|
||||
|
||||
@@ -295,8 +295,9 @@ module retrosoc_tb;
|
||||
$fsdbDumpfile("retrosoc_tb.fsdb");
|
||||
$fsdbDumpvars(0);
|
||||
$fsdbDumpMDA();
|
||||
#398844962;
|
||||
// #398844962;
|
||||
// #867652;
|
||||
#21149063;
|
||||
// #1667652;
|
||||
// #327820116;
|
||||
// #327179489;
|
||||
|
||||
@@ -29,6 +29,7 @@ module ip_natv_wrapper (
|
||||
qspi_if.dut qspi,
|
||||
nmi_if.master dma_nmi,
|
||||
sysctrl_if.dut sysctrl,
|
||||
simp_clint_if.dut clint,
|
||||
// irq
|
||||
output logic [2:0] irq_o
|
||||
// verilog_format: on
|
||||
@@ -46,6 +47,7 @@ module ip_natv_wrapper (
|
||||
nmi_if u_qspi_nmi_if ();
|
||||
nmi_if u_dma_nmi_if ();
|
||||
nmi_if u_sysctrl_nmi_if ();
|
||||
nmi_if u_clint_nmi_if ();
|
||||
|
||||
dma_hw_trg_if u_dma_hw_trg_if ();
|
||||
|
||||
@@ -127,6 +129,11 @@ module ip_natv_wrapper (
|
||||
assign u_sysctrl_nmi_if.wdata = nmi.wdata;
|
||||
assign u_sysctrl_nmi_if.wstrb = nmi.wstrb;
|
||||
|
||||
assign u_clint_nmi_if.valid = nmi.valid && (nmi.addr[31:28] == `NATV_IP_START && nmi.addr[15:8] == `NMI_CLINT_START);
|
||||
assign u_clint_nmi_if.addr = nmi.addr;
|
||||
assign u_clint_nmi_if.wdata = nmi.wdata;
|
||||
assign u_clint_nmi_if.wstrb = nmi.wstrb;
|
||||
|
||||
// verilog_format: off
|
||||
assign nmi.ready = (u_gpio_nmi_if.valid & u_gpio_nmi_if.ready) |
|
||||
(u_uart_nmi_if.valid & u_uart_nmi_if.ready) |
|
||||
@@ -139,7 +146,8 @@ module ip_natv_wrapper (
|
||||
(u_onewire_nmi_if.valid & u_onewire_nmi_if.ready) |
|
||||
(u_qspi_nmi_if.valid & u_qspi_nmi_if.ready) |
|
||||
(u_dma_nmi_if.valid & u_dma_nmi_if.ready) |
|
||||
(u_sysctrl_nmi_if.valid & u_sysctrl_nmi_if.ready);
|
||||
(u_sysctrl_nmi_if.valid & u_sysctrl_nmi_if.ready) |
|
||||
(u_clint_nmi_if.valid & u_clint_nmi_if.ready);
|
||||
|
||||
assign nmi.rdata = ({32{(u_gpio_nmi_if.valid & u_gpio_nmi_if.ready)}} & u_gpio_nmi_if.rdata) |
|
||||
({32{(u_uart_nmi_if.valid & u_uart_nmi_if.ready)}} & u_uart_nmi_if.rdata) |
|
||||
@@ -152,7 +160,8 @@ module ip_natv_wrapper (
|
||||
({32{(u_onewire_nmi_if.valid & u_onewire_nmi_if.ready)}} & u_onewire_nmi_if.rdata) |
|
||||
({32{(u_qspi_nmi_if.valid & u_qspi_nmi_if.ready)}} & u_qspi_nmi_if.rdata) |
|
||||
({32{(u_dma_nmi_if.valid & u_dma_nmi_if.ready)}} & u_dma_nmi_if.rdata) |
|
||||
({32{(u_sysctrl_nmi_if.valid & u_sysctrl_nmi_if.ready)}} & u_sysctrl_nmi_if.rdata);
|
||||
({32{(u_sysctrl_nmi_if.valid & u_sysctrl_nmi_if.ready)}} & u_sysctrl_nmi_if.rdata) |
|
||||
({32{(u_clint_nmi_if.valid & u_clint_nmi_if.ready)}} & u_clint_nmi_if.rdata);
|
||||
// verilog_format: on
|
||||
|
||||
assign irq_o[0] = uart.irq_o;
|
||||
@@ -248,4 +257,11 @@ module ip_natv_wrapper (
|
||||
.nmi (u_sysctrl_nmi_if),
|
||||
.sysctrl(sysctrl)
|
||||
);
|
||||
|
||||
nmi_clint u_nmi_clint (
|
||||
.clk_i (clk_i),
|
||||
.rst_n_i(rst_n_i),
|
||||
.nmi (u_clint_nmi_if),
|
||||
.clint (clint)
|
||||
);
|
||||
endmodule
|
||||
@@ -40,6 +40,7 @@
|
||||
`define NMI_QSPI_START 8'h90
|
||||
`define NMI_DMA_START 8'hA0
|
||||
`define NMI_SYSCTRL_START 8'hB0
|
||||
`define NMI_CLINT_START 8'hC0
|
||||
// APB IP REG ADDR
|
||||
`define APB_ARCHINFO_START 8'h00
|
||||
`define APB_RNG_START 8'h10
|
||||
|
||||
@@ -54,6 +54,7 @@ module retrosoc (
|
||||
qspi_if u_natv_qspi_if();
|
||||
qspi_if u_apb_qspi_if();
|
||||
sysctrl_if u_sysctrl_if();
|
||||
simp_clint_if u_clint_if();
|
||||
// verilog_format: on
|
||||
|
||||
// irq
|
||||
@@ -89,15 +90,13 @@ module retrosoc (
|
||||
assign qspi.spi_io_out_o = ~u_sysctrl_if.qspi_sel_o ? u_natv_qspi_if.spi_io_out_o : u_apb_qspi_if.spi_io_out_o;
|
||||
assign qspi.irq_o = '0;
|
||||
|
||||
// PicoRV32 built-in interrupt
|
||||
// 0 Timer Interrupt
|
||||
// 1 EBREAK/ECALL or Illegal Instruction
|
||||
// 2 BUS Error (Unalign Memory Access)
|
||||
assign s_irq[4:0] = 5'd0;
|
||||
assign s_irq[5] = extn_irq_i;
|
||||
assign s_irq[8:6] = s_natv_irq;
|
||||
assign s_irq[17:9] = s_apb_irq;
|
||||
assign s_irq[31:18] = 14'd0;
|
||||
// interrupt
|
||||
assign s_irq[0] = u_clint_if.tmr_irq_o;
|
||||
assign s_irq[1] = u_clint_if.sfr_irq_o;
|
||||
assign s_irq[2] = extn_irq_i;
|
||||
assign s_irq[5:3] = s_natv_irq;
|
||||
assign s_irq[14:6] = s_apb_irq;
|
||||
assign s_irq[31:15] = 17'd0;
|
||||
// verilog_format: on
|
||||
|
||||
core_wrapper u_core_wrapper (
|
||||
@@ -138,6 +137,7 @@ module retrosoc (
|
||||
.qspi (u_natv_qspi_if),
|
||||
.dma_nmi (u_dma_nmi_if),
|
||||
.sysctrl (u_sysctrl_if),
|
||||
.clint (u_clint_if),
|
||||
.irq_o (s_natv_irq)
|
||||
);
|
||||
|
||||
|
||||
@@ -24,7 +24,10 @@ module user_core_top (
|
||||
// verilog_format: off
|
||||
nmi_if u_user_1_nmi_if ();
|
||||
nmi_if u_user_2_nmi_if ();
|
||||
logic [31:0] s_user_1_irq, s_user_2_irq;
|
||||
nmi_if u_user_3_nmi_if ();
|
||||
logic [31:0] s_user_1_irq;
|
||||
logic [31:0] s_user_2_irq;
|
||||
logic [31:0] s_user_3_irq;
|
||||
// ...
|
||||
// verilog_format: on
|
||||
always_comb begin
|
||||
@@ -38,6 +41,9 @@ module user_core_top (
|
||||
u_user_2_nmi_if.rdata = '0;
|
||||
u_user_2_nmi_if.ready = '0;
|
||||
s_user_2_irq = '0;
|
||||
u_user_3_nmi_if.rdata = '0;
|
||||
u_user_3_nmi_if.ready = '0;
|
||||
s_user_3_irq = '0;
|
||||
unique case (sel_i)
|
||||
5'd1: begin
|
||||
nmi.valid = u_user_1_nmi_if.valid;
|
||||
@@ -57,6 +63,15 @@ module user_core_top (
|
||||
u_user_2_nmi_if.ready = nmi.ready;
|
||||
s_user_2_irq = irq_i;
|
||||
end
|
||||
5'd3: begin
|
||||
nmi.valid = u_user_3_nmi_if.valid;
|
||||
nmi.addr = u_user_3_nmi_if.addr;
|
||||
nmi.wdata = u_user_3_nmi_if.wdata;
|
||||
nmi.wstrb = u_user_3_nmi_if.wstrb;
|
||||
u_user_3_nmi_if.rdata = nmi.rdata;
|
||||
u_user_3_nmi_if.ready = nmi.ready;
|
||||
s_user_3_irq = irq_i;
|
||||
end
|
||||
default: begin
|
||||
nmi.valid = '0;
|
||||
nmi.addr = '0;
|
||||
@@ -68,6 +83,9 @@ module user_core_top (
|
||||
u_user_2_nmi_if.rdata = '0;
|
||||
u_user_2_nmi_if.ready = '0;
|
||||
s_user_2_irq = '0;
|
||||
u_user_3_nmi_if.rdata = '0;
|
||||
u_user_3_nmi_if.ready = '0;
|
||||
s_user_3_irq = '0;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
@@ -80,18 +98,18 @@ module user_core_top (
|
||||
.nmi (u_user_1_nmi_if)
|
||||
);
|
||||
|
||||
// user_core_design_username2 #(2) u_user_core_design_username2 (
|
||||
// .clk_i (clk_i),
|
||||
// .rst_n_i(rst_n_i),
|
||||
// .irq_i (s_user_2_irq),
|
||||
// .nmi (u_user_2_nmi_if)
|
||||
// );
|
||||
user_core_design_username2 #(2) u_user_core_design_username2 (
|
||||
.clk_i (clk_i),
|
||||
.rst_n_i(rst_n_i),
|
||||
.irq_i (s_user_2_irq),
|
||||
.nmi (u_user_2_nmi_if)
|
||||
);
|
||||
|
||||
// user_core_design_username2 #(3) u_user_core_design_username3 (
|
||||
// .clk_i (clk_i),
|
||||
// .rst_n_i(rst_n_i),
|
||||
// .irq_i (s_user_2_irq),
|
||||
// .nmi (u_user_2_nmi_if)
|
||||
// );
|
||||
user_core_design_username3 #(3) u_user_core_design_username3 (
|
||||
.clk_i (clk_i),
|
||||
.rst_n_i(rst_n_i),
|
||||
.irq_i (s_user_3_irq),
|
||||
.nmi (u_user_3_nmi_if)
|
||||
);
|
||||
|
||||
endmodule
|
||||
@@ -21,27 +21,30 @@
|
||||
`timescale 1 ns / 1 ps
|
||||
|
||||
module retrosoc_top (
|
||||
input wire ext_clk_i,
|
||||
input wire rst_n_i
|
||||
input wire ext_clk_i,
|
||||
input wire rst_n_i,
|
||||
input wire [4:0] core_sel_i
|
||||
);
|
||||
|
||||
wire s_clk;
|
||||
wire s_rst_n;
|
||||
wire s_clk_bypass;
|
||||
wire s_uart_tx;
|
||||
wire s_psram_sck;
|
||||
wire s_psram_nss0;
|
||||
wire s_psram_dat0;
|
||||
wire s_psram_dat1;
|
||||
wire s_psram_dat2;
|
||||
wire s_psram_dat3;
|
||||
wire s_spfs_sck;
|
||||
wire s_spfs_nss;
|
||||
wire s_spfs_mosi;
|
||||
wire s_spfs_miso;
|
||||
wire s_clk;
|
||||
wire s_rst_n;
|
||||
wire [4:0] s_core_sel;
|
||||
wire s_clk_bypass;
|
||||
wire s_uart_tx;
|
||||
wire s_psram_sck;
|
||||
wire s_psram_nss0;
|
||||
wire s_psram_dat0;
|
||||
wire s_psram_dat1;
|
||||
wire s_psram_dat2;
|
||||
wire s_psram_dat3;
|
||||
wire s_spfs_sck;
|
||||
wire s_spfs_nss;
|
||||
wire s_spfs_mosi;
|
||||
wire s_spfs_miso;
|
||||
|
||||
assign s_clk = ext_clk_i;
|
||||
assign s_rst_n = rst_n_i;
|
||||
assign s_core_sel = core_sel_i;
|
||||
assign s_clk_bypass = 1'b1;
|
||||
retrosoc_asic u_retrosoc_asic (
|
||||
.xi_i_pad (),
|
||||
@@ -51,11 +54,11 @@ module retrosoc_top (
|
||||
.tmr_capch_i_pad (),
|
||||
.extn_irq_i_pad (),
|
||||
`ifdef CORE_MDD
|
||||
.core_sel_0_i_pad (),
|
||||
.core_sel_1_i_pad (),
|
||||
.core_sel_2_i_pad (),
|
||||
.core_sel_3_i_pad (),
|
||||
.core_sel_4_i_pad (),
|
||||
.core_sel_0_i_pad (s_core_sel[0]),
|
||||
.core_sel_1_i_pad (s_core_sel[1]),
|
||||
.core_sel_2_i_pad (s_core_sel[2]),
|
||||
.core_sel_3_i_pad (s_core_sel[3]),
|
||||
.core_sel_4_i_pad (s_core_sel[4]),
|
||||
`endif
|
||||
`ifdef IP_MDD
|
||||
.user_gpio_0_io_pad (),
|
||||
|
||||
@@ -0,0 +1,159 @@
|
||||
set sdc_version 2.1
|
||||
|
||||
set_units -time ns -capacitance pF -current mA -voltage V -resistance kOhm
|
||||
###############################################################################
|
||||
#
|
||||
# Units
|
||||
# capacitive_load_unit : 1 pF
|
||||
# current_unit : 0.001 A
|
||||
# resistance_unit : 1 kOhm
|
||||
# time_unit : 1 ns
|
||||
# voltage_unit : 1 V
|
||||
###############################################################################
|
||||
set_operating_conditions -analysis_type on_chip_variation -library [get_libs {ETSCA_N55_H7BH_DSS_PRCMAX_V1P0_T125.db:ETSCA_N55_H7BH_DSS_PRCMAX_V1P0_T125}]
|
||||
###############################################################################
|
||||
# Clock Related Information
|
||||
###############################################################################
|
||||
create_clock -name CLK_u_xtal_io_pad_u_P65_1233_PWE_XC -period 41.666668 -waveform { 0 20.833334 } [get_pins {u_xtal_io_pad.u_P65_1233_PWE/XC}]
|
||||
set_clock_uncertainty -setup 0.2 [get_clocks {CLK_u_xtal_io_pad_u_P65_1233_PWE_XC}]
|
||||
set_clock_uncertainty -hold 0.1 [get_clocks {CLK_u_xtal_io_pad_u_P65_1233_PWE_XC}]
|
||||
create_clock -name CLK_u_extclk_i_pad_u_P65_1233_PBMUX_C -period 10 -waveform { 0 5 } [get_pins {u_extclk_i_pad.u_P65_1233_PBMUX/C}]
|
||||
set_clock_uncertainty -setup 0.2 [get_clocks {CLK_u_extclk_i_pad_u_P65_1233_PBMUX_C}]
|
||||
set_clock_uncertainty -hold 0.1 [get_clocks {CLK_u_extclk_i_pad_u_P65_1233_PBMUX_C}]
|
||||
create_clock -name CLK_u_rcu_u_pll_clk_buf_u_BUFX0P7H7L_Y -period 41.666668 -waveform { 0 20.833334 } [get_pins {u_rcu.u_pll_clk_buf.u_BUFX0P7H7L/Y}]
|
||||
set_clock_uncertainty -setup 0.2 [get_clocks {CLK_u_rcu_u_pll_clk_buf_u_BUFX0P7H7L_Y}]
|
||||
set_clock_uncertainty -hold 0.1 [get_clocks {CLK_u_rcu_u_pll_clk_buf_u_BUFX0P7H7L_Y}]
|
||||
create_clock -name u_audclk_i_pad.u_P65_1233_PBMUX_C -period 81.380 -waveform { 0 40.690 } [get_pins {u_audclk_i_pad.u_P65_1233_PBMUX/C}]
|
||||
set_clock_uncertainty -setup 0.2 [get_clocks {u_audclk_i_pad.u_P65_1233_PBMUX_C}]
|
||||
set_clock_uncertainty -hold 0.1 [get_clocks {u_audclk_i_pad.u_P65_1233_PBMUX_C}]
|
||||
set_timing_derate -cell_delay -net_delay -late 1
|
||||
set_timing_derate -net_delay -clock -early 0.95
|
||||
set_timing_derate -net_delay -data -early 1
|
||||
set_timing_derate -net_delay -clock -early 0.95
|
||||
set_timing_derate -net_delay -data -early 1
|
||||
set_timing_derate -cell_delay -clock -early 0.95
|
||||
set_timing_derate -cell_delay -data -early 1
|
||||
###############################################################################
|
||||
# Derived Clock related information
|
||||
###############################################################################
|
||||
# create_generated_clock -name CLK_sys_clk_buf -source [get_pins {u_rcu.u_ext_clk_buf.u_BUFX0P7H7L/Y}] -divide_by 1 -add -master_clock [get_clocks {CLK_u_extclk_i_pad_u_P65_1233_PBMUX_C}] [get_pins {u_rcu.u_sys_clk_buf.u_BUFX0P7H7L/Y}]
|
||||
# set_clock_uncertainty -setup 0.2 [get_clocks {CLK_sys_clk_buf}]
|
||||
# set_clock_uncertainty -hold 0.1 [get_clocks {CLK_sys_clk_buf}]
|
||||
# create_generated_clock -name CLK_cust_qspi_spi_clk_o -source [get_pins {u_rcu.u_sys_clk_buf.u_BUFX0P7H7L/Y}] -divide_by 2 [get_ports {cust_qspi_spi_clk_o_pad}]
|
||||
# set_clock_uncertainty -setup 0.2 [get_clocks {CLK_cust_qspi_spi_clk_o}]
|
||||
# set_clock_uncertainty -hold 0.1 [get_clocks {CLK_cust_qspi_spi_clk_o}]
|
||||
# create_generated_clock -name CLK_cust_spfs_clk_o -source [get_pins {u_rcu.u_sys_clk_buf.u_BUFX0P7H7L/Y}] -divide_by 2 [get_ports {cust_spfs_clk_o_pad}]
|
||||
# set_clock_uncertainty -setup 0.2 [get_clocks {CLK_cust_spfs_clk_o}]
|
||||
# set_clock_uncertainty -hold 0.1 [get_clocks {CLK_cust_spfs_clk_o}]
|
||||
# create_generated_clock -name CLK_cust_psram_sclk_o -source [get_pins {u_rcu.u_sys_clk_buf.u_BUFX0P7H7L/Y}] -divide_by 2 [get_ports {cust_psram_sclk_o_pad}]
|
||||
# set_clock_uncertainty -setup 0.2 [get_clocks {CLK_cust_psram_sclk_o}]
|
||||
# set_clock_uncertainty -hold 0.1 [get_clocks {CLK_cust_psram_sclk_o}]
|
||||
# set_clock_groups -asynchronous -name CLK_u_xtal_io_pad_u_P65_1233_PWE_XC_1 -group [get_clocks {CLK_u_xtal_io_pad_u_P65_1233_PWE_XC}] -group [get_clocks {CLK_u_extclk_i_pad_u_P65_1233_PBMUX_C CLK_sys_clk_buf CLK_cust_qspi_spi_clk_o CLK_cust_psram_sclk_o CLK_cust_spfs_clk_o}] -group [get_clocks {CLK_u_rcu_u_pll_clk_buf_u_BUFX0P7H7L_Y}]
|
||||
###############################################################################
|
||||
# Point to Point exceptions
|
||||
###############################################################################
|
||||
# group_path -name CLK_u_xtal_io_pad_u_P65_1233_PWE_XC_in2reg -from [get_ports {xi_i_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_rx_i_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_miso_i_pad}] -to [get_clocks {CLK_u_xtal_io_pad_u_P65_1233_PWE_XC}]
|
||||
# group_path -name CLK_u_xtal_io_pad_u_P65_1233_PWE_XC_reg2out -from [get_clocks {CLK_u_xtal_io_pad_u_P65_1233_PWE_XC}] -to [get_ports {xo_o_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad sys_clkdiv4_o_pad uart_tx_o_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_tx_o_pad cust_uart_rx_i_pad cust_pwm_pwm_0_o_pad cust_pwm_pwm_1_o_pad cust_pwm_pwm_2_o_pad cust_pwm_pwm_3_o_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_spi_clk_o_pad cust_qspi_spi_csn_0_o_pad cust_qspi_spi_csn_1_o_pad cust_qspi_spi_csn_2_o_pad cust_qspi_spi_csn_3_o_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sclk_o_pad cust_psram_ce_o_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_clk_o_pad cust_spfs_cs_o_pad cust_spfs_mosi_o_pad cust_spfs_miso_i_pad}]
|
||||
# group_path -name CLK_u_extclk_i_pad_u_P65_1233_PBMUX_C_in2reg -from [get_ports {xi_i_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_rx_i_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_miso_i_pad}] -to [get_clocks {CLK_u_extclk_i_pad_u_P65_1233_PBMUX_C}]
|
||||
# group_path -name CLK_u_extclk_i_pad_u_P65_1233_PBMUX_C_reg2out -from [get_clocks {CLK_u_extclk_i_pad_u_P65_1233_PBMUX_C}] -to [get_ports {xo_o_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad sys_clkdiv4_o_pad uart_tx_o_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_tx_o_pad cust_uart_rx_i_pad cust_pwm_pwm_0_o_pad cust_pwm_pwm_1_o_pad cust_pwm_pwm_2_o_pad cust_pwm_pwm_3_o_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_spi_clk_o_pad cust_qspi_spi_csn_0_o_pad cust_qspi_spi_csn_1_o_pad cust_qspi_spi_csn_2_o_pad cust_qspi_spi_csn_3_o_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sclk_o_pad cust_psram_ce_o_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_clk_o_pad cust_spfs_cs_o_pad cust_spfs_mosi_o_pad cust_spfs_miso_i_pad}]
|
||||
# group_path -name CLK_u_rcu_u_pll_clk_buf_u_BUFX0P7H7L_Y_in2reg -from [get_ports {xi_i_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_rx_i_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_miso_i_pad}] -to [get_clocks {CLK_u_rcu_u_pll_clk_buf_u_BUFX0P7H7L_Y}]
|
||||
# group_path -name CLK_u_rcu_u_pll_clk_buf_u_BUFX0P7H7L_Y_reg2out -from [get_clocks {CLK_u_rcu_u_pll_clk_buf_u_BUFX0P7H7L_Y}] -to [get_ports {xo_o_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad sys_clkdiv4_o_pad uart_tx_o_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_tx_o_pad cust_uart_rx_i_pad cust_pwm_pwm_0_o_pad cust_pwm_pwm_1_o_pad cust_pwm_pwm_2_o_pad cust_pwm_pwm_3_o_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_spi_clk_o_pad cust_qspi_spi_csn_0_o_pad cust_qspi_spi_csn_1_o_pad cust_qspi_spi_csn_2_o_pad cust_qspi_spi_csn_3_o_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sclk_o_pad cust_psram_ce_o_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_clk_o_pad cust_spfs_cs_o_pad cust_spfs_mosi_o_pad cust_spfs_miso_i_pad}]
|
||||
# group_path -name CLK_sys_clk_buf_in2reg -from [get_ports {xi_i_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_rx_i_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_miso_i_pad}] -to [get_clocks {CLK_sys_clk_buf}]
|
||||
# group_path -name CLK_sys_clk_buf_reg2out -from [get_clocks {CLK_sys_clk_buf}] -to [get_ports {xo_o_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad sys_clkdiv4_o_pad uart_tx_o_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_tx_o_pad cust_uart_rx_i_pad cust_pwm_pwm_0_o_pad cust_pwm_pwm_1_o_pad cust_pwm_pwm_2_o_pad cust_pwm_pwm_3_o_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_spi_clk_o_pad cust_qspi_spi_csn_0_o_pad cust_qspi_spi_csn_1_o_pad cust_qspi_spi_csn_2_o_pad cust_qspi_spi_csn_3_o_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sclk_o_pad cust_psram_ce_o_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_clk_o_pad cust_spfs_cs_o_pad cust_spfs_mosi_o_pad cust_spfs_miso_i_pad}]
|
||||
# group_path -name CLK_cust_qspi_spi_clk_o_in2reg -from [get_ports {xi_i_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_rx_i_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_miso_i_pad}] -to [get_clocks {CLK_cust_qspi_spi_clk_o}]
|
||||
# group_path -name CLK_cust_qspi_spi_clk_o_reg2out -from [get_clocks {CLK_cust_qspi_spi_clk_o}] -to [get_ports {xo_o_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad sys_clkdiv4_o_pad uart_tx_o_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_tx_o_pad cust_uart_rx_i_pad cust_pwm_pwm_0_o_pad cust_pwm_pwm_1_o_pad cust_pwm_pwm_2_o_pad cust_pwm_pwm_3_o_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_spi_clk_o_pad cust_qspi_spi_csn_0_o_pad cust_qspi_spi_csn_1_o_pad cust_qspi_spi_csn_2_o_pad cust_qspi_spi_csn_3_o_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sclk_o_pad cust_psram_ce_o_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_clk_o_pad cust_spfs_cs_o_pad cust_spfs_mosi_o_pad cust_spfs_miso_i_pad}]
|
||||
# group_path -name CLK_cust_psram_sclk_o_in2reg -from [get_ports {xi_i_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_rx_i_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_miso_i_pad}] -to [get_clocks {CLK_cust_psram_sclk_o}]
|
||||
# group_path -name CLK_cust_psram_sclk_o_reg2out -from [get_clocks {CLK_cust_psram_sclk_o}] -to [get_ports {xo_o_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad sys_clkdiv4_o_pad uart_tx_o_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_tx_o_pad cust_uart_rx_i_pad cust_pwm_pwm_0_o_pad cust_pwm_pwm_1_o_pad cust_pwm_pwm_2_o_pad cust_pwm_pwm_3_o_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_spi_clk_o_pad cust_qspi_spi_csn_0_o_pad cust_qspi_spi_csn_1_o_pad cust_qspi_spi_csn_2_o_pad cust_qspi_spi_csn_3_o_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sclk_o_pad cust_psram_ce_o_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_clk_o_pad cust_spfs_cs_o_pad cust_spfs_mosi_o_pad cust_spfs_miso_i_pad}]
|
||||
# group_path -name CLK_cust_spfs_clk_o_in2reg -from [get_ports {xi_i_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_rx_i_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_miso_i_pad}] -to [get_clocks {CLK_cust_spfs_clk_o}]
|
||||
# group_path -name CLK_cust_spfs_clk_o_reg2out -from [get_clocks {CLK_cust_spfs_clk_o}] -to [get_ports {xo_o_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad sys_clkdiv4_o_pad uart_tx_o_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_tx_o_pad cust_uart_rx_i_pad cust_pwm_pwm_0_o_pad cust_pwm_pwm_1_o_pad cust_pwm_pwm_2_o_pad cust_pwm_pwm_3_o_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_spi_clk_o_pad cust_qspi_spi_csn_0_o_pad cust_qspi_spi_csn_1_o_pad cust_qspi_spi_csn_2_o_pad cust_qspi_spi_csn_3_o_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sclk_o_pad cust_psram_ce_o_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_clk_o_pad cust_spfs_cs_o_pad cust_spfs_mosi_o_pad cust_spfs_miso_i_pad}]
|
||||
# group_path -name all_in2out -from [get_ports {xi_i_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_rx_i_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_miso_i_pad}] -to [get_ports {xo_o_pad extclk_i_pad pll_cfg_0_i_pad pll_cfg_1_i_pad pll_cfg_2_i_pad clk_bypass_i_pad ext_rst_n_i_pad sys_clkdiv4_o_pad uart_tx_o_pad uart_rx_i_pad gpio_0_io_pad gpio_1_io_pad gpio_2_io_pad gpio_3_io_pad gpio_4_io_pad gpio_5_io_pad gpio_6_io_pad gpio_7_io_pad gpio_8_io_pad gpio_9_io_pad gpio_10_io_pad gpio_11_io_pad gpio_12_io_pad gpio_13_io_pad gpio_14_io_pad gpio_15_io_pad irq_pin_i_pad cust_uart_tx_o_pad cust_uart_rx_i_pad cust_pwm_pwm_0_o_pad cust_pwm_pwm_1_o_pad cust_pwm_pwm_2_o_pad cust_pwm_pwm_3_o_pad cust_ps2_ps2_clk_i_pad cust_ps2_ps2_dat_i_pad cust_i2c_scl_io_pad cust_i2c_sda_io_pad cust_qspi_spi_clk_o_pad cust_qspi_spi_csn_0_o_pad cust_qspi_spi_csn_1_o_pad cust_qspi_spi_csn_2_o_pad cust_qspi_spi_csn_3_o_pad cust_qspi_dat_0_io_pad cust_qspi_dat_1_io_pad cust_qspi_dat_2_io_pad cust_qspi_dat_3_io_pad cust_psram_sclk_o_pad cust_psram_ce_o_pad cust_psram_sio0_io_pad cust_psram_sio1_io_pad cust_psram_sio2_io_pad cust_psram_sio3_io_pad cust_spfs_clk_o_pad cust_spfs_cs_o_pad cust_spfs_mosi_o_pad cust_spfs_miso_i_pad}]
|
||||
# set_case_analysis 1 [get_pins {u_rcu.u_sys_mux.u_MUX2X0P5H7L/S0}]
|
||||
# set_load -pin_load 8 [get_ports {xo_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {extclk_i_pad}]
|
||||
# set_load -pin_load 8 [get_ports {pll_cfg_0_i_pad}]
|
||||
# set_load -pin_load 8 [get_ports {pll_cfg_1_i_pad}]
|
||||
# set_load -pin_load 8 [get_ports {pll_cfg_2_i_pad}]
|
||||
# set_load -pin_load 8 [get_ports {clk_bypass_i_pad}]
|
||||
# set_load -pin_load 8 [get_ports {ext_rst_n_i_pad}]
|
||||
# set_load -pin_load 8 [get_ports {sys_clkdiv4_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {uart_tx_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {uart_rx_i_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_0_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_1_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_2_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_3_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_4_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_5_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_6_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_7_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_8_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_9_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_10_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_11_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_12_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_13_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_14_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {gpio_15_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {irq_pin_i_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_uart_tx_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_uart_rx_i_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_pwm_pwm_0_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_pwm_pwm_1_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_pwm_pwm_2_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_pwm_pwm_3_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_ps2_ps2_clk_i_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_ps2_ps2_dat_i_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_i2c_scl_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_i2c_sda_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_qspi_spi_clk_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_qspi_spi_csn_0_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_qspi_spi_csn_1_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_qspi_spi_csn_2_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_qspi_spi_csn_3_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_qspi_dat_0_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_qspi_dat_1_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_qspi_dat_2_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_qspi_dat_3_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_psram_sclk_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_psram_ce_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_psram_sio0_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_psram_sio1_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_psram_sio2_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_psram_sio3_io_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_spfs_clk_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_spfs_cs_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_spfs_mosi_o_pad}]
|
||||
# set_load -pin_load 8 [get_ports {cust_spfs_miso_i_pad}]
|
||||
# set_wire_load_mode top
|
||||
# set_max_fanout 32 [current_design]
|
||||
# set_max_transition 1.7 [get_clocks {CLK_sys_clk_buf}] -clock_path -rise
|
||||
# set_max_transition 1.7 [get_clocks {CLK_sys_clk_buf}] -clock_path -fall
|
||||
# set_max_transition 3.4 [get_clocks {CLK_sys_clk_buf}] -data_path -rise
|
||||
# set_max_transition 3.4 [get_clocks {CLK_sys_clk_buf}] -data_path -fall
|
||||
# set_max_transition 3.4 [get_clocks {CLK_cust_qspi_spi_clk_o}] -clock_path -rise
|
||||
# set_max_transition 3.4 [get_clocks {CLK_cust_qspi_spi_clk_o}] -clock_path -fall
|
||||
# set_max_transition 6.8 [get_clocks {CLK_cust_qspi_spi_clk_o}] -data_path -rise
|
||||
# set_max_transition 6.8 [get_clocks {CLK_cust_qspi_spi_clk_o}] -data_path -fall
|
||||
# set_max_transition 7.083333 [get_clocks {CLK_u_xtal_io_pad_u_P65_1233_PWE_XC}] -clock_path -rise
|
||||
# set_max_transition 7.083333 [get_clocks {CLK_u_xtal_io_pad_u_P65_1233_PWE_XC}] -clock_path -fall
|
||||
# set_max_transition 14.166667 [get_clocks {CLK_u_xtal_io_pad_u_P65_1233_PWE_XC}] -data_path -rise
|
||||
# set_max_transition 14.166667 [get_clocks {CLK_u_xtal_io_pad_u_P65_1233_PWE_XC}] -data_path -fall
|
||||
# set_max_transition 3.4 [get_clocks {CLK_cust_psram_sclk_o}] -clock_path -rise
|
||||
# set_max_transition 3.4 [get_clocks {CLK_cust_psram_sclk_o}] -clock_path -fall
|
||||
# set_max_transition 6.8 [get_clocks {CLK_cust_psram_sclk_o}] -data_path -rise
|
||||
# set_max_transition 6.8 [get_clocks {CLK_cust_psram_sclk_o}] -data_path -fall
|
||||
# set_max_transition 1.7 [get_clocks {CLK_u_extclk_i_pad_u_P65_1233_PBMUX_C}] -clock_path -rise
|
||||
# set_max_transition 1.7 [get_clocks {CLK_u_extclk_i_pad_u_P65_1233_PBMUX_C}] -clock_path -fall
|
||||
# set_max_transition 3.4 [get_clocks {CLK_u_extclk_i_pad_u_P65_1233_PBMUX_C}] -data_path -rise
|
||||
# set_max_transition 3.4 [get_clocks {CLK_u_extclk_i_pad_u_P65_1233_PBMUX_C}] -data_path -fall
|
||||
# set_max_transition 3.4 [get_clocks {CLK_cust_spfs_clk_o}] -clock_path -rise
|
||||
# set_max_transition 3.4 [get_clocks {CLK_cust_spfs_clk_o}] -clock_path -fall
|
||||
# set_max_transition 6.8 [get_clocks {CLK_cust_spfs_clk_o}] -data_path -rise
|
||||
# set_max_transition 6.8 [get_clocks {CLK_cust_spfs_clk_o}] -data_path -fall
|
||||
# set_max_transition 7.083333 [get_clocks {CLK_u_rcu_u_pll_clk_buf_u_BUFX0P7H7L_Y}] -clock_path -rise
|
||||
# set_max_transition 7.083333 [get_clocks {CLK_u_rcu_u_pll_clk_buf_u_BUFX0P7H7L_Y}] -clock_path -fall
|
||||
# set_max_transition 14.166667 [get_clocks {CLK_u_rcu_u_pll_clk_buf_u_BUFX0P7H7L_Y}] -data_path -rise
|
||||
# set_max_transition 14.166667 [get_clocks {CLK_u_rcu_u_pll_clk_buf_u_BUFX0P7H7L_Y}] -data_path -fall
|
||||
# ###############################################################################
|
||||
# # POCV Information
|
||||
# ###############################################################################
|
||||
@@ -0,0 +1,17 @@
|
||||
# read lib
|
||||
read_liberty /nfs/share/home/zhuangchunan/proj/Flow_CX55/lib_data/ccslib/ics55_LLSC_H7CH_ss_rcworst_1p08_125_nldm.lib
|
||||
read_liberty /nfs/share/home/zhuangchunan/proj/Flow_CX55/lib_data/ccslib/ics55_LLSC_H7CL_ss_rcworst_1p08_125_nldm.lib
|
||||
read_liberty /nfs/share/home/zhuangchunan/proj/Flow_CX55/lib_data/ccslib/ics55_LLSC_H7CR_ss_rcworst_1p08_125_nldm.lib
|
||||
read_liberty /nfs/share/home/zhuangchunan/proj/Flow_CX55/lib_data/ccslib/ICSIOA_N55_3P3_ss_1p08_2p97_125c.lib
|
||||
read_verilog /nfs/share/home/zhaoxueyan/dataset_gj_test26/retrosoc_asic-cx55/retrosoc_asic_yosys.v
|
||||
link_design retrosoc_asic
|
||||
# read sdc
|
||||
read_sdc retrosoc_gen2.sdc
|
||||
|
||||
report_checks -path_delay min_max -path_group {CLK_src_xtal CLK_src_ext CLK_xtal_buf CLK_ext_buf CLK_pll CLK_pll_buf CLK_sys_mux_pll CLK_sys_mux_ext CLK_sys_clk_buf CLK_flash_clk_o CLK_cust_qspi_spi_clk_o CLK_cust_psram_sclk_o CLK_cust_spfs_clk_o} -sort_by_slack -slack_max 0.0 -group_path_count 50000 -endpoint_path_count 50000 > retrosoc_sta.log
|
||||
|
||||
# set_propagated_clock clk
|
||||
# read_spef gcd_sky130hd.spef
|
||||
# set_power_activity -input -activity .1
|
||||
# set_power_activity -input_port reset -activity 0
|
||||
# report_power
|
||||
Reference in new issue
Block a user