Я пишу простую программу на Vivado для отображения чистого стабильного изображения на экране через порты HDMI на моей плате Zybo. Но как только я запрограммировал битовый файл, на экране появилось «нет входного сигнала».
Вот мой top.v
`timescale 1ns / 1ps
module top(
input clk,
input rst,
output TMDS_Clk_p,
output TMDS_Clk_n,
output [2:0] TMDS_Data_p,
output [2:0] TMDS_Data_n
);
wire clk_60m;
clk_wiz_0 clk_gen(.clk_64m(clk_60m), .clk_in1(clk));
reg [23:0] rgb_data = 24'hffffff;
wire vga_hsync;
wire vga_vsync;
wire vga_valid;
wire [11:0] vga_h_cnt;
wire [10:0] vga_v_cnt;
vga_0 vga2hdmi (
.vga_pclk(clk_60m), // input wire vga_pclk
.vga_rst(rst), // input wire vga_rst 0=valid
.vga_hsync(vga_hsync), // output wire vga_hsync
.vga_vsync(vga_vsync), // output wire vga_vsync
.vga_valid(vga_valid), // output wire vga_valid
.vga_h_cnt(vga_h_cnt), // output wire [11 : 0] vga_h_cnt
.vga_v_cnt(vga_v_cnt) // output wire [10 : 0] vga_v_cnt
);
/*always @(posedge clk_60m)
begin
if(vga_valid)
rgb_data <= rgb_data;
end*/
rgb2dvi_0 hdmi(
.TMDS_Clk_p(TMDS_Clk_p), // output wire TMDS_Clk_p
.TMDS_Clk_n(TMDS_Clk_n), // output wire TMDS_Clk_n
.TMDS_Data_p(TMDS_Data_p), // output wire [2 : 0] TMDS_Data_p
.TMDS_Data_n(TMDS_Data_n), // output wire [2 : 0] TMDS_Data_n
.aRst(rst), // input wire aRst 0=valid
.vid_pData(rgb_data), // input wire [23 : 0] vid_pData
.vid_pVDE(vga_valid), // input wire vid_pVDE
.vid_pHSync(vga_hsync), // input wire vid_pHSync
.vid_pVSync(vga_vsync), // input wire vid_pVSync
.PixelClk(clk_60m) // input wire PixelClk
);
endmodule
Модуль vga_0 - это IP, который генерирует вертикальный иисторический сигнал и VDE, которые подключены к входу модуля rgb2dvi_o. IP-адрес rgb2dvi можно найти на https://github.com/Digilent/vivado-library/tree/master/ip/rgb2dvi
Вот мое ограничение
set_property -dict { PACKAGE_PIN K17 IOSTANDARD LVCMOS33 } [get_ports { clk }]; #IO_L12P_T1_MRCC_35 Sch=sysclk
#create_clock -add -name clk_phs -period 5.0 -waveform {1.25 3.75} [get_ports { clk_phs }];
set_property -dict { PACKAGE_PIN E17 IOSTANDARD LVCMOS33 } [get_ports { rst }]; #IO_L3P_T0_DQS_AD1P_35 Sch=eth_rst_b
set_property -dict { PACKAGE_PIN H17 IOSTANDARD TMDS_33 } [get_ports { TMDS_Clk_n }]; #IO_L13N_T2_MRCC_35 Sch=hdmi_tx_clk_n
set_property -dict { PACKAGE_PIN H16 IOSTANDARD TMDS_33 } [get_ports { TMDS_Clk_p }]; #IO_L13P_T2_MRCC_35 Sch=hdmi_tx_clk_p
set_property -dict { PACKAGE_PIN D20 IOSTANDARD TMDS_33 } [get_ports { TMDS_Data_n[0] }]; #IO_L4N_T0_35 Sch=hdmi_tx_n[0]
set_property -dict { PACKAGE_PIN D19 IOSTANDARD TMDS_33 } [get_ports { TMDS_Data_p[0] }]; #IO_L4P_T0_35 Sch=hdmi_tx_p[0]
set_property -dict { PACKAGE_PIN B20 IOSTANDARD TMDS_33 } [get_ports { TMDS_Data_n[1] }]; #IO_L1N_T0_AD0N_35 Sch=hdmi_tx_n[1]
set_property -dict { PACKAGE_PIN C20 IOSTANDARD TMDS_33 } [get_ports { TMDS_Data_p[1] }]; #IO_L1P_T0_AD0P_35 Sch=hdmi_tx_p[1]
set_property -dict { PACKAGE_PIN A20 IOSTANDARD TMDS_33 } [get_ports { TMDS_Data_n[2] }]; #IO_L2N_T0_AD8N_35 Sch=hdmi_tx_n[2]
set_property -dict { PACKAGE_PIN B19 IOSTANDARD TMDS_33 } [get_ports { TMDS_Data_p[2] }]; #IO_L2P_T0_AD8P_35 Sch=hdmi_tx_p[2]
Вот результат моделирования