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/source/mojo_top.v.bak
2020-03-03 00:08:05 +01:00

178 lines
4.9 KiB
Coq

module mojo_top(
// 50MHz clock input
input clk,
// Input from reset button (active low)
input rst_n,
// cclk input from AVR, high when AVR is ready
input cclk,
// Outputs to the 8 onboard LEDs
output[7:0]led,
// AVR SPI connections
output spi_miso,
input spi_ss,
input spi_mosi,
input spi_sck,
// AVR ADC channel select
output [3:0] spi_channel,
// Serial connections
input avr_tx, // AVR Tx => FPGA Rx
output avr_rx, // AVR Rx => FPGA Tx
input avr_rx_busy, // AVR Rx buffer full
output[3:0] hdmi1_tmds,
output[3:0] hdmi1_tmdsb
);
wire rst = ~rst_n; // make reset active high
wire hdmi_clk;
reg[7:0] hdmired, hdmigreen, hdmiblue;
wire[10:0] hdmix;
wire[9:0] hdmiy;
reg[7:0] frame_q, frame_d;
clk_wiz_v3_6 clk_wiz(
.CLK_IN1(clk),
.CLK_OUT1(hdmi_clk)
);
hdmi_encoder hdmi(
.clk(hdmi_clk),
.rst(rst),
.tmds(hdmi1_tmds),
.tmdsb(hdmi1_tmdsb),
.x(hdmix),
.y(hdmiy),
.red(hdmired),
.green(hdmigreen),
.blue(hdmiblue)
);
// these signals should be high-z when not used
assign spi_miso = 1'bz;
assign avr_rx = 1'bz;
assign spi_channel = 4'bzzzz;
assign led[6:0] = 7'b1000000;
assign led[7] = char_index_q;
wire [7:0] char_data [7:0][7:0];
assign char_data[0][0] = 8'b00000000;
assign char_data[0][1] = 8'b00000000;
assign char_data[0][2] = 8'b00111000;
assign char_data[0][3] = 8'b01101100;
assign char_data[0][4] = 8'b01101100;
assign char_data[0][5] = 8'b01111100;
assign char_data[0][6] = 8'b01101100;
assign char_data[0][7] = 8'b01101100;
assign char_data[1][0] = 8'b00000000;
assign char_data[1][1] = 8'b00000000;
assign char_data[1][2] = 8'b01111000;
assign char_data[1][3] = 8'b01101100;
assign char_data[1][4] = 8'b01111000;
assign char_data[1][5] = 8'b01101100;
assign char_data[1][6] = 8'b01101100;
assign char_data[1][7] = 8'b01111000;
assign char_data[2][0] = 8'b00000000;
assign char_data[2][1] = 8'b00000000;
assign char_data[2][2] = 8'b00111000;
assign char_data[2][3] = 8'b01101100;
assign char_data[2][4] = 8'b01100000;
assign char_data[2][5] = 8'b01100000;
assign char_data[2][6] = 8'b01101100;
assign char_data[2][7] = 8'b00111000;
assign char_data[3][0] = 8'b00000000;
assign char_data[3][1] = 8'b00000000;
assign char_data[3][2] = 8'b01111000;
assign char_data[3][3] = 8'b01101100;
assign char_data[3][4] = 8'b01101100;
assign char_data[3][5] = 8'b01101100;
assign char_data[3][6] = 8'b01101100;
assign char_data[3][7] = 8'b01111000;
assign char_data[4][0] = 8'b00000000;
assign char_data[4][1] = 8'b00000000;
assign char_data[4][2] = 8'b00111100;
assign char_data[4][3] = 8'b01100000;
assign char_data[4][4] = 8'b01111000;
assign char_data[4][5] = 8'b01100000;
assign char_data[4][6] = 8'b01100000;
assign char_data[4][7] = 8'b00111100;
assign char_data[5][0] = 8'b00000000;
assign char_data[5][1] = 8'b00000000;
assign char_data[5][2] = 8'b00111100;
assign char_data[5][3] = 8'b01100000;
assign char_data[5][4] = 8'b01111000;
assign char_data[5][5] = 8'b01100000;
assign char_data[5][6] = 8'b01100000;
assign char_data[5][7] = 8'b01100000;
assign char_data[6][0] = 8'b00000000;
assign char_data[6][1] = 8'b00000000;
assign char_data[6][2] = 8'b00111100;
assign char_data[6][3] = 8'b01100000;
assign char_data[6][4] = 8'b01100000;
assign char_data[6][5] = 8'b01101100;
assign char_data[6][6] = 8'b01101100;
assign char_data[6][7] = 8'b00111100;
assign char_data[7][0] = 8'b00000000;
assign char_data[7][1] = 8'b00000000;
assign char_data[7][2] = 8'b01101100;
assign char_data[7][3] = 8'b01101100;
assign char_data[7][4] = 8'b01111100;
assign char_data[7][5] = 8'b01101100;
assign char_data[7][6] = 8'b01101100;
assign char_data[7][7] = 8'b01101100;
//assign char_data[2][0] = 8'b00000000;
//assign char_data[2][1] = 8'b00000000;
//assign char_data[2][2] = 8'b00000000;
//assign char_data[2][3] = 8'b00000000;
//assign char_data[2][4] = 8'b00000000;
//assign char_data[2][5] = 8'b00000000;
//assign char_data[2][6] = 8'b00000000;
//assign char_data[2][7] = 8'b00000000;
reg[2:0] char_index_q, char_index_d;
always @(*) begin
//hdmired = hdmix[7:0] + frame_q;
//hdmigreen = hdmiy[7:0] + frame_q;
//hdmiblue = hdmix[7:0] ^ hdmiy[7:0];
hdmired = 1'h28;
hdmigreen = 1'h28;
hdmiblue = 1'h28;
if (char_data[char_index_q][(hdmiy >> 1) % 8][7 - ((hdmix >> 1) % 8)] == 1) begin
hdmired = 8'hEB;
hdmigreen = 8'hDB;
hdmiblue = 8'hB2;
end
frame_d = frame_q;
char_index_d = (hdmix >> 4) % 8;
if (hdmix == 1279 && hdmiy == 719) begin
frame_d = frame_q + 1'b1;
end
end
always @(posedge hdmi_clk) begin
if (rst) begin
frame_q <= 1'b0;
char_index_q <= 1'b0;
end else begin
frame_q <= frame_d;
char_index_q <= char_index_d;
end
end
endmodule