OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /altor32/trunk
    from Rev 15 to Rev 14
    Reverse comparison

Rev 15 → Rev 14

/rtl/core_pipelined/altor32.v
576,7 → 576,7
v_shift_imm = {26'b00,v_imm[5:0]};
// MTSPR/MFSPR operand
v_mxspr_imm = (v_reg_ra[15:0] | {5'b00000,v_mem_data_in[10:0]});
v_mxspr_imm = (v_reg_ra[15:0] | {5'b000000,v_mem_data_in[10:0]});
// Zero result
v_reg_result = 32'h00000000;
/rtl/soc/soc_pif.v File deleted
/rtl/soc/alt_soc.v
137,6 → 137,8
//-----------------------------------------------------------------
// Registers
//-----------------------------------------------------------------
wire alt_reset;
 
reg [31:0] v_irq_status;
reg [2:0] r_mem_sel;
wire [31:0] cpu_address;
148,13 → 150,50
 
reg [31:0] io_address;
reg [31:0] io_data_w;
wire [31:0] io_data_r;
reg [31:0] io_data_r;
reg [3:0] io_wr;
reg io_rd;
 
// UART
reg [7:0] uart_tx_data;
wire [7:0] uart_rx_data;
reg uart_wr;
reg uart_rd;
wire uart_tx_busy;
wire uart_rx_avail;
 
// Systick Timer
reg systick_intr;
reg [31:0] systick_count;
reg [31:0] systick_clk_count;
 
// Hi-res system clock tick counter
reg [31:0] hr_timer_cnt;
reg [31:0] hr_timer_match;
 
// IRQ Status
wire intr_in;
reg [31:0] irq_status;
reg [31:0] irq_mask;
 
// Watchdog
`ifdef SOC_CONF_ENABLE_WATCHDOG
reg watchdog_enable;
reg [15:0] watchdog_threshold;
reg watchdog_expired;
reg watchdog_load;
reg [15:0] watchdog_counter;
reg watchdog_alt_reset;
`endif
 
// SPI Flash
`ifdef SOC_CONF_ENABLE_SPI_FLASH
reg spi_flash_start;
wire spi_flash_busy;
reg [7:0] spi_flash_data_wr;
wire [7:0] spi_flash_data_rd;
`endif
 
// Output Signals
wire uart_tx_o;
reg [31:0] int_mem_addr_o;
165,38 → 204,10
reg [31:0] ext_io_data_o;
reg [3:0] ext_io_wr_o;
reg ext_io_rd_o;
wire flash_cs_o;
reg flash_cs_o;
wire flash_si_o;
wire flash_sck_o;
 
// Peripheral Interface
wire [7:0] uart_addr;
wire [31:0] uart_data_o;
wire [31:0] uart_data_i;
wire [3:0] uart_wr;
wire uart_rd;
wire uart_intr;
 
wire [7:0] spi_addr;
wire [31:0] spi_data_o;
wire [31:0] spi_data_i;
wire [3:0] spi_wr;
wire spi_rd;
 
wire [7:0] timer_addr;
wire [31:0] timer_data_o;
wire [31:0] timer_data_i;
wire [3:0] timer_wr;
wire timer_rd;
wire timer_intr_systick;
wire timer_intr_hires;
 
wire [7:0] intr_addr;
wire [31:0] intr_data_o;
wire [31:0] intr_data_i;
wire [3:0] intr_wr;
wire intr_rd;
 
//-----------------------------------------------------------------
// Instantiation
//-----------------------------------------------------------------
206,7 → 217,7
u1_cpu
(
.clk_i(clk_i),
.rst_i(rst_i),
.rst_i(alt_reset),
.en_i(en_i),
.intr_i(intr_in),
.fault_o(fault_o),
220,81 → 231,8
.dbg_pc_o(dbg_pc_o)
);
 
// Peripheral Interconnect
soc_pif
u2_soc
(
// General - Clocking & Reset
.clk_i(clk_i),
.rst_i(rst_i),
 
// I/O bus
.io_addr_i(io_address),
.io_data_i(io_data_w),
.io_data_o(io_data_r),
.io_wr_i(io_wr),
.io_rd_i(io_rd),
// Peripherals
.periph0_addr_o(uart_addr),
.periph0_data_o(uart_data_o),
.periph0_data_i(uart_data_i),
.periph0_wr_o(uart_wr),
.periph0_rd_o(uart_rd),
.periph1_addr_o(timer_addr),
.periph1_data_o(timer_data_o),
.periph1_data_i(timer_data_i),
.periph1_wr_o(timer_wr),
.periph1_rd_o(timer_rd),
.periph2_addr_o(intr_addr),
.periph2_data_o(intr_data_o),
.periph2_data_i(intr_data_i),
.periph2_wr_o(intr_wr),
.periph2_rd_o(intr_rd),
`ifdef SOC_CONF_ENABLE_SPI_FLASH
.periph3_addr_o(spi_addr),
.periph3_data_o(spi_data_o),
.periph3_data_i(spi_data_i),
.periph3_wr_o(spi_wr),
.periph3_rd_o(spi_rd),
`else
.periph3_addr_o(/*open*/),
.periph3_data_o(/*open*/),
.periph3_data_i(32'h00000000),
.periph3_wr_o(/*open*/),
.periph3_rd_o(/*open*/),
`endif
.periph4_addr_o(/*open*/),
.periph4_data_o(/*open*/),
.periph4_data_i(32'h00000000),
.periph4_wr_o(/*open*/),
.periph4_rd_o(/*open*/),
.periph5_addr_o(/*open*/),
.periph5_data_o(/*open*/),
.periph5_data_i(32'h00000000),
.periph5_wr_o(/*open*/),
.periph5_rd_o(/*open*/),
.periph6_addr_o(/*open*/),
.periph6_data_o(/*open*/),
.periph6_data_i(32'h00000000),
.periph6_wr_o(/*open*/),
.periph6_rd_o(/*open*/),
.periph7_addr_o(/*open*/),
.periph7_data_o(/*open*/),
.periph7_data_i(32'h00000000),
.periph7_wr_o(/*open*/),
.periph7_rd_o(/*open*/)
);
 
// UART
uart_periph
uart
#(
.UART_DIVISOR(((CLK_KHZ * 1000) / UART_BAUD))
)
302,21 → 240,22
(
.clk_i(clk_i),
.rst_i(rst_i),
.intr_o(uart_intr),
.addr_i(uart_addr),
.data_o(uart_data_i),
.data_i(uart_data_o),
.data_i(uart_tx_data),
.data_o(uart_rx_data),
.wr_i(uart_wr),
.rd_i(uart_rd),
.rx_i(uart_rx_i),
.tx_o(uart_tx_o)
.rd_i(uart_rd),
.tx_busy_o(uart_tx_busy),
.rx_ready_o(uart_rx_avail),
.rxd_i(uart_rx_i),
.txd_o(uart_tx_o)
);
 
`ifdef SOC_CONF_ENABLE_SPI_FLASH
// SPI Flash Master
spim_periph
spi_master
#(
.CLK_DIV(CLK_KHZ / SPI_FLASH_CLK_KHZ)
.CLK_DIV(CLK_KHZ / SPI_FLASH_CLK_KHZ),
.TRANSFER_WIDTH(8)
)
u4_spi_flash
(
323,16 → 262,16
// Clocking / Reset
.clk_i(clk_i),
.rst_i(rst_i),
.intr_o(/*open*/),
// Peripheral I/O
.addr_i(spi_addr),
.data_o(spi_data_i),
.data_i(spi_data_o),
.wr_i(spi_wr),
.rd_i(spi_rd),
// Control & Status
.start_i(spi_flash_start),
.done_o(/*open */),
.busy_o(spi_flash_busy),
// Data
.data_i(spi_flash_data_wr),
.data_o(spi_flash_data_rd),
// SPI interface
.spi_clk_o(flash_sck_o),
.spi_ss_o(flash_cs_o),
.spi_ss_o(/*open */),
.spi_mosi_o(flash_si_o),
.spi_miso_i(flash_so_i)
);
343,50 → 282,267
assign flash_sck_o = 1'b0;
`endif
 
timer_periph
#(
.CLK_KHZ(CLK_KHZ)
)
u5_timer
(
.clk_i(clk_i),
.rst_i(rst_i),
.intr_systick_o(timer_intr_systick),
.intr_hires_o(timer_intr_hires),
.addr_i(timer_addr),
.data_o(timer_data_i),
.data_i(timer_data_o),
.wr_i(timer_wr),
.rd_i(timer_rd)
);
//-----------------------------------------------------------------
// I/O Handlers
//-----------------------------------------------------------------
always @ (posedge rst_i or posedge clk_i )
begin
if (rst_i == 1'b1)
begin
// UART
uart_tx_data <= 8'h00;
uart_wr <= 1'b0;
// Interrupt Status
irq_status <= 32'h00000000;
irq_mask <= 32'h00000000;
hr_timer_cnt <= 32'h00000000;
hr_timer_match <= 32'h00000000;
// SPI Flash (Configuration PROM)
`ifdef SOC_CONF_ENABLE_SPI_FLASH
flash_cs_o <= 1'b1;
spi_flash_start <= 1'b0;
spi_flash_data_wr<= 8'h00;
`endif
// Watchdog
`ifdef SOC_CONF_ENABLE_WATCHDOG
watchdog_enable <= 1'b0;
watchdog_load <= 1'b0;
watchdog_threshold <= 16'h0000;
`endif
end
else
begin
uart_wr <= 1'b0;
`ifdef SOC_CONF_ENABLE_SPI_FLASH
spi_flash_start <= 1'b0;
`endif
`ifdef SOC_CONF_ENABLE_WATCHDOG
watchdog_load <= 1'b0;
`endif
// Get current IRQ status
v_irq_status = irq_status;
// Clock tick counter
hr_timer_cnt <= (hr_timer_cnt + 1);
// Systick IRQ?
if (systick_intr == 1'b1)
v_irq_status[`IRQ_SYSTICK] = 1'b1;
// UART IRQ?
if (uart_rx_avail == 1'b1)
v_irq_status[`IRQ_UART_RX_AVAIL] = 1'b1;
// Hi-res Timer IRQ [IRQ6]
if ((hr_timer_match != 32'h00000000) && (hr_timer_match == hr_timer_cnt))
v_irq_status[`IRQ_PIT] = 1'b1;
// External interrupts
begin : ext_ints_loop
integer i;
for (i=0; i< EXTERNAL_INTERRUPTS; i=i+1)
begin
if (ext_intr_i[i] == 1'b1)
v_irq_status[(`IRQ_EXT_FIRST + i)] = 1'b1;
end
end
// Update IRQ status
irq_status <= v_irq_status;
// IO Write Cycle
if (io_wr != 4'b0000)
case (io_address[7:0])
`UART_UDR :
begin
uart_tx_data <= io_data_w[7:0];
uart_wr <= 1'b1;
end
`IRQ_MASK_SET :
irq_mask <= (irq_mask | io_data_w);
`IRQ_MASK_CLR :
irq_mask <= (irq_mask & ~ (io_data_w));
`IRQ_STATUS : // (IRQ Acknowledge)
irq_status <= (v_irq_status & ~ (io_data_w));
`ifdef SOC_CONF_ENABLE_WATCHDOG
`WATCHDOG_CTRL :
begin
// Enable watchdog if non-zero
if (io_data_w[15:0] != 16'h0000)
watchdog_enable <= 1'b1;
else
watchdog_enable <= 1'b0;
 
intr_periph
#(
.EXTERNAL_INTERRUPTS(EXTERNAL_INTERRUPTS)
)
u6_intr
(
.clk_i(clk_i),
.rst_i(rst_i),
.intr_o(intr_in),
.intr0_i(uart_intr),
.intr1_i(timer_intr_systick),
.intr2_i(timer_intr_hires),
.intr3_i(/*open*/),
.intr4_i(/*open*/),
.intr5_i(/*open*/),
.intr6_i(/*open*/),
.intr7_i(/*open*/),
.intr_ext_i(ext_intr_i),
.addr_i(intr_addr),
.data_o(intr_data_i),
.data_i(intr_data_o),
.wr_i(intr_wr),
.rd_i(intr_rd)
);
// Store threshold for timeout (16-bit x 1ms)
watchdog_threshold <= io_data_w[15:0];
watchdog_load <= 1'b1;
end
`endif
`SYS_CLK_COUNT :
hr_timer_match <= io_data_w;
`ifdef SOC_CONF_ENABLE_SPI_FLASH
`SPI_PROM_CTRL :
begin
flash_cs_o <= io_data_w[0];
end
`SPI_PROM_DATA :
begin
spi_flash_data_wr <= io_data_w[7:0];
spi_flash_start <= 1'b1;
end
`endif
default :
;
endcase
end
end
// IO memory space READ handler
always @ (posedge rst_i or posedge clk_i )
begin
if (rst_i == 1'b1)
begin
io_data_r <= 32'h00000000;
uart_rd <= 1'b0;
end
else
begin
uart_rd <= 1'b0;
// Read cycle?
if (io_rd == 1'b1)
case (io_address[7:0])
`CORE_ID :
io_data_r <= CORE_ID;
`UART_USR :
io_data_r <= {27'h0000000, 1'b0, uart_tx_busy, 1'b0, 1'b0, uart_rx_avail};
`UART_UDR :
begin
io_data_r <= {24'h000000,uart_rx_data};
uart_rd <= 1'b1;
end
`TIMER_VAL : // (32-bit 1ms counter)
io_data_r <= systick_count;
`IRQ_MASK_SET :
io_data_r <= irq_mask;
`IRQ_MASK_CLR :
io_data_r <= irq_mask;
`IRQ_STATUS :
io_data_r <= (irq_status & irq_mask);
`ifdef SOC_CONF_ENABLE_WATCHDOG
`WATCHDOG_CTRL :
io_data_r <= {15'h000000, watchdog_expired, watchdog_counter};
`endif
`SYS_CLK_COUNT :
io_data_r <= hr_timer_cnt;
`ifdef SOC_CONF_ENABLE_SPI_FLASH
`SPI_PROM_STAT :
io_data_r <= {31'h00000000, spi_flash_busy};
`SPI_PROM_DATA :
io_data_r <= {24'h000000, spi_flash_data_rd};
`endif
default :
io_data_r <= 32'h00000000;
endcase
end
end
// SysTick Timer (1 ms resolution)
always @ (posedge rst_i or posedge clk_i )
begin
if (rst_i == 1'b1)
begin
systick_count <= 32'h00000000;
systick_clk_count <= 32'h00000000;
systick_intr <= 1'b0;
end
else
begin
systick_intr <= 1'b0;
if (systick_clk_count == CLK_KHZ)
begin
systick_count <= (systick_count + 1);
systick_intr <= 1'b1;
systick_clk_count <= 32'h00000000;
end
else
systick_clk_count <= (systick_clk_count + 1);
end
end
 
// Watchdog
`ifdef SOC_CONF_ENABLE_WATCHDOG
always @ (posedge rst_i or posedge clk_i )
begin
if (rst_i == 1'b1)
begin
watchdog_counter <= 16'h0000;
watchdog_expired <= 1'b0;
watchdog_alt_reset <= 1'b0;
end
else
begin
 
// On 1ms tick - decrement watchdog if enabled
if (systick_intr == 1'b1)
if (watchdog_enable == 1'b1)
begin
// Count down or expire if 0
if (watchdog_counter != 16'h0000)
watchdog_counter <= (watchdog_counter - 1);
else
begin
// Clear reset if already high
watchdog_alt_reset <= 1'b0;
// If not already expired, start reset sequence
if (watchdog_expired != 1'b1)
begin
watchdog_expired <= 1'b1;
watchdog_alt_reset <= 1'b1;
// Hold reset high for a couple of ms
watchdog_counter <= 16'h002;
end
end
end
 
// If watchdog reset signalled, reset counter with new threshold value
if (watchdog_load == 1'b1)
begin
watchdog_counter <= watchdog_threshold;
watchdog_expired <= 1'b0;
end
end
end
`endif
 
//-----------------------------------------------------------------
// Memory Map
//-----------------------------------------------------------------
512,9 → 668,9
//-----------------------------------------------------------------
reg [31:0] v_mem_sel;
always @ (posedge clk_i or posedge rst_i )
always @ (posedge clk_i or posedge alt_reset )
begin
if (rst_i == 1'b1)
if (alt_reset == 1'b1)
begin
v_mem_sel = BOOT_VECTOR;
r_mem_sel <= v_mem_sel[30:28];
524,10 → 680,20
end
//-----------------------------------------------------------------
// Combinatorial Logic
//-----------------------------------------------------------------
assign intr_in = ((irq_mask & irq_status) != 32'h00000000) ? 1'b1 : 1'b0;
`ifdef SOC_CONF_ENABLE_WATCHDOG
assign alt_reset = (rst_i | watchdog_alt_reset);
`else
assign alt_reset = rst_i;
`endif
 
//-----------------------------------------------------------------
// External Interface
//-----------------------------------------------------------------
// Debug UART
assign dbg_uart_data_o = uart_data_o[7:0];
assign dbg_uart_wr_o = (uart_wr != 4'b0000) ? 1'b1 : 1'b0;
assign dbg_uart_data_o = uart_tx_data;
assign dbg_uart_wr_o = uart_wr;
 
endmodule
/rtl/soc/alt_soc_defs.v
47,22 → 47,33
`define MEM_REGION_CORE_IO 3'b010
`define MEM_REGION_EXT_IO 3'b011
 
`define INT_BASE 32'h00000000
`define EXT_BASE 32'h10000000
`define IO_BASE 32'h20000000
`define EXT_IO_BASE 32'h30000000
 
//-----------------------------------------------------------------
// Peripheral Base Addresses
// I/O
//-----------------------------------------------------------------
`define UART_BASE 32'h20000000
`define TIMER_BASE 32'h20000100
`define INTR_BASE 32'h20000200
`define SPI_FLASH_BASE 32'h20000300
 
//-----------------------------------------------------------------
// Interrupts
//-----------------------------------------------------------------
`define IRQ_UART_RX 0
`define IRQ_TIMER_SYSTICK 1
`define IRQ_TIMER_HIRES 2
// General
`define CORE_ID 8'h00
 
// Basic Peripherals
`define UART_USR 8'h04
`define UART_UDR 8'h08
`define TIMER_VAL 8'h10
`define IRQ_MASK_SET 8'h14
`define IRQ_MASK_STATUS 8'h14
`define IRQ_MASK_CLR 8'h18
`define IRQ_STATUS 8'h1C
`define IRQ_SYSTICK (0)
`define IRQ_UART_RX_AVAIL (1)
`define IRQ_SW (2)
`define IRQ_PIT (6)
`define IRQ_EXT_FIRST (8)
`define WATCHDOG_CTRL 8'h20
`define WATCHDOG_EXPIRED (16)
`define SYS_CLK_COUNT 8'h60
 
// SPI Configuration PROM
`define SPI_PROM_CTRL 8'h70
`define SPI_PROM_STAT 8'h70
`define SPI_PROM_DATA 8'h74
/rtl/soc/alt_soc_conf.v
42,4 → 42,5
//-----------------------------------------------------------------
// Configuration
//-----------------------------------------------------------------
//`define SOC_CONF_ENABLE_WATCHDOG
`define SOC_CONF_ENABLE_SPI_FLASH
/rtl/peripheral/intr_defs.v File deleted \ No newline at end of file
/fpga/papilio_xc3s250e/top.vhd
50,7 → 50,7
(
OSC_MHZ : integer := 32;
-- Target CPU MHz (must be a multiple of 2)
CPU_MHZ : integer := 32
CPU_MHZ : integer := 58
);
port
(
154,8 → 154,21
-----------------------------------------------
-- Instantiation
-----------------------------------------------
cpu_clk <= clk;
 
-- DCM Clock Generator
U1_DCM: ClockDCM
generic map
(
CLK_IN_MHZ => OSC_MHZ,
CLK_OUT_MHZ => CPU_MHZ
)
port map
(
CLKIN_IN => clk,
CLKFX_OUT => cpu_clk,
CLKIN_IBUFG_OUT => open
);
 
-- 24KB Block RAM (0x0000 - 0x6000)
U2_RAM: ram
generic map
/fpga/papilio_xc3s250e/project.xise
17,11 → 17,11
<files>
<file xil_pn:name="ClockDCM.vhd" xil_pn:type="FILE_VHDL">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="1"/>
<association xil_pn:name="Implementation" xil_pn:seqID="0"/>
<association xil_pn:name="Implementation" xil_pn:seqID="9"/>
</file>
<file xil_pn:name="components.vhd" xil_pn:type="FILE_VHDL">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="2"/>
<association xil_pn:name="Implementation" xil_pn:seqID="13"/>
<association xil_pn:name="Implementation" xil_pn:seqID="8"/>
</file>
<file xil_pn:name="fpga.ucf" xil_pn:type="FILE_UCF">
<association xil_pn:name="Implementation" xil_pn:seqID="0"/>
28,56 → 28,36
</file>
<file xil_pn:name="program.vhd" xil_pn:type="FILE_VHDL">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="4"/>
<association xil_pn:name="Implementation" xil_pn:seqID="12"/>
<association xil_pn:name="Implementation" xil_pn:seqID="7"/>
</file>
<file xil_pn:name="top.vhd" xil_pn:type="FILE_VHDL">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="5"/>
<association xil_pn:name="Implementation" xil_pn:seqID="14"/>
<association xil_pn:name="Implementation" xil_pn:seqID="10"/>
</file>
<file xil_pn:name="../../rtl/peripheral/spi_master.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="14"/>
<association xil_pn:name="Implementation" xil_pn:seqID="2"/>
<association xil_pn:name="Implementation" xil_pn:seqID="4"/>
</file>
<file xil_pn:name="../../rtl/peripheral/uart.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="15"/>
<association xil_pn:name="Implementation" xil_pn:seqID="1"/>
<association xil_pn:name="Implementation" xil_pn:seqID="3"/>
</file>
<file xil_pn:name="../../rtl/soc/alt_soc.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="233"/>
<association xil_pn:name="Implementation" xil_pn:seqID="11"/>
<association xil_pn:name="Implementation" xil_pn:seqID="6"/>
</file>
<file xil_pn:name="../../rtl/core_pipelined/altor32.v" xil_pn:type="FILE_VERILOG">
<file xil_pn:name="../../rtl/core_simple/altor32.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="21"/>
<association xil_pn:name="Implementation" xil_pn:seqID="10"/>
<association xil_pn:name="Implementation" xil_pn:seqID="5"/>
</file>
<file xil_pn:name="../../rtl/core_pipelined/altor32_alu.v" xil_pn:type="FILE_VERILOG">
<file xil_pn:name="../../rtl/core_simple/altor32_alu.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="22"/>
<association xil_pn:name="Implementation" xil_pn:seqID="4"/>
<association xil_pn:name="Implementation" xil_pn:seqID="2"/>
</file>
<file xil_pn:name="../../rtl/core_pipelined/altor32_regfile_xil.v" xil_pn:type="FILE_VERILOG">
<file xil_pn:name="../../rtl/core_simple/altor32_regfile_xil.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="23"/>
<association xil_pn:name="Implementation" xil_pn:seqID="3"/>
<association xil_pn:name="Implementation" xil_pn:seqID="1"/>
</file>
<file xil_pn:name="../../rtl/peripheral/intr_periph.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="68"/>
<association xil_pn:name="Implementation" xil_pn:seqID="9"/>
</file>
<file xil_pn:name="../../rtl/peripheral/spim_periph.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="70"/>
<association xil_pn:name="Implementation" xil_pn:seqID="8"/>
</file>
<file xil_pn:name="../../rtl/peripheral/timer_periph.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="72"/>
<association xil_pn:name="Implementation" xil_pn:seqID="7"/>
</file>
<file xil_pn:name="../../rtl/peripheral/uart_periph.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="74"/>
<association xil_pn:name="Implementation" xil_pn:seqID="6"/>
</file>
<file xil_pn:name="../../rtl/soc/soc_pif.v" xil_pn:type="FILE_VERILOG">
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="75"/>
<association xil_pn:name="Implementation" xil_pn:seqID="5"/>
</file>
</files>
 
<properties>
384,14 → 364,10
<!-- Do not hand-edit this section, as it will be overwritten when the -->
<!-- project is analyzed based on files automatically identified as -->
<!-- include files. -->
<file xil_pn:name="../../rtl/core_pipelined/altor32_defs.v" xil_pn:type="FILE_VERILOG"/>
<file xil_pn:name="../../rtl/core_pipelined/altor32_funcs.v" xil_pn:type="FILE_VERILOG"/>
<file xil_pn:name="../../rtl/core_simple/altor32_defs.v" xil_pn:type="FILE_VERILOG"/>
<file xil_pn:name="../../rtl/core_simple/altor32_funcs.v" xil_pn:type="FILE_VERILOG"/>
<file xil_pn:name="../../rtl/soc/alt_soc_defs.v" xil_pn:type="FILE_VERILOG"/>
<file xil_pn:name="../../rtl/soc/alt_soc_conf.v" xil_pn:type="FILE_VERILOG"/>
<file xil_pn:name="../../rtl/peripheral/intr_defs.v" xil_pn:type="FILE_VERILOG"/>
<file xil_pn:name="../../rtl/peripheral/spim_defs.v" xil_pn:type="FILE_VERILOG"/>
<file xil_pn:name="../../rtl/peripheral/timer_defs.v" xil_pn:type="FILE_VERILOG"/>
<file xil_pn:name="../../rtl/peripheral/uart_defs.v" xil_pn:type="FILE_VERILOG"/>
</autoManagedFiles>
 
</project>
/fpga/papilio_xc3s250e/sw/mem_map.h
17,45 → 17,38
#define REG32 (volatile unsigned int*)
 
//-----------------------------------------------------------------
// Peripheral Base Addresses
// I/O:
//-----------------------------------------------------------------
#define UART_BASE 0x20000000
#define TIMER_BASE 0x20000100
#define INTR_BASE 0x20000200
#define SPI_FLASH_BASE 0x20000300
 
//-----------------------------------------------------------------
// Interrupts
//-----------------------------------------------------------------
#define IRQ_UART_RX 0
#define IRQ_TIMER_SYSTICK 1
#define IRQ_TIMER_HIRES 2
// General
#define CORE_ID (*(REG32 (IO_BASE + 0x0)))
 
//-----------------------------------------------------------------
// Peripheral Registers
//-----------------------------------------------------------------
// Basic Peripherals
#define UART_USR (*(REG32 (IO_BASE + 0x4)))
#define UART_UDR (*(REG32 (IO_BASE + 0x8)))
#define TIMER_VAL (*(REG32 (IO_BASE + 0x10)))
#define IRQ_MASK_SET (*(REG32 (IO_BASE + 0x14)))
#define IRQ_MASK_STATUS (*(REG32 (IO_BASE + 0x14)))
#define IRQ_MASK_CLR (*(REG32 (IO_BASE + 0x18)))
#define IRQ_STATUS (*(REG32 (IO_BASE + 0x1C)))
#define IRQ_SYSTICK (0)
#define IRQ_UART_RX_AVAIL (1)
#define IRQ_SW (2)
#define IRQ_PIT (6)
#define EXT_INT_OFFSET (8)
 
#define UART_USR (*(REG32 (UART_BASE + 0x4)))
#define UART_UDR (*(REG32 (UART_BASE + 0x8)))
// [Optional] Watchdog
#define WATCHDOG_CTRL (*(REG32 (IO_BASE + 0x20)))
#define WATCHDOG_EXPIRED (16)
 
#define TIMER_VAL (*(REG32 (TIMER_BASE + 0x0)))
#define SYS_CLK_COUNT (*(REG32 (TIMER_BASE + 0x4)))
#define SYS_CLK_COUNT (*(REG32 (IO_BASE + 0x60)))
 
#define IRQ_MASK_SET (*(REG32 (INTR_BASE + 0x00)))
#define IRQ_MASK_STATUS (*(REG32 (INTR_BASE + 0x04)))
#define IRQ_MASK_CLR (*(REG32 (INTR_BASE + 0x08)))
#define IRQ_STATUS (*(REG32 (INTR_BASE + 0x0C)))
#define IRQ_SYSTICK (IRQ_TIMER_SYSTICK)
#define IRQ_UART_RX_AVAIL (IRQ_UART_RX)
#define IRQ_PIT (IRQ_TIMER_HIRES)
#define IRQ_SW (3)
#define EXT_INT_OFFSET (8)
 
#define SPI_PROM_CTRL (*(REG32 (SPI_FLASH_BASE + 0x00)))
// [Optional] SPI Configuration PROM
#define SPI_PROM_CTRL (*(REG32 (IO_BASE + 0x70)))
#define SPI_PROM_CS (1 << 0)
#define SPI_PROM_STAT (*(REG32 (SPI_FLASH_BASE + 0x00)))
#define SPI_PROM_STAT (*(REG32 (IO_BASE + 0x70)))
#define SPI_PROM_BUSY (1 << 0)
#define SPI_PROM_DATA (*(REG32 (SPI_FLASH_BASE + 0x04)))
#define SPI_PROM_DATA (*(REG32 (IO_BASE + 0x74)))
 
//-----------------------------------------------------------------
// Extended Peripherals
/fpga/papilio_xc3s250e/fpga_papilio_xc3s250e.bit Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
/fpga/papilio_xc3s250e/program.vhd
159,7 → 159,7
INIT_12 => X"9ca810bce0e0a8189d9d13bc848644868584859c9d0ce4a88418aa04a89caa9c",
INIT_13 => X"84150fbd15488586a99ca8d7d71918d7d78644868584859d9ce213e484e104a8",
INIT_14 => X"9c85d7d7d7d7d7d7d7d7d7aad71ad7d444a818d4a81886448584859c150fbce0",
INIT_15 => X"48a9d49f9fd4199e9c13bc84a818874487878786868686858485a99c9e0cbcab",
INIT_15 => X"48e1d49fd4199c9e9f13bc84a818874487878786868686858485a99c9e0cbcab",
INIT_16 => X"d8d49fa8841810bc10bc108503150cbdbbbb9f150fbce084bc0cbd15488586a8",
INIT_17 => X"181910bc8410e4a48cac8c84bb13e59fbb9f07150fbce084180cbd154885869e",
INIT_18 => X"13e4a818a413bc9caca413bde0b8180cbc9ce0009c9db88ca5e1a9b98c8d9ca8",
190,7 → 190,7
INIT_31 => X"0a740a9c44859d1507d49c9c44859c9d0015001513e49d9ce10ce4b89cb810e4",
INIT_32 => X"414f0a74206f2072452e6f652d4d286e6e29464f3e0a414f3e0a72453c61743e",
INIT_33 => X"6e222000530a502061766720200a2928526f74002e6c652d4128522e73206f20",
INIT_34 => X"0000000000000000000000000000000000002075666d6f552672686673496920",
INIT_34 => X"0000000000000000000000000000004465636e6e6b20736361696e6f2e496920",
INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
248,7 → 248,7
INIT_12 => X"409000a2456e4240c060ff05b2410001c1412121600022635260440062a00321",
INIT_13 => X"6e00ff8b0000620ece2142e1e1c040e1e1410001c14121602110ff45b2ce00a2",
INIT_14 => X"2174e1e1e1e1e1e1e1e1e194e180e10300636005a5a00100c141212100ff4363",
INIT_15 => X"00ce01400001c0c060ff03624240c100814101c1814101c141217621c0000bc3",
INIT_15 => X"00ce014001c060c000ff03624240c100814101c1814101c141217621c0000bc3",
INIT_16 => X"04018584a180001a000b0074ff00005818181800ff44848e0b008b0000620e7a",
INIT_17 => X"a000000481002484668486c118ffb2401818ff00ff44848ec0008b0000620e40",
INIT_18 => X"ff28c6c084ff25a58787ff66e4c4c00025a58400a008c6c86b6b086ba56580a5",
279,7 → 279,7
INIT_31 => X"0052422100216700ff0121210021e56000000000ff8929e6630024a5806b0023",
INIT_32 => X"704d002e6264586e782e6f6d6d294261740a504d2000704d20006e78456c6520",
INIT_33 => X"6f552672450052696261656961002e414f6d20422e616d6d29464f0a68666458",
INIT_34 => X"00000000000000000000000000000000000049726161776e26652e6c70446364",
INIT_34 => X"00000000000000000000000000000022727475206e222000735f2f6d2e446364",
INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
318,7 → 318,7
generic map (
INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_02 => X"0000000000000000000000000000000000000000000100ff28001c001a001c00",
INIT_02 => X"0000000000000000000000000000000000000000000100ff28001d001a001c00",
INIT_03 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_04 => X"0000000000000000000000000000000000000000000000000000000000000008",
INIT_05 => X"0000000000000000000000000000000000000000000000000000000000000000",
328,7 → 328,7
INIT_09 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0A => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0B => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0C => X"0000190200190200190200180200000280020100ff1887174f00209777000008",
INIT_0C => X"0000190200190200190200180200000280020000ff1887174f00209777000008",
INIT_0D => X"00001901000000ff0000001902000000ff000000000000000002000000002780",
INIT_0E => X"000020001901000000582100002019010000000058011000001019010000ff00",
INIT_0F => X"0000303000001a0000000000ff00771a4f00170000000000582100ff19010000",
335,9 → 335,9
INIT_10 => X"184f1a770017ff48ff0010ff1800000003001a0000ff48ffff0010002038ff10",
INIT_11 => X"1a774f9787000017ff48ffff0000ff0020000700001a000e0e000020ff1a0000",
INIT_12 => X"10000010701080000000ff0000ff48ffffffff000000181000b00002800000ff",
INIT_13 => X"0000ff000058000001ff1a874f20007717ff48ffffffff000010ff7000100200",
INIT_13 => X"0000ff000058000000ff1a874f20007717ff48ffffffff000010ff7000100200",
INIT_14 => X"ff00e7d7c7978777174ff71ab700a720481a00181a00ff48ffffff0000ff0380",
INIT_15 => X"5801180000b0200000ff00001a00ff48ffffffffffffffffffff0000ff000000",
INIT_15 => X"58c01800b020000000ff00001a00ff48ffffffffffffffffffff0000ff000000",
INIT_16 => X"5820001a0000000000000000ff0000000000ff00ff0380000000000058000000",
INIT_17 => X"00000000000018000000000000ffe00000ffff00ff0380000000000058000000",
INIT_18 => X"ff301a00ffff00ff10ffff002000000000ff300000000000ff281a000000001a",
348,27 → 348,27
INIT_1D => X"000000004f170048000020004800000000000000ff2000ff00ffff48ff0000ff",
INIT_1E => X"001045431041381036341000ffa7978777324f3017ff48ff0000ff000000ffff",
INIT_1F => X"00180080ff0000180000000000ff000058020000005800020000000000001000",
INIT_20 => X"18030320004800ff203000000120004800ff18ff48ffffffffff0000ff80ffff",
INIT_21 => X"0000002003000320ff000000280003030020ff000000280003030020ff000000",
INIT_22 => X"ff30000000ff000000600003030020ff00000030ff10000300031720004800ff",
INIT_23 => X"00000320ff0000002803000320ff00000020ff10000300031720ff4800180000",
INIT_24 => X"00280303002000fd001a1a190000000000000000ff00ffffff174fff48001800",
INIT_25 => X"00ffff48ff00100000ff00000018030320ff000000280320182800ff00000028",
INIT_20 => X"18000020004800ff203000000020004800ff18ff48ffffffffff0000ff80ffff",
INIT_21 => X"0000002000000020ff000000280000000020ff000000280000000020ff000000",
INIT_22 => X"ff30000000ff000000600000000020ff00000030ff10000000001720004800ff",
INIT_23 => X"00000020ff0000002800000020ff00000020ff10000000001720ff4800180000",
INIT_24 => X"00280000002000fd001a1a190000000000000000ff00ffffff174fff48001800",
INIT_25 => X"00ffff48ff00100000ff00000018000020ff000000280020182800ff00000028",
INIT_26 => X"fd1a1919000020ff1a000000000000ff000000ff20ff1a000000000000ff0000",
INIT_27 => X"03000000ff28ff004f000000030087772000971700ff00fd1a1919000000ff00",
INIT_28 => X"0003031720ff48ffffffff00180003002040ff10000038ff0000006000000000",
INIT_27 => X"00000000ff28ff004f000000000087772000971700ff00fd1a1919000000ff00",
INIT_28 => X"0000001720ff48ffffffff00180000002040ff10000038ff0000006000000000",
INIT_29 => X"774f17ff48ffff0000ff000000ff7000fe28700000ff00000018ff000020774f",
INIT_2A => X"01c00001c000c00000030003002000000028000020180ffff7e7d7c7b7a79787",
INIT_2A => X"01c00001c000c00000000000002000000028000020180ffff7e7d7c7b7a79787",
INIT_2B => X"00ff0000003000300000000000fe700000d000ff000000282000000000001a00",
INIT_2C => X"ff00ff48ffffffffffffffffffff000000ffc0000100ff000000fed000ff8000",
INIT_2D => X"000000fed000ff000000e0032000fe30280000ff00000018f028000000700000",
INIT_2E => X"00ff00000028ff1000034f0003172000ff00ff00ff00ffc0000170ff800000ff",
INIT_2F => X"002800005800000048ffff48ff0000ff000000fe1800ff000000280300201828",
INIT_2D => X"000000fed000ff000000e0002000fe30280000ff00000018f028000000700000",
INIT_2E => X"00ff00000028ff1000004f0000172000ff00ff00ff00ffc0000170ff800000ff",
INIT_2F => X"002800005800000048ffff48ff0000ff000000fe1800ff000000280000201828",
INIT_30 => X"0000784018000078008000006800000000ff40183000000048ff800000400028",
INIT_31 => X"3c4f6f0048000000ff48ff004800000000000000ff6800002000880000000020",
INIT_32 => X"7020502e6f652d61740a74206f20526c65004720503c7020503c61743e0a7249",
INIT_33 => X"776e266552414f6e6c69206d704e2e704d20666f2e73206f20504d002e6c652d",
INIT_34 => X"0000000000000000000000000000000000004465636e6e6b2073636169226565",
INIT_34 => X"000000000000000000000000000000002075666d6f5526726866736d2f226565",
INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
407,7 → 407,7
generic map (
INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_02 => X"0000000000000000000000000000000000000000003804fe0000f0004000e000",
INIT_02 => X"0000000000000000000000000000000000000000003804fe000000005000f000",
INIT_03 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_04 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_05 => X"0000000000000000000000000000000000000000000000000000000000000000",
417,47 → 417,47
INIT_09 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0A => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0B => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0C => X"00002a1e001a21000c2400fe270000f5002c0000ecf4f4ecfc0500f8f0000000",
INIT_0C => X"00002a1e001a21000c2400fe270000f5002c1000ecf4f4ecfc0500f8f0000000",
INIT_0D => X"5b0076fe010000e70064009307010000f0460d41184526490004003601040f02",
INIT_0E => X"0700005cb1e000000000000047003bea000000000000000053005cf60000de00",
INIT_0F => X"010000000009480000001600f400f844fc00f40000000000000000afcad80100",
INIT_10 => X"00fc40f800f4f800f40000fc000c00002e00480000f800f4fc0c00000000fb00",
INIT_11 => X"4cf0fcf8f40500ecf800f4fc0c00fb000063b400004861a840000000f4440000",
INIT_0F => X"010000000009580000001600f400f854fc00f40000000000000000afcad80100",
INIT_10 => X"00fc50f800f4f800f40000fc000c00002e00580000f800f4fc0c00000000fb00",
INIT_11 => X"5cf0fcf8f40500ecf800f4fc0c00fb000063b400005861a840000000f4540000",
INIT_12 => X"00000300020000050001f7000cf800f4f0ecfc14000900ad080700a8001000ec",
INIT_13 => X"0000fb000000000000f060f8fc0000f4f0f800f4f0ecfc011400f3000c008b00",
INIT_14 => X"c800f4f0ece0dcd8d4fcf85ce800e400006000005c00f800f4f0fc1000f7e702",
INIT_15 => X"000008431004000001ee00006000f800f4f0ece8e4e0dcd8d4fc0038ff100000",
INIT_16 => X"0000826404007a435b187400ec00a3009818ff00f7e70200040f000000000000",
INIT_13 => X"0000fb000000000010f070f8fc0000f4f0f800f4f0ecfc011400f3000c008b00",
INIT_14 => X"c800f4f0ece0dcd8d4fcf86ce800e400007000006c00f800f4f0fc1000f7e702",
INIT_15 => X"000408430400010010ee00007000f800f4f0ece8e4e0dcd8d4fc0038ff100000",
INIT_16 => X"0000827404007a435b187400ec00a3009818ff00f7e70200040f000000000000",
INIT_17 => X"00005f00042900ff01ff020098de001518ff8200f7e702000044000000000000",
INIT_18 => X"e900e700fff800ff21fff9000010000d00ff050608010800ff00670884830064",
INIT_19 => X"18f70000000043a1e7020000080000c500b30000640100a998491815ff084b00",
INIT_1A => X"0067040000878300000464010038540000000600000026385e060000ff2d4399",
INIT_1B => X"26180000180000180000fffb065e00ffff08140008b9008300fffa00e7010000",
INIT_1C => X"000800000408000400f8110a98fc18f80000083300ff06011008000067800038",
INIT_18 => X"e900f700fff800ff21fff9000010000d00ff050608010800ff00770884830074",
INIT_19 => X"18f70000000043a1e7020000080000c500b30000740100a998491815ff084b00",
INIT_1A => X"0077040000878300000474010038540000000600000026385e060000ff2d4399",
INIT_1B => X"26180000180000180000fffb065e00ffff08140008b9008300fffa00f7010000",
INIT_1C => X"000800000408000400f8110a98fc18f80000083300ff06011008000077800038",
INIT_1D => X"08000000fcf80100000400000000080300010004ff0000f00deaf800fc0800fd",
INIT_1E => X"002c46442842392437352000b4f8f4f0ec33fc31e8f800fc0800fc000001cff8",
INIT_1F => X"00000800ff0001002d00060000f5000100080a0000000a4d000020000000302d",
INIT_20 => X"00000400000000fd000200000000000001d602f800f4f0ece8fc4c00fc00ff90",
INIT_21 => X"0001000000ff0400fd00010000ff00044800fd00010000ff00045000fd000100",
INIT_22 => X"f700010000fd00010000000004ff00fd00010000fc009f040000fc00000000fd",
INIT_23 => X"01000400fd0001000000ff0400fd00010000fc0005040000fc00fc00040001ff",
INIT_24 => X"0600040000000053f30c18ea0000003cbf301f00b901bbf8dff8fcfc000400ff",
INIT_25 => X"0186f800fc08000100fd00010000000400fd000100000400000001fd00010000",
INIT_26 => X"0c0cf1ea000000c2ec01000010005fffff25017800d0ec02000015005fffff44",
INIT_27 => X"041100002100ec03fc0000000000f4f00000f8ec00ecee030cf1ea000000e7e7",
INIT_28 => X"000004f400f800f4f0ecfc14000000010000f700010000fd000100000000ff00",
INIT_20 => X"00707400000000fd000200001000000001d602f800f4f0ece8fc4c00fc00ff90",
INIT_21 => X"0001000070ff7400fd00010000ff70744800fd00010000ff70745000fd000100",
INIT_22 => X"f700010000fd00010000007074ff00fd00010000fc009f740070fc00000000fd",
INIT_23 => X"01007400fd0001000070ff7400fd00010000fc0005740070fc00fc00040001ff",
INIT_24 => X"0600747000000053f20c22ea0000003cbf301f00b901bbf8dff8fcfc000400ff",
INIT_25 => X"0186f800fc08000100fd00010000707400fd000100007400000001fd00010000",
INIT_26 => X"0c0cf1ea000000c2fc01000010005fffff25017800d0fc02000015005fffff44",
INIT_27 => X"741100002100ec03fc0000007000f4f00000f8ec00eced030cf1ea000000e7e6",
INIT_28 => X"007074f400f800f4f0ecfc14000070010000f700010000fd000100000000ff00",
INIT_29 => X"d8fcd4f800f4fc0c00fc000100340000ed00002001fd00010000f4060000f8fc",
INIT_2A => X"00000300000402080000000401003f00000080000804ffc8f8f4f0ece8e4e0dc",
INIT_2B => X"00fd00010000000000000f0000aa0000020000fd000100000006003a0100ec00",
INIT_2A => X"00000300000402080070007401003f00000080000804ffc8f8f4f0ece8e4e0dc",
INIT_2B => X"00fd00010000000000000f0000aa0000020000fd000100000006003a0100fc00",
INIT_2C => X"ec00f800f4f0ece8e4e0dcd8d4fc003808cb00000000fc000100e10000f60001",
INIT_2D => X"000100aa0000fd000100000400006b00000201fd000100000000000600000000",
INIT_2E => X"01fd00010000f8000604fc0000f8000081004e38c6089000000000df000100fc",
INIT_2F => X"320000360000000000fcf800fc0800fc0001007a0001fd000100000460000000",
INIT_2D => X"000100aa0000fd000100007400006b00000201fd000100000000000600000000",
INIT_2E => X"01fd00010000f8000674fc0070f8000081004e38c6089000000000df000100fc",
INIT_2F => X"320000360000000000fcf800fc0800fc0001007a0001fd000100007460000000",
INIT_30 => X"005f0302045f01030000001e0000014101f90004005f000103ff00200d002e00",
INIT_31 => X"494d6f0400000000bf00fc040000000103000500ed0001000403000101010300",
INIT_32 => X"2928522e6f6d6d6c65002e6264584120724941285246292852416c6520006e6e",
INIT_33 => X"6e6b207354534d20656c6161706f2e702050726f0a686664584720502e616d6d",
INIT_34 => X"00000000000000000000000000000000000022727475206e222000735f002076",
INIT_34 => X"0000000000000000000000000000000049726161776e26652e6c706f63002076",
INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000",
/sw/bootloader/mem_map.h
17,44 → 17,37
#define REG32 (volatile unsigned int*)
 
//-----------------------------------------------------------------
// Peripheral Base Addresses
// I/O:
//-----------------------------------------------------------------
#define UART_BASE 0x20000000
#define TIMER_BASE 0x20000100
#define INTR_BASE 0x20000200
#define SPI_FLASH_BASE 0x20000300
 
//-----------------------------------------------------------------
// Interrupts
//-----------------------------------------------------------------
#define IRQ_UART_RX 0
#define IRQ_TIMER_SYSTICK 1
#define IRQ_TIMER_HIRES 2
// General
#define CORE_ID (*(REG32 (IO_BASE + 0x0)))
 
//-----------------------------------------------------------------
// Peripheral Registers
//-----------------------------------------------------------------
// Basic Peripherals
#define UART_USR (*(REG32 (IO_BASE + 0x4)))
#define UART_UDR (*(REG32 (IO_BASE + 0x8)))
#define TIMER_VAL (*(REG32 (IO_BASE + 0x10)))
#define IRQ_MASK_SET (*(REG32 (IO_BASE + 0x14)))
#define IRQ_MASK_STATUS (*(REG32 (IO_BASE + 0x14)))
#define IRQ_MASK_CLR (*(REG32 (IO_BASE + 0x18)))
#define IRQ_STATUS (*(REG32 (IO_BASE + 0x1C)))
#define IRQ_SYSTICK (0)
#define IRQ_UART_RX_AVAIL (1)
#define IRQ_SW (2)
#define IRQ_PIT (6)
#define EXT_INT_OFFSET (8)
 
#define UART_USR (*(REG32 (UART_BASE + 0x4)))
#define UART_UDR (*(REG32 (UART_BASE + 0x8)))
// [Optional] Watchdog
#define WATCHDOG_CTRL (*(REG32 (IO_BASE + 0x20)))
#define WATCHDOG_EXPIRED (16)
 
#define TIMER_VAL (*(REG32 (TIMER_BASE + 0x0)))
#define SYS_CLK_COUNT (*(REG32 (TIMER_BASE + 0x4)))
#define SYS_CLK_COUNT (*(REG32 (IO_BASE + 0x60)))
 
#define IRQ_MASK_SET (*(REG32 (INTR_BASE + 0x00)))
#define IRQ_MASK_STATUS (*(REG32 (INTR_BASE + 0x04)))
#define IRQ_MASK_CLR (*(REG32 (INTR_BASE + 0x08)))
#define IRQ_STATUS (*(REG32 (INTR_BASE + 0x0C)))
#define IRQ_SYSTICK (IRQ_TIMER_SYSTICK)
#define IRQ_UART_RX_AVAIL (IRQ_UART_RX)
#define IRQ_PIT (IRQ_TIMER_HIRES)
#define IRQ_SW (3)
#define EXT_INT_OFFSET (8)
 
#define SPI_PROM_CTRL (*(REG32 (SPI_FLASH_BASE + 0x00)))
// SPI Configuration PROM
#define SPI_PROM_CTRL (*(REG32 (IO_BASE + 0x70)))
#define SPI_PROM_CS (1 << 0)
#define SPI_PROM_STAT (*(REG32 (SPI_FLASH_BASE + 0x00)))
#define SPI_PROM_STAT (*(REG32 (IO_BASE + 0x70)))
#define SPI_PROM_BUSY (1 << 0)
#define SPI_PROM_DATA (*(REG32 (SPI_FLASH_BASE + 0x04)))
#define SPI_PROM_DATA (*(REG32 (IO_BASE + 0x74)))
 
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.