国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FPGA輸出lvds信號點亮液晶屏

這篇具有很好參考價值的文章主要介紹了FPGA輸出lvds信號點亮液晶屏。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1?概述

????????該方案用于生成RGB信號,通過lvds接口驅(qū)動邏輯輸出,點亮并驅(qū)動BP101WX-206液晶屏幕。

參考:下面為參考文章,內(nèi)容非常詳細(xì)。Xilinx LVDS Output——原語調(diào)用_vivado原語_ShareWow丶的博客http://t.csdn.cn/Zy37p

2?功能描述

FPGA輸出lvds信號點亮液晶屏,fpga開發(fā),嵌入式硬件,Verilog,液晶屏驅(qū)動,賽靈思,Xilinx,lvds

????????MMCM模塊為時鐘模塊,負(fù)責(zé)將系統(tǒng)時鐘變頻與輸出,產(chǎn)生各模塊所需要的時鐘;data_generator模塊用于生成各種數(shù)據(jù)與信號,并傳輸給lvds_output_driver模塊,lvds_output_driver模塊將這些數(shù)據(jù)進(jìn)行并串轉(zhuǎn)換并按指定的lvds格式輸出給液晶屏。

3 模塊詳細(xì)設(shè)計

????????MMCM模塊用于時鐘的變頻與輸出,data_generator模塊用于生成8bit?RGB數(shù)據(jù),行場同步信號(h_sync、v_sync)和數(shù)據(jù)使能信號data_en,并傳輸給lvds_output_driver模塊,該模塊將這些數(shù)據(jù)進(jìn)行并串轉(zhuǎn)換并按指定格式輸出給液晶屏。具體詳細(xì)設(shè)計圖如下:

FPGA輸出lvds信號點亮液晶屏,fpga開發(fā),嵌入式硬件,Verilog,液晶屏驅(qū)動,賽靈思,Xilinx,lvds

????????3.1 MMCM模塊

? ? ? ? 以下為時鐘模塊MMCM的接口示意圖輸出65Mhz和455Mhz的時鐘,輸出locked作為其他模塊的復(fù)位信號,改模塊采用IP核實現(xiàn)。

FPGA輸出lvds信號點亮液晶屏,fpga開發(fā),嵌入式硬件,Verilog,液晶屏驅(qū)動,賽靈思,Xilinx,lvds

? ? ? ? 3.2?Data_generator模塊設(shè)計

????????手冊中給出的時序信息如下圖:

FPGA輸出lvds信號點亮液晶屏,fpga開發(fā),嵌入式硬件,Verilog,液晶屏驅(qū)動,賽靈思,Xilinx,lvds

? ? ? ? 依照這樣的邏輯,畫出大致的設(shè)計時序圖:

FPGA輸出lvds信號點亮液晶屏,fpga開發(fā),嵌入式硬件,Verilog,液晶屏驅(qū)動,賽靈思,Xilinx,lvds

FPGA輸出lvds信號點亮液晶屏,fpga開發(fā),嵌入式硬件,Verilog,液晶屏驅(qū)動,賽靈思,Xilinx,lvds

????????3.3?lvds_output_driver模塊設(shè)計

? ? ? ? 該模塊的詳細(xì)設(shè)計如下:

FPGA輸出lvds信號點亮液晶屏,fpga開發(fā),嵌入式硬件,Verilog,液晶屏驅(qū)動,賽靈思,Xilinx,lvds

? ? ? ? 手冊中的輸出邏輯時序如下:

FPGA輸出lvds信號點亮液晶屏,fpga開發(fā),嵌入式硬件,Verilog,液晶屏驅(qū)動,賽靈思,Xilinx,lvds

4 詳細(xì)代碼設(shè)計

????????4.1?data_generator模塊詳細(xì)設(shè)計

/* 
    this module is used for data generation
    BP101WX1-206
    1280 * 800 pixel
*/
//count H_SYNC
always @(posedge i_clk_65mhz or posedge i_rst) begin
    if (i_rst) begin
        cnt_h <= 0;
    end
    else if (end_cnt_h) begin
        cnt_h <= 0;
    end
    else begin
        cnt_h <= cnt_h + 1;
    end
end
assign end_cnt_h = cnt_h == (H_TOTAL - 1);

//count V_SYNC
always @(posedge i_clk_65mhz or posedge i_rst) begin
    if (i_rst) begin
        cnt_v <= 0;
    end
    else if (end_cnt_h) begin
        if (end_cnt_v) begin
            cnt_v <= 0;
        end
        else begin
            cnt_v <= cnt_v + 1;
        end
    end
end
assign end_cnt_v = end_cnt_h && (cnt_v == (V_TOTAL - 1));

//OUTPUT h_sync v_sync DE
always @(posedge i_clk_65mhz or posedge i_rst) begin
    if (i_rst) begin
        o_h_sync <= 1;
    end
    else if ((cnt_h == H_FRONT - 1) || (cnt_h == H_FRONT + H_SYNC - 1)) begin
        o_h_sync <= ~o_h_sync;
    end
end

