📄 i2s_lcm_config.v
字号:
module I2S_LCM_Config ( // Host Side
SW_D,
SW_R,
iCLK,
iRST_N,
// I2C Side
I2S_SCLK,
I2S_SDAT,
I2S_SCEN,
I2S_BUSY_n
);
// Host Side
output I2S_BUSY_n;
input [7:0]SW_D;
input [5:0]SW_R;
input iCLK;
input iRST_N;
// I2C Side
output I2S_SCLK;
inout I2S_SDAT;
output I2S_SCEN;
// Internal Registers/Wires
reg mI2S_STR;
wire mI2S_RDY;
wire mI2S_ACK;
wire mI2S_CLK;
reg [15:0] mI2S_DATA;
reg [15:0] LUT_DATA;
reg [5:0] LUT_INDEX;
reg [3:0] mSetup_ST;
reg I2S_BUSY_n;
// LUT Data Number
parameter LUT_SIZE = 19;
I2S_Controller u0 ( // Host Side
.iCLK(iCLK),
.iRST(iRST_N),
.iDATA(mI2S_DATA),
.iSTR(mI2S_STR),
.oACK(mI2S_ACK),
.oRDY(mI2S_RDY),
.oCLK(mI2S_CLK),
// Serial Side
.I2S_EN(I2S_SCEN),
.I2S_DATA(I2S_SDAT),
.I2S_CLK(I2S_SCLK) );
////////////////////// Config Control ////////////////////////////
always@(posedge mI2S_CLK or negedge iRST_N)
begin
if(!iRST_N)
begin
LUT_INDEX <= 0;
mSetup_ST <= 0;
mI2S_STR <= 0;
I2S_BUSY_n <= 0;
end
else
begin
if(LUT_INDEX<LUT_SIZE)
begin
I2S_BUSY_n <= 0;
case(mSetup_ST)
0: begin
mSetup_ST <= 1;
end
1: begin
mSetup_ST <= 2;
end
2: begin
mI2S_DATA <= LUT_DATA;
mI2S_STR <= 1;
mSetup_ST <= 3;
end
3: begin
if(mI2S_RDY)
begin
if(mI2S_ACK)
mSetup_ST <= 4;
else
mSetup_ST <= 0;
mI2S_STR <= 0;
end
end
4: begin
LUT_INDEX <= LUT_INDEX+1;
mSetup_ST <= 0;
end
endcase
end
else I2S_BUSY_n <= 1;
end
end
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
/*
// r = 1.2
128
229
321
408
492
572
651
728
803
876
949
1020
*/
/*
r = 0.9
0
45
108
180
258
341
428
519
613
711
811
913
1019
*/
/*
natu
99
195
284
366
440
510
580
654
735
823
919
1019
*/
//
wire [9:0]g0 =106 ;
wire [9:0]g1 =200 ;
wire [9:0]g2 =289 ;
wire [9:0]g3 =375 ;
wire [9:0]g4 =460 ;
wire [9:0]g5 =543 ;
wire [9:0]g6 =625 ;
wire [9:0]g7 =705 ;
wire [9:0]g8 =785 ;
wire [9:0]g9 =864 ;
wire [9:0]g10=942 ;
wire [9:0]g11=1020 ;
///////////////////// Config Data LUT //////////////////////////
always
begin
case(LUT_INDEX)
0 : LUT_DATA <= {6'h11,2'b01,g0[9:8],g1[9:8],g2[9:8],g3[9:8]};
1 : LUT_DATA <= {6'h12,2'b01,g4[9:8],g5[9:8],g6[9:8],g7[9:8]};
2 : LUT_DATA <= {6'h13,2'b01,g8[9:8],g9[9:8],g10[9:8],g11[9:8]};
3 : LUT_DATA <= {6'h14,2'b01,g0[7:0]};
4 : LUT_DATA <= {6'h15,2'b01,g1[7:0]};
5 : LUT_DATA <= {6'h16,2'b01,g2[7:0]};
6 : LUT_DATA <= {6'h17,2'b01,g3[7:0]};
7 : LUT_DATA <= {6'h18,2'b01,g4[7:0]};
8 : LUT_DATA <= {6'h19,2'b01,g5[7:0]};
9 : LUT_DATA <= {6'h1a,2'b01,g6[7:0]};
10 : LUT_DATA <= {6'h1b,2'b01,g7[7:0]};
11 : LUT_DATA <= {6'h1c,2'b01,g8[7:0]};
12 : LUT_DATA <= {6'h1d,2'b01,g9[7:0]};
13 : LUT_DATA <= {6'h1e,2'b01,g10[7:0]};
14 : LUT_DATA <= {6'h1f,2'b01,g11[7:0]};
15 : LUT_DATA <= {6'h20,2'b01,4'hf,4'h0};
16 : LUT_DATA <= {6'h21,2'b01,4'hf,4'h0};
17 : LUT_DATA <= {6'h03, 2'b01, 8'hff};
18 : LUT_DATA <= {6'h02, 2'b01, 8'h07};
default : LUT_DATA <= 16'h0000;
endcase
end
////////////////////////////////////////////////////////////////////
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -