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

Subversion Repositories ao486

[/] [ao486/] [trunk/] [rtl/] [ao486/] [autogen/] [memory_read.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_IDLE;
3
wire cond_1 = read_do && ~(read_done) && ~(rd_reset) && ~(read_page_fault) && ~(read_ac_fault);
4
wire cond_2 = state == STATE_FIRST_WAIT;
5
wire cond_3 = tlbread_page_fault || tlbread_ac_fault || (tlbread_retry && reset_waiting);
6
wire cond_4 = tlbread_done && length_2_reg != 4'd0;
7
wire cond_5 = tlbread_done;
8
wire cond_6 = rd_reset == `FALSE && reset_waiting == `FALSE;
9
wire cond_7 = state == STATE_SECOND;
10
wire cond_8 = tlbread_page_fault || tlbread_ac_fault || tlbread_done || (tlbread_retry && reset_waiting);
11
wire cond_9 = tlbread_done && rd_reset == `FALSE && reset_waiting == `FALSE;
12
//======================================================== saves
13
wire [55:0] buffer_to_reg =
14
    (cond_2 && ~cond_3 && cond_4)? ( tlbread_data[55:0]) :
15
    buffer;
16
wire [31:0] address_2_reg_to_reg =
17
    (cond_0)? ( { address_2[31:4], 4'd0 }) :
18
    address_2_reg;
19
wire [3:0] length_2_reg_to_reg =
20
    (cond_0)? (  length_2) :
21
    length_2_reg;
22
wire [63:0] read_data_to_reg =
23
    (cond_2 && ~cond_3 && ~cond_4 && cond_5 && cond_6)? ( tlbread_data) :
24
    (cond_7 && cond_9)? ( merged) :
25
    read_data;
26
wire [1:0] state_to_reg =
27
    (cond_0 && cond_1)? ( STATE_FIRST_WAIT) :
28
    (cond_2 && cond_3)? ( STATE_IDLE) :
29
    (cond_2 && ~cond_3 && cond_4)? ( STATE_SECOND) :
30
    (cond_2 && ~cond_3 && ~cond_4 && cond_5)? ( STATE_IDLE) :
31
    (cond_7 && cond_8)? ( STATE_IDLE) :
32
    state;
33
wire  read_done_to_reg =
34
    (cond_0)? ( `FALSE) :
35
    (cond_2 && ~cond_3 && ~cond_4 && cond_5 && cond_6)? ( `TRUE) :
36
    (cond_7 && cond_9)? ( `TRUE) :
37
    read_done;
38
//======================================================== always
39
always @(posedge clk or negedge rst_n) begin
40
    if(rst_n == 1'b0) buffer <= 56'd0;
41
    else              buffer <= buffer_to_reg;
42
end
43
always @(posedge clk or negedge rst_n) begin
44
    if(rst_n == 1'b0) address_2_reg <= 32'd0;
45
    else              address_2_reg <= address_2_reg_to_reg;
46
end
47
always @(posedge clk or negedge rst_n) begin
48
    if(rst_n == 1'b0) length_2_reg <= 4'd0;
49
    else              length_2_reg <= length_2_reg_to_reg;
50
end
51
always @(posedge clk or negedge rst_n) begin
52
    if(rst_n == 1'b0) read_data <= 64'd0;
53
    else              read_data <= read_data_to_reg;
54
end
55
always @(posedge clk or negedge rst_n) begin
56
    if(rst_n == 1'b0) state <= 2'd0;
57
    else              state <= state_to_reg;
58
end
59
always @(posedge clk or negedge rst_n) begin
60
    if(rst_n == 1'b0) read_done <= 1'd0;
61
    else              read_done <= read_done_to_reg;
62
end
63
//======================================================== sets
64
assign tlbread_do =
65
    (cond_0 && cond_1)? (`TRUE) :
66
    (cond_2)? (`TRUE) :
67
    (cond_7)? (`TRUE) :
68
    1'd0;
69
assign tlbread_length =
70
    (cond_0)? (  length_1) :
71
    (cond_2)? (  length_1) :
72
    (cond_7)? (  length_2_reg) :
73
    4'd0;
74
assign tlbread_address =
75
    (cond_0)? ( read_address) :
76
    (cond_2)? ( read_address) :
77
    (cond_7)? ( address_2_reg) :
78
    32'd0;

powered by: WebSVN 2.1.0

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