-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPositionUpdateController.v
More file actions
89 lines (78 loc) · 2.63 KB
/
PositionUpdateController.v
File metadata and controls
89 lines (78 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 02/09/2025 02:51:50 PM
// Design Name:
// Module Name: PositionUpdateController
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module PositionUpdateController #(parameter DBSIZE = 256)(
input ready,
output reg done,
input double_buffer,
input [1:0] block,
output [31:0] oaddr,
output reg [32:0] overwrite_addr,
input clk,
input rst,
output reg stop_we
);
reg [31:0] raddr;
reg [31:0] _raddr;
reg [32:0] _overwrite_addr;
wire [31:0] out_wire = (rst)? 0:
(!ready)? (double_buffer == 1) ? DBSIZE : 0 :_raddr;
assign oaddr = out_wire;
always @(posedge clk) begin
stop_we <= overwrite_addr[32];
if(rst) begin
raddr <= 0;
_raddr <= 0;
_overwrite_addr <= {1'b1,{32{1'b0}}};
done <= 0;
//oaddr <= {32{1'b1}};
overwrite_addr <={1'b1,{32{1'b0}}};
end else if(!ready) begin
raddr <= (double_buffer == 1) ? DBSIZE : 0;
_raddr <= (double_buffer == 1) ? DBSIZE : 0;
_overwrite_addr[32] = 0;
_overwrite_addr[0+:32] <= (double_buffer == 1) ? 0 : DBSIZE;
done <= 0;
//oaddr <= {32{1'b1}};
overwrite_addr <= {1'b1,{32{1'b0}}};
end else if(_raddr[0+:32] == ((double_buffer == 1) ? DBSIZE : 0) + DBSIZE - 1) begin
done <= 1;
//raddr <= 0;
//oaddr <= {32{1'b1}};
_overwrite_addr <= {1'b1,{32{1'b0}}};
overwrite_addr <= {1'b1,{32{1'b0}}};
end else begin
//oaddr <= raddr;
overwrite_addr <= _overwrite_addr;
done <= 0;
raddr <= _raddr;
if(_overwrite_addr[32] == 1'b1 && block != 2'b01) begin
_raddr <= _raddr + 1;
end else begin
if (_overwrite_addr[0+:32] == ((double_buffer == 1) ? 0 : DBSIZE) + DBSIZE - 1) begin
_overwrite_addr <= {1'b1,{32{1'b0}}};
_raddr <= (double_buffer == 1) ? DBSIZE : 0;
end else if(_overwrite_addr[32] != 1)begin
_overwrite_addr <= _overwrite_addr + 1;
end
end
end
end
endmodule