11/*
2- * layer_ctl .sv
2+ * layer_ctrl .sv
33 *
44 * Created on: 2020-04-06 23:08
55 * Author: Jack Chen <redchenjs@live.com>
66 */
77
8- module layer_ctl (
8+ module layer_ctrl (
99 input logic clk_in,
1010 input logic rst_n_in,
1111
1212 input logic dc_in,
1313
14- input logic byte_rdy_in,
14+ input logic byte_rdy_in,
1515 input logic [7 : 0 ] byte_data_in,
1616
17- output logic wr_done_out,
1817 output logic [8 : 0 ] wr_en_out,
18+ output logic wr_done_out,
1919 output logic [5 : 0 ] wr_addr_out,
2020 output logic [3 : 0 ] wr_byte_en_out
2121);
@@ -24,88 +24,91 @@ parameter [7:0] CUBE0414_CONF_WR = 8'h2a;
2424parameter [7 : 0 ] CUBE0414_ADDR_WR = 8'h2b ;
2525parameter [7 : 0 ] CUBE0414_DATA_WR = 8'h2c ;
2626
27- logic conf_wr;
28- logic [7 : 0 ] data_wr ;
27+ logic conf_wr;
28+ logic [7 : 0 ] code_wr ;
2929
30- logic addr_en;
31- logic [2 : 0 ] color_en ;
30+ logic addr_en;
31+ logic [2 : 0 ] data_en ;
3232
33- wire conf_done = (wr_addr_out == 6'd5 );
34- wire data_done = data_wr[0 ];
33+ logic [5 : 0 ] wr_addr;
3534
36- wire addr_done = (wr_addr_out == 6'd63 );
37- wire color_done = color_en [0 ];
35+ wire conf_done = (wr_addr == 6'd5 );
36+ wire code_done = code_wr [0 ];
3837
39- wire layer_done = addr_done & color_done ;
40- wire frame_done = data_done & layer_done ;
38+ wire addr_done = (wr_addr == 6'd63 ) ;
39+ wire data_done = data_en[ 0 ] ;
4140
42- assign wr_done_out = byte_rdy_in & frame_done;
41+ wire layer_done = addr_done & data_done;
42+ wire frame_done = code_done & layer_done;
4343
4444assign wr_en_out[8 ] = byte_rdy_in & conf_wr;
45- assign wr_en_out[7 ] = byte_rdy_in & data_wr[7 ];
46- assign wr_en_out[6 ] = byte_rdy_in & data_wr[6 ];
47- assign wr_en_out[5 ] = byte_rdy_in & data_wr[5 ];
48- assign wr_en_out[4 ] = byte_rdy_in & data_wr[4 ];
49- assign wr_en_out[3 ] = byte_rdy_in & data_wr[3 ];
50- assign wr_en_out[2 ] = byte_rdy_in & data_wr[2 ];
51- assign wr_en_out[1 ] = byte_rdy_in & data_wr[1 ];
52- assign wr_en_out[0 ] = byte_rdy_in & data_wr[0 ];
45+ assign wr_en_out[7 ] = byte_rdy_in & code_wr[7 ];
46+ assign wr_en_out[6 ] = byte_rdy_in & code_wr[6 ];
47+ assign wr_en_out[5 ] = byte_rdy_in & code_wr[5 ];
48+ assign wr_en_out[4 ] = byte_rdy_in & code_wr[4 ];
49+ assign wr_en_out[3 ] = byte_rdy_in & code_wr[3 ];
50+ assign wr_en_out[2 ] = byte_rdy_in & code_wr[2 ];
51+ assign wr_en_out[1 ] = byte_rdy_in & code_wr[1 ];
52+ assign wr_en_out[0 ] = byte_rdy_in & code_wr[0 ];
53+
54+ assign wr_done_out = byte_rdy_in & frame_done;
55+ assign wr_addr_out = wr_addr;
5356
54- assign wr_byte_en_out = { addr_en, color_en } ;
57+ assign wr_byte_en_out = { addr_en, data_en } ;
5558
5659always_ff @ (posedge clk_in or negedge rst_n_in)
5760begin
5861 if (! rst_n_in) begin
5962 conf_wr <= 1'b0 ;
60- data_wr <= 8'h00 ;
63+ code_wr <= 8'h00 ;
6164
6265 addr_en <= 1'b0 ;
63- color_en <= 3'b000 ;
66+ data_en <= 3'b000 ;
6467
65- wr_addr_out <= 6'h00 ;
68+ wr_addr <= 6'h00 ;
6669 end else begin
6770 if (byte_rdy_in) begin
6871 if (! dc_in) begin // Command
6972 case (byte_data_in)
7073 CUBE0414_CONF_WR : begin // Write Reg Conf
7174 conf_wr <= 1'b1 ;
72- data_wr <= 8'h00 ;
75+ code_wr <= 8'h00 ;
7376
7477 addr_en <= 1'b0 ;
75- color_en <= 3'b000 ;
78+ data_en <= 3'b000 ;
7679 end
7780 CUBE0414_ADDR_WR : begin // Write RAM Addr
7881 conf_wr <= 1'b0 ;
79- data_wr <= 8'hff ;
82+ code_wr <= 8'hff ;
8083
8184 addr_en <= 1'b1 ;
82- color_en <= 3'b000 ;
85+ data_en <= 3'b000 ;
8386 end
8487 CUBE0414_DATA_WR : begin // Write RAM Data
8588 conf_wr <= 1'b0 ;
86- data_wr <= 8'h80 ;
89+ code_wr <= 8'h80 ;
8790
8891 addr_en <= 1'b0 ;
89- color_en <= 3'b100 ;
92+ data_en <= 3'b100 ;
9093 end
9194 default : begin
9295 conf_wr <= 1'b0 ;
93- data_wr <= 8'h00 ;
96+ code_wr <= 8'h00 ;
9497
9598 addr_en <= 1'b0 ;
96- color_en <= 3'b000 ;
99+ data_en <= 3'b000 ;
97100 end
98101 endcase
99102
100- wr_addr_out <= 6'h00 ;
103+ wr_addr <= 6'h00 ;
101104 end else begin // Data
102105 conf_wr <= conf_wr & ~ conf_done;
103- data_wr <= data_wr >> (~ (conf_wr | addr_en) & layer_done);
106+ code_wr <= code_wr >> (~ (conf_wr | addr_en) & layer_done);
104107
105108 addr_en <= addr_en & ~ addr_done;
106- color_en <= { color_en [0 ], color_en [2 : 1 ]} ;
109+ data_en <= { data_en [0 ], data_en [2 : 1 ]} ;
107110
108- wr_addr_out <= wr_addr_out + (conf_wr | addr_en | color_done );
111+ wr_addr <= wr_addr + (conf_wr | addr_en | data_done );
109112 end
110113 end
111114 end
0 commit comments