This repository has been archived on 2021-01-21. You can view files and clone it, but cannot push or open issues or pull requests.
hdmi.old/dvi_encoder.v
2020-09-19 23:42:44 +02:00

198 lines
4.5 KiB
Verilog

`timescale 1ns / 1ps
/*
This file was generated automatically by Alchitry Labs version 1.2.0.
Do not edit this file directly. Instead edit the original Lucid source.
This is a temporary file and any changes made to it will be destroyed.
*/
module dvi_encoder (
input pclk,
input pclkx2,
input pclkx10,
input strobe,
input rst,
input [7:0] red,
input [7:0] green,
input [7:0] blue,
input hsync,
input vsync,
input de,
output reg [3:0] tmds,
output reg [3:0] tmdsb
);
reg M_toggle_d, M_toggle_q = 1'h0;
wire [1-1:0] M_clkser_iob_out;
reg [5-1:0] M_clkser_data;
serdes_n_to_1 clkser (
.ioclk(pclkx10),
.strobe(strobe),
.gclk(pclkx2),
.rst(rst),
.data(M_clkser_data),
.iob_out(M_clkser_iob_out)
);
wire [1-1:0] M_clkbuf_O;
wire [1-1:0] M_clkbuf_OB;
OBUFDS clkbuf (
.I(M_clkser_iob_out),
.O(M_clkbuf_O),
.OB(M_clkbuf_OB)
);
wire [10-1:0] M_enc_blue_data_out;
reg [8-1:0] M_enc_blue_data_in;
reg [1-1:0] M_enc_blue_c0;
reg [1-1:0] M_enc_blue_c1;
reg [1-1:0] M_enc_blue_de;
tmds_encoder enc_blue (
.clk(pclk),
.rst(rst),
.data_in(M_enc_blue_data_in),
.c0(M_enc_blue_c0),
.c1(M_enc_blue_c1),
.de(M_enc_blue_de),
.data_out(M_enc_blue_data_out)
);
wire [10-1:0] M_enc_green_data_out;
reg [8-1:0] M_enc_green_data_in;
reg [1-1:0] M_enc_green_c0;
reg [1-1:0] M_enc_green_c1;
reg [1-1:0] M_enc_green_de;
tmds_encoder enc_green (
.clk(pclk),
.rst(rst),
.data_in(M_enc_green_data_in),
.c0(M_enc_green_c0),
.c1(M_enc_green_c1),
.de(M_enc_green_de),
.data_out(M_enc_green_data_out)
);
wire [10-1:0] M_enc_red_data_out;
reg [8-1:0] M_enc_red_data_in;
reg [1-1:0] M_enc_red_c0;
reg [1-1:0] M_enc_red_c1;
reg [1-1:0] M_enc_red_de;
tmds_encoder enc_red (
.clk(pclk),
.rst(rst),
.data_in(M_enc_red_data_in),
.c0(M_enc_red_c0),
.c1(M_enc_red_c1),
.de(M_enc_red_de),
.data_out(M_enc_red_data_out)
);
wire [15-1:0] M_fifo_data_out;
reg [30-1:0] M_fifo_data_in;
fifo_2x_reducer fifo (
.rst(rst),
.clk(pclk),
.clkx2(pclkx2),
.data_in(M_fifo_data_in),
.data_out(M_fifo_data_out)
);
wire [1-1:0] M_redser_iob_out;
reg [5-1:0] M_redser_data;
serdes_n_to_1 redser (
.ioclk(pclkx10),
.strobe(strobe),
.gclk(pclkx2),
.rst(rst),
.data(M_redser_data),
.iob_out(M_redser_iob_out)
);
wire [1-1:0] M_greenser_iob_out;
reg [5-1:0] M_greenser_data;
serdes_n_to_1 greenser (
.ioclk(pclkx10),
.strobe(strobe),
.gclk(pclkx2),
.rst(rst),
.data(M_greenser_data),
.iob_out(M_greenser_iob_out)
);
wire [1-1:0] M_blueser_iob_out;
reg [5-1:0] M_blueser_data;
serdes_n_to_1 blueser (
.ioclk(pclkx10),
.strobe(strobe),
.gclk(pclkx2),
.rst(rst),
.data(M_blueser_data),
.iob_out(M_blueser_iob_out)
);
wire [1-1:0] M_redbuf_O;
wire [1-1:0] M_redbuf_OB;
OBUFDS redbuf (
.I(M_redser_iob_out),
.O(M_redbuf_O),
.OB(M_redbuf_OB)
);
wire [1-1:0] M_greenbuf_O;
wire [1-1:0] M_greenbuf_OB;
OBUFDS greenbuf (
.I(M_greenser_iob_out),
.O(M_greenbuf_O),
.OB(M_greenbuf_OB)
);
wire [1-1:0] M_bluebuf_O;
wire [1-1:0] M_bluebuf_OB;
OBUFDS bluebuf (
.I(M_blueser_iob_out),
.O(M_bluebuf_O),
.OB(M_bluebuf_OB)
);
always @* begin
M_toggle_d = M_toggle_q;
M_toggle_d = ~M_toggle_q;
M_clkser_data = {3'h5{~M_toggle_q}};
tmds[3+0-:1] = M_clkbuf_O;
tmdsb[3+0-:1] = M_clkbuf_OB;
M_enc_red_data_in = red;
M_enc_green_data_in = green;
M_enc_blue_data_in = blue;
M_enc_red_c0 = hsync;
M_enc_red_c1 = vsync;
M_enc_red_de = de;
M_enc_green_c0 = hsync;
M_enc_green_c1 = vsync;
M_enc_green_de = de;
M_enc_blue_c0 = hsync;
M_enc_blue_c1 = vsync;
M_enc_blue_de = de;
M_fifo_data_in = {M_enc_red_data_out[5+4-:5], M_enc_green_data_out[5+4-:5], M_enc_blue_data_out[5+4-:5], M_enc_red_data_out[0+4-:5], M_enc_green_data_out[0+4-:5], M_enc_blue_data_out[0+4-:5]};
M_redser_data = M_fifo_data_out[10+4-:5];
M_greenser_data = M_fifo_data_out[5+4-:5];
M_blueser_data = M_fifo_data_out[0+4-:5];
tmds[0+0-:1] = M_bluebuf_O;
tmdsb[0+0-:1] = M_bluebuf_OB;
tmds[1+0-:1] = M_greenbuf_O;
tmdsb[1+0-:1] = M_greenbuf_OB;
tmds[2+0-:1] = M_redbuf_O;
tmdsb[2+0-:1] = M_redbuf_OB;
end
always @(posedge pclkx2) begin
if (rst == 1'b1) begin
M_toggle_q <= 1'h0;
end else begin
M_toggle_q <= M_toggle_d;
end
end
endmodule