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

Subversion Repositories v586

[/] [v586/] [trunk/] [soc_rtl/] [axi_rom.v] - Blame information for rev 121

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 121 ultro
/* verilator lint_off UNDRIVEN */
2
/* verilator lint_off UNUSED */
3
 
4
module axi_rom (
5
clk,rstn,
6
 
7
axi_ARVALID,
8
axi_ARREADY,
9
axi_AR,
10
axi_ARBURST,
11
axi_ARLEN,
12
 
13
axi_R,
14
axi_RVALID,
15
axi_RREADY,
16
axi_RLAST
17
 
18
);
19
 
20
input clk,rstn;
21
 
22
input            axi_ARVALID,axi_RREADY;
23
output reg       axi_ARREADY,axi_RVALID;
24
output reg       axi_RLAST;
25
input      [7:0] axi_ARLEN;
26
input      [1:0] axi_ARBURST;
27
 
28
output    [31:0] axi_R;
29
input     [31:0] axi_AR;
30
 
31
reg        [7:0] Mem [1023:0];
32
reg       [31:0] Qint;
33
wire       [9:0] A0;
34
reg        [9:0] A1;
35
reg              read_transaction;
36
reg              burst_transaction;
37
reg        [7:0] burstn;
38
reg        [7:0] len;
39
 
40
assign A0 = {axi_AR[9:2],2'b00};
41
 
42
initial
43
begin
44
$readmemh("boot.mem" , Mem , 0);
45
end
46
 
47
// Read process
48
always @(posedge clk) Qint[ 7: 0] <= Mem[A1+0];
49
always @(posedge clk) Qint[15: 8] <= Mem[A1+1];
50
always @(posedge clk) Qint[23:16] <= Mem[A1+2];
51
always @(posedge clk) Qint[31:24] <= Mem[A1+3];
52
assign axi_R = Qint;
53
 
54
// control
55
always @(posedge clk or negedge rstn)
56
if (~rstn)
57
 begin
58
  axi_ARREADY <=0;
59
  axi_RVALID  <=0;
60
  read_transaction <= 0;
61
  burst_transaction <= 0;
62
  burstn <= 0;
63
  axi_RLAST <= 0;
64
 end
65
else
66
 begin
67
  if (axi_ARVALID & ~read_transaction &~burst_transaction)
68
    begin
69
     axi_ARREADY <=1;
70
     A1 <= A0;
71
     if ((axi_ARLEN != 8'h0) && (axi_ARBURST == 2'b01)) begin len <= axi_ARLEN; burst_transaction <= 1; end else read_transaction <= 1 ;
72
    end
73
   else
74
    begin
75
     axi_ARREADY <=0;
76
    end
77
 
78
  if (axi_RREADY & read_transaction)
79
    begin
80
     axi_RVALID  <= 1;
81
     axi_RLAST   <= 1;
82
     read_transaction <=0;
83
    end
84
   else
85
  if (axi_RREADY & burst_transaction)
86
    begin
87
     axi_RVALID  <=1;
88
     if (burstn == len) begin axi_RLAST <= 1; burst_transaction <=0; end
89
     burstn <= burstn +1;
90
     A1 <= A1 + 4;
91
    end
92
   else
93
    begin
94
     axi_RVALID  <=0; axi_RLAST <= 0; burstn <=0;
95
    end
96
 
97
 
98
 end
99
 
100
endmodule
101
 

powered by: WebSVN 2.1.0

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