FPGA输出lvds信号点亮液晶屏

概述

        该方案用于生成RGB信号,通过lvds接口驱动逻辑输出,点亮并驱动BP101WX-206液晶屏幕。

参考:下面为参考文章,内容非常详细。Xilinx LVDS Output——原语调用_vivado原语_ShareWow丶的博客icon-default.png?t=N7T8http://t.csdn.cn/Zy37p

功能描述

顶层逻辑结构简略图

        MMCM模块为时钟模块,负责将系统时钟变频与输出,产生各模块所需要的时钟;data_generator模块用于生成各种数据与信号,并传输给lvds_output_driver模块,lvds_output_driver模块将这些数据进行并串转换并按指定的lvds格式输出给液晶屏。

3 模块详细设计

        MMCM模块用于时钟的变频与输出,data_generator模块用于生成8bit RGB数据,行场同步信号(h_sync、v_sync)和数据使能信号data_en,并传输给lvds_output_driver模块,该模块将这些数据进行并串转换并按指定格式输出给液晶屏。具体详细设计图如下:

逻辑顶层详细结构图

        3.1 MMCM模块

        以下为时钟模块MMCM的接口示意图输出65Mhz和455Mhz的时钟,输出locked作为其他模块的复位信号,改模块采用IP核实现。

MMCM模块接口示意图

        3.2 Data_generator模块设计

        手册中给出的时序信息如下图:

手册时序信息

        依照这样的逻辑,画出大致的设计时序图:

时序图01

时序图02

        3.3 lvds_output_driver模块设计

        该模块的详细设计如下:

lvds_output_driver模块逻辑结构图

        手册中的输出逻辑时序如下:

4 详细代码设计

        4.1 data_generator模块详细设计

/* this module is used for data generationBP101WX1-2061280 * 800 pixel
*/
//count H_SYNC
always @(posedge i_clk_65mhz or posedge i_rst) beginif (i_rst) begincnt_h <= 0;endelse if (end_cnt_h) begincnt_h <= 0;endelse begincnt_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) beginif (i_rst) begincnt_v <= 0;endelse if (end_cnt_h) beginif (end_cnt_v) begincnt_v <= 0;endelse begincnt_v <= cnt_v + 1;endend
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) beginif (i_rst) begino_h_sync <= 1;endelse if ((cnt_h == H_FRONT - 1) || (cnt_h == H_FRONT + H_SYNC - 1)) begino_h_sync <= ~o_h_sync;end
endalways @(posedge i_clk_65mhz or posedge i_rst) beginif (i_rst) begino_v_sync <= 1;endelse if ((cnt_v == V_FRONT - 1 && end_cnt_h) || (cnt_v == V_FRONT + V_SYNC - 1 && end_cnt_h)) begino_v_sync <= ~o_v_sync;end
endalways @(posedge i_clk_65mhz or posedge i_rst) beginif (i_rst) begino_data_en <= 0;endelse if ((cnt_h == H_BLANK - 1 && cnt_v >= V_BLANK) || (cnt_h == H_TOTAL - 1 && cnt_v >= V_BLANK)) begino_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) beginif (i_rst) beginrgb_data <= 0;end/* else if (x_cnt == h_vo || y_cnt == v_vo) beginrgb_data <= 24'hff_00_00;end */else if (x_cnt == 0 || x_cnt == 639 || x_cnt == 1279) beginrgb_data <= 24'hff_00_00;endelse if (y_cnt == 0 || y_cnt == 20 || y_cnt == 40) beginrgb_data <= 24'hff_00_00;endelse beginrgb_data <= 24'hffffff;end
end
assign {o_red_data, o_gre_data, o_blu_data} = rgb_data;

        4.2 lvds_output_driver详细设计

       第一种写法:

// 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 datagenvar 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
generatefor (i = 0; i<4; i=i+1) beginOSERDESE2 #(.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 顶层设计

module a_top (input               clk             ,       // sys_clkoutput              pwm_pannel      ,       // backlightoutput              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 实现效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/68300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ的安装和配置

将RabbitMQ文件夹传到linux根目录 开启管理界面及配置

【VSCode】文件模板创建及使用.md

背景 最近使用VSCode学习Vue项目比较频繁&#xff0c;每次创建Vue文件都要手动写重复代码&#xff0c;特别麻烦&#xff0c;就上网查找自动生成代码的说明&#xff0c;结果发现VSCode有代码模板&#xff0c;怪怪&#xff0c;感觉发现新大陆了(low!)。 配置 打开配置 方式一&a…

手机电脑scoket通信 手机软件 APP inventor 服务端程序python

python scoket 通信 再帮助同学坐课题的时候接触到了scoket通信&#xff0c;了解到这应该是基层网络通信的原理&#xff0c;于是就导出搜索了一下相关的资料&#xff0c;简单来说scoket通信就是&#xff0c;可以让不同设备在同一个网络环境的条件下&#xff0c;可以实现相互通…

ubuntu20.04+ROS noetic在线运行单USB双目ORB_SLAM

双目摄像头主要有以下几种&#xff0c;各有优缺点。 1.单USB插口&#xff0c;左右图像单独输出2.双USB插口&#xff0c;左右图像单独输出&#xff08;可能存在同步性问题&#xff09;3.双USB插口&#xff0c;左右图像合成输出4.单USB插口&#xff0c;左右图像合成输出 官方版…

[SSM]MyBatisPlus进阶

三、进阶篇 3.1映射 3.1.1自动映射规则 表名和实体类名映射 -> 表名user 实体类名User字段名和实体类属性名映射 -> 字段名name 实体类属性名name字段名下划线命名方式和实体类属性驼峰命名方式映射 -> 字段名 user_email 实体类属性名 userEmail 开启驼峰命名 m…

【Unity3D赛车游戏优化篇】【九】Unity中如何让汽车丝滑漂移?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

CocosCreator3.8研究笔记(三)CocosCreator 项目结构说明及编辑器的简单使用

我们通过Dashboard 创建一个2d项目&#xff0c;来演示CocosCreator 的项目结构。 等待创建完成后&#xff0c;会得到以下项目工程&#xff1a; 一、assets文件夹 assets文件夹&#xff1a;为资源目录&#xff0c;用来存储所有的本地资源&#xff0c;如各种图片&#xff0c;脚本…

webpack(三)loader

定义 loader用于对模块的源代码进行转换&#xff0c;在imporrt或加载模块时预处理文件 webpack做的事情&#xff0c;仅仅是分析出各种模块的依赖关系&#xff0c;然后形成资源列表&#xff0c;最终打包生成到指定文件中。 在webpack内部&#xff0c;任何文件都是模块&#x…

健康舒适的超满意照明体验!SUKER书客SKY护眼台灯测评

健康舒适的超满意照明体验&#xff01;SUKER书客SKY护眼台灯测评 2022年全国儿童青少年总体近视率为53.6%&#xff0c;其中6岁儿童为14.5%&#xff0c;小学生为36%&#xff0c;初中生为71.6%&#xff0c;高中生为81%&#xff0c;近视已成为当下人们遇到的比较普遍的眼健康问题…

qt连接tcp通信和连接数据库

通过数据库实现学生管理系统 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//判断数据库对象是否包含了自己使用的数据库 Studemt.dbif(!db.co…

线性表之-单向链表(无头)

目录 什么是单向链表 顺序表和链表的区别和联系 顺序表&#xff1a; 链表&#xff1a; 链表表示(单项)和实现 1.1 链表的概念及结构 1.2单链表(无头)的实现 所用文件 将有以下功能&#xff1a; 链表定义 创建新链表元素 尾插 头插 尾删 头删 查找-给一个节点的…

没有软件怎么管理固定资产

在当今数字化的世界中&#xff0c;我们已经习惯了使用各种软件来管理我们的日常生活和工作。然而&#xff0c;当我们面临一个看似简单的问题——如何管理固定资产时&#xff0c;我们可能会感到困惑。那么&#xff0c;如果没有软件&#xff0c;我们该如何进行资产管理呢&#xf…

ClickHouse配置Hdfs存储数据

文章目录 背景配置单机配置HA高可用Hdfs集群性能测试统计trait最多的10个trait term统计性状xxx minValue > 500 0000的数量结论 参考文档 背景 由于公司初始使用Hadoop这一套&#xff0c;所以希望ClickHouse也能使用Hdfs作为存储 看了下ClickHouse的文档&#xff0c;拿Hdf…

【核心复现】基于改进灰狼算法的并网交流微电网经济优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

无涯教程-Flutter - 简介

Flutter是一个由谷歌开发的开源移动应用软件开发工具包&#xff0c;用于为Android、iOS、 Windows、Mac、Linux、Google Fuchsia开发应用。 通常&#xff0c;创建移动应用程序是一个非常复杂和具有挑战性的任务。有许多框架可用&#xff0c;它提供了开发移动应用程序的出色函数…

es倒排索引深入解读

文章目录 一. Lucene二.倒排索引算法2.1 Posting List压缩算法2.1.1 FOR2.1.2 RoaringBitmap压缩 2.3 FST压缩算法2.3.1 trie前缀树原理2.3.2 FST构建过程NFADFAFSMFSAFST:有限状态转换机构建原理FST在lucene中实现原理 1.什么是搜索引擎? 全文搜索引擎: 自然语言处理(NLP)、爬…

华为OD机试 - 等和子数组最小和 - 深度优先搜索(Java 2022 Q4 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》…

无涯教程-Android - Grid View函数

Android GridView在二维滚动网格(行和列)中显示项目&#xff0c;并且网格项目不一定是预定的&#xff0c;但它们会使用ListAdapter自动插入到布局中 Grid View - Grid view ListView 和 GridView 是 AdapterView 的子类&#xff0c;可以通过将它们绑定到 Adapter 来填充&#x…

flutter 上传图片并裁剪

1.首先在pubspec.yaml文件中新增依赖pub.dev image_picker: ^0.8.75 image_cropper: ^4.0.1 2.在Android的AndroidManifest.xml文件里面添加权限 <activityandroid:name"com.yalantis.ucrop.UCropActivity"android:screenOrientation"portrait"andro…

C#添加WebApi,配置Swagger

1、创建一个WebAPI项目 下载、安装、引入【Swashbuckle.AspNetCore】包 右击【解决方案】&#xff0c;然后点击【管理Nuget包】&#xff0c;搜索【Swashbuckle.AspNetCore】包 2、配置Swagger中间件 在【Startup.cs】文件中的【ConfigureService】类中添加如下代码。 在【Sta…