Skip to content

Commit 0995a4f

Browse files
committed
wire up frame/line start, interrupt
1 parent a34105e commit 0995a4f

File tree

3 files changed

+19
-8
lines changed

3 files changed

+19
-8
lines changed

Diff for: syn/mkrvidor4000_quartus/mipi-demo.sdc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
set_time_format -unit ns -decimal_places 3
2-
create_clock -name MIPI_CLK -period 15.38 [get_ports {MIPI_CLK}]
2+
#create_clock -name MIPI_CLK -period 15.38 [get_ports {MIPI_CLK}]
33
create_clock -name CLK_48MHZ -period "48.0 MHz" [get_ports {CLK_48MHZ}]
44
create_generated_clock -name SDRAM_CLK -source [get_pins mem_pll|altpll_component|auto_generated|pll1|clk[0]] [get_ports {SDRAM_CLK}]
55

Diff for: top/mkrvidor4000/arbiter.sv

+11-4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ module arbiter #(
88
input logic mipi_clk,
99
input logic mipi_data_enable,
1010
input logic [7:0] mipi_data [3:0],
11+
input logic frame_start,
12+
input logic line_start,
13+
input logic interrupt,
1114

1215
input logic sdram_clk,
1316
output logic clock_enable,
@@ -53,12 +56,12 @@ as4c4m16sa_controller #(
5356
.dq(dq)
5457
);
5558

56-
localparam MIPI_POINTER_WIDTH = 6;
59+
localparam MIPI_POINTER_WIDTH = 5;
5760
logic [MIPI_POINTER_WIDTH-1:0] mipi_data_out_used;
5861
logic mipi_data_out_acknowledge, mipi_data_in_enable;
5962
logic [15:0] mipi_data_in, mipi_data_out;
6063

61-
fifo #(.DATA_WIDTH(16), .POINTER_WIDTH(MIPI_POINTER_WIDTH), .SENDER_DELAY_CHAIN_LENGTH(2)) mipi_write_fifo(
64+
fifo #(.DATA_WIDTH(16), .POINTER_WIDTH(MIPI_POINTER_WIDTH), .SENDER_DELAY_CHAIN_LENGTH(3)) mipi_write_fifo(
6265
.sender_clock(mipi_clk),
6366
.data_in_enable(mipi_data_in_enable),
6467
.data_in_used(),
@@ -70,9 +73,11 @@ fifo #(.DATA_WIDTH(16), .POINTER_WIDTH(MIPI_POINTER_WIDTH), .SENDER_DELAY_CHAIN_
7073
);
7174

7275
logic mipi_data_in_countdown = 1'b0;
73-
// Relies on https://github.com/hdl-util/mipi-csi-2/commit/cd500bab6395de0696a728ab38a205986fd7be91
74-
assign mipi_data_in = mipi_data_in_countdown ? {mipi_data[3], mipi_data[2]} : {mipi_data[1], mipi_data[0]};
76+
assign mipi_data_in = mipi_data_in_countdown ? mipi_data_holding : {mipi_data[1], mipi_data[0]};
7577
assign mipi_data_in_enable = mipi_data_enable || mipi_data_in_countdown == 1'b1;
78+
logic [15:0] mipi_data_holding = 16'd0;
79+
always_ff @(posedge mipi_clk)
80+
mipi_data_holding <= {mipi_data[3], mipi_data[2]};
7681
always_ff @(posedge mipi_clk)
7782
if (mipi_data_enable)
7883
mipi_data_in_countdown <= 1'b1;
@@ -114,6 +119,8 @@ always_ff @(posedge sdram_clk)
114119

115120
always @(posedge sdram_clk)
116121
begin
122+
if (interrupt && frame_start)
123+
mipi_address <= 22'd0;
117124
if (command == 2'd0)
118125
begin
119126
if (pixel_data_in_used <= PIXEL_POINTER_WIDTH'(0) - 4'd9) // Read burst possible

Diff for: top/mkrvidor4000/mkrvidor4000_top.sv

+7-3
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ logic ready;
8888
logic model_err;
8989
logic nack_err;
9090

91-
ov5647 #(.INPUT_CLK_RATE(48_000_000), .TARGET_SCL_RATE(100_000)) ov5647 (
91+
imx219 #(.INPUT_CLK_RATE(48_000_000), .TARGET_SCL_RATE(100_000)) imx219 (
9292
.clk_in(CLK_48MHZ),
9393
.scl(MIPI_SCL),
9494
.sda(MIPI_SDA),
@@ -105,7 +105,7 @@ logic [7:0] image_data [3:0];
105105
logic [5:0] image_data_type;
106106
logic image_data_enable;
107107
logic [15:0] word_count;
108-
logic frame_start, frame_end;
108+
logic frame_start, line_start, interrupt;
109109
camera #(.NUM_LANES(2)) camera (
110110
.clock_p(MIPI_CLK),
111111
.data_p(MIPI_D),
@@ -114,7 +114,8 @@ camera #(.NUM_LANES(2)) camera (
114114
.image_data_enable(image_data_enable),
115115
.word_count(word_count),
116116
.frame_start(frame_start),
117-
.frame_end(frame_end)
117+
.line_start(line_start),
118+
.interrupt(interrupt)
118119
);
119120

120121
// logic [7:0] raw [3:0];
@@ -142,6 +143,9 @@ arbiter arbiter (
142143
.mipi_clk(MIPI_CLK),
143144
.mipi_data_enable(image_data_enable),
144145
.mipi_data(image_data),
146+
.frame_start(frame_start),
147+
.line_start(line_start),
148+
.interrupt(interrupt),
145149
.sdram_clk(SDRAM_CLK),
146150
.clock_enable(SDRAM_CKE),
147151
.bank_activate(SDRAM_BA),

0 commit comments

Comments
 (0)