always @(posedge i_clk_65mhz or posedge i_rst) begin
    if (i_rst) begin
        o_v_sync <= 1;
    end
    else if ((cnt_v == V_FRONT - 1 && end_cnt_h) || (cnt_v == V_FRONT + V_SYNC - 1 && end_cnt_h)) begin
        o_v_sync <= ~o_v_sync;
    end
end

always @(posedge i_clk_65mhz or posedge i_rst) begin
    if (i_rst) begin
        o_data_en <= 0;
    end
    else if ((cnt_h == H_BLANK - 1 && cnt_v >= V_BLANK) || (cnt_h == H_TOTAL - 1 && cnt_v >= V_BLANK)) begin
        o_data_en <= ~o_data_en;
    end
end


//RGB data generation
assign x_cnt = (cnt_h >= H_BLANK)? cnt_h - (H_BLANK - 1) : 0;
assign y_cnt = (cnt_v >= V_BLANK)? cnt_v - (V_BLANK) : 0;
always @(posedge i_clk_65mhz or posedge i_rst) begin
    if (i_rst) begin
        rgb_data <= 0;
    end
    /* else if (x_cnt == h_vo || y_cnt == v_vo) begin
        rgb_data <= 24'hff_00_00;
    end */

    else if (x_cnt == 0 || x_cnt == 639 || x_cnt == 1279) begin
        rgb_data <= 24'hff_00_00;
    end
    else if (y_cnt == 0 || y_cnt == 20 || y_cnt == 40) begin
        rgb_data <= 24'hff_00_00;
    end


    else begin
        rgb_data <= 24'hffffff;
    end
end
assign {o_red_data, o_gre_data, o_blu_data} = rgb_data;

????????4.2?lvds_output_driver詳細(xì)設(shè)計

? ? ? ?第一種寫法:

