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

Subversion Repositories zap

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 14 to Rev 13
    Reverse comparison

Rev 14 → Rev 13

/zap/trunk/ZAP/docs/zap2_doc.docx Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
zap/trunk/ZAP/docs/zap2_doc.docx Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: zap/trunk/ZAP/docs/zap2_doc.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: zap/trunk/ZAP/hw/rtl/wb/zap_wb_merger.v =================================================================== --- zap/trunk/ZAP/hw/rtl/wb/zap_wb_merger.v (revision 14) +++ zap/trunk/ZAP/hw/rtl/wb/zap_wb_merger.v (nonexistent) @@ -1,129 +0,0 @@ -// Merges two Wishbone busses onto a single bus. Released under GPL V2. -// (C)2017 Revanth Kamaraj. - -`default_nettype none - -module zap_wb_merger ( - -input wire i_clk, -input wire i_reset, - -input wire i_c_wb_stb, -input wire i_c_wb_cyc, -input wire i_c_wb_wen, -input wire [3:0] i_c_wb_sel, -input wire [31:0] i_c_wb_dat, -input wire [31:0] i_c_wb_adr, -input wire [2:0] i_c_wb_cti, -output reg o_c_wb_ack, - -input wire i_d_wb_stb, -input wire i_d_wb_cyc, -input wire i_d_wb_wen, -input wire [3:0] i_d_wb_sel, -input wire [31:0] i_d_wb_dat, -input wire [31:0] i_d_wb_adr, -input wire [2:0] i_d_wb_cti, -output reg o_d_wb_ack, - -output reg o_wb_cyc, -output reg o_wb_stb, -output reg o_wb_wen, -output reg [3:0] o_wb_sel, -output reg [31:0] o_wb_dat, -output reg [31:0] o_wb_adr, -output reg [2:0] o_wb_cti, -input wire i_wb_ack - -); - -`include "zap_defines.vh" -`include "zap_localparams.vh" - -localparam CODE = 1'd0; -localparam DATA = 1'd1; - -reg sel_ff, sel_nxt; - -always @ (posedge i_clk) -begin - if ( i_reset ) - sel_ff <= CODE; - else - sel_ff <= sel_nxt; -end - -always @* -begin - if ( sel_ff == CODE ) - begin - o_c_wb_ack = i_wb_ack; - o_d_wb_ack = 1'd0; - end - else - begin - o_d_wb_ack = i_wb_ack; - o_c_wb_ack = 1'd0; - end -end - -always @* -begin - case(sel_ff) - CODE: - begin - if ( i_wb_ack && (o_wb_cti == CTI_CLASSIC || o_wb_cti == CTI_EOB) && i_d_wb_stb ) - sel_nxt = DATA; - else if ( !i_c_wb_stb && i_d_wb_stb ) - sel_nxt = DATA; - else - sel_nxt = sel_ff; - end - - DATA: - begin - if ( i_wb_ack && (o_wb_cti == CTI_CLASSIC || o_wb_cti == CTI_EOB) && i_c_wb_stb ) - sel_nxt = CODE; - else if ( i_c_wb_stb && !i_d_wb_stb ) - sel_nxt = CODE; - else - sel_nxt = sel_ff; - end - endcase -end - -always @ (posedge i_clk) -begin - if ( i_reset ) - begin - o_wb_cyc <= 0; - o_wb_stb <= 0; - o_wb_wen <= 0; - o_wb_sel <= 0; - o_wb_dat <= 0; - o_wb_adr <= 0; - o_wb_cti <= 0; - end - else if ( sel_nxt == CODE ) - begin - o_wb_cyc <= i_c_wb_cyc; - o_wb_stb <= i_c_wb_stb; - o_wb_wen <= i_c_wb_wen; - o_wb_sel <= i_c_wb_sel; - o_wb_dat <= i_c_wb_dat; - o_wb_adr <= i_c_wb_adr; - o_wb_cti <= i_c_wb_cti; - end - else - begin - o_wb_cyc <= i_d_wb_cyc; - o_wb_stb <= i_d_wb_stb; - o_wb_wen <= i_d_wb_wen; - o_wb_sel <= i_d_wb_sel; - o_wb_dat <= i_d_wb_dat; - o_wb_adr <= i_d_wb_adr; - o_wb_cti <= i_d_wb_cti; - end -end - -endmodule Index: zap/trunk/ZAP/hw/rtl/TOP/zap_top.v =================================================================== --- zap/trunk/ZAP/hw/rtl/TOP/zap_top.v (revision 14) +++ zap/trunk/ZAP/hw/rtl/TOP/zap_top.v (revision 13) @@ -26,6 +26,7 @@ module zap_top #( // Enable cache and MMU. +parameter [0:0] CACHE_MMU_ENABLE = 1'd1, parameter BP_ENTRIES = 1024, // Predictor depth. parameter FIFO_DEPTH = 4, // FIFO depth. @@ -64,17 +65,32 @@ input wire i_fiq, // --------------------- - // Wishbone interface. + // Code interface. // --------------------- - output wire o_wb_cyc, - output wire o_wb_stb, - output wire [31:0] o_wb_adr, - output wire o_wb_we, - output wire [31:0] o_wb_dat, - output wire [3:0] o_wb_sel, - output wire [2:0] o_wb_cti, - input wire i_wb_ack, - input wire [31:0] i_wb_dat + output wire o_instr_wb_cyc, + output wire o_instr_wb_stb, + output wire [31:0] o_instr_wb_adr, + output wire o_instr_wb_we, + input wire i_instr_wb_err, + input wire [31:0] i_instr_wb_dat, // Wishbone data port. + input wire i_instr_wb_ack, + output wire [3:0] o_instr_wb_sel, + output wire [2:0] o_instr_wb_cti, + + // --------------------- + // Data interface. + // --------------------- + output wire o_data_wb_cyc, + output wire o_data_wb_stb, + output wire [31:0] o_data_wb_adr, + output wire o_data_wb_we, + input wire i_data_wb_err, + input wire [31:0] i_data_wb_dat, // Wishbone instr port. + output wire [31:0] o_data_wb_dat, + input wire i_data_wb_ack, + output wire [3:0] o_data_wb_sel, + output wire [2:0] o_data_wb_cti + ); localparam COMPRESSED_EN = 1'd1; @@ -87,6 +103,113 @@ zap_reset_sync U_RST_SYNC ( .i_clk(i_clk), .i_reset(i_reset), .o_reset(rst_sync) ); +generate +begin +if ( CACHE_MMU_ENABLE == 1'd0 ) begin:cmmu_dis // Raw processor core without cache+MMU. + +assign o_data_wb_cti = 0; +assign o_instr_wb_cti = 0; + +// ------------------- +// Processor core. +// ------------------- +zap_core #( + .BP_ENTRIES(BP_ENTRIES), + .FIFO_DEPTH(FIFO_DEPTH) +) u_zap_core +( +.i_clk (i_clk), +.i_clk_multipump (i_clk_multipump), +.i_reset (rst_sync), + + +// Code related. +.o_instr_wb_adr (o_instr_wb_adr), +.o_instr_wb_cyc (o_instr_wb_cyc), +.o_instr_wb_stb (o_instr_wb_stb), +.o_instr_wb_we (o_instr_wb_we), +.o_instr_wb_sel (o_instr_wb_sel), + +// Code related. +.i_instr_wb_dat_cache (128'd0), +.i_instr_wb_dat_nocache (i_instr_wb_dat), +.i_instr_src (1'd0), + +.i_instr_wb_ack (i_instr_wb_ack), +.i_instr_wb_err (i_instr_wb_err), + +// Data related. +.o_data_wb_we (o_data_wb_we), +.o_data_wb_adr (o_data_wb_adr), +.o_data_wb_sel (o_data_wb_sel), +.o_data_wb_dat (o_data_wb_dat), +.o_data_wb_cyc (o_data_wb_cyc), +.o_data_wb_stb (o_data_wb_stb), + +// Data related. +.i_data_wb_ack (i_data_wb_ack), +.i_data_wb_err (i_data_wb_err), +.i_data_wb_dat_cache (128'd0), +.i_data_wb_dat_uncache (i_data_wb_dat), +.i_data_src (1'd0), + +// Interrupts. +.i_fiq (i_fiq), +.i_irq (i_irq), + +// These ports are irrelevant as no MMU, cache is present. +.o_mem_translate (), +.i_fsr (32'd0), +.i_far (32'd0), +.o_dac (), +.o_baddr (), +.o_mmu_en (), +.o_sr (), +.o_dcache_inv (), +.o_icache_inv (), +.o_dcache_clean (), +.o_icache_clean (), +.o_dtlb_inv (), +.o_itlb_inv (), +.i_dcache_inv_done (1'd1), +.i_icache_inv_done (1'd1), +.i_dcache_clean_done (1'd1), +.i_icache_clean_done (1'd1), +.o_dcache_en (), +.o_icache_en (), + +// Cache read enables. +.o_instr_cache_rd_en (), +.o_data_cache_rd_en (), + +// Combo Outputs - UNUSED. +.o_clear_from_alu (), +.o_stall_from_shifter (), +.o_stall_from_issue (), +.o_stall_from_decode (), +.o_clear_from_decode (), +.o_clear_from_writeback (), + +// Data IF nxt. +.o_address_nxt (), // Data addr nxt. Used to drive address of data tag RAM. +.o_data_wb_we_nxt (), +.o_data_wb_cyc_nxt (), +.o_data_wb_stb_nxt (), +.o_data_wb_dat_nxt (), +.o_data_wb_sel_nxt (), + +// Code access prpr. +.o_pc_nxt (), // PC addr nxt. Drives read address of code tag RAM. +.o_instr_wb_stb_nxt (), + +.o_cpsr () + +); + +end +else // Cache and MMU enabled. +begin: cmmu_en + wire cpu_mmu_en; wire [31:0] cpu_cpsr; wire cpu_mem_translate; @@ -116,24 +239,6 @@ wire cpu_dc_we, cpu_dc_stb; wire [3:0] cpu_dc_sel; -wire c_wb_stb; -wire c_wb_cyc; -wire c_wb_wen; -wire [3:0] c_wb_sel; -wire [31:0] c_wb_dat; -wire [31:0] c_wb_adr; -wire [2:0] c_wb_cti; -wire c_wb_ack; - -wire d_wb_stb; -wire d_wb_cyc; -wire d_wb_wen; -wire [3:0] d_wb_sel; -wire [31:0] d_wb_dat; -wire [31:0] d_wb_adr; -wire [2:0] d_wb_cti; -wire d_wb_ack; - zap_core #( .BP_ENTRIES(BP_ENTRIES), .FIFO_DEPTH(FIFO_DEPTH) @@ -259,25 +364,15 @@ .i_baddr (cpu_baddr), .i_dac_reg (cpu_dac_reg), .i_tlb_inv (cpu_dtlb_inv), - -.o_wb_stb (), -.o_wb_cyc (), -.o_wb_wen (), -.o_wb_sel (), -.o_wb_dat (), -.o_wb_adr (), -.o_wb_cti (), - -.i_wb_dat (i_wb_dat), -.i_wb_ack (d_wb_ack), - -.o_wb_stb_nxt (d_wb_stb), -.o_wb_cyc_nxt (d_wb_cyc), -.o_wb_wen_nxt (d_wb_wen), -.o_wb_sel_nxt (d_wb_sel), -.o_wb_dat_nxt (d_wb_dat), -.o_wb_adr_nxt (d_wb_adr), -.o_wb_cti_nxt (d_wb_cti) +.o_wb_stb (o_data_wb_stb), +.o_wb_cyc (o_data_wb_cyc), +.o_wb_wen (o_data_wb_we), +.o_wb_sel (o_data_wb_sel), +.o_wb_dat (o_data_wb_dat), +.o_wb_adr (o_data_wb_adr), +.o_wb_cti (o_data_wb_cti), +.i_wb_dat (i_data_wb_dat), +.i_wb_ack (i_data_wb_ack) ); zap_cache #( @@ -312,60 +407,19 @@ .i_baddr (cpu_baddr), .i_dac_reg (cpu_dac_reg), .i_tlb_inv (cpu_itlb_inv), - -.o_wb_stb (), -.o_wb_cyc (), -.o_wb_wen (), -.o_wb_sel (), +.o_wb_stb (o_instr_wb_stb), +.o_wb_cyc (o_instr_wb_cyc), +.o_wb_wen (o_instr_wb_we), +.o_wb_sel (o_instr_wb_sel), .o_wb_dat (), -.o_wb_adr (), -.o_wb_cti (), - -.i_wb_dat (i_wb_dat), -.i_wb_ack (c_wb_ack), - -.o_wb_stb_nxt (c_wb_stb), -.o_wb_cyc_nxt (c_wb_cyc), -.o_wb_wen_nxt (c_wb_wen), -.o_wb_sel_nxt (c_wb_sel), -.o_wb_dat_nxt (c_wb_dat), -.o_wb_adr_nxt (c_wb_adr), -.o_wb_cti_nxt (c_wb_cti) +.o_wb_adr (o_instr_wb_adr), +.o_wb_cti (o_instr_wb_cti), +.i_wb_dat (i_instr_wb_dat), +.i_wb_ack (i_instr_wb_ack) ); -zap_wb_merger u_zap_wb_merger ( +end +end +endgenerate -.i_clk(i_clk), -.i_reset(i_reset), - -.i_c_wb_stb(c_wb_stb), -.i_c_wb_cyc(c_wb_cyc), -.i_c_wb_wen(c_wb_wen), -.i_c_wb_sel(c_wb_sel), -.i_c_wb_dat(c_wb_dat), -.i_c_wb_adr(c_wb_adr), -.i_c_wb_cti(c_wb_cti), -.o_c_wb_ack(c_wb_ack), - -.i_d_wb_stb(d_wb_stb), -.i_d_wb_cyc(d_wb_cyc), -.i_d_wb_wen(d_wb_wen), -.i_d_wb_sel(d_wb_sel), -.i_d_wb_dat(d_wb_dat), -.i_d_wb_adr(d_wb_adr), -.i_d_wb_cti(d_wb_cti), -.o_d_wb_ack(d_wb_ack), - -.o_wb_cyc(o_wb_cyc), -.o_wb_stb(o_wb_stb), -.o_wb_wen(o_wb_we), -.o_wb_sel(o_wb_sel), -.o_wb_dat(o_wb_dat), -.o_wb_adr(o_wb_adr), -.o_wb_cti(o_wb_cti), -//.i_wb_dat(i_wb_dat), -.i_wb_ack(i_wb_ack) - -); - -endmodule // zap_top_single_if.v +endmodule // zap_top.v
/zap/trunk/ZAP/hw/rtl/cache/zap_cache.v
63,13 → 63,13
input wire i_tlb_inv,
 
// Wishbone. Signals from all 4 modules are ORed.
output reg o_wb_stb, o_wb_stb_nxt,
output reg o_wb_cyc, o_wb_cyc_nxt,
output reg o_wb_wen, o_wb_wen_nxt,
output reg [3:0] o_wb_sel, o_wb_sel_nxt,
output reg [31:0] o_wb_dat, o_wb_dat_nxt,
output reg [31:0] o_wb_adr, o_wb_adr_nxt,
output reg [2:0] o_wb_cti, o_wb_cti_nxt,
output reg o_wb_stb,
output reg o_wb_cyc,
output reg o_wb_wen,
output reg [3:0] o_wb_sel,
output reg [31:0] o_wb_dat,
output reg [31:0] o_wb_adr,
output reg [2:0] o_wb_cti,
input wire [31:0] i_wb_dat,
input wire i_wb_ack
 
284,18 → 284,6
end
end
 
// Combo signals for external MUXing.
always @*
begin
o_wb_stb_nxt = wb_stb[0] | wb_stb[1] | wb_stb[2];
o_wb_cyc_nxt = wb_cyc[0] | wb_cyc[1] | wb_cyc[2];
o_wb_adr_nxt = wb_adr[0] | wb_adr[1] | wb_adr[2];
o_wb_cti_nxt = wb_cti[0] | wb_cti[1] | wb_cti[2];
o_wb_sel_nxt = wb_sel[0] | wb_sel[1] | wb_sel[2];
o_wb_dat_nxt = wb_dat[0] | wb_dat[1] | wb_dat[2];
o_wb_wen_nxt = wb_wen[0] | wb_wen[1] | wb_wen[2];
end
 
// synopsys translate_off
reg xerr;
initial xerr = 0;
/zap/trunk/ZAP/hw/rtl/cpu/zap_alu_main.v
184,7 → 184,7
// Wires to emulate an adder.
reg [31:0] op1, op2;
reg cin;
wire [32:0] sum = {1'd0, op1} + {1'd0, op2} + {32'd0, cin};
wire [32:0] sum = {1'd0, op1} + {1'd0, op2} + {31'd0, cin};
 
reg [31:0] tmp_flags, tmp_sum;
 
/zap/trunk/ZAP/hw/rtl/cpu/zap_predecode_coproc.v
123,8 → 123,8
 
case ( state_ff )
IDLE:
// Activate only if no thumb, not in USER mode and CP15 access is requested.
casez ( (!i_cpsr_ff_t && (i_cpsr_ff_mode != USR) & (i_instruction[11:8] == 4'b1111)) ? i_instruction : 32'd0 )
// Activate only if no thumb.
casez ( (!i_cpsr_ff_t && (i_cpsr_ff_mode != USR)) ? i_instruction : 32'd0 )
MRC, MCR, LDC, STC, CDP:
begin
// Send ANDNV R0, R0, R0 instruction.
/zap/trunk/ZAP/hw/rtl/rtl_files.list
25,7 → 25,6
${ZAP_HOME}/hw/rtl/cache/zap_cache_fsm.v
${ZAP_HOME}/hw/rtl/cache/zap_cache_tag_ram.v
${ZAP_HOME}/hw/rtl/cache/zap_cache.v
${ZAP_HOME}/hw/rtl/wb/zap_wb_merger.v
 
+libdir+${ZAP_HOME}/hw/rtl/lib/
+incdir+${ZAP_HOME}/hw/rtl/inc
/zap/trunk/ZAP/hw/sim/run_sim.pl
17,6 → 17,7
[+seed+<seed_value>] -- Force a specific seed for simulation.
[+sim] -- Force register file debug and some extra error messages.
+test+<test_case> -- Run a specific test case. only +test+factorial is available, you may add new tests (see sw folder).
[+cmmu_en] -- Enable cache and MMU (highly unstable)
+ram_size+<ram_size> -- Set size of RAM in bench.
+dump_start+<start_addr_of_dump>+<number_of_words_in_dump> -- Starting memory address to start logging and number of words to log.
[+cache_size+<data_cache_size>+<code_cache_size>] -- Specify data and I-cache size in bytes.
44,6 → 45,7
my $ZAP_HOME = "";
my $SEED = int rand (0xffffffff);
my $SIM = 0;
my $CACHE_MMU_ENABLE = 0;
my $RAM_SIZE = 32768;
my $DUMP_START = 2000;
my $DUMP_SIZE = 200;
81,6 → 83,7
elsif (/^\+seed\+(.*)/) { $SEED = $1; }
elsif (/^\+sim/) { $SIM = 1; }
elsif (/^\+test\+(.*)/) { $TEST = $1; }
elsif (/^\+cmmu_en/) { $CACHE_MMU_ENABLE = 1; }
elsif (/^\+ram_size\+(.*)/) { $RAM_SIZE = $1; }
elsif (/^\+dump_start\+(.*)\+(.*)/) { $DUMP_START = $1; $DUMP_SIZE = $2; }
elsif (/^\+cache_size\+(.*)\+(.*)/) {
127,7 → 130,7
$IVL_OPTIONS .= "-DVCD_FILE_PATH=\\\"/dev/null\\\" ";
}
 
$IVL_OPTIONS .= "-Pzap_test.RAM_SIZE=$RAM_SIZE -Pzap_test.START=$DUMP_START -Pzap_test.COUNT=$DUMP_SIZE -DLINUX ";
$IVL_OPTIONS .= "-Pzap_test.CACHE_MMU_ENABLE=$CACHE_MMU_ENABLE -Pzap_test.RAM_SIZE=$RAM_SIZE -Pzap_test.START=$DUMP_START -Pzap_test.COUNT=$DUMP_SIZE -DLINUX ";
$IVL_OPTIONS .= "-Pzap_test.BP_ENTRIES=$BP -Pzap_test.FIFO_DEPTH=$FIFO ";
$IVL_OPTIONS .= "-Pzap_test.DATA_SECTION_TLB_ENTRIES=$DATA_SECTION_TLB_ENTRIES -Pzap_test.DATA_LPAGE_TLB_ENTRIES=$DATA_LPAGE_TLB_ENTRIES -Pzap_test.DATA_SPAGE_TLB_ENTRIES=$DATA_SPAGE_TLB_ENTRIES -Pzap_test.DATA_CACHE_SIZE=$DATA_CACHE_SIZE ";
$IVL_OPTIONS .= "-Pzap_test.CODE_SECTION_TLB_ENTRIES=$CODE_SECTION_TLB_ENTRIES -Pzap_test.CODE_LPAGE_TLB_ENTRIES=$CODE_LPAGE_TLB_ENTRIES -Pzap_test.CODE_SPAGE_TLB_ENTRIES=$CODE_SPAGE_TLB_ENTRIES -Pzap_test.CODE_CACHE_SIZE=$CODE_CACHE_SIZE ";
/zap/trunk/ZAP/hw/sim/run_sim_gui.pl
25,7 → 25,7
"Seed" 2 1 "0 " 2 25 25 30\
"Define SIM(Y/N)?" 3 1 "Y " 3 25 25 30\
"Testcase" 4 1 "factorial " 4 25 25 30\
"<UNUSED>" 5 1 "Y " 5 25 25 30\
"Cache/MMU Enable(Y/N)?" 5 1 "Y " 5 25 25 30\
"External RAM size(bytes)" 6 1 "32768 " 6 25 25 30\
"dump start addr+words" 7 1 "1992+100 " 7 25 25 30\
"DTLB(sect+small+large)" 8 1 "8+8+8 " 8 25 25 30\
54,6 → 54,7
my $seed ;
my $sim ;
my $testcase ;
my $cmmu ;
my $ram_size ;
my $memdumpstart;
my $dtlb ;
79,6 → 80,7
$seed = $2;
$sim = $3;
$testcase = $4;
$cmmu = $5;
$ram_size = $6;
$memdumpstart = $7;
$dtlb = $8;
101,6 → 103,7
seed = $seed
sim = $sim
testcase = $testcase
cmmu = $cmmu
ram_size = $ram_size
memdumpstart = $memdumpstart
dtlb = $dtlb
124,15 → 127,15
print "Zenity ERROR. Form not entered correctly!";
}
 
if ( $cmmu =~ m/Y/ ) { $command .= " +cmmu_en "; }
if ( $seed =~ m/^\s*[0-9]+\s*$/ ) { $command .= " +seed+$seed"; }
if ( $sim =~ m/Y/ ) { $command .= " +sim "; }
 
if ( 1 ) {
if ( $cmmu =~ m/Y/ ) {
$command .= " +cmmu_en ";
$command .= " +cache_size+$csize ";
$command .= " +dtlb+$dtlb ";
$command .= " +itlb+$itlb ";
}
 
if ( $irq =~ m/Y/ ) { $command .= " +irq_en "; }
if ( $fiq =~ m/Y/ ) { $command .= " +fiq_en "; }
if ( $tlbdebug =~ m/Y/ ) { $command .= " +tlbdebug "; }
/zap/trunk/ZAP/hw/tb/zap_tb.v
11,7 → 11,6
input [3:0] i_wb_sel,
input i_wb_we,
 
// unused.
input i_wb_cyc2,
input i_wb_stb2,
input [31:0] i_wb_adr2,
20,10 → 19,10
input i_wb_we2,
 
output reg [31:0] o_wb_dat,
output reg [31:0] o_wb_dat2, // unused.
output reg [31:0] o_wb_dat2,
 
output reg o_wb_ack,
output reg o_wb_ack2 // unused.
output reg o_wb_ack2
 
);
 
128,6 → 127,7
parameter RAM_SIZE = 32768;
parameter START = 1992;
parameter COUNT = 120;
parameter CACHE_MMU_ENABLE = 0;
parameter DATA_SECTION_TLB_ENTRIES = 4;
parameter DATA_LPAGE_TLB_ENTRIES = 8;
parameter DATA_SPAGE_TLB_ENTRIES = 16;
195,6 → 195,7
 
// CPU config.
 
$display("parameter CACHE_MMU_ENABLE = %d", CACHE_MMU_ENABLE ) ;
$display("parameter DATA_SECTION_TLB_ENTRIES = %d", DATA_SECTION_TLB_ENTRIES ) ;
$display("parameter DATA_LPAGE_TLB_ENTRIES = %d", DATA_LPAGE_TLB_ENTRIES ) ;
$display("parameter DATA_SPAGE_TLB_ENTRIES = %d", DATA_SPAGE_TLB_ENTRIES ) ;
229,11 → 230,23
end
endtask
 
always @*
begin
if ( instr_wb_dat[0] === 1'dx )
begin
$display("*E: Wishbone reporting x...! Terminating simulation...");
$finish;
end
end
 
// =========================
// Processor core.
// =========================
zap_top #(
 
// enable cache and mmu.
.CACHE_MMU_ENABLE(CACHE_MMU_ENABLE),
 
// Configure FIFO depth and BP entries.
.FIFO_DEPTH(FIFO_DEPTH),
.BP_ENTRIES(BP_ENTRIES),
258,16 → 271,30
.i_irq(i_irq),
.i_fiq(i_fiq),
 
.o_wb_cyc(data_wb_cyc),
.o_wb_stb(data_wb_stb),
.o_wb_adr(data_wb_adr),
.o_wb_we(data_wb_we),
//.i_wb_err(1'd0),
.i_wb_dat(data_wb_din[0][31:0]),
.o_wb_dat(data_wb_dout),
.i_wb_ack(data_wb_ack),
.o_wb_sel(data_wb_sel)
.o_instr_wb_cyc(instr_wb_cyc),
.o_instr_wb_stb(instr_wb_stb),
.o_instr_wb_adr(instr_wb_adr),
.o_instr_wb_we(instr_wb_we),
.i_instr_wb_err(1'd0),
.i_instr_wb_dat(instr_wb_dat[0][31:0]),
 
 
.i_instr_wb_ack(instr_wb_ack),
.o_instr_wb_sel(instr_wb_sel),
.o_data_wb_cyc(data_wb_cyc),
.o_data_wb_stb(data_wb_stb),
.o_data_wb_adr(data_wb_adr),
.o_data_wb_we(data_wb_we),
.i_data_wb_err(1'd0),
.i_data_wb_dat(data_wb_din[0][31:0]),
 
 
 
 
.o_data_wb_dat(data_wb_dout),
.i_data_wb_ack(data_wb_ack),
.o_data_wb_sel(data_wb_sel)
 
);
 
// ===============================
290,14 → 317,14
.o_wb_ack(data_wb_ack),
.i_wb_sel(data_wb_sel),
 
.i_wb_cyc2(0),
.i_wb_stb2(0),
.i_wb_adr2(0),
.i_wb_we2 (0),
.o_wb_dat2(),
.o_wb_ack2(),
.i_wb_sel2(0),
.i_wb_dat2(0)
.i_wb_cyc2(instr_wb_cyc),
.i_wb_stb2(instr_wb_stb),
.i_wb_adr2(instr_wb_adr),
.i_wb_we2(instr_wb_we),
.o_wb_dat2(instr_wb_dat[0][31:0]),
.o_wb_ack2(instr_wb_ack),
.i_wb_sel2(instr_wb_sel),
.i_wb_dat2(32'd0)
);
 
// ===========================
/zap/trunk/ZAP/README.md
21,7 → 21,7
### Features
 
Can execute 32-bit ARMv4 and 16 bit Thumb v1 code.
Wishbone B3 compatible interface. Cache unit supports burst access.
Wishbone B3 compatible I and D interfaces. Cache unit supports burst access.
9-stage pipeline design.
Branch prediction is supported.
Split I and D writeback cache (Size can be configured using parameters).

powered by: WebSVN 2.1.0

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