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

Subversion Repositories ao486

[/] [ao486/] [trunk/] [rtl/] [ao486/] [autogen/] [prefetch_control.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alfik
//======================================================== conditions
2
wire cond_0 = state == STATE_TLB_REQUEST;
3
wire cond_1 = ~(pr_reset) && prefetch_length > 5'd0 && prefetchfifo_used < 5'd3;
4
wire cond_2 = tlbcode_do;
5
wire cond_3 = state == STATE_ICACHE;
6
wire cond_4 = page_cross || pr_reset || prefetchfifo_used >= 5'd8;
7
wire cond_5 = offset_update;
8
//======================================================== saves
9
wire [31:0] physical_to_reg =
10
    (cond_0 && cond_1 && cond_2)? (      tlbcode_physical) :
11
    (cond_3 && cond_5)? ( { physical[31:12], prefetch_address[11:0] }) :
12
    physical;
13
wire [31:0] linear_to_reg =
14
    (cond_0 && cond_1 && cond_2)? (        tlbcode_linear) :
15
    (cond_3 && cond_5)? (   { linear[31:12],   prefetch_address[11:0] }) :
16
    linear;
17
wire [1:0] state_to_reg =
18
    (cond_0 && cond_1 && cond_2)? ( STATE_ICACHE) :
19
    (cond_3 && cond_4)? ( STATE_TLB_REQUEST) :
20
    state;
21
wire  cache_disable_to_reg =
22
    (cond_0 && cond_1 && cond_2)? ( tlbcode_cache_disable) :
23
    cache_disable;
24
//======================================================== always
25
always @(posedge clk or negedge rst_n) begin
26
    if(rst_n == 1'b0) physical <= 32'd0;
27
    else              physical <= physical_to_reg;
28
end
29
always @(posedge clk or negedge rst_n) begin
30
    if(rst_n == 1'b0) linear <= 32'd0;
31
    else              linear <= linear_to_reg;
32
end
33
always @(posedge clk or negedge rst_n) begin
34
    if(rst_n == 1'b0) state <= 2'd0;
35
    else              state <= state_to_reg;
36
end
37
always @(posedge clk or negedge rst_n) begin
38
    if(rst_n == 1'b0) cache_disable <= 1'd0;
39
    else              cache_disable <= cache_disable_to_reg;
40
end
41
//======================================================== sets
42
assign icacheread_length =
43
    (cond_0 && cond_1 && cond_2)? (        length) :
44
    (cond_3)? (        length) :
45
    5'd0;
46
assign tlbcoderequest_do =
47
    (cond_0 && cond_1)? (`TRUE) :
48
    1'd0;
49
assign icacheread_do =
50
    (cond_0 && cond_1 && cond_2)? (`TRUE) :
51
    (cond_3 && ~cond_4)? (`TRUE) :
52
    1'd0;
53
assign icacheread_cache_disable =
54
    (cond_0 && cond_1 && cond_2)? ( tlbcode_cache_disable) :
55
    (cond_3)? ( cache_disable) :
56
    1'd0;
57
assign icacheread_address =
58
    (cond_0 && cond_1 && cond_2)? (       tlbcode_physical) :
59
    (cond_3)? (       (offset_update)? { physical[31:12], prefetch_address[11:0] } : physical) :
60
    32'd0;

powered by: WebSVN 2.1.0

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