// CLK
OSERDESE2 #(
      .DATA_RATE_OQ     ("SDR"      ),          // DDR, SDR
      .DATA_RATE_TQ     ("SDR"      ),          // DDR, BUF, SDR
      .DATA_WIDTH       (7          ),          // Parallel data width (2-8,10,14)
      .INIT_OQ          (1'b0       ),          // Initial value of OQ output (1'b0,1'b1)
      .INIT_TQ          (1'b0       ),          // Initial value of TQ output (1'b0,1'b1)
      .SERDES_MODE      ("MASTER"   ),          // MASTER, SLAVE
      .SRVAL_OQ         (1'b0       ),          // OQ output value when SR is used (1'b0,1'b1)
      .SRVAL_TQ         (1'b0       ),          // TQ output value when SR is used (1'b0,1'b1)
      .TBYTE_CTL        ("FALSE"    ),          // Enable tristate byte operation (FALSE, TRUE)
      .TBYTE_SRC        ("FALSE"    ),          // Tristate byte source (FALSE, TRUE)
      .TRISTATE_WIDTH   (1          )           // 3-state converter width (1,4)
   )
   OSERDES_clk_inst (
      .OFB          (               ),          // 1-bit output: Feedback path for data
      .OQ           (oserdes_clk    ),          // 1-bit output: Data path output
      // SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
      .SHIFTOUT1    (               ),
      .SHIFTOUT2    (               ),
      .TBYTEOUT     (               ),          // 1-bit output: Byte group tristate
      .TFB          (               ),          // 1-bit output: 3-state control
      .TQ           (               ),          // 1-bit output: 3-state control
      .CLK          (i_clk_455mhz   ),          // 1-bit input: High speed clock
      .CLKDIV       (i_clk_65mhz    ),          // 1-bit input: Divided clock
      // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
      .D1           (CLK_PATTERN[0] ),
      .D2           (CLK_PATTERN[1] ),
      .D3           (CLK_PATTERN[2] ),
      .D4           (CLK_PATTERN[3] ),
      .D5           (CLK_PATTERN[4] ),
      .D6           (CLK_PATTERN[5] ),
      .D7           (CLK_PATTERN[6] ),
      .D8           (               ),
      .OCE          (1'b1           ),             // 1-bit input: Output data clock enable
      .RST          (i_rst          ),             // 1-bit input: Reset
      // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
      .SHIFTIN1     (1'b0           ),
      .SHIFTIN2     (1'b0           ),
      // T1 - T4: 1-bit (each) input: Parallel 3-state inputs
      .T1           (1'b0           ),
      .T2           (1'b0           ),
      .T3           (1'b0           ),
      .T4           (1'b0           ),
      .TBYTEIN      (1'b0           ),     // 1-bit input: Byte group tristate
      .TCE          (1'b0           )              // 1-bit input: 3-state clock enable
   );

OBUFDS #(
      .IOSTANDARD   ("DEFAULT"      ), // Specify the output I/O standard
      .SLEW         ("SLOW"         )           // Specify the output slew rate
   ) OBUFDS_CLK_inst (
      .O            (tx_clk_p       ),     // Diff_p output (connect directly to top-level port)
      .OB           (tx_clk_n       ),   // Diff_n output (connect directly to top-level port)
      .I            (oserdes_clk    )      // Buffer input 
   );

// 1 PAIR
OSERDESE2 #(
      .DATA_RATE_OQ     ("SDR"      ),          // DDR, SDR
      .DATA_RATE_TQ     ("SDR"      ),          // DDR, BUF, SDR
      .DATA_WIDTH       (7          ),          // Parallel data width (2-8,10,14)
      .INIT_OQ          (1'b0       ),          // Initial value of OQ output (1'b0,1'b1)
      .INIT_TQ          (1'b0       ),          // Initial value of TQ output (1'b0,1'b1)
      .SERDES_MODE      ("MASTER"   ),          // MASTER, SLAVE
      .SRVAL_OQ         (1'b0       ),          // OQ output value when SR is used (1'b0,1'b1)
      .SRVAL_TQ         (1'b0       ),          // TQ output value when SR is used (1'b0,1'b1)
      .TBYTE_CTL        ("FALSE"    ),          // Enable tristate byte operation (FALSE, TRUE)
      .TBYTE_SRC        ("FALSE"    ),          // Tristate byte source (FALSE, TRUE)
      .TRISTATE_WIDTH   (1          )           // 3-state converter width (1,4)
   )
   OSERDES_data_inst0 (
      .OFB          (               ),          // 1-bit output: Feedback path for data
      .OQ           (oserdes_data[0]),          // 1-bit output: Data path output
      // SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
      .SHIFTOUT1    (               ),
      .SHIFTOUT2    (               ),
      .TBYTEOUT     (               ),          // 1-bit output: Byte group tristate
      .TFB          (               ),          // 1-bit output: 3-state control
      .TQ           (               ),          // 1-bit output: 3-state control
      .CLK          (i_clk_455mhz   ),          // 1-bit input: High speed clock
      .CLKDIV       (i_clk_65mhz    ),          // 1-bit input: Divided clock
      // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
      .D1           (i_gre_data[0]  ),
      .D2           (i_red_data[5]  ),
      .D3           (i_red_data[4]  ),
      .D4           (i_red_data[3]  ),
      .D5           (i_red_data[2]  ),
      .D6           (i_red_data[1]  ),
      .D7           (i_red_data[0]  ),
      .D8           (               ),
      .OCE          (1'b1           ),             // 1-bit input: Output data clock enable
      .RST          (i_rst          ),             // 1-bit input: Reset
      // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
      .SHIFTIN1     (1'b0           ),
      .SHIFTIN2     (1'b0           ),
      // T1 - T4: 1-bit (each) input: Parallel 3-state inputs
      .T1           (1'b0           ),
      .T2           (1'b0           ),
      .T3           (1'b0           ),
      .T4           (1'b0           ),
      .TBYTEIN      (1'b0           ),     // 1-bit input: Byte group tristate
      .TCE          (1'b0           )              // 1-bit input: 3-state clock enable
   );

OBUFDS #(
      .IOSTANDARD   ("DEFAULT"      ), // Specify the output I/O standard
      .SLEW         ("SLOW"         )           // Specify the output slew rate
   ) OBUFDS_DATA_inst0 (
      .O            (lvds_data_p[0] ),     // Diff_p output (connect directly to top-level port)
      .OB           (lvds_data_n[0] ),   // Diff_n output (connect directly to top-level port)
      .I            (oserdes_data[0])      // Buffer input 
   );

// 2 PAIR
OSERDESE2 #(
      .DATA_RATE_OQ     ("SDR"      ),          // DDR, SDR
      .DATA_RATE_TQ     ("SDR"      ),          // DDR, BUF, SDR
      .DATA_WIDTH       (7          ),          // Parallel data width (2-8,10,14)
      .INIT_OQ          (1'b0       ),          // Initial value of OQ output (1'b0,1'b1)
      .INIT_TQ          (1'b0       ),          // Initial value of TQ output (1'b0,1'b1)
      .SERDES_MODE      ("MASTER"   ),          // MASTER, SLAVE
      .SRVAL_OQ         (1'b0       ),          // OQ output value when SR is used (1'b0,1'b1)
      .SRVAL_TQ         (1'b0       ),          // TQ output value when SR is used (1'b0,1'b1)
      .TBYTE_CTL        ("FALSE"    ),          // Enable tristate byte operation (FALSE, TRUE)
      .TBYTE_SRC        ("FALSE"    ),          // Tristate byte source (FALSE, TRUE)
      .TRISTATE_WIDTH   (1          )           // 3-state converter width (1,4)
   )
   OSERDES_data_inst1 (
      .OFB          (               ),          // 1-bit output: Feedback path for data
      .OQ           (oserdes_data[1]),          // 1-bit output: Data path output
      // SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
      .SHIFTOUT1    (               ),
      .SHIFTOUT2    (               ),
      .TBYTEOUT     (               ),          // 1-bit output: Byte group tristate
      .TFB          (               ),          // 1-bit output: 3-state control
      .TQ           (               ),          // 1-bit output: 3-state control
      .CLK          (i_clk_455mhz   ),          // 1-bit input: High speed clock
      .CLKDIV       (i_clk_65mhz    ),          // 1-bit input: Divided clock
      // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
      .D1           (i_blu_data[1]  ),
      .D2           (i_blu_data[0]  ),
      .D3           (i_gre_data[5]  ),
      .D4           (i_gre_data[4]  ),
      .D5           (i_gre_data[3]  ),
      .D6           (i_gre_data[2]  ),
      .D7           (i_gre_data[1]  ),
      .D8           (               ),
      .OCE          (1'b1           ),             // 1-bit input: Output data clock enable
      .RST          (i_rst          ),             // 1-bit input: Reset
      // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
      .SHIFTIN1     (1'b0           ),
      .SHIFTIN2     (1'b0           ),
      // T1 - T4: 1-bit (each) input: Parallel 3-state inputs
      .T1           (1'b0           ),
      .T2           (1'b0           ),
      .T3           (1'b0           ),
      .T4           (1'b0           ),
      .TBYTEIN      (1'b0           ),     // 1-bit input: Byte group tristate
      .TCE          (1'b0           )              // 1-bit input: 3-state clock enable
   );

OBUFDS #(
      .IOSTANDARD   ("DEFAULT"      ), // Specify the output I/O standard
      .SLEW         ("SLOW"         )           // Specify the output slew rate
   ) OBUFDS_DATA_inst1 (
      .O            (lvds_data_p[1] ),     // Diff_p output (connect directly to top-level port)
      .OB           (lvds_data_n[1] ),   // Diff_n output (connect directly to top-level port)
      .I            (oserdes_data[1])      // Buffer input 
   );

// 3 PAIR
OSERDESE2 #(
      .DATA_RATE_OQ     ("SDR"      ),          // DDR, SDR
      .DATA_RATE_TQ     ("SDR"      ),          // DDR, BUF, SDR
      .DATA_WIDTH       (7          ),          // Parallel data width (2-8,10,14)
      .INIT_OQ          (1'b0       ),          // Initial value of OQ output (1'b0,1'b1)
      .INIT_TQ          (1'b0       ),          // Initial value of TQ output (1'b0,1'b1)
      .SERDES_MODE      ("MASTER"   ),          // MASTER, SLAVE
      .SRVAL_OQ         (1'b0       ),          // OQ output value when SR is used (1'b0,1'b1)
      .SRVAL_TQ         (1'b0       ),          // TQ output value when SR is used (1'b0,1'b1)
      .TBYTE_CTL        ("FALSE"    ),          // Enable tristate byte operation (FALSE, TRUE)
      .TBYTE_SRC        ("FALSE"    ),          // Tristate byte source (FALSE, TRUE)
      .TRISTATE_WIDTH   (1          )           // 3-state converter width (1,4)
   )
   OSERDES_data_inst2 (
      .OFB          (               ),          // 1-bit output: Feedback path for data
      .OQ           (oserdes_data[2]),          // 1-bit output: Data path output
      // SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
      .SHIFTOUT1    (               ),
      .SHIFTOUT2    (               ),
      .TBYTEOUT     (               ),          // 1-bit output: Byte group tristate
      .TFB          (               ),          // 1-bit output: 3-state control
      .TQ           (               ),          // 1-bit output: 3-state control
      .CLK          (i_clk_455mhz   ),          // 1-bit input: High speed clock
      .CLKDIV       (i_clk_65mhz    ),          // 1-bit input: Divided clock
      // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
      .D1           (i_data_en      ),
      .D2           (i_v_sync       ),
      .D3           (i_h_sync       ),
      .D4           (i_blu_data[5]  ),
      .D5           (i_blu_data[4]  ),
      .D6           (i_blu_data[3]  ),
      .D7           (i_blu_data[2]  ),
      .D8           (               ),
      .OCE          (1'b1           ),             // 1-bit input: Output data clock enable
      .RST          (i_rst          ),             // 1-bit input: Reset
      // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
      .SHIFTIN1     (1'b0           ),
      .SHIFTIN2     (1'b0           ),
      // T1 - T4: 1-bit (each) input: Parallel 3-state inputs
      .T1           (1'b0           ),
      .T2           (1'b0           ),
      .T3           (1'b0           ),
      .T4           (1'b0           ),
      .TBYTEIN      (1'b0           ),     // 1-bit input: Byte group tristate
      .TCE          (1'b0           )              // 1-bit input: 3-state clock enable
   );

OBUFDS #(
      .IOSTANDARD   ("DEFAULT"      ), // Specify the output I/O standard
      .SLEW         ("SLOW"         )           // Specify the output slew rate
   ) OBUFDS_DATA_inst2 (
      .O            (lvds_data_p[2] ),     // Diff_p output (connect directly to top-level port)
      .OB           (lvds_data_n[2] ),   // Diff_n output (connect directly to top-level port)
      .I            (oserdes_data[2])      // Buffer input 
   );

// 4 PAIR
OSERDESE2 #(
      .DATA_RATE_OQ     ("SDR"      ),          // DDR, SDR
      .DATA_RATE_TQ     ("SDR"      ),          // DDR, BUF, SDR
      .DATA_WIDTH       (7          ),          // Parallel data width (2-8,10,14)
      .INIT_OQ          (1'b0       ),          // Initial value of OQ output (1'b0,1'b1)
      .INIT_TQ          (1'b0       ),          // Initial value of TQ output (1'b0,1'b1)
      .SERDES_MODE      ("MASTER"   ),          // MASTER, SLAVE
      .SRVAL_OQ         (1'b0       ),          // OQ output value when SR is used (1'b0,1'b1)
      .SRVAL_TQ         (1'b0       ),          // TQ output value when SR is used (1'b0,1'b1)
      .TBYTE_CTL        ("FALSE"    ),          // Enable tristate byte operation (FALSE, TRUE)
      .TBYTE_SRC        ("FALSE"    ),          // Tristate byte source (FALSE, TRUE)
      .TRISTATE_WIDTH   (1          )           // 3-state converter width (1,4)
   )
   OSERDES_data_inst3 (
      .OFB          (               ),          // 1-bit output: Feedback path for data
      .OQ           (oserdes_data[3]),          // 1-bit output: Data path output
      // SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
      .SHIFTOUT1    (               ),
      .SHIFTOUT2    (               ),
      .TBYTEOUT     (               ),          // 1-bit output: Byte group tristate
      .TFB          (               ),          // 1-bit output: 3-state control
      .TQ           (               ),          // 1-bit output: 3-state control
      .CLK          (i_clk_455mhz   ),          // 1-bit input: High speed clock
      .CLKDIV       (i_clk_65mhz    ),          // 1-bit input: Divided clock
      // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
      .D1           (DON_CR         ),
      .D2           (i_blu_data[7]  ),
      .D3           (i_blu_data[6]  ),
      .D4           (i_gre_data[7]  ),
      .D5           (i_gre_data[6]  ),
      .D6           (i_red_data[7]  ),
      .D7           (i_red_data[6]  ),
      .D8           (               ),
      .OCE          (1'b1           ),             // 1-bit input: Output data clock enable
      .RST          (i_rst          ),             // 1-bit input: Reset
      // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
      .SHIFTIN1     (1'b0           ),
      .SHIFTIN2     (1'b0           ),
      // T1 - T4: 1-bit (each) input: Parallel 3-state inputs
      .T1           (1'b0           ),
      .T2           (1'b0           ),
      .T3           (1'b0           ),
      .T4           (1'b0           ),
      .TBYTEIN      (1'b0           ),     // 1-bit input: Byte group tristate
      .TCE          (1'b0           )              // 1-bit input: 3-state clock enable
   );

OBUFDS #(
      .IOSTANDARD   ("DEFAULT"      ), // Specify the output I/O standard
      .SLEW         ("SLOW"         )           // Specify the output slew rate
   ) OBUFDS_DATA_inst3 (
      .O            (lvds_data_p[3] ),     // Diff_p output (connect directly to top-level port)
      .OB           (lvds_data_n[3] ),   // Diff_n output (connect directly to top-level port)
      .I            (oserdes_data[3])      // Buffer input 
   );

? ? ? ? 第二種寫法,采用generate語句:

parameter   DON_CR  = 0;
parameter   CLK_PATTERN = 7'b11_000_11;

wire [23:0] din;

wire        oserdes_clk ;   // oserdes output clk
wire [3:0]  oserdes_data;   // oserdes output data

genvar i;

assign din = {  DON_CR, i_blu_data[7:6], i_gre_data[7:6], i_red_data[7:6], 
                i_data_en, i_v_sync ,i_h_sync, i_blu_data[5:2], 
                i_blu_data[1:0], i_gre_data[5:1],
                i_gre_data[0], i_red_data[5:0]};


// CLK
OSERDESE2 #(
      .DATA_RATE_OQ     ("SDR"      ),          // DDR, SDR
      .DATA_RATE_TQ     ("SDR"      ),          // DDR, BUF, SDR
      .DATA_WIDTH       (7          ),          // Parallel data width (2-8,10,14)
      .INIT_OQ          (1'b0       ),          // Initial value of OQ output (1'b0,1'b1)
      .INIT_TQ          (1'b0       ),          // Initial value of TQ output (1'b0,1'b1)
      .SERDES_MODE      ("MASTER"   ),          // MASTER, SLAVE
      .SRVAL_OQ         (1'b0       ),          // OQ output value when SR is used (1'b0,1'b1)
      .SRVAL_TQ         (1'b0       ),          // TQ output value when SR is used (1'b0,1'b1)
      .TBYTE_CTL        ("FALSE"    ),          // Enable tristate byte operation (FALSE, TRUE)
      .TBYTE_SRC        ("FALSE"    ),          // Tristate byte source (FALSE, TRUE)
      .TRISTATE_WIDTH   (1          )           // 3-state converter width (1,4)
   )
   OSERDES_clk_inst (
      .OFB          (               ),          // 1-bit output: Feedback path for data
      .OQ           (oserdes_clk    ),          // 1-bit output: Data path output
      // SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
      .SHIFTOUT1    (               ),
      .SHIFTOUT2    (               ),
      .TBYTEOUT     (               ),          // 1-bit output: Byte group tristate
      .TFB          (               ),          // 1-bit output: 3-state control
      .TQ           (               ),          // 1-bit output: 3-state control
      .CLK          (i_clk_455mhz   ),          // 1-bit input: High speed clock
      .CLKDIV       (i_clk_65mhz    ),          // 1-bit input: Divided clock
      // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
      .D1           (CLK_PATTERN[0] ),
      .D2           (CLK_PATTERN[1] ),
      .D3           (CLK_PATTERN[2] ),
      .D4           (CLK_PATTERN[3] ),
      .D5           (CLK_PATTERN[4] ),
      .D6           (CLK_PATTERN[5] ),
      .D7           (CLK_PATTERN[6] ),
      .D8           (               ),
      .OCE          (1'b1           ),             // 1-bit input: Output data clock enable
      .RST          (i_rst          ),             // 1-bit input: Reset
      // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
      .SHIFTIN1     (1'b0           ),
      .SHIFTIN2     (1'b0           ),
      // T1 - T4: 1-bit (each) input: Parallel 3-state inputs
      .T1           (1'b0           ),
      .T2           (1'b0           ),
      .T3           (1'b0           ),
      .T4           (1'b0           ),
      .TBYTEIN      (1'b0           ),     // 1-bit input: Byte group tristate
      .TCE          (1'b0           )              // 1-bit input: 3-state clock enable
   );

OBUFDS #(
      .IOSTANDARD   ("DEFAULT"      ), // Specify the output I/O standard
      .SLEW         ("SLOW"         )           // Specify the output slew rate
   ) OBUFDS_CLK_inst (
      .O            (o_tx_clk_p     ),     // Diff_p output (connect directly to top-level port)
      .OB           (o_tx_clk_n     ),   // Diff_n output (connect directly to top-level port)
      .I            (oserdes_clk    )      // Buffer input 
   );

// DATA
generate
   for (i = 0; i<4; i=i+1) begin
      OSERDESE2 #(
      .DATA_RATE_OQ     ("SDR"      ),          // DDR, SDR
      .DATA_RATE_TQ     ("SDR"      ),          // DDR, BUF, SDR
      .DATA_WIDTH       (7          ),          // Parallel data width (2-8,10,14)
      .INIT_OQ          (1'b0       ),          // Initial value of OQ output (1'b0,1'b1)
      .INIT_TQ          (1'b0       ),          // Initial value of TQ output (1'b0,1'b1)
      .SERDES_MODE      ("MASTER"   ),          // MASTER, SLAVE
      .SRVAL_OQ         (1'b0       ),          // OQ output value when SR is used (1'b0,1'b1)
      .SRVAL_TQ         (1'b0       ),          // TQ output value when SR is used (1'b0,1'b1)
      .TBYTE_CTL        ("FALSE"    ),          // Enable tristate byte operation (FALSE, TRUE)
      .TBYTE_SRC        ("FALSE"    ),          // Tristate byte source (FALSE, TRUE)
      .TRISTATE_WIDTH   (1          )           // 3-state converter width (1,4)
   )
   OSERDES_data_inst0 (
      .OFB          (               ),          // 1-bit output: Feedback path for data
      .OQ           (oserdes_data[i]),          // 1-bit output: Data path output
      // SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
      .SHIFTOUT1    (               ),
      .SHIFTOUT2    (               ),
      .TBYTEOUT     (               ),          // 1-bit output: Byte group tristate
      .TFB          (               ),          // 1-bit output: 3-state control
      .TQ           (               ),          // 1-bit output: 3-state control
      .CLK          (i_clk_455mhz   ),          // 1-bit input: High speed clock
      .CLKDIV       (i_clk_65mhz    ),          // 1-bit input: Divided clock
      // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
      .D1           (i_gre_data[i*8+6]),
      .D2           (i_red_data[i*8+5]),
      .D3           (i_red_data[i*8+4]),
      .D4           (i_red_data[i*8+3]),
      .D5           (i_red_data[i*8+2]),
      .D6           (i_red_data[i*8+1]),
      .D7           (i_red_data[i*8+0]),
      .D8           (               ),
      .OCE          (1'b1           ),             // 1-bit input: Output data clock enable
      .RST          (i_rst          ),             // 1-bit input: Reset
      // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
      .SHIFTIN1     (1'b0           ),
      .SHIFTIN2     (1'b0           ),
      // T1 - T4: 1-bit (each) input: Parallel 3-state inputs
      .T1           (1'b0           ),
      .T2           (1'b0           ),
      .T3           (1'b0           ),
      .T4           (1'b0           ),
      .TBYTEIN      (1'b0           ),     // 1-bit input: Byte group tristate
      .TCE          (1'b0           )              // 1-bit input: 3-state clock enable
   );

   OBUFDS #(
      .IOSTANDARD   ("DEFAULT"      ), // Specify the output I/O standard
      .SLEW         ("SLOW"         )           // Specify the output slew rate
   ) OBUFDS_DATA_inst0 (
      .O            (o_lvds_data_p[i]),     // Diff_p output (connect directly to top-level port)
      .OB           (o_lvds_data_n[i]),   // Diff_n output (connect directly to top-level port)
      .I            (oserdes_data[i] )      // Buffer input 
   );

   end
endgenerate

? ? ? ? 4.3 頂層設(shè)計

module a_top (
    input               clk             ,       // sys_clk

    output              pwm_pannel      ,       // backlight

    output              o_tx_clk_p      ,
    output              o_tx_clk_n      ,

    output  [3:0]       lvds_data_p     ,
    output  [3:0]       lvds_data_n      
);

wire clk_65mhz       ;
wire clk_455mhz      ;

wire rst             ;

wire [7:0]  red_data ; 
wire [7:0]  gre_data ; 
wire [7:0]  blu_data ; 
wire        h_sync   ; 
wire        v_sync   ; 
wire        data_en  ; 

assign pwm_pannel = 1;

// MMCM
clk_wiz_0 u_clk_wiz_0(
    /* output */              .clk_out1         (clk_65mhz  ),
    /* output */              .clk_out2         (clk_455mhz ),
    /* output */              .locked           (rst        ),
    /* input  */              .clk_in1          (clk        )
);


data_generator u_data_generator(
    /* input         */       .i_clk_65mhz      (clk_65mhz  ),   //input 65MHz clk, period : 15.38ns
    /* input         */       .i_rst            (!rst       ),

    /* output  [7:0] */       .o_red_data       (red_data   ),
    /* output  [7:0] */       .o_gre_data       (gre_data   ),
    /* output  [7:0] */       .o_blu_data       (blu_data   ),
    /* output  reg   */       .o_h_sync         (h_sync     ),
    /* output  reg   */       .o_v_sync         (v_sync     ),
    /* output  reg   */       .o_data_en        (data_en    ) 
);

lvds_output_driver u_lvds_output_driver(
    /* input         */       .i_clk_455mhz     (clk_455mhz ),
    /* input         */       .i_clk_65mhz      (clk_65mhz  ),
    /* input         */       .i_rst            (!rst       ),

    /* input   [7:0] */       .i_red_data       (red_data   ),
    /* input   [7:0] */       .i_gre_data       (gre_data   ),
    /* input   [7:0] */       .i_blu_data       (blu_data   ),
    /* input         */       .i_v_sync         (v_sync     ),
    /* input         */       .i_h_sync         (h_sync     ),
    /* input         */       .i_data_en        (data_en    ),
    /* output        */       .tx_clk_p         (o_tx_clk_p ),
    /* output        */       .tx_clk_n         (o_tx_clk_n ),
    /* output  [3:0] */       .lvds_data_p      (lvds_data_p),
    /* output  [3:0] */       .lvds_data_n      (lvds_data_n) 
);

endmodule //a_top

5 實現(xiàn)效果

FPGA輸出lvds信號點亮液晶屏,fpga開發(fā),嵌入式硬件,Verilog,液晶屏驅(qū)動,賽靈思,Xilinx,lvds文章來源地址http://www.zghlxwxcb.cn/news/detail-706546.html

到了這里,關(guān)于FPGA輸出lvds信號點亮液晶屏的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • RK3568 OpenHarmony4.0適配HDMI液晶屏

    ????????先看下最終適配效果視頻: OpenHarmony_V40_HDMI液晶屏 ????????本文基于如下開發(fā)環(huán)境進(jìn)行開發(fā)調(diào)試: 處理器:RK3568 CPU:四核64位Cortex-A55,主頻最高達(dá)2.0GHz GPU:ARM G52 2EE,支持OpenGL ES 1.1/2.0/3.2,OpenCL 2.0,Vulkan 1.1,支持內(nèi)嵌高性能2D加速硬件 NPU:支持1T算力 多媒體

    2024年02月02日
    瀏覽(155)
  • Proteus仿真-LCD1602液晶屏使用方法(驅(qū)動一)

    Proteus仿真-LCD1602液晶屏使用方法(驅(qū)動一)

    一、硬件鏈接 在元件庫中搜索LM016即可找到LCD1602液晶屏。 按下圖方式鏈接單片機(jī)和屏幕。 二、軟件驅(qū)動代碼 三、示例程序

    2024年02月12日
    瀏覽(16)
  • 關(guān)于配置tft液晶屏?xí)r,屏幕不顯示遇到的問題

    關(guān)于配置tft液晶屏?xí)r,屏幕不顯示遇到的問題

    本人新手小白,在使用單片機(jī)配置tft屏幕時,發(fā)現(xiàn)屏幕一直顯示白屏(如下圖)。但是仔細(xì)檢查多遍后都無法找到問題所在,于是在CSDN上搜索了很久都沒有發(fā)現(xiàn)類似問題的解決方法。無奈只能重新回到代碼上尋找原因,終于功夫不負(fù)有心人讓我找到了問題并成功解決。以下向

    2024年02月16日
    瀏覽(11)
  • 【51單片機(jī)系列】proteus中的LCD12864液晶屏

    【51單片機(jī)系列】proteus中的LCD12864液晶屏

    文章來源:《單片機(jī)C語言編程與Proteus仿真技術(shù)》。 點陣字符型LCD顯示模塊只能顯示英文字符和簡單的漢字,要想顯示較為復(fù)雜的漢字或圖形,就必須采用點陣圖型LCD顯示模塊,比如12864點陣圖型LCD顯示模塊。 12864點陣圖型LCD顯示模塊內(nèi)部控制器采用KS0108或HD61202。其引腳排列

    2024年01月19日
    瀏覽(23)
  • STM32之LCD液晶屏(ILI9341)顯示圖片

    STM32之LCD液晶屏(ILI9341)顯示圖片

    本文章基于STM32F103VET6,參考野火的驅(qū)動程序,用LCD液晶屏顯示靜態(tài)圖像。 有紕漏請指出,轉(zhuǎn)載請說明。 學(xué)習(xí)交流請發(fā)郵件 1280253714@qq.com 顯示一個像素點 將rgb888圖片轉(zhuǎn)為rgb555 輸出rgb555的C語言數(shù)組 數(shù)組的每一個元素對應(yīng)一個像素點的rgb三個通道的數(shù)據(jù),用stm32的FSMC模擬8080時

    2024年02月09日
    瀏覽(23)
  • 51單片機(jī)——LCD1602液晶屏 C語言入門編程

    51單片機(jī)——LCD1602液晶屏 C語言入門編程

    目錄 LCD1602: 數(shù)據(jù)指令:? 字節(jié)寫入時序: 1. LCD1602:LCD1602液晶上顯示字符信息 ????????1602液晶也叫1602字符型液晶,它能顯示2行字符信息,每行又能顯示16個字符。它是一種專門用來顯示字母、數(shù)字、符號的點陣型液晶模塊。它是由若 干個5x7的點陣字符位組成,每個點

    2024年02月05日
    瀏覽(19)
  • 第十講 單片機(jī)驅(qū)動彩色液晶屏 控制RA8889軟件:圖像運算

    第十講 單片機(jī)驅(qū)動彩色液晶屏 控制RA8889軟件:圖像運算

    目錄 第一講 單片機(jī)最小系統(tǒng)STM32F103C6T6通過RA8889驅(qū)動彩色液晶屏播放視頻 第二講 單片機(jī)最小系統(tǒng)STM32F103C6T6控制RA8889驅(qū)動彩色液晶屏硬件框架 第三講 單片機(jī)驅(qū)動彩色液晶屏 控制RA8889軟件:如何初始化 第四講 單片機(jī)驅(qū)動彩色液晶屏 控制RA8889軟件:繪圖 第五講 單片機(jī)驅(qū)動彩色液

    2024年01月22日
    瀏覽(18)
  • 【雕爺學(xué)編程】Arduino動手做(85)---LCD1602液晶屏模塊7

    【雕爺學(xué)編程】Arduino動手做(85)---LCD1602液晶屏模塊7

    37款傳感器與執(zhí)行器的提法,在網(wǎng)絡(luò)上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實踐出真知(一定要動手做)的理念,以學(xué)習(xí)和交流為目的,這里準(zhǔn)備逐一動手嘗試系列實驗,不管成功(程序走通)

    2024年02月16日
    瀏覽(21)
  • 第八講 單片機(jī)驅(qū)動彩色液晶屏 控制RA8889軟件:顯示圖片

    第八講 單片機(jī)驅(qū)動彩色液晶屏 控制RA8889軟件:顯示圖片

    目錄 第一講 單片機(jī)最小系統(tǒng)STM32F103C6T6通過RA8889驅(qū)動彩色液晶屏播放視頻 第二講 單片機(jī)最小系統(tǒng)STM32F103C6T6控制RA8889驅(qū)動彩色液晶屏硬件框架 第三講 單片機(jī)驅(qū)動彩色液晶屏 控制RA8889軟件:如何初始化 第四講 單片機(jī)驅(qū)動彩色液晶屏 控制RA8889軟件:繪圖 第五講 單片機(jī)驅(qū)動彩色液

    2024年01月22日
    瀏覽(22)
  • 第九講 單片機(jī)驅(qū)動彩色液晶屏 控制RA8889軟件:顯存操作

    第九講 單片機(jī)驅(qū)動彩色液晶屏 控制RA8889軟件:顯存操作

    目錄 第一講 單片機(jī)最小系統(tǒng)STM32F103C6T6通過RA8889驅(qū)動彩色液晶屏播放視頻 第二講 單片機(jī)最小系統(tǒng)STM32F103C6T6控制RA8889驅(qū)動彩色液晶屏硬件框架 第三講 單片機(jī)驅(qū)動彩色液晶屏 控制RA8889軟件:如何初始化 第四講 單片機(jī)驅(qū)動彩色液晶屏 控制RA8889軟件:繪圖 第五講 單片機(jī)驅(qū)動彩色液

    2024年01月16日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包