├── LICENSE ├── README.md ├── common ├── async_fifo │ ├── async_fifo.v │ ├── fifomem.v │ ├── rptr_empty.v │ ├── sync_r2w.v │ ├── sync_w2r.v │ └── wptr_full.v ├── hdmi │ ├── auxiliary_video_information_info_frame.v │ ├── hdmi.v │ ├── packet_assembler.v │ ├── packet_picker.v │ ├── serializer.v │ └── tmds_channel.v └── hsdaoh │ ├── crc16_ccitt.v │ └── hsdaoh_core.v ├── hsdaoh_nano20k_test.gprj ├── hsdaoh_nano20k_test ├── hsdaoh_nano20k_test.cst ├── hsdaoh_nano20k_test.sdc └── top.v ├── hsdaoh_nano4k_test.gprj ├── hsdaoh_nano4k_test ├── fifo_hs │ ├── fifo_hs.ipc │ ├── fifo_hs.v │ └── fifo_hs.vo ├── hsdaoh_nano4k_test.cst ├── hsdaoh_nano4k_test.sdc └── top.v ├── hsdaoh_nano9k_test.gprj ├── hsdaoh_nano9k_test ├── fifo_hs │ ├── fifo_hs.ipc │ ├── fifo_hs.v │ └── fifo_hs.vo ├── hsdaoh_nano9k_test.cst ├── hsdaoh_nano9k_test.sdc └── top.v ├── hsdaoh_primer20k_test.gprj ├── hsdaoh_primer20k_test ├── hsdaoh_primer20k_test.cst ├── hsdaoh_primer20k_test.sdc └── top.v ├── hsdaoh_primer25k_test.gprj └── hsdaoh_primer25k_test ├── hsdaoh_primer25k_test.cst ├── hsdaoh_primer25k_test.sdc └── top.v /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FPGA implementation of hsdaoh - High Speed Data Acquisition over HDMI 2 | 3 | This repository contains the FPGA implementation and example designs for the Tang Nano/Primer series of FPGA boards. For more information see the [main repository](https://github.com/steve-m/hsdaoh). 4 | 5 | The example design generates a 16 bit counter, that then can be verified on the host. With a small modification to the clk_data process in the top-file of your respective FPGA board you can stream your own payload data. 6 | 7 | ## Building the desgin 8 | Currently, the bitfiles must be generated with the GOWIN IDE (V1.9.9 Beta-4 Education). See [here](https://wiki.sipeed.com/hardware/en/tang/Tang-Nano-Doc/install-the-ide.html) for more information on how to set up the IDE. 9 | 10 | In the future, it might be possible to use the Open Source toolchain ([Yosys](https://github.com/YosysHQ/yosys) + [nextpnr-himbaechel](https://github.com/YosysHQ/nextpnr) + [apicula](https://github.com/YosysHQ/apicula)). This is currently blocked by the lack of the CLKDIV primitive 11 | in the Open Source tools. 12 | 13 | ## Loading the bitfile 14 | 15 | The bitfile can be either loaded with the GOWIN Programmer, or with [openFPGALoader](https://github.com/trabucayre/openFPGALoader). 16 | 17 | Here is an example commandline for loading the bitfile on a Tang Nano 20K: 18 | 19 | openFPGALoader -b tangnano20k hsdaoh_nano20k_test.fs 20 | 21 | ## Testing the design 22 | 23 | After loading the bitfile, connect the FPGA board to a MS2130 HDMI grabber and confirm that the video output is working. You then can use hsdaoh_test to verify the counter values. 24 | 25 | ## Credits 26 | 27 | The hsdaoh FPGA design was developed by Steve Markgraf, and is heavily based on the [HDMI IP core](https://github.com/hdl-util/hdmi) by Sameer Puri and also uses the [asynchronous FIFO](https://github.com/dpretet/async_fifo) by Damien Pretet. 28 | -------------------------------------------------------------------------------- /common/async_fifo/async_fifo.v: -------------------------------------------------------------------------------- 1 | // https://github.com/dpretet/async_fifo 2 | // distributed under the mit license 3 | // https://opensource.org/licenses/mit-license.php 4 | 5 | `timescale 1 ns / 1 ps 6 | `default_nettype none 7 | 8 | module async_fifo 9 | 10 | #( 11 | parameter DSIZE = 8, 12 | parameter ASIZE = 4, 13 | parameter FALLTHROUGH = "TRUE" // First word fall-through without latency 14 | )( 15 | input wire wclk, 16 | input wire wrst_n, 17 | input wire winc, 18 | input wire [DSIZE-1:0] wdata, 19 | output wire wfull, 20 | output wire awfull, 21 | input wire rclk, 22 | input wire rrst_n, 23 | input wire rinc, 24 | output wire [DSIZE-1:0] rdata, 25 | output wire rempty, 26 | output wire arempty 27 | ); 28 | 29 | wire [ASIZE-1:0] waddr, raddr; 30 | wire [ASIZE :0] wptr, rptr, wq2_rptr, rq2_wptr; 31 | 32 | // The module synchronizing the read point 33 | // from read to write domain 34 | sync_r2w 35 | #(ASIZE) 36 | sync_r2w ( 37 | .wq2_rptr (wq2_rptr), 38 | .rptr (rptr), 39 | .wclk (wclk), 40 | .wrst_n (wrst_n) 41 | ); 42 | 43 | // The module synchronizing the write point 44 | // from write to read domain 45 | sync_w2r 46 | #(ASIZE) 47 | sync_w2r ( 48 | .rq2_wptr (rq2_wptr), 49 | .wptr (wptr), 50 | .rclk (rclk), 51 | .rrst_n (rrst_n) 52 | ); 53 | 54 | // The module handling the write requests 55 | wptr_full 56 | #(ASIZE) 57 | wptr_full ( 58 | .awfull (awfull), 59 | .wfull (wfull), 60 | .waddr (waddr), 61 | .wptr (wptr), 62 | .wq2_rptr (wq2_rptr), 63 | .winc (winc), 64 | .wclk (wclk), 65 | .wrst_n (wrst_n) 66 | ); 67 | 68 | // The DC-RAM 69 | fifomem 70 | #(DSIZE, ASIZE, FALLTHROUGH) 71 | fifomem ( 72 | .rclken (rinc), 73 | .rclk (rclk), 74 | .rdata (rdata), 75 | .wdata (wdata), 76 | .waddr (waddr), 77 | .raddr (raddr), 78 | .wclken (winc), 79 | .wfull (wfull), 80 | .wclk (wclk) 81 | ); 82 | 83 | // The module handling read requests 84 | rptr_empty 85 | #(ASIZE) 86 | rptr_empty ( 87 | .arempty (arempty), 88 | .rempty (rempty), 89 | .raddr (raddr), 90 | .rptr (rptr), 91 | .rq2_wptr (rq2_wptr), 92 | .rinc (rinc), 93 | .rclk (rclk), 94 | .rrst_n (rrst_n) 95 | ); 96 | 97 | endmodule 98 | 99 | `resetall 100 | -------------------------------------------------------------------------------- /common/async_fifo/fifomem.v: -------------------------------------------------------------------------------- 1 | // https://github.com/dpretet/async_fifo 2 | // distributed under the mit license 3 | // https://opensource.org/licenses/mit-license.php 4 | 5 | `timescale 1 ns / 1 ps 6 | `default_nettype none 7 | 8 | module fifomem 9 | 10 | #( 11 | parameter DATASIZE = 8, // Memory data word width 12 | parameter ADDRSIZE = 4, // Number of mem address bits 13 | parameter FALLTHROUGH = "TRUE" // First word fall-through 14 | ) ( 15 | input wire wclk, 16 | input wire wclken, 17 | input wire [ADDRSIZE-1:0] waddr, 18 | input wire [DATASIZE-1:0] wdata, 19 | input wire wfull, 20 | input wire rclk, 21 | input wire rclken, 22 | input wire [ADDRSIZE-1:0] raddr, 23 | output wire [DATASIZE-1:0] rdata 24 | ); 25 | 26 | localparam DEPTH = 1<> 1) ^ rbinnext; 43 | assign rgraynextm1 = ((rbinnext + 1'b1) >> 1) ^ (rbinnext + 1'b1); 44 | 45 | //--------------------------------------------------------------- 46 | // FIFO empty when the next rptr == synchronized wptr or on reset 47 | //--------------------------------------------------------------- 48 | assign rempty_val = (rgraynext == rq2_wptr); 49 | assign arempty_val = (rgraynextm1 == rq2_wptr); 50 | 51 | always @ (posedge rclk or negedge rrst_n) begin 52 | 53 | if (!rrst_n) begin 54 | arempty <= 1'b0; 55 | rempty <= 1'b1; 56 | end 57 | else begin 58 | arempty <= arempty_val; 59 | rempty <= rempty_val; 60 | end 61 | 62 | end 63 | 64 | endmodule 65 | 66 | `resetall 67 | -------------------------------------------------------------------------------- /common/async_fifo/sync_r2w.v: -------------------------------------------------------------------------------- 1 | // https://github.com/dpretet/async_fifo 2 | // distributed under the mit license 3 | // https://opensource.org/licenses/mit-license.php 4 | 5 | `timescale 1 ns / 1 ps 6 | `default_nettype none 7 | 8 | module sync_r2w 9 | 10 | #( 11 | parameter ASIZE = 4 12 | )( 13 | input wire wclk, 14 | input wire wrst_n, 15 | input wire [ASIZE:0] rptr, 16 | output reg [ASIZE:0] wq2_rptr 17 | ); 18 | 19 | reg [ASIZE:0] wq1_rptr; 20 | 21 | always @(posedge wclk or negedge wrst_n) begin 22 | 23 | if (!wrst_n) 24 | {wq2_rptr,wq1_rptr} <= 0; 25 | else 26 | {wq2_rptr,wq1_rptr} <= {wq1_rptr,rptr}; 27 | 28 | end 29 | 30 | endmodule 31 | 32 | `resetall 33 | -------------------------------------------------------------------------------- /common/async_fifo/sync_w2r.v: -------------------------------------------------------------------------------- 1 | // https://github.com/dpretet/async_fifo 2 | // distributed under the mit license 3 | // https://opensource.org/licenses/mit-license.php 4 | 5 | `timescale 1 ns / 1 ps 6 | `default_nettype none 7 | 8 | module sync_w2r 9 | 10 | #( 11 | parameter ASIZE = 4 12 | )( 13 | input wire rclk, 14 | input wire rrst_n, 15 | output reg [ASIZE:0] rq2_wptr, 16 | input wire [ASIZE:0] wptr 17 | ); 18 | 19 | reg [ASIZE:0] rq1_wptr; 20 | 21 | always @(posedge rclk or negedge rrst_n) begin 22 | 23 | if (!rrst_n) 24 | {rq2_wptr,rq1_wptr} <= 0; 25 | else 26 | {rq2_wptr,rq1_wptr} <= {rq1_wptr,wptr}; 27 | 28 | end 29 | 30 | endmodule 31 | 32 | `resetall 33 | -------------------------------------------------------------------------------- /common/async_fifo/wptr_full.v: -------------------------------------------------------------------------------- 1 | // https://github.com/dpretet/async_fifo 2 | // distributed under the mit license 3 | // https://opensource.org/licenses/mit-license.php 4 | 5 | `timescale 1 ns / 1 ps 6 | `default_nettype none 7 | 8 | module wptr_full 9 | 10 | #( 11 | parameter ADDRSIZE = 4 12 | )( 13 | input wire wclk, 14 | input wire wrst_n, 15 | input wire winc, 16 | input wire [ADDRSIZE :0] wq2_rptr, 17 | output reg wfull, 18 | output reg awfull, 19 | output wire [ADDRSIZE-1:0] waddr, 20 | output reg [ADDRSIZE :0] wptr 21 | ); 22 | 23 | reg [ADDRSIZE:0] wbin; 24 | wire [ADDRSIZE:0] wgraynext, wbinnext, wgraynextp1; 25 | wire awfull_val, wfull_val; 26 | 27 | // GRAYSTYLE2 pointer 28 | always @(posedge wclk or negedge wrst_n) begin 29 | 30 | if (!wrst_n) 31 | {wbin, wptr} <= 0; 32 | else 33 | {wbin, wptr} <= {wbinnext, wgraynext}; 34 | 35 | end 36 | 37 | // Memory write-address pointer (okay to use binary to address memory) 38 | assign waddr = wbin[ADDRSIZE-1:0]; 39 | assign wbinnext = wbin + (winc & ~wfull); 40 | assign wgraynext = (wbinnext >> 1) ^ wbinnext; 41 | assign wgraynextp1 = ((wbinnext + 1'b1) >> 1) ^ (wbinnext + 1'b1); 42 | 43 | //------------------------------------------------------------------ 44 | // Simplified version of the three necessary full-tests: 45 | // assign wfull_val=((wgnext[ADDRSIZE] !=wq2_rptr[ADDRSIZE] ) && 46 | // (wgnext[ADDRSIZE-1] !=wq2_rptr[ADDRSIZE-1]) && 47 | // (wgnext[ADDRSIZE-2:0]==wq2_rptr[ADDRSIZE-2:0])); 48 | //------------------------------------------------------------------ 49 | 50 | assign wfull_val = (wgraynext == {~wq2_rptr[ADDRSIZE:ADDRSIZE-1],wq2_rptr[ADDRSIZE-2:0]}); 51 | assign awfull_val = (wgraynextp1 == {~wq2_rptr[ADDRSIZE:ADDRSIZE-1],wq2_rptr[ADDRSIZE-2:0]}); 52 | 53 | always @(posedge wclk or negedge wrst_n) begin 54 | 55 | if (!wrst_n) begin 56 | awfull <= 1'b0; 57 | wfull <= 1'b0; 58 | end else begin 59 | awfull <= awfull_val; 60 | wfull <= wfull_val; 61 | end 62 | end 63 | 64 | endmodule 65 | 66 | `resetall 67 | -------------------------------------------------------------------------------- /common/hdmi/auxiliary_video_information_info_frame.v: -------------------------------------------------------------------------------- 1 | // Implementation of HDMI Auxiliary Video InfoFrame packet. 2 | // By Sameer Puri https://github.com/sameer 3 | // source: https://github.com/hdl-util/hdmi/ 4 | // Dual-licensed under Apache License 2.0 and MIT License. 5 | 6 | // converted to Verilog and changed to YCbCr 4:2:2 for hsdaoh 7 | 8 | // See Section 8.2.1 9 | module auxiliary_video_information_info_frame ( 10 | header, 11 | sub 12 | ); 13 | parameter [1:0] VIDEO_FORMAT = 2'b01; // 00 = RGB, 01 = YCbCr 4:2:2, 10 = YCbCr 4:4:4 14 | parameter [0:0] ACTIVE_FORMAT_INFO_PRESENT = 1'b0; // Not valid 15 | parameter [1:0] BAR_INFO = 2'b00; // Not valid 16 | parameter [1:0] SCAN_INFO = 2'b00; // No data 17 | parameter [1:0] COLORIMETRY = 2'b00; // No data 18 | parameter [1:0] PICTURE_ASPECT_RATIO = 2'b00; // No data, See CEA-CEB16 for more information about Active Format Description processing. 19 | parameter [3:0] ACTIVE_FORMAT_ASPECT_RATIO = 4'b1000; // Not valid unless ACTIVE_FORMAT_INFO_PRESENT = 1'b1, then Same as picture aspect ratio 20 | parameter [0:0] IT_CONTENT = 1'b0; // The IT content bit indicates when picture content is composed according to common IT practice (i.e. without regard to Nyquist criterion) and is unsuitable for analog reconstruction or filtering. When the IT content bit is set to 1, downstream processors should pass pixel data unfiltered and without analog reconstruction. 21 | parameter [2:0] EXTENDED_COLORIMETRY = 3'b000; // Not valid unless COLORIMETRY = 2'b11. The extended colorimetry bits, EC2, EC1, and EC0, describe optional colorimetry encoding that may be applicable to some implementations and are always present, whether their information is valid or not (see CEA 861-D Section 7.5.5). 22 | parameter [1:0] RGB_QUANTIZATION_RANGE = 2'b00; // Default. Displays conforming to CEA-861-D accept both a limited quantization range of 220 levels (16 to 235) anda full range of 256 levels (0 to 255) when receiving video with RGB color space (see CEA 861-D Sections 5.1, Section 5.2, Section 5.3 and Section 5.4). By default, RGB pixel data values should be assumed to have the limited range when receiving a CE video format, and the full range when receiving an IT format. The quantization bits allow the source to override this default and to explicitly indicate the current RGB quantization range. 23 | parameter [1:0] NON_UNIFORM_PICTURE_SCALING = 2'b00; // None. The Nonuniform Picture Scaling bits shall be set if the source device scales the picture or has determined that scaling has been performed in a specific direction. 24 | parameter [6:0] VIDEO_ID_CODE = 4; // Same as the one from the HDMI module 25 | parameter [1:0] YCC_QUANTIZATION_RANGE = 2'b00; // 00 = Limited, 01 = Full 26 | parameter [1:0] CONTENT_TYPE = 2'b00; // No data, becomes Graphics if IT_CONTENT = 1'b1. 27 | parameter [3:0] PIXEL_REPETITION = 4'b0000; // None 28 | 29 | output wire [23:0] header; 30 | output wire [223:0] sub; 31 | 32 | localparam [4:0] LENGTH = 5'd13; 33 | localparam [7:0] VERSION = 8'd2; 34 | localparam [6:0] TYPE = 7'd2; 35 | 36 | assign header = {{3'b000, LENGTH}, VERSION, {1'b1, TYPE}}; 37 | 38 | // PB0-PB6 = sub0 39 | // PB7-13 = sub1 40 | // PB14-20 = sub2 41 | // PB21-27 = sub3 42 | wire [7:0] packet_bytes [27:0]; 43 | 44 | assign packet_bytes[0] = 8'd1 + ~(((((((((((((((header[23:16] + header[15:8]) + header[7:0]) + packet_bytes[13]) + packet_bytes[12]) + packet_bytes[11]) + packet_bytes[10]) + packet_bytes[9]) + packet_bytes[8]) + packet_bytes[7]) + packet_bytes[6]) + packet_bytes[5]) + packet_bytes[4]) + packet_bytes[3]) + packet_bytes[2]) + packet_bytes[1]); 45 | assign packet_bytes[1] = {1'b0, VIDEO_FORMAT, ACTIVE_FORMAT_INFO_PRESENT, BAR_INFO, SCAN_INFO}; 46 | assign packet_bytes[2] = {COLORIMETRY, PICTURE_ASPECT_RATIO, ACTIVE_FORMAT_ASPECT_RATIO}; 47 | assign packet_bytes[3] = {IT_CONTENT, EXTENDED_COLORIMETRY, RGB_QUANTIZATION_RANGE, NON_UNIFORM_PICTURE_SCALING}; 48 | assign packet_bytes[4] = {1'b0, VIDEO_ID_CODE}; 49 | assign packet_bytes[5] = {YCC_QUANTIZATION_RANGE, CONTENT_TYPE, PIXEL_REPETITION}; 50 | 51 | genvar i; 52 | generate 53 | if (BAR_INFO != 2'b00) begin 54 | assign packet_bytes[6] = 8'hff; 55 | assign packet_bytes[7] = 8'hff; 56 | assign packet_bytes[8] = 8'h00; 57 | assign packet_bytes[9] = 8'h00; 58 | assign packet_bytes[10] = 8'hff; 59 | assign packet_bytes[11] = 8'hff; 60 | assign packet_bytes[12] = 8'h00; 61 | assign packet_bytes[13] = 8'h00; 62 | end 63 | else begin 64 | assign packet_bytes[6] = 8'h00; 65 | assign packet_bytes[7] = 8'h00; 66 | assign packet_bytes[8] = 8'h00; 67 | assign packet_bytes[9] = 8'h00; 68 | assign packet_bytes[10] = 8'h00; 69 | assign packet_bytes[11] = 8'h00; 70 | assign packet_bytes[12] = 8'h00; 71 | assign packet_bytes[13] = 8'h00; 72 | end 73 | for (i = 14; i < 28; i = i + 1) begin : pb_reserved 74 | assign packet_bytes[i] = 8'd0; 75 | end 76 | for (i = 0; i < 4; i = i + 1) begin : pb_to_sub 77 | assign sub[i * 56+:56] = {packet_bytes[6 + (i * 7)], packet_bytes[5 + (i * 7)], packet_bytes[4 + (i * 7)], packet_bytes[3 + (i * 7)], packet_bytes[2 + (i * 7)], packet_bytes[1 + (i * 7)], packet_bytes[i * 7]}; 78 | end 79 | endgenerate 80 | endmodule 81 | -------------------------------------------------------------------------------- /common/hdmi/hdmi.v: -------------------------------------------------------------------------------- 1 | // Implementation of HDMI Spec v1.4a 2 | // By Sameer Puri https://github.com/sameer 3 | // source: https://github.com/hdl-util/hdmi/ 4 | // Dual-licensed under Apache License 2.0 and MIT License. 5 | 6 | // converted to Verilog and stripped down for hsdaoh, 7 | // changed VIDEO_ID_CODE 16 to minimal timings the MS2130 accepts 8 | 9 | module hdmi ( 10 | clk_pixel_x5, 11 | clk_pixel, 12 | reset, 13 | rgb, 14 | tmds, 15 | tmds_clock, 16 | cx, 17 | cy, 18 | frame_width, 19 | frame_height, 20 | screen_width, 21 | screen_height 22 | ); 23 | // Defaults to 640x480 which should be supported by almost if not all HDMI sinks. 24 | // See README.md or CEA-861-D for enumeration of video id codes. 25 | // Pixel repetition, interlaced scans and other special output modes are not implemented (yet). 26 | parameter [6:0] VIDEO_ID_CODE = 1; 27 | 28 | // The IT content bit indicates that image samples are generated in an ad-hoc 29 | // manner (e.g. directly from values in a framebuffer, as by a PC video 30 | // card) and therefore aren't suitable for filtering or analog 31 | // reconstruction. This is probably what you want if you treat pixels 32 | // as "squares". If you generate a properly bandlimited signal or obtain 33 | // one from elsewhere (e.g. a camera), this can be turned off. 34 | // 35 | // This flag also tends to cause receivers to treat RGB values as full 36 | // range (0-255). 37 | parameter [0:0] IT_CONTENT = 1'b1; 38 | 39 | // Defaults to minimum bit lengths required to represent positions. 40 | // Modify these parameters if you have alternate desired bit lengths. 41 | parameter [12:0] BIT_WIDTH = (VIDEO_ID_CODE < 4 ? 10 : (VIDEO_ID_CODE == 4 ? 11 : 12)); 42 | parameter [12:0] BIT_HEIGHT = (VIDEO_ID_CODE == 16 ? 11 : 10); 43 | 44 | // A true HDMI signal sends auxiliary data (i.e. audio, preambles) which prevents it from being parsed by DVI signal sinks. 45 | // HDMI signal sinks are fortunately backwards-compatible with DVI signals. 46 | // Enable this flag if the output should be a DVI signal. You might want to do this to reduce resource usage or if you're only outputting video. 47 | parameter [0:0] DVI_OUTPUT = 1'b0; 48 | 49 | // **All parameters below matter ONLY IF you plan on sending auxiliary data (DVI_OUTPUT == 1'b0)** 50 | 51 | // Starting screen coordinate when module comes out of reset. 52 | // 53 | // Setting these to something other than (0, 0) is useful when positioning 54 | // an external video signal within a larger overall frame (e.g. 55 | // letterboxing an input video signal). This allows you to synchronize the 56 | // negative edge of reset directly to the start of the external signal 57 | // instead of to some number of clock cycles before. 58 | // 59 | // You probably don't need to change these parameters if you are 60 | // generating a signal from scratch instead of processing an 61 | // external signal. 62 | parameter [12:0] START_X = 0; 63 | parameter [12:0] START_Y = 0; 64 | 65 | input wire clk_pixel_x5; 66 | input wire clk_pixel; 67 | // synchronous reset back to 0,0 68 | input wire reset; 69 | input wire [23:0] rgb; 70 | 71 | // These outputs go to your HDMI port 72 | output wire [2:0] tmds; 73 | output wire tmds_clock; 74 | 75 | // All outputs below this line stay inside the FPGA 76 | // They are used (by you) to pick the color each pixel should have 77 | // i.e. always_ff @(posedge pixel_clk) rgb <= {8'd0, 8'(cx), 8'(cy)}; 78 | output reg [BIT_WIDTH - 1:0] cx = START_X; 79 | output reg [BIT_HEIGHT - 1:0] cy = START_Y; 80 | 81 | // The screen is at the upper left corner of the frame. 82 | // 0,0 = 0,0 in video 83 | // the frame includes extra space for sending auxiliary data 84 | output wire [BIT_WIDTH - 1:0] frame_width; 85 | output wire [BIT_HEIGHT - 1:0] frame_height; 86 | output wire [BIT_WIDTH - 1:0] screen_width; 87 | output wire [BIT_HEIGHT - 1:0] screen_height; 88 | 89 | localparam signed [31:0] NUM_CHANNELS = 3; 90 | reg hsync; 91 | reg vsync; 92 | 93 | wire [BIT_WIDTH - 1:0] hsync_pulse_start, hsync_pulse_size; 94 | wire [BIT_HEIGHT - 1:0] vsync_pulse_start, vsync_pulse_size; 95 | wire invert; 96 | 97 | // See CEA-861-D for more specifics formats described below. 98 | generate 99 | case (VIDEO_ID_CODE) 100 | 16, 34: begin : genblk1 101 | // Those are the patched, minimal timings for video mode 16 that 102 | // work with the MS2130. The inactive video period has been reduced 103 | // significantly. See below (mode 99) for the original timings for 104 | // 1080p 105 | assign frame_width = 1982; 106 | assign frame_height = 1084; 107 | assign screen_width = 1920; 108 | assign screen_height = 1080; 109 | assign hsync_pulse_start = 6; 110 | assign hsync_pulse_size = 4; 111 | assign vsync_pulse_start = 0; 112 | assign vsync_pulse_size = 1; 113 | assign invert = 0; 114 | end 115 | 99: begin : genblk1 116 | assign frame_width = 2200; 117 | assign frame_height = 1125; 118 | assign screen_width = 1920; 119 | assign screen_height = 1080; 120 | assign hsync_pulse_start = 88; 121 | assign hsync_pulse_size = 44; 122 | assign vsync_pulse_start = 4; 123 | assign vsync_pulse_size = 5; 124 | assign invert = 0; 125 | end 126 | endcase 127 | endgenerate 128 | always @(*) begin 129 | hsync <= invert ^ ((cx >= (screen_width + hsync_pulse_start)) && (cx < ((screen_width + hsync_pulse_start) + hsync_pulse_size))); 130 | // vsync pulses should begin and end at the start of hsync, so special 131 | // handling is required for the lines on which vsync starts and ends 132 | if (cy == ((screen_height + vsync_pulse_start) - 1)) 133 | vsync <= invert ^ (cx >= (screen_width + hsync_pulse_start)); 134 | else if (cy == (((screen_height + vsync_pulse_start) + vsync_pulse_size) - 1)) 135 | vsync <= invert ^ (cx < (screen_width + hsync_pulse_start)); 136 | else 137 | vsync <= invert ^ ((cy >= (screen_height + vsync_pulse_start)) && (cy < ((screen_height + vsync_pulse_start) + vsync_pulse_size))); 138 | end 139 | 140 | // Wrap-around pixel position counters indicating the pixel to be generated by the user in THIS clock and sent out in the NEXT clock. 141 | always @(posedge clk_pixel) 142 | begin 143 | if (reset) begin 144 | cx <= START_X; 145 | cy <= START_Y; 146 | end 147 | else begin 148 | cx <= (cx == (frame_width - 1'b1) ? 0 : cx + 1'b1); 149 | cy <= (cx == (frame_width - 1'b1) ? (cy == (frame_height - 1'b1) ? 0 : cy + 1'b1) : cy); 150 | end 151 | end 152 | 153 | // See Section 5.2 154 | reg video_data_period = 0; 155 | always @(posedge clk_pixel) 156 | begin 157 | if (reset) 158 | video_data_period <= 0; 159 | else 160 | video_data_period <= (cx < screen_width) && (cy < screen_height); 161 | end 162 | 163 | reg [2:0] mode = 3'd1; 164 | reg [23:0] video_data = 24'd0; 165 | reg [5:0] control_data = 6'd0; 166 | reg [11:0] data_island_data = 12'd0; 167 | 168 | function automatic [4:0] sv2v_cast_5; 169 | input reg [4:0] inp; 170 | sv2v_cast_5 = inp; 171 | endfunction 172 | 173 | generate 174 | if (!DVI_OUTPUT) begin : true_hdmi_output 175 | reg video_guard = 1; 176 | reg video_preamble = 0; 177 | always @(posedge clk_pixel) 178 | begin 179 | if (reset) begin 180 | video_guard <= 1; 181 | video_preamble <= 0; 182 | end 183 | else begin 184 | video_guard <= ((cx >= (frame_width - 2)) && (cx < frame_width)) && ((cy == (frame_height - 1)) || (cy < (screen_height - 1))); 185 | video_preamble <= ((cx >= (frame_width - 10)) && (cx < (frame_width - 2))) && ((cy == (frame_height - 1)) || (cy < (screen_height - 1))); 186 | end 187 | end 188 | 189 | reg [4:0] num_packets_alongside = 1; // patched for hsdaoh: set to minimum required number 190 | 191 | wire data_island_period_instantaneous; 192 | assign data_island_period_instantaneous = ((num_packets_alongside > 0) && (cx >= (screen_width + 14))) && (cx < ((screen_width + 14) + (num_packets_alongside * 32))); 193 | wire packet_enable; 194 | assign packet_enable = data_island_period_instantaneous && (sv2v_cast_5((cx + screen_width) + 18) == 5'd0); 195 | 196 | reg data_island_guard = 0; 197 | reg data_island_preamble = 0; 198 | reg data_island_period = 0; 199 | always @(posedge clk_pixel) 200 | begin 201 | if (reset) begin 202 | data_island_guard <= 0; 203 | data_island_preamble <= 0; 204 | data_island_period <= 0; 205 | end 206 | else begin 207 | data_island_guard <= num_packets_alongside > 0 && ( 208 | (cx >= screen_width + 12 && cx < screen_width + 14) /* leading guard */ || 209 | (cx >= screen_width + 14 + num_packets_alongside * 32 && cx < screen_width + 14 + num_packets_alongside * 32 + 2) /* trailing guard */ 210 | ); 211 | data_island_preamble <= num_packets_alongside > 0 && cx >= screen_width + 4 && cx < screen_width + 12; 212 | data_island_period <= data_island_period_instantaneous; 213 | end 214 | end 215 | 216 | // See Section 5.2.3.4 217 | wire [23:0] header; 218 | wire [223:0] sub; 219 | wire video_field_end; 220 | assign video_field_end = (cx == (screen_width - 1'b1)) && (cy == (screen_height - 1'b1)); 221 | wire [4:0] packet_pixel_counter; 222 | packet_picker #( 223 | .VIDEO_ID_CODE(VIDEO_ID_CODE) 224 | ) packet_picker( 225 | .clk_pixel(clk_pixel), 226 | .reset(reset), 227 | .video_field_end(video_field_end), 228 | .packet_enable(packet_enable), 229 | .packet_pixel_counter(packet_pixel_counter), 230 | .header(header), 231 | .sub(sub) 232 | ); 233 | wire [8:0] packet_data; 234 | packet_assembler packet_assembler( 235 | .clk_pixel(clk_pixel), 236 | .reset(reset), 237 | .data_island_period(data_island_period), 238 | .header(header), 239 | .sub(sub), 240 | .packet_data(packet_data), 241 | .counter(packet_pixel_counter) 242 | ); 243 | always @(posedge clk_pixel) 244 | if (reset) begin 245 | mode <= 3'd2; 246 | video_data <= 24'd0; 247 | control_data = 6'd0; 248 | data_island_data <= 12'd0; 249 | end 250 | else begin 251 | mode <= (data_island_guard ? 3'd4 : (data_island_period ? 3'd3 : (video_guard ? 3'd2 : (video_data_period ? 3'd1 : 3'd0)))); 252 | video_data <= rgb; 253 | control_data <= {1'b0, data_island_preamble, 1'b0, video_preamble || data_island_preamble, vsync, hsync}; 254 | data_island_data[11:4] <= packet_data[8:1]; 255 | data_island_data[3] <= cx != 0; 256 | data_island_data[2] <= packet_data[0]; 257 | data_island_data[1:0] <= {vsync, hsync}; 258 | end 259 | end 260 | else begin : genblk2 // DVI_OUTPUT = 1 261 | always @(posedge clk_pixel) 262 | if (reset) begin 263 | mode <= 3'd0; 264 | video_data <= 24'd0; 265 | control_data <= 6'd0; 266 | end 267 | else begin 268 | mode <= (video_data_period ? 3'd1 : 3'd0); 269 | video_data <= rgb; 270 | control_data <= {4'b0000, vsync, hsync}; // ctrl3, ctrl2, ctrl1, ctrl0, vsync, hsync 271 | end 272 | end 273 | endgenerate 274 | 275 | // All logic below relates to the production and output of the 10-bit TMDS code. 276 | wire [29:0] tmds_internal; 277 | genvar i; 278 | generate 279 | // TMDS code production. 280 | for (i = 0; i < NUM_CHANNELS; i = i + 1) begin : tmds_gen 281 | tmds_channel #(.CN(i)) tmds_channel( 282 | .clk_pixel(clk_pixel), 283 | .reset(reset), 284 | .video_data(video_data[(i * 8) + 7:i * 8]), 285 | .data_island_data(data_island_data[(i * 4) + 3:i * 4]), 286 | .control_data(control_data[(i * 2) + 1:i * 2]), 287 | .mode(mode), 288 | .tmds(tmds_internal[i * 10+:10]) 289 | ); 290 | end 291 | endgenerate 292 | serializer #( 293 | .NUM_CHANNELS(NUM_CHANNELS) 294 | ) serializer( 295 | .clk_pixel(clk_pixel), 296 | .clk_pixel_x5(clk_pixel_x5), 297 | .reset(reset), 298 | .tmds_internal(tmds_internal), 299 | .tmds(tmds), 300 | .tmds_clock(tmds_clock) 301 | ); 302 | endmodule 303 | -------------------------------------------------------------------------------- /common/hdmi/packet_assembler.v: -------------------------------------------------------------------------------- 1 | // Implementation of HDMI packet ECC calculation. 2 | // By Sameer Puri https://github.com/sameer 3 | // source: https://github.com/hdl-util/hdmi/ 4 | // Dual-licensed under Apache License 2.0 and MIT License. 5 | 6 | // converted to Verilog for hsdaoh 7 | 8 | module packet_assembler ( 9 | clk_pixel, 10 | reset, 11 | data_island_period, 12 | header, // See Table 5-8 Packet Types 13 | sub, 14 | packet_data, // See Figure 5-4 Data Island Packet and ECC Structure 15 | counter 16 | ); 17 | input wire clk_pixel; 18 | input wire reset; 19 | input wire data_island_period; 20 | input wire [23:0] header; 21 | input wire [223:0] sub; 22 | output wire [8:0] packet_data; 23 | output reg [4:0] counter = 5'd0; 24 | 25 | // 32 pixel wrap-around counter. See Section 5.2.3.4 for further information. 26 | always @(posedge clk_pixel) 27 | begin 28 | if (reset) 29 | counter <= 5'd0; 30 | else if (data_island_period) 31 | counter <= counter + 5'd1; 32 | end 33 | // BCH packets 0 to 3 are transferred two bits at a time, see Section 5.2.3.4 for further information. 34 | wire [5:0] counter_t2 = {counter, 1'b0}; 35 | wire [5:0] counter_t2_p1 = {counter, 1'b1}; 36 | 37 | // Initialize parity bits to 0 38 | reg [39:0] parity = 40'h0000000000; 39 | 40 | wire [63:0] bch [3:0]; 41 | assign bch[0] = {parity[0+:8], sub[0+:56]}; 42 | assign bch[1] = {parity[8+:8], sub[56+:56]}; 43 | assign bch[2] = {parity[16+:8], sub[112+:56]}; 44 | assign bch[3] = {parity[24+:8], sub[168+:56]}; 45 | wire [31:0] bch4 = {parity[32+:8], header}; 46 | assign packet_data = {bch[3][counter_t2_p1], bch[2][counter_t2_p1], bch[1][counter_t2_p1], bch[0][counter_t2_p1], bch[3][counter_t2], bch[2][counter_t2], bch[1][counter_t2], bch[0][counter_t2], bch4[counter]}; 47 | 48 | // See Figure 5-5 Error Correction Code generator. Generalization of a CRC with binary BCH. 49 | // See https://web.archive.org/web/20190520020602/http://hamsterworks.co.nz/mediawiki/index.php/Minimal_HDMI#Computing_the_ECC for an explanation of the implementation. 50 | // See https://en.wikipedia.org/wiki/BCH_code#Systematic_encoding:_The_message_as_a_prefix for further information. 51 | function automatic [7:0] next_ecc; 52 | input [7:0] ecc, next_bch_bit; 53 | begin 54 | next_ecc = (ecc >> 1) ^ (ecc[0] ^ next_bch_bit ? 8'b10000011 : 8'd0); 55 | end 56 | endfunction 57 | 58 | wire [7:0] parity_next [4:0]; 59 | 60 | // The parity needs to be calculated 2 bits at a time for blocks 0 to 3. 61 | // There's 56 bits being sent 2 bits at a time over TMDS channels 1 & 2, so the parity bits wouldn't be ready in time otherwise. 62 | wire [31:0] parity_next_next; 63 | 64 | genvar i; 65 | generate 66 | for (i = 0; i < 5; i = i + 1) begin : parity_calc 67 | if (i == 4) begin : genblk1 68 | assign parity_next[i] = next_ecc(parity[i * 8+:8], header[counter]); 69 | end 70 | else begin : genblk1 71 | assign parity_next[i] = next_ecc(parity[i * 8+:8], sub[(i * 56) + counter_t2]); 72 | assign parity_next_next[i * 8+:8] = next_ecc(parity_next[i], sub[(i * 56) + counter_t2_p1]); 73 | end 74 | end 75 | endgenerate 76 | always @(posedge clk_pixel) 77 | begin 78 | if (reset) 79 | parity <= 40'h0000000000; 80 | else if (data_island_period) begin 81 | if (counter < 5'd28) begin // Compute ECC only on subpacket data, not on itself 82 | parity[0+:32] <= parity_next_next; 83 | if (counter < 5'd24) // Header only has 24 bits, whereas subpackets have 56 and 56 / 2 = 28. 84 | parity[32+:8] <= parity_next[4]; 85 | end 86 | else if (counter == 5'd31) 87 | parity <= 40'h0000000000; // Reset ECC for next packet 88 | end 89 | else 90 | parity <= 40'h0000000000; 91 | end 92 | endmodule 93 | -------------------------------------------------------------------------------- /common/hdmi/packet_picker.v: -------------------------------------------------------------------------------- 1 | // Implementation of HDMI packet choice logic. 2 | // By Sameer Puri https://github.com/sameer 3 | // source: https://github.com/hdl-util/hdmi/ 4 | // Dual-licensed under Apache License 2.0 and MIT License. 5 | 6 | // converted to Verilog and removed packets not required for hsdaoh 7 | 8 | module packet_picker ( 9 | clk_pixel, 10 | reset, 11 | video_field_end, 12 | packet_enable, 13 | packet_pixel_counter, 14 | header, 15 | sub 16 | ); 17 | parameter [6:0] VIDEO_ID_CODE = 4; 18 | parameter [0:0] IT_CONTENT = 1'b0; 19 | input wire clk_pixel; 20 | input wire reset; 21 | input wire video_field_end; 22 | input wire packet_enable; 23 | input wire [4:0] packet_pixel_counter; 24 | output wire [23:0] header; 25 | output wire [223:0] sub; 26 | 27 | // Connect the current packet type's data to the output. 28 | reg [7:0] packet_type = 8'd0; 29 | wire [23:0] headers [255:0]; 30 | wire [223:0] subs [255:0]; 31 | assign header = headers[packet_type]; 32 | assign sub[0+:56] = subs[packet_type][0+:56]; 33 | assign sub[56+:56] = subs[packet_type][56+:56]; 34 | assign sub[112+:56] = subs[packet_type][112+:56]; 35 | assign sub[168+:56] = subs[packet_type][168+:56]; 36 | 37 | // NULL packet 38 | // "An HDMI Sink shall ignore bytes HB1 and HB2 of the Null Packet Header and all bytes of the Null Packet Body." 39 | assign headers[0] = 24'hxxxx00; 40 | assign subs[0][0+:56] = 56'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; 41 | assign subs[0][56+:56] = 56'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; 42 | assign subs[0][112+:56] = 56'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; 43 | assign subs[0][168+:56] = 56'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; 44 | 45 | reg [7:0] frame_counter = 8'd0; 46 | always @(posedge clk_pixel) 47 | begin 48 | if (reset) 49 | frame_counter <= 8'd0; 50 | else if ((packet_pixel_counter == 5'd31) && (packet_type == 8'h02)) begin 51 | frame_counter = frame_counter + 8'd4; 52 | if (frame_counter >= 8'd192) 53 | frame_counter = frame_counter - 8'd192; 54 | end 55 | end 56 | 57 | auxiliary_video_information_info_frame #( 58 | .VIDEO_ID_CODE(VIDEO_ID_CODE), 59 | .IT_CONTENT(IT_CONTENT) 60 | ) auxiliary_video_information_info_frame( 61 | .header(headers[130]), 62 | .sub(subs[130]) 63 | ); 64 | 65 | reg auxiliary_video_information_info_frame_sent = 1'b0; 66 | always @(posedge clk_pixel) 67 | begin 68 | if (reset || video_field_end) begin 69 | auxiliary_video_information_info_frame_sent <= 1'b0; 70 | packet_type <= 8'bxxxxxxxx; 71 | end 72 | else if (packet_enable) begin 73 | if (!auxiliary_video_information_info_frame_sent) begin 74 | packet_type <= 8'h82; 75 | auxiliary_video_information_info_frame_sent <= 1'b1; 76 | end 77 | else 78 | packet_type <= 8'd0; 79 | end 80 | end 81 | endmodule 82 | -------------------------------------------------------------------------------- /common/hdmi/serializer.v: -------------------------------------------------------------------------------- 1 | // TMDS serializer 2 | // By Sameer Puri https://github.com/sameer 3 | // source: https://github.com/hdl-util/hdmi/ 4 | // Dual-licensed under Apache License 2.0 and MIT License. 5 | 6 | // converted to Verilog for hsdaoh 7 | // currently only contains the GOWIN OSER10 primitives 8 | // TODO: add back everything from https://github.com/hdl-util/hdmi/blob/master/src/serializer.sv 9 | 10 | module serializer ( 11 | clk_pixel, 12 | clk_pixel_x5, 13 | reset, 14 | tmds_internal, 15 | tmds, 16 | tmds_clock 17 | ); 18 | parameter signed [31:0] NUM_CHANNELS = 3; 19 | parameter real VIDEO_RATE = 0; 20 | input wire clk_pixel; 21 | input wire clk_pixel_x5; 22 | input wire reset; 23 | input wire [(NUM_CHANNELS * 10) - 1:0] tmds_internal; 24 | output wire [2:0] tmds; 25 | output wire tmds_clock; 26 | OSER10 gwSer0( 27 | .Q(tmds[0]), 28 | .D0(tmds_internal[0]), 29 | .D1(tmds_internal[1]), 30 | .D2(tmds_internal[2]), 31 | .D3(tmds_internal[3]), 32 | .D4(tmds_internal[4]), 33 | .D5(tmds_internal[5]), 34 | .D6(tmds_internal[6]), 35 | .D7(tmds_internal[7]), 36 | .D8(tmds_internal[8]), 37 | .D9(tmds_internal[9]), 38 | .PCLK(clk_pixel), 39 | .FCLK(clk_pixel_x5), 40 | .RESET(reset) 41 | ); 42 | OSER10 gwSer1( 43 | .Q(tmds[1]), 44 | .D0(tmds_internal[10]), 45 | .D1(tmds_internal[11]), 46 | .D2(tmds_internal[12]), 47 | .D3(tmds_internal[13]), 48 | .D4(tmds_internal[14]), 49 | .D5(tmds_internal[15]), 50 | .D6(tmds_internal[16]), 51 | .D7(tmds_internal[17]), 52 | .D8(tmds_internal[18]), 53 | .D9(tmds_internal[19]), 54 | .PCLK(clk_pixel), 55 | .FCLK(clk_pixel_x5), 56 | .RESET(reset) 57 | ); 58 | OSER10 gwSer2( 59 | .Q(tmds[2]), 60 | .D0(tmds_internal[20]), 61 | .D1(tmds_internal[21]), 62 | .D2(tmds_internal[22]), 63 | .D3(tmds_internal[23]), 64 | .D4(tmds_internal[24]), 65 | .D5(tmds_internal[25]), 66 | .D6(tmds_internal[26]), 67 | .D7(tmds_internal[27]), 68 | .D8(tmds_internal[28]), 69 | .D9(tmds_internal[29]), 70 | .PCLK(clk_pixel), 71 | .FCLK(clk_pixel_x5), 72 | .RESET(reset) 73 | ); 74 | assign tmds_clock = clk_pixel; 75 | endmodule 76 | -------------------------------------------------------------------------------- /common/hdmi/tmds_channel.v: -------------------------------------------------------------------------------- 1 | // Pipelined TMDS encoder 2 | // based on https://github.com/juj/gowin_flipflop_drainer/blob/main/src/hdmi.v (Public Domain) 3 | // 4 | // TERC4 + Video/Data Guard bands based on https://github.com/hdl-util/hdmi/ 5 | // by Sameer Puri 6 | // 7 | // adapted for hsdaoh by Steve Markgraf 8 | // 9 | // Dual-licensed under Apache License 2.0 and MIT License. 10 | 11 | // tmds_encoder performs Transition-minimized differential signaling (TMDS) encoding of 12 | // 8-bits of pixel data and 2-bits of control data to a 10-bit TMDS encoded format. 13 | module tmds_channel( 14 | input clk_pixel, // HDMI pixel clock 15 | input reset, // reset (active high) 16 | input [7:0] video_data, // Input 8-bit color 17 | input [3:0] data_island_data, // HDMI data island data 18 | input [1:0] control_data, // control data (vsync and hsync) 19 | input [2:0] mode, // Mode select (0 = control, 1 = video, 2 = video guard, 3 = island, 4 = island guard) 20 | output reg [9:0] tmds // encoded 10-bit TMDS data 21 | ); 22 | 23 | // TMDS Channel number. 24 | // There are only 3 possible channel numbers in HDMI 1.4a: 0, 1, 2. 25 | parameter [1:0] CN = 0; 26 | 27 | // Intermediate pipelined variables: the number after each reg specifies the clock cycle of the pipeline the values are accessed at. 28 | 29 | // Reset 30 | reg rst0; 31 | // Unencoded input data 32 | reg [7:0] dat0, dat1, dat2, dat3, dat4, dat5, dat6, dat7 ; 33 | // Control signal (hsync and vsync) 34 | reg [1:0] ctl0, ctl1, ctl2, ctl3, ctl4, ctl5, ctl6, ctl7, ctl8, ctl9, ctl10, ctl11, ctl12, ctl13, ctl14, ctl15, ctl16, ctl17, ctl18, ctl19; 35 | // Output mode 36 | reg [2:0] mode0, mode1, mode2, mode3, mode4, mode5, mode6, mode7, mode8, mode9, mode10, mode11, mode12, mode13, mode14, mode15, mode16, mode17, mode18, mode19; 37 | // Data island data 38 | reg [3:0] di_dat0, di_dat1, di_dat2, di_dat3, di_dat4, di_dat5, di_dat6, di_dat7, di_dat8, di_dat9, di_dat10, di_dat11, di_dat12, di_dat13, di_dat14, di_dat15, di_dat16, di_dat17, di_dat18, di_dat19; 39 | // Display enable signal 40 | reg den0, den1, den2, den3, den4, den5, den6, den7, den8, den9, den10, den11, den12, den13, den14, den15, den16, den17, not_den18; 41 | // Parity count of input data 42 | reg [4:0] par1, par2, par3, par4, par5, par6, par7, par8; 43 | // Parity bit of input data (if set, input had >= 4 bits set). 44 | reg par9, par10, par11, par12, par13, par14, par15, par16, par17, par18; 45 | // Intermediate encoded stage of the input vector. 46 | reg [7:0] enc3, enc4, enc5, enc6, enc7, enc8, enc9, enc10, enc11, enc12, enc13, enc14, enc15, enc16, enc17, enc18; 47 | // Count the number of ones in the intermediate encoded data 48 | reg signed [3:0] eon10, eon11, eon13, eon14, eon15, eon16, eon17, eon18; 49 | // Is Encoded ONes even? 50 | reg eve18; 51 | // Temp values for accumulating the count of ones in the encoded vector. 52 | reg [3:0] tpa10, tpa11, tpb11; 53 | reg [2:0] tpa12, tpb12; 54 | // Pipelined values for updating the bias count. 55 | reg signed [3:0] inv18, shr18, shl18; 56 | // Pipelined values for the output TMDS data. 57 | reg [9:0] tmds_blank18, tmds_even18, tmds_pos18, tmds_neg18; 58 | // 'bias' stores the running TMDS ones vs zeros balance count. If > 0, we've sent more ones to the bus, 59 | // if < 0, we've sent more zeroes than ones, if == 0, we are at equal balance. 60 | reg signed [3:0] bias; 61 | 62 | reg [9:0] tmds_video; 63 | 64 | // See Section 5.4.3 65 | reg [9:0] terc4_coding; 66 | always @(*) 67 | begin 68 | case (di_dat19) 69 | 4'b0000: terc4_coding = 10'b1010011100; 70 | 4'b0001: terc4_coding = 10'b1001100011; 71 | 4'b0010: terc4_coding = 10'b1011100100; 72 | 4'b0011: terc4_coding = 10'b1011100010; 73 | 4'b0100: terc4_coding = 10'b0101110001; 74 | 4'b0101: terc4_coding = 10'b0100011110; 75 | 4'b0110: terc4_coding = 10'b0110001110; 76 | 4'b0111: terc4_coding = 10'b0100111100; 77 | 4'b1000: terc4_coding = 10'b1011001100; 78 | 4'b1001: terc4_coding = 10'b0100111001; 79 | 4'b1010: terc4_coding = 10'b0110011100; 80 | 4'b1011: terc4_coding = 10'b1011000110; 81 | 4'b1100: terc4_coding = 10'b1010001110; 82 | 4'b1101: terc4_coding = 10'b1001110001; 83 | 4'b1110: terc4_coding = 10'b0101100011; 84 | 4'b1111: terc4_coding = 10'b1011000011; 85 | endcase 86 | end 87 | 88 | // See Section 5.2.2.1 89 | wire [9:0] video_guard_band; 90 | generate 91 | if ((CN == 0) || (CN == 2)) begin : genblk1 92 | assign video_guard_band = 10'b1011001100; 93 | end 94 | else begin : genblk1 95 | assign video_guard_band = 10'b0100110011; 96 | end 97 | endgenerate 98 | 99 | // See Section 5.2.3.3 100 | wire [9:0] data_guard_band; 101 | generate 102 | if ((CN == 1) || (CN == 2)) begin : genblk2 103 | assign data_guard_band = 10'b0100110011; 104 | end 105 | else begin : genblk2 106 | assign data_guard_band = (ctl19 == 2'b00 ? 10'b1010001110 : (ctl19 == 2'b01 ? 10'b1001110001 : (ctl19 == 2'b10 ? 10'b0101100011 : 10'b1011000011))); 107 | end 108 | endgenerate 109 | 110 | always @(posedge clk_pixel) begin 111 | // Clock 0: register inputs 112 | rst0 <= reset; 113 | dat0 <= video_data; 114 | di_dat0 <= data_island_data; 115 | ctl0 <= control_data; 116 | den0 <= (mode == 1); // display enable (high=pixel data active. low=display is in blanking area) 117 | mode0 <= mode; 118 | 119 | // Clock 1: handle reset early by folding it into the other fields 120 | dat1 <= dat0; 121 | ctl1 <= rst0 ? 2'b0 : ctl0; 122 | den1 <= rst0 ? 1'b0 : den0; 123 | mode1 <= rst0 ? 3'b0 : mode0; 124 | 125 | // Clock 2: sanitize image data to zero if inside display blank (or reset) 126 | dat2 <= den1 ? dat1 : 8'b0; 127 | ctl2 <= ctl1; 128 | den2 <= den1; 129 | mode2 <= mode1; 130 | 131 | // Clocks 3-7: Pipeline 'dat' for the duration of the parity encoding below. 132 | dat3 <= dat2; 133 | dat4 <= dat3; 134 | dat5 <= dat4; 135 | dat6 <= dat5; 136 | dat7 <= dat6; 137 | 138 | // Clocks 1-8: Calculate parity, i.e. whether the input vector 'dat' has more 139 | // ones in it than zeros. If it has 4 zeros and 4 ones, use ~dat[0] 140 | // as a tie. To do that, start with constant vector 00001, and for 141 | // each bit set in input 'dat', shift 'par' left by one place, filling 142 | // in ones. At the end par[4] will specifies whether there were more 143 | // ones than zeroes. 144 | par1 <= 5'b00001; 145 | par2 <= dat1[1] ? {par1[3:0], 1'b1} : par1; // = 000ab (a,b=unknown, 000=zeroes) 146 | par3 <= dat2[2] ? {par2[3:0], 1'b1} : par2; // = 00abc 147 | par4 <= dat3[3] ? {par3[3:0], 1'b1} : par3; // = 0abcd 148 | par5 <= dat4[4] ? {par4[3:0], 1'b1} : par4; // = abcdx (x=don't care, rely on optimizer to clear these away) 149 | par6 <= dat5[5] ? {par5[3:0], 1'b1} : par5; // = bcdxx 150 | par7 <= dat6[6] ? {par6[3:0], 1'b1} : par6; // = cdxxx 151 | par8 <= dat7[7] ? {par7[3:0], 1'b1} : par7; // = dxxxx 152 | 153 | // Clocks 9-18: No further calculation needed for parity. Keep pipelining it forward 154 | // in a single bit vector. 155 | par9 <= par8[4]; // At the end of computation par[4] records the parity. 156 | par10 <= par9; 157 | par11 <= par10; 158 | par12 <= par11; 159 | par13 <= par12; 160 | par14 <= par13; 161 | par15 <= par14; 162 | par16 <= par15; 163 | par17 <= par16; 164 | par18 <= par17; 165 | 166 | // Clocks 3-18: No more changes needed to the Display Enable signal, flow it through the pipeline 167 | den3 <= den2; 168 | den4 <= den3; 169 | den5 <= den4; 170 | den6 <= den5; 171 | den7 <= den6; 172 | den8 <= den7; 173 | den9 <= den8; 174 | den10 <= den9; 175 | den11 <= den10; 176 | den12 <= den11; 177 | den13 <= den12; 178 | den14 <= den13; 179 | den15 <= den14; 180 | den16 <= den15; 181 | den17 <= den16; 182 | not_den18 <= ~den17; 183 | 184 | mode3 <= mode2; 185 | mode4 <= mode3; 186 | mode5 <= mode4; 187 | mode6 <= mode5; 188 | mode7 <= mode6; 189 | mode8 <= mode7; 190 | mode9 <= mode8; 191 | mode10 <= mode9; 192 | mode11 <= mode10; 193 | mode12 <= mode11; 194 | mode13 <= mode12; 195 | mode14 <= mode13; 196 | mode15 <= mode14; 197 | mode16 <= mode15; 198 | mode17 <= mode16; 199 | mode18 <= mode17; 200 | mode19 <= mode18; 201 | 202 | di_dat1 <= di_dat0; 203 | di_dat2 <= di_dat1; 204 | di_dat3 <= di_dat2; 205 | di_dat4 <= di_dat3; 206 | di_dat5 <= di_dat4; 207 | di_dat6 <= di_dat5; 208 | di_dat7 <= di_dat6; 209 | di_dat8 <= di_dat7; 210 | di_dat9 <= di_dat8; 211 | di_dat10 <= di_dat9; 212 | di_dat11 <= di_dat10; 213 | di_dat12 <= di_dat11; 214 | di_dat13 <= di_dat12; 215 | di_dat14 <= di_dat13; 216 | di_dat15 <= di_dat14; 217 | di_dat16 <= di_dat15; 218 | di_dat17 <= di_dat16; 219 | di_dat18 <= di_dat17; 220 | di_dat19 <= di_dat18; 221 | 222 | // Clocks 3-18: Pipeline ctrl data (hsync & vsync), no changes needed. 223 | ctl3 <= ctl2; 224 | ctl4 <= ctl3; 225 | ctl5 <= ctl4; 226 | ctl6 <= ctl5; 227 | ctl7 <= ctl6; 228 | ctl8 <= ctl7; 229 | ctl9 <= ctl8; 230 | ctl10 <= ctl9; 231 | ctl11 <= ctl10; 232 | ctl12 <= ctl11; 233 | ctl13 <= ctl12; 234 | ctl14 <= ctl13; 235 | ctl15 <= ctl14; 236 | ctl16 <= ctl15; 237 | ctl17 <= ctl16; 238 | ctl18 <= ctl17; 239 | ctl19 <= ctl18; 240 | 241 | // Clocks 3-9: perform intermediate encoded vector 'enc' of the input 'data' field. At the 242 | // end of the encoding, the DVI spec says the encoded vector should look like 243 | // follows: 244 | // enc <= { parity ^ data[0] ^ data[1] ^ data[2] ^ data[3] ^ data[4] ^ data[5] ^ data[6] ^ data[7], 245 | // data[0] ^ data[1] ^ data[2] ^ data[3] ^ data[4] ^ data[5] ^ data[6], 246 | // parity ^ data[0] ^ data[1] ^ data[2] ^ data[3] ^ data[4] ^ data[5], 247 | // data[0] ^ data[1] ^ data[2] ^ data[3] ^ data[4], 248 | // parity ^ data[0] ^ data[1] ^ data[2] ^ data[3], 249 | // data[0] ^ data[1] ^ data[2], 250 | // parity ^ data[0] ^ data[1], 251 | // data[0] }; 252 | // 253 | // Calculate it across a few clock cycles to avoid high complexity per clock. (ignore parity first) 254 | // Bit lanes after each clock cycle: 255 | // [7] [6] [5] [4] [3] [2] [1] [0] 256 | // Clock 2: 7 6 5 4 3 2 1 0 257 | // Clock 3: 76 65 54 43 32 21 10 0 258 | // Clock 4: 7654 6543 5432 4321 3210 210 10 0 259 | // Clock 5: 76543210 6543210 543210 43210 3210 210 10 0 260 | 261 | enc3 <= {dat2[7:1]^dat2[6:0], dat2[ 0]}; 262 | enc4 <= {enc3[7:2]^enc3[5:0], enc3[1:0]}; 263 | enc5 <= {enc4[7:4]^enc4[3:0], enc4[3:0]}; 264 | enc6 <= enc5; 265 | enc7 <= enc6; 266 | enc8 <= enc7; 267 | 268 | // Clock 9: Meanwhile, parity computation has completed, so apply the final parity XOR to the 269 | // intermediate encoded vector. 270 | enc9 <= enc8 ^ {4{par8[4], 1'b0}}; 271 | enc10 <= enc9; 272 | enc11 <= enc10; 273 | enc12 <= enc11; 274 | enc13 <= enc12; 275 | enc14 <= enc13; 276 | enc15 <= enc14; 277 | enc16 <= enc15; 278 | enc17 <= enc16; 279 | enc18 <= enc17; 280 | 281 | // Clocks 10-17: calculate 'eon' (Encoded ONes vs zeros): a signed count that specifies whether 282 | // vector 'enc' has more ones or zeroes in it. 283 | tpa10 <= enc9[3:0] ^ enc9[7:4]; // Fold the 8 bit enc vector into two 4-bit halves, and half- 284 | tpa11 <= tpa10; // Then calculate the number of ones in them in parallel 285 | tpb11 <= enc10[3:0] & enc10[7:4];//tpb10; 286 | tpa12 <= tpa11[3] + tpa11[2] + tpa11[1] + tpa11[0]; // Then calculate the number of ones in them in parallel 287 | tpb12 <= tpb11[3] + tpb11[2] + tpb11[1] + tpb11[0]; // for SV $countones(tpb11) can be used 288 | eon13 <= tpa12 + {tpb12, 1'b0}; // Then use a 3-bit + 4-bit addition to bring the full count. 289 | eon14 <= eon13 - 3'd4; // And make the result signed. 290 | eon15 <= eon14; 291 | eon16 <= eon15; 292 | eon17 <= eon16; 293 | eon18 <= eon17; 294 | 295 | // 'eon17' is a count of balance of ones vs zeros in input encoded vector 'enc': 296 | // #ones: 8 7 6 5 4 3 2 1 0 297 | // #ones-#zeros: 8 6 4 2 0 -2 -4 -6 -8 298 | // value of eon: 4 3 2 1 0 -1 -2 -3 -4 299 | 300 | // Pipeline a few finishing touches: 301 | eve18 <= eon17 == 0; // is the balance equal (zero)? 302 | inv18 <= par17 ? -eon17 : eon17; // invert balance count based on parity. 303 | shr18 <= par17 ? eon17 : eon17-1'b1; // right shift balance count based on parity. 304 | shl18 <= par17 ? eon17-1'b1 : eon17; // left shift balance count based on parity. 305 | tmds_blank18 <= {~ctl17[1], 9'b101010100} ^ {10{ctl17[0]}}; 306 | tmds_even18 <= {par17, ~par17, {8{par17}} ^ enc17}; 307 | tmds_pos18 <= {1'b1, ~par17, 8'hff ^ enc17}; 308 | tmds_neg18 <= {1'b0, ~par17, enc17}; 309 | 310 | // Clocks 14-17 above: 311 | // These are "empty" filler clock stages that contain no computations on any of the variables, 312 | // but they only perform direct passthrough of the values that have been computed so far. 313 | // Gowin IDE Analyzer reports that this improves max. timing performance. 314 | 315 | // Clock 18: finally output the TMDS encoded value, and update bias value 316 | if (not_den18) begin // In display blank? 317 | tmds_video <= tmds_blank18; // Output control words for hsync and vsync 318 | bias <= 0; // Bias resets to zero in blank 319 | end else if (eve18 || bias == 0) begin // If current bias is even, or encoded balance is even.. 320 | tmds_video <= tmds_even18; // .. use a specific 'even' state TMDS formula. 321 | bias <= bias + inv18; // This does not seem to be strictly necessary, you can try removing this else block for tiny bit more performance. 322 | end else if (bias[3] == eon18[3]) begin // Otherwise, noneven bias and balance, so use the main TMDS encoding formula 323 | tmds_video <= tmds_pos18; 324 | bias <= bias - shr18; // and update running bias of ones vs zeros sent. 325 | end else begin 326 | tmds_video <= tmds_neg18; 327 | bias <= bias + shl18; 328 | end 329 | 330 | // Clock 19: Apply selected mode. 331 | case (mode19) 332 | 3'd0: tmds <= tmds_video; 333 | 3'd1: tmds <= tmds_video; 334 | 3'd2: tmds <= video_guard_band; 335 | 3'd3: tmds <= terc4_coding; 336 | 3'd4: tmds <= data_guard_band; 337 | endcase 338 | end 339 | endmodule 340 | -------------------------------------------------------------------------------- /common/hsdaoh/crc16_ccitt.v: -------------------------------------------------------------------------------- 1 | /* ----------------------------------------------------------------------------------- 2 | * Module Name : crc16_ccitt 3 | * Generated by : https://github.com/PXVI/ip_parallel_custom_crc_gerator_verilog 4 | * Author : pxvi 5 | * Description : Parallel CRC( 16-bit ) module with 16-bit data input. 6 | * Polynomial Degrees [ 16 12 5 0 ] 7 | * ----------------------------------------------------------------------------------- 8 | * 9 | * MIT License 10 | * 11 | * Copyright (c) 2024 k-sva 12 | * 13 | * Permission is hereby granted, free of charge, to any person obtaining a copy 14 | * of this software and associated documentation files (the Software), to deal 15 | * in the Software without restriction, including without limitation the rights 16 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 17 | * copies of the Software, and to permit persons to whom the Software is 18 | * furnished to do so, subject to the following conditions: 19 | * 20 | * The above copyright notice and this permission notice shall be included in all 21 | * copies or substantial portions of the Software. 22 | * 23 | * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 26 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 28 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 29 | * SOFTWARE. 30 | * 31 | * ----------------------------------------------------------------------------------- */ 32 | module crc16_ccitt #( parameter RESET_SEED = 'hffff )( 33 | input wire CLK, 34 | input wire RSTn, 35 | 36 | input wire [15:0] data_in, 37 | input wire enable, 38 | input wire clear, 39 | 40 | output [15:0] CRC 41 | ); 42 | 43 | 44 | reg [16-1:0] Mout_p, Mout_n; 45 | 46 | always@( posedge CLK ) 47 | begin 48 | Mout_p <= Mout_n; 49 | 50 | if( !RSTn ) 51 | begin 52 | Mout_p <= RESET_SEED; 53 | end 54 | end 55 | 56 | always@( * ) 57 | begin 58 | Mout_n = Mout_p; 59 | 60 | if( clear ) 61 | begin 62 | Mout_n = RESET_SEED; 63 | end 64 | else if( enable ) 65 | begin 66 | Mout_n[0] = data_in[0] ^ data_in[4] ^ data_in[8] ^ data_in[11] ^ data_in[12] ^ Mout_p[0] ^ Mout_p[4] ^ Mout_p[8] ^ Mout_p[11] ^ Mout_p[12] ; 67 | Mout_n[1] = data_in[1] ^ data_in[5] ^ data_in[9] ^ data_in[12] ^ data_in[13] ^ Mout_p[1] ^ Mout_p[5] ^ Mout_p[9] ^ Mout_p[12] ^ Mout_p[13] ; 68 | Mout_n[2] = data_in[2] ^ data_in[6] ^ data_in[10] ^ data_in[13] ^ data_in[14] ^ Mout_p[2] ^ Mout_p[6] ^ Mout_p[10] ^ Mout_p[13] ^ Mout_p[14] ; 69 | Mout_n[3] = data_in[3] ^ data_in[7] ^ data_in[11] ^ data_in[14] ^ data_in[15] ^ Mout_p[3] ^ Mout_p[7] ^ Mout_p[11] ^ Mout_p[14] ^ Mout_p[15] ; 70 | Mout_n[4] = data_in[4] ^ data_in[8] ^ data_in[12] ^ data_in[15] ^ Mout_p[4] ^ Mout_p[8] ^ Mout_p[12] ^ Mout_p[15] ; 71 | Mout_n[5] = data_in[0] ^ data_in[4] ^ data_in[5] ^ data_in[8] ^ data_in[9] ^ data_in[11] ^ data_in[12] ^ data_in[13] ^ Mout_p[0] ^ Mout_p[4] ^ Mout_p[5] ^ Mout_p[8] ^ Mout_p[9] ^ Mout_p[11] ^ Mout_p[12] ^ Mout_p[13] ; 72 | Mout_n[6] = data_in[1] ^ data_in[5] ^ data_in[6] ^ data_in[9] ^ data_in[10] ^ data_in[12] ^ data_in[13] ^ data_in[14] ^ Mout_p[1] ^ Mout_p[5] ^ Mout_p[6] ^ Mout_p[9] ^ Mout_p[10] ^ Mout_p[12] ^ Mout_p[13] ^ Mout_p[14] ; 73 | Mout_n[7] = data_in[2] ^ data_in[6] ^ data_in[7] ^ data_in[10] ^ data_in[11] ^ data_in[13] ^ data_in[14] ^ data_in[15] ^ Mout_p[2] ^ Mout_p[6] ^ Mout_p[7] ^ Mout_p[10] ^ Mout_p[11] ^ Mout_p[13] ^ Mout_p[14] ^ Mout_p[15] ; 74 | Mout_n[8] = data_in[3] ^ data_in[7] ^ data_in[8] ^ data_in[11] ^ data_in[12] ^ data_in[14] ^ data_in[15] ^ Mout_p[3] ^ Mout_p[7] ^ Mout_p[8] ^ Mout_p[11] ^ Mout_p[12] ^ Mout_p[14] ^ Mout_p[15] ; 75 | Mout_n[9] = data_in[4] ^ data_in[8] ^ data_in[9] ^ data_in[12] ^ data_in[13] ^ data_in[15] ^ Mout_p[4] ^ Mout_p[8] ^ Mout_p[9] ^ Mout_p[12] ^ Mout_p[13] ^ Mout_p[15] ; 76 | Mout_n[10] = data_in[5] ^ data_in[9] ^ data_in[10] ^ data_in[13] ^ data_in[14] ^ Mout_p[5] ^ Mout_p[9] ^ Mout_p[10] ^ Mout_p[13] ^ Mout_p[14] ; 77 | Mout_n[11] = data_in[6] ^ data_in[10] ^ data_in[11] ^ data_in[14] ^ data_in[15] ^ Mout_p[6] ^ Mout_p[10] ^ Mout_p[11] ^ Mout_p[14] ^ Mout_p[15] ; 78 | Mout_n[12] = data_in[0] ^ data_in[4] ^ data_in[7] ^ data_in[8] ^ data_in[15] ^ Mout_p[0] ^ Mout_p[4] ^ Mout_p[7] ^ Mout_p[8] ^ Mout_p[15] ; 79 | Mout_n[13] = data_in[1] ^ data_in[5] ^ data_in[8] ^ data_in[9] ^ Mout_p[1] ^ Mout_p[5] ^ Mout_p[8] ^ Mout_p[9] ; 80 | Mout_n[14] = data_in[2] ^ data_in[6] ^ data_in[9] ^ data_in[10] ^ Mout_p[2] ^ Mout_p[6] ^ Mout_p[9] ^ Mout_p[10] ; 81 | Mout_n[15] = data_in[3] ^ data_in[7] ^ data_in[10] ^ data_in[11] ^ Mout_p[3] ^ Mout_p[7] ^ Mout_p[10] ^ Mout_p[11] ; 82 | end 83 | end 84 | 85 | assign CRC = Mout_p; 86 | endmodule 87 | -------------------------------------------------------------------------------- /common/hsdaoh/hsdaoh_core.v: -------------------------------------------------------------------------------- 1 | // hsdaoh - High Speed Data Acquisition over HDMI 2 | // Implementation of data output 3 | // Copyright (C) 2024 by Steve Markgraf 4 | // License: MIT 5 | 6 | module hsdaoh_core 7 | ( 8 | input wire rstn, 9 | output wire tmds_clk_n, 10 | output wire tmds_clk_p, 11 | output wire [2:0] tmds_d_n, 12 | output wire [2:0] tmds_d_p, 13 | input wire clk_pixel_x5, 14 | input wire clk_pixel, 15 | input wire fifo_empty, 16 | input wire fifo_aempty, 17 | output reg fifo_read_en, 18 | input wire [15:0] data_in 19 | ); 20 | 21 | parameter USE_CRC = 1; 22 | 23 | reg crc_enable = 1'b0; 24 | wire [15:0] crc_out; 25 | reg [15:0] last_line_crc; 26 | 27 | crc16_ccitt crc16_ccitt ( 28 | .CLK(clk_pixel), 29 | .RSTn(rstn), 30 | .data_in({hdmi_data[15:8], hdmi_data[23:16]}), 31 | .enable(crc_enable), 32 | .clear(!crc_enable), 33 | .CRC(crc_out) 34 | ); 35 | 36 | localparam [31:0] MAGIC = 32'hda7acab1; 37 | 38 | reg [23:0] hdmi_data = 24'h000000; 39 | reg [15:0] frame_cnt = 16'h0000; 40 | reg [15:0] idle_counter = 16'h0000; 41 | reg [15:0] line_word_cnt = 16'h00; 42 | reg [3:0] status_nibble = 4'h0; 43 | 44 | wire [11:0] cx; 45 | wire [10:0] cy; 46 | wire [11:0] frame_width; 47 | wire [10:0] frame_height; 48 | wire [11:0] screen_width; 49 | wire [10:0] screen_height; 50 | 51 | always @(posedge clk_pixel) begin 52 | 53 | if (cy < screen_height) begin 54 | if (USE_CRC && (cx == 0)) 55 | crc_enable <= 1'b1; 56 | 57 | if (USE_CRC && (cx == screen_width+1)) begin 58 | last_line_crc <= crc_out; 59 | crc_enable <= 1'b0; 60 | end 61 | 62 | if (cx == screen_width-1) begin 63 | // last word of line contains counter of words per line 64 | hdmi_data <= {status_nibble[3:0], line_word_cnt[11:0], 8'h00}; 65 | 66 | end else if (USE_CRC && (cx == screen_width-2)) begin 67 | // second last word contains CRC 68 | hdmi_data <= {last_line_crc, 8'h00}; 69 | 70 | end else if (cx < screen_width) begin 71 | if (fifo_read_en && !fifo_empty) begin 72 | // regular output of FIFO data 73 | hdmi_data <= {data_in[15:0], 8'h00}; 74 | 75 | // increment line payload counter 76 | line_word_cnt <= line_word_cnt + 1'b1; 77 | end else begin 78 | // output idle counter 79 | hdmi_data <= {idle_counter[15:8], idle_counter[7:0], 8'h00}; 80 | 81 | // increment idle counter 82 | idle_counter <= idle_counter + 1'b1; 83 | end 84 | end else 85 | line_word_cnt <= 16'h0000; 86 | 87 | // Enable reading before beginning of next line 88 | if ((cx == frame_width-1) && (cy != screen_height-1)) begin 89 | if (!fifo_empty) 90 | fifo_read_en = 1'b1; 91 | end 92 | 93 | // switch read off at end of line before sending the word counter 94 | // -2 because the last word is reserved (line_word_cnt and metadata) 95 | if (cx == screen_width-2-USE_CRC) 96 | fifo_read_en = 1'b0; 97 | end 98 | 99 | // switch read off during blanking 100 | if (cy > screen_height) 101 | fifo_read_en = 1'b0; 102 | 103 | // switch read off when FIFO has only one word remaining 104 | if (fifo_aempty) 105 | fifo_read_en = 1'b0; 106 | 107 | // increment the frame counter at the end of the frame 108 | if ((cx == frame_width-1) && (cy == frame_height-1)) begin 109 | frame_cnt <= frame_cnt + 1'b1; 110 | line_word_cnt <= 16'h0000; 111 | 112 | // start FIFO readout 113 | if (!fifo_empty) 114 | fifo_read_en = 1'b1; 115 | end 116 | 117 | if (cx == 0) begin 118 | case (cy) 119 | 0 : status_nibble <= MAGIC[3:0]; 120 | 1 : status_nibble <= MAGIC[7:4]; 121 | 2 : status_nibble <= MAGIC[11:8]; 122 | 3 : status_nibble <= MAGIC[15:12]; 123 | 4 : status_nibble <= MAGIC[19:16]; 124 | 5 : status_nibble <= MAGIC[23:20]; 125 | 6 : status_nibble <= MAGIC[27:24]; 126 | 7 : status_nibble <= MAGIC[31:28]; 127 | 8 : status_nibble <= frame_cnt[3:0]; 128 | 9 : status_nibble <= frame_cnt[7:4]; 129 | 10 : status_nibble <= frame_cnt[11:8]; 130 | 11 : status_nibble <= frame_cnt[15:12]; 131 | 14 : status_nibble <= { 3'b000, USE_CRC }; 132 | default : status_nibble <= 4'h0; 133 | endcase 134 | end 135 | end 136 | 137 | wire tmds_clock; 138 | wire [2:0] tmds; 139 | 140 | hdmi #( 141 | .VIDEO_ID_CODE(16), 142 | .DVI_OUTPUT(0) 143 | ) hdmi( 144 | .clk_pixel_x5(clk_pixel_x5), 145 | .clk_pixel(clk_pixel), 146 | .reset(!rstn), 147 | .rgb(hdmi_data), 148 | .tmds(tmds), 149 | .tmds_clock(tmds_clock), 150 | .cx(cx), 151 | .cy(cy), 152 | .frame_width(frame_width), 153 | .frame_height(frame_height), 154 | .screen_width(screen_width), 155 | .screen_height(screen_height) 156 | ); 157 | ELVDS_OBUF tmds_bufds[3:0]( 158 | .I({clk_pixel, tmds}), 159 | .O({tmds_clk_p, tmds_d_p}), 160 | .OB({tmds_clk_n, tmds_d_n}) 161 | ); 162 | 163 | endmodule 164 | -------------------------------------------------------------------------------- /hsdaoh_nano20k_test.gprj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 5 6 | gw2ar18c-000 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /hsdaoh_nano20k_test/hsdaoh_nano20k_test.cst: -------------------------------------------------------------------------------- 1 | //IO_LOC "led[5]" 15; 2 | //IO_PORT "led[5]" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8; 3 | //IO_LOC "led[4]" 13; 4 | //IO_PORT "led[4]" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8; 5 | //IO_LOC "led[3]" 10; 6 | //IO_PORT "led[3]" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8; 7 | //IO_LOC "led[2]" 16; 8 | //IO_PORT "led[2]" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8; 9 | //IO_LOC "led[1]" 14; 10 | //IO_PORT "led[1]" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8; 11 | //IO_LOC "led[0]" 11; 12 | //IO_PORT "led[0]" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8; 13 | 14 | IO_LOC "sys_resetn" 88; 15 | IO_PORT "sys_resetn" PULL_MODE=UP; 16 | IO_LOC "sys_clk" 4; 17 | 18 | //IO_PORT "sys_clk" IO_TYPE=LVCMOS33 PULL_MODE=UP; 19 | IO_PORT "sys_clk" PULL_MODE=UP; 20 | IO_LOC "tmds_d_p[0]" 35,36; 21 | IO_PORT "tmds_d_p[0]" PULL_MODE=NONE DRIVE=8; 22 | IO_LOC "tmds_d_p[1]" 37,38; 23 | IO_PORT "tmds_d_p[1]" PULL_MODE=NONE DRIVE=8; 24 | IO_LOC "tmds_d_p[2]" 39,40; 25 | IO_PORT "tmds_d_p[2]" PULL_MODE=NONE DRIVE=8; 26 | IO_LOC "tmds_clk_p" 33,34; 27 | IO_PORT "tmds_clk_p" PULL_MODE=NONE DRIVE=8; 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | // 20k example: 38 | //IO_LOC "O_tmds_clk_p" 33,34; 39 | //IO_PORT "O_tmds_clk_p" PULL_MODE=NONE DRIVE=8; 40 | //IO_LOC "O_tmds_data_p[0]" 35,36; 41 | //IO_PORT "O_tmds_data_p[0]" PULL_MODE=NONE DRIVE=8; 42 | //IO_LOC "O_tmds_data_p[1]" 37,38; 43 | //IO_PORT "O_tmds_data_p[1]" PULL_MODE=NONE DRIVE=8; 44 | //IO_LOC "O_tmds_data_p[2]" 39,40; 45 | //IO_PORT "O_tmds_data_p[2]" PULL_MODE=NONE DRIVE=8; 46 | //IO_LOC "I_clk" 4; 47 | //IO_PORT "I_clk" PULL_MODE=UP; -------------------------------------------------------------------------------- /hsdaoh_nano20k_test/hsdaoh_nano20k_test.sdc: -------------------------------------------------------------------------------- 1 | create_clock -name sys_clk -period 37.04 [get_ports {sys_clk}] -add 2 | //create_clock -name adc_clkout -period 12.3 [get_ports {adc_clkout}] -add -------------------------------------------------------------------------------- /hsdaoh_nano20k_test/top.v: -------------------------------------------------------------------------------- 1 | // hsdaoh - High Speed Data Acquisition over HDMI 2 | // Test top design for Tang Nano 20K 3 | // Copyright (C) 2024 by Steve Markgraf 4 | // License: MIT 5 | 6 | module top ( 7 | sys_clk, 8 | sys_resetn, 9 | enable, 10 | tmds_clk_n, 11 | tmds_clk_p, 12 | tmds_d_n, 13 | tmds_d_p 14 | ); 15 | input sys_clk; 16 | input sys_resetn; 17 | input wire enable; 18 | output wire tmds_clk_n; 19 | output wire tmds_clk_p; 20 | output wire [2:0] tmds_d_n; 21 | output wire [2:0] tmds_d_p; 22 | 23 | wire [2:0] tmds; 24 | wire clk_pixel; 25 | wire clk_pixel_x5; 26 | wire hdmi_pll_lock; 27 | 28 | wire clk_data; 29 | wire data_pll_lock; 30 | 31 | // 477 MHz, maximum that works with the nano 20K 32 | // 477/5 = 95.4 MHz 33 | localparam HDMI_PLL_IDIV = 2; 34 | localparam HDMI_PLL_FBDIV = 52; 35 | localparam HDMI_PLL_ODIV = 2; 36 | 37 | // PLL for HDMI clock 38 | rPLL #( 39 | .FCLKIN (27), 40 | .IDIV_SEL (HDMI_PLL_IDIV), 41 | .FBDIV_SEL (HDMI_PLL_FBDIV), 42 | .ODIV_SEL (HDMI_PLL_ODIV), 43 | .DEVICE ("GW2AR-18C") 44 | ) hdmi_pll ( 45 | .CLKIN (sys_clk), 46 | .CLKFB (1'b0), 47 | .RESET (1'b0), 48 | .RESET_P (1'b0), 49 | .FBDSEL (6'b0), 50 | .IDSEL (6'b0), 51 | .ODSEL (6'b0), 52 | .DUTYDA (4'b0), 53 | .PSDA (4'b0), 54 | .FDLY (4'b0), 55 | .CLKOUT (clk_pixel_x5), 56 | .LOCK (hdmi_pll_lock), 57 | .CLKOUTP (), 58 | .CLKOUTD (), 59 | .CLKOUTD3 () 60 | ); 61 | 62 | CLKDIV #( 63 | .DIV_MODE(5), 64 | .GSREN("false") 65 | ) div_5 ( 66 | .CLKOUT(clk_pixel), 67 | .HCLKIN(clk_pixel_x5), 68 | .RESETN(hdmi_pll_lock), 69 | .CALIB(1'b0) 70 | ); 71 | 72 | // 91.8 MHz clock for data 73 | localparam DATA_PLL_IDIV = 4; 74 | localparam DATA_PLL_FBDIV = 16; 75 | localparam DATA_PLL_ODIV = 8; 76 | 77 | // PLL for data clock 78 | rPLL #( 79 | .FCLKIN (27), 80 | .IDIV_SEL (DATA_PLL_IDIV), 81 | .FBDIV_SEL (DATA_PLL_FBDIV), 82 | .ODIV_SEL (DATA_PLL_ODIV), 83 | .DEVICE ("GW2AR-18C") 84 | ) data_pll ( 85 | .CLKIN(sys_clk), 86 | .CLKFB(1'b0), 87 | .RESET(rst), 88 | .RESET_P(1'b0), 89 | .FBDSEL(6'b0), 90 | .IDSEL(6'b0), 91 | .ODSEL(6'b0), 92 | .DUTYDA(4'b0), 93 | .PSDA(4'b0), 94 | .FDLY(4'b0), 95 | .CLKOUT(clk_data), 96 | .LOCK(data_pll_lock), 97 | .CLKOUTP(), 98 | .CLKOUTD(), 99 | .CLKOUTD3() 100 | ); 101 | 102 | reg [15:0] counter = 16'h0000; 103 | 104 | reg [15:0] fifo_in; 105 | 106 | wire write_enable; 107 | 108 | wire [15:0] fifo_out; 109 | wire fifo_empty; 110 | wire fifo_aempty; 111 | wire Full_o; 112 | 113 | wire FifoHalfFull; 114 | wire FifoFull; 115 | 116 | wire fifo_rd_en_i; 117 | async_fifo #( 118 | .DSIZE(16), 119 | .ASIZE($clog2(8192)), // 3 + (1982 * 4) = 7931 => at least 8K entries to buffer 4 lines during VSYNC 120 | .FALLTHROUGH("FALSE") 121 | ) fifo ( 122 | .wclk(clk_data), 123 | .wrst_n(hdmi_pll_lock), 124 | .winc(write_enable), 125 | .wdata(fifo_in), 126 | .wfull(FifoFull), 127 | .awfull(FifoHalfFull), //fixme 128 | .rclk(clk_pixel), 129 | .rrst_n(hdmi_pll_lock), 130 | .rinc(fifo_rd_en_i), 131 | .rdata(fifo_out), 132 | .rempty(fifo_empty), 133 | .arempty(fifo_aempty) 134 | ); 135 | 136 | hsdaoh_core hsdaoh ( 137 | .rstn(hdmi_pll_lock), 138 | .tmds_clk_n(tmds_clk_n), 139 | .tmds_clk_p(tmds_clk_p), 140 | .tmds_d_n(tmds_d_n), 141 | .tmds_d_p(tmds_d_p), 142 | .clk_pixel_x5(clk_pixel_x5), 143 | .clk_pixel(clk_pixel), 144 | .fifo_empty(fifo_empty), 145 | .fifo_aempty(fifo_aempty), 146 | .fifo_read_en(fifo_rd_en_i), 147 | .data_in(fifo_out) 148 | ); 149 | 150 | assign write_enable = 1'b1; 151 | 152 | always @(posedge clk_data) begin 153 | fifo_in <= counter[15:0]; 154 | counter <= counter + 1'b1; 155 | end 156 | 157 | endmodule 158 | -------------------------------------------------------------------------------- /hsdaoh_nano4k_test.gprj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 5 6 | gw1nsr4c-000 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /hsdaoh_nano4k_test/fifo_hs/fifo_hs.ipc: -------------------------------------------------------------------------------- 1 | [General] 2 | ipc_version=4 3 | file=fifo_hs 4 | module=FIFO_HS_Top 5 | target_device=gw1nsr4c-000 6 | type=fifo_hs 7 | version=1.0 8 | 9 | [Config] 10 | AlmostEmptyFlag=true 11 | AlmostEmptyFlagItem=Empty_Single Threshold Constant Parameter 12 | AlmostFullFlag=false 13 | AlmostFullFlagItem=Full_Single Threshold Constant Parameter 14 | BSRAM=true 15 | ControlledByRdEn=false 16 | ECCSelected=false 17 | EmptyClear=1 18 | EmptySet=1 19 | EnReset=false 20 | FirstWordFallThrough=false 21 | FullClear=1 22 | FullSet=1 23 | LANG=0 24 | OutputRegistersSelected=false 25 | REG=false 26 | ReadDataNum=false 27 | ReadDataWidth=16 28 | ReadDepth=8192 29 | ResetSynchronization=false 30 | SSRAM=false 31 | StandardFIFO=true 32 | Synthesis_tool=GowinSynthesis 33 | WriteDataNum=false 34 | WriteDataWidth=16 35 | WriteDepth=8192 36 | -------------------------------------------------------------------------------- /hsdaoh_nano4k_test/fifo_hs/fifo_hs.v: -------------------------------------------------------------------------------- 1 | // 2 | //Written by GowinSynthesis 3 | //Product Version "V1.9.9 Beta-4 Education" 4 | //Tue Apr 30 20:19:43 2024 5 | 6 | //Source file index table: 7 | //file0 "\/home/miracle/Downloads/Gowin_V1.9.9Beta-4_Education/IDE/ipcore/FIFO_HS/data/fifo_hs.v" 8 | //file1 "\/home/miracle/Downloads/Gowin_V1.9.9Beta-4_Education/IDE/ipcore/FIFO_HS/data/fifo_hs_top.v" 9 | `pragma protect begin_protected 10 | `pragma protect version="2.3" 11 | `pragma protect author="default" 12 | `pragma protect author_info="default" 13 | `pragma protect encrypt_agent="GOWIN" 14 | `pragma protect encrypt_agent_info="GOWIN Encrypt Version 2.3" 15 | 16 | `pragma protect encoding=(enctype="base64", line_length=76, bytes=256) 17 | `pragma protect key_keyowner="GOWIN",key_keyname="GWK2023-09",key_method="rsa" 18 | `pragma protect key_block 19 | VEph5u3aRUgSaPwsLzLqIKmeDSZVNdeBR/6deETr/c33teBjsHK70yIaDOGd0AHGCZgPD6os2FLK 20 | rL7IWcTZ27w+IRzk9HAAuMdlG8Y8t10QED2nb/m1RLah2mNEwxizcochksfW8MtO8A/3gFV/Lz77 21 | 7iZoHhQTTZLe2LAFWNcNvmuYeSXmy6vz0MWa19M5dQrN7L8+/nWccZOF0mJBvoXD2TwZCiVqSmMr 22 | pzZKuA5AoR3xsYnT64pATxM8TW4VW9BrJNIgmTWnhZR7yoehioLR6OputkAuoQiwPnEmh76OAf5k 23 | LOcomW6jfNIGrU4ZCqewiKx8ZMp9I9xQtqASDA== 24 | 25 | `pragma protect encoding=(enctype="base64", line_length=76, bytes=46176) 26 | `pragma protect data_keyowner="default-ip-vendor" 27 | `pragma protect data_keyname="default-ip-key" 28 | `pragma protect data_method="aes128-cfb" 29 | `pragma protect data_block 30 | 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 840 | Mgic4/PD 841 | `pragma protect end_protected 842 | -------------------------------------------------------------------------------- /hsdaoh_nano4k_test/hsdaoh_nano4k_test.cst: -------------------------------------------------------------------------------- 1 | IO_LOC "sys_resetn" 14; 2 | IO_PORT "sys_resetn" PULL_MODE=UP; 3 | IO_LOC "sys_clk" 45; 4 | IO_PORT "sys_clk" IO_TYPE=LVCMOS33 PULL_MODE=UP; 5 | IO_LOC "tmds_d_p[0]" 30,29; 6 | IO_PORT "tmds_d_p[0]" PULL_MODE=NONE DRIVE=4; 7 | IO_LOC "tmds_d_p[1]" 32,31; 8 | IO_PORT "tmds_d_p[1]" PULL_MODE=NONE DRIVE=4; 9 | IO_LOC "tmds_d_p[2]" 35,34; 10 | IO_PORT "tmds_d_p[2]" PULL_MODE=NONE DRIVE=4; 11 | IO_LOC "tmds_clk_p" 28,27; 12 | IO_PORT "tmds_clk_p" PULL_MODE=NONE DRIVE=4; -------------------------------------------------------------------------------- /hsdaoh_nano4k_test/hsdaoh_nano4k_test.sdc: -------------------------------------------------------------------------------- 1 | create_clock -name sys_clk -period 37.04 [get_ports {sys_clk}] -add 2 | -------------------------------------------------------------------------------- /hsdaoh_nano4k_test/top.v: -------------------------------------------------------------------------------- 1 | // hsdaoh - High Speed Data Acquisition over HDMI 2 | // Test top design for Tang Nano 4K 3 | // Copyright (C) 2024 by Steve Markgraf 4 | // License: MIT 5 | 6 | module top ( 7 | sys_clk, 8 | sys_resetn, 9 | tmds_clk_n, 10 | tmds_clk_p, 11 | tmds_d_n, 12 | tmds_d_p 13 | ); 14 | input sys_clk; 15 | input sys_resetn; 16 | output wire tmds_clk_n; 17 | output wire tmds_clk_p; 18 | output wire [2:0] tmds_d_n; 19 | output wire [2:0] tmds_d_p; 20 | 21 | wire [2:0] tmds; 22 | wire clk_pixel; 23 | wire clk_pixel_x5; 24 | wire hdmi_pll_lock; 25 | 26 | wire clk_data; 27 | wire data_pll_lock; 28 | 29 | // https://juj.github.io/gowin_fpga_code_generators/pll_calculator.html 30 | // 345.6 MHz, maximum that works with my nano 4K 31 | // 345.6/5 = 69.12 MHz 32 | localparam HDMI_PLL_IDIV = 4; 33 | localparam HDMI_PLL_FBDIV = 63; 34 | localparam HDMI_PLL_ODIV = 2; 35 | 36 | wire rst; 37 | assign rst = ~sys_resetn; 38 | 39 | // PLL for HDMI clock 40 | PLLVR #( 41 | .FCLKIN (27), 42 | .IDIV_SEL (HDMI_PLL_IDIV), 43 | .FBDIV_SEL (HDMI_PLL_FBDIV), 44 | .ODIV_SEL (HDMI_PLL_ODIV), 45 | .DEVICE ("GW1NSR-4C") 46 | ) hdmi_pll ( 47 | .CLKIN(sys_clk), 48 | .CLKFB(1'b0), 49 | .RESET(rst), 50 | .RESET_P(1'b0), 51 | .FBDSEL(6'b0), 52 | .IDSEL(6'b0), 53 | .ODSEL(6'b0), 54 | .DUTYDA(4'b0), 55 | .PSDA(4'b0), 56 | .FDLY(4'b0), 57 | .CLKOUT(clk_pixel_x5), 58 | .LOCK(hdmi_pll_lock), 59 | .CLKOUTP(), 60 | .CLKOUTD(), 61 | .CLKOUTD3(), 62 | .VREN(1'b1) 63 | ); 64 | 65 | CLKDIV #( 66 | .DIV_MODE(5), 67 | .GSREN("false") 68 | ) div_5 ( 69 | .CLKOUT(clk_pixel), 70 | .HCLKIN(clk_pixel_x5), 71 | .RESETN(hdmi_pll_lock), 72 | .CALIB(1'b0) 73 | ); 74 | 75 | // 59.4 MHz (4/10/16) data clock (with proprietary, encrypted FIFO) 76 | localparam DATA_PLL_IDIV = 4; 77 | localparam DATA_PLL_FBDIV = 10; 78 | localparam DATA_PLL_ODIV = 16; 79 | 80 | // PLL for data clock 81 | PLLVR #( 82 | .FCLKIN (27), 83 | .IDIV_SEL (DATA_PLL_IDIV), 84 | .FBDIV_SEL (DATA_PLL_FBDIV), 85 | .ODIV_SEL (DATA_PLL_ODIV), 86 | .DEVICE ("GW1NSR-4C") 87 | ) data_pll ( 88 | .CLKIN (sys_clk), 89 | .CLKFB (1'b0), 90 | .RESET (rst), 91 | .RESET_P (1'b0), 92 | .FBDSEL (6'b0), 93 | .IDSEL (6'b0), 94 | .ODSEL (6'b0), 95 | .DUTYDA (4'b0), 96 | .PSDA (4'b0), 97 | .FDLY (4'b0), 98 | .CLKOUT (clk_data), 99 | .LOCK (data_pll_lock), 100 | .CLKOUTP (), 101 | .CLKOUTD (), 102 | .CLKOUTD3 (), 103 | .VREN (1'b1) 104 | ); 105 | 106 | reg [15:0] counter = 16'h0000; 107 | 108 | reg [15:0] fifo_in; 109 | 110 | wire write_enable; 111 | 112 | wire [15:0] fifo_out; 113 | wire fifo_empty; 114 | wire fifo_aempty; 115 | wire Full_o; 116 | 117 | wire FifoHalfFull; 118 | wire FifoFull; 119 | 120 | wire fifo_rd_en_i; 121 | /* 122 | async_fifo #( 123 | .DSIZE(16), 124 | .ASIZE($clog2(8192*2)), // 3 + (1982 * 4) = 7931 => at least 8K entries to buffer 4 lines during VSYNC 125 | .FALLTHROUGH("FALSE") 126 | ) fifo ( 127 | .wclk(clk_data), 128 | .wrst_n(hdmi_pll_lock), 129 | .winc(write_enable), 130 | .wdata(fifo_in), 131 | .wfull(FifoFull), 132 | .awfull(FifoHalfFull), //fixme 133 | .rclk(clk_pixel), 134 | .rrst_n(hdmi_pll_lock), 135 | .rinc(fifo_rd_en_i), 136 | .rdata(fifo_out), 137 | .rempty(fifo_empty), 138 | .arempty(fifo_aempty) 139 | ); 140 | */ 141 | 142 | FIFO_HS_Top fifo( 143 | .Data(fifo_in), //input [0:0] Data 144 | .WrClk(clk_data), //input WrClk 145 | .RdClk(clk_pixel), //input RdClk 146 | .WrEn(write_enable), //input WrEn 147 | .RdEn(fifo_rd_en_i), //input RdEn 148 | .Almost_Empty(fifo_aempty), //output Almost_Empty 149 | .Q(fifo_out), //output [0:0] Q 150 | .Empty(fifo_empty), //output Empty 151 | .Full(FifoFull) //output Full 152 | ); 153 | 154 | 155 | hsdaoh_core hsdaoh ( 156 | .rstn(hdmi_pll_lock), 157 | .tmds_clk_n(tmds_clk_n), 158 | .tmds_clk_p(tmds_clk_p), 159 | .tmds_d_n(tmds_d_n), 160 | .tmds_d_p(tmds_d_p), 161 | .clk_pixel_x5(clk_pixel_x5), 162 | .clk_pixel(clk_pixel), 163 | .fifo_empty(fifo_empty), 164 | .fifo_aempty(fifo_aempty), 165 | .fifo_read_en(fifo_rd_en_i), 166 | .data_in(fifo_out) 167 | ); 168 | 169 | assign write_enable = 1'b1; 170 | 171 | always @(posedge clk_data) begin 172 | fifo_in <= counter[15:0]; 173 | counter <= counter + 1'b1; 174 | end 175 | 176 | endmodule 177 | -------------------------------------------------------------------------------- /hsdaoh_nano9k_test.gprj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 5 6 | gw1nr9c-004 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /hsdaoh_nano9k_test/fifo_hs/fifo_hs.ipc: -------------------------------------------------------------------------------- 1 | [General] 2 | ipc_version=4 3 | file=fifo_hs 4 | module=FIFO_HS_Top 5 | target_device=gw1nr9c-004 6 | type=fifo_hs 7 | version=1.0 8 | 9 | [Config] 10 | AlmostEmptyFlag=true 11 | AlmostEmptyFlagItem=Empty_Single Threshold Constant Parameter 12 | AlmostFullFlag=false 13 | AlmostFullFlagItem=Full_Single Threshold Constant Parameter 14 | BSRAM=true 15 | ControlledByRdEn=false 16 | ECCSelected=false 17 | EmptyClear=1 18 | EmptySet=1 19 | EnReset=false 20 | FirstWordFallThrough=false 21 | FullClear=1 22 | FullSet=1 23 | LANG=0 24 | OutputRegistersSelected=false 25 | REG=false 26 | ReadDataNum=false 27 | ReadDataWidth=16 28 | ReadDepth=8192 29 | ResetSynchronization=false 30 | SSRAM=false 31 | StandardFIFO=true 32 | Synthesis_tool=GowinSynthesis 33 | WriteDataNum=false 34 | WriteDataWidth=16 35 | WriteDepth=8192 36 | -------------------------------------------------------------------------------- /hsdaoh_nano9k_test/fifo_hs/fifo_hs.v: -------------------------------------------------------------------------------- 1 | // 2 | //Written by GowinSynthesis 3 | //Product Version "V1.9.9 Beta-4 Education" 4 | //Tue Apr 30 01:00:04 2024 5 | 6 | //Source file index table: 7 | //file0 "\/home/miracle/Downloads/Gowin_V1.9.9Beta-4_Education/IDE/ipcore/FIFO_HS/data/fifo_hs.v" 8 | //file1 "\/home/miracle/Downloads/Gowin_V1.9.9Beta-4_Education/IDE/ipcore/FIFO_HS/data/fifo_hs_top.v" 9 | `pragma protect begin_protected 10 | `pragma protect version="2.3" 11 | `pragma protect author="default" 12 | `pragma protect author_info="default" 13 | `pragma protect encrypt_agent="GOWIN" 14 | `pragma protect encrypt_agent_info="GOWIN Encrypt Version 2.3" 15 | 16 | `pragma protect encoding=(enctype="base64", line_length=76, bytes=256) 17 | `pragma protect key_keyowner="GOWIN",key_keyname="GWK2023-09",key_method="rsa" 18 | `pragma protect key_block 19 | cFD6mgVY1usg3+48x9owyCEr+bdaJ29++StKKKabGFKo4aHUuJA3v9bgkwKAsDNUzhGfEEBDqjav 20 | 0sIOyrvvg5a9bc1Au6EWitkoSHP477PR2uwW3+Nqofiw9de9t4V3CZUOjGpf7i0h6U+2idzYnr2p 21 | wu2lcZ1yLsYPtI3SZf+/8B8QTApNO+GKJhhUaKzqoxQmvycd8zu2mNnlTrgQynv+VcjDr7NuIgPy 22 | CXYlOjz7YYND/4VvllKEqzYC+cOZF1/QLn/IBZWo88COe2r1HnWc4TvBUNA8Pmctj7AY/55YPKbX 23 | CIE40q7O2knfx5yGqXnQsl1AJdeAMJs41TBAhQ== 24 | 25 | `pragma protect encoding=(enctype="base64", line_length=76, bytes=44512) 26 | `pragma protect data_keyowner="default-ip-vendor" 27 | `pragma protect data_keyname="default-ip-key" 28 | `pragma protect data_method="aes128-cfb" 29 | `pragma protect data_block 30 | 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 811 | `pragma protect end_protected 812 | -------------------------------------------------------------------------------- /hsdaoh_nano9k_test/hsdaoh_nano9k_test.cst: -------------------------------------------------------------------------------- 1 | IO_LOC "sys_resetn" 4; 2 | IO_PORT "sys_resetn" PULL_MODE=UP; 3 | IO_LOC "sys_clk" 52; 4 | IO_PORT "sys_clk" IO_TYPE=LVCMOS33 PULL_MODE=UP; 5 | IO_LOC "tmds_d_p[0]" 71,70; 6 | IO_PORT "tmds_d_p[0]" PULL_MODE=NONE DRIVE=8; 7 | IO_LOC "tmds_d_p[1]" 73,72; 8 | IO_PORT "tmds_d_p[1]" PULL_MODE=NONE DRIVE=8; 9 | IO_LOC "tmds_d_p[2]" 75,74; 10 | IO_PORT "tmds_d_p[2]" PULL_MODE=NONE DRIVE=8; 11 | IO_LOC "tmds_clk_p" 69,68; 12 | IO_PORT "tmds_clk_p" PULL_MODE=NONE DRIVE=8; 13 | -------------------------------------------------------------------------------- /hsdaoh_nano9k_test/hsdaoh_nano9k_test.sdc: -------------------------------------------------------------------------------- 1 | create_clock -name sys_clk -period 37.04 [get_ports {sys_clk}] -add 2 | -------------------------------------------------------------------------------- /hsdaoh_nano9k_test/top.v: -------------------------------------------------------------------------------- 1 | // hsdaoh - High Speed Data Acquisition over HDMI 2 | // Test top design for Tang Nano 9K 3 | // Copyright (C) 2024 by Steve Markgraf 4 | // License: MIT 5 | 6 | module top ( 7 | sys_clk, 8 | sys_resetn, 9 | tmds_clk_n, 10 | tmds_clk_p, 11 | tmds_d_n, 12 | tmds_d_p 13 | ); 14 | input sys_clk; 15 | input sys_resetn; 16 | output wire tmds_clk_n; 17 | output wire tmds_clk_p; 18 | output wire [2:0] tmds_d_n; 19 | output wire [2:0] tmds_d_p; 20 | 21 | wire [2:0] tmds; 22 | wire clk_pixel; 23 | wire clk_pixel_x5; 24 | wire hdmi_pll_lock; 25 | 26 | wire clk_data; 27 | wire data_pll_lock; 28 | 29 | // https://juj.github.io/gowin_fpga_code_generators/pll_calculator.html 30 | // 337.5 MHz, maximum that works with my nano 9K 31 | // 337.5/5 = 67.5 MHz 32 | localparam HDMI_PLL_IDIV = 1; 33 | localparam HDMI_PLL_FBDIV = 24; 34 | localparam HDMI_PLL_ODIV = 2; 35 | 36 | // PLL for HDMI clock 37 | rPLL #( 38 | .FCLKIN (27), 39 | .IDIV_SEL (HDMI_PLL_IDIV), 40 | .FBDIV_SEL (HDMI_PLL_FBDIV), 41 | .ODIV_SEL (HDMI_PLL_ODIV), 42 | .DEVICE ("GW1NR-9C") 43 | ) hdmi_pll ( 44 | .CLKIN(sys_clk), 45 | .CLKFB(1'b0), 46 | .RESET(1'b0), 47 | .RESET_P(1'b0), 48 | .FBDSEL(6'b0), 49 | .IDSEL(6'b0), 50 | .ODSEL(6'b0), 51 | .DUTYDA(4'b0), 52 | .PSDA(4'b0), 53 | .FDLY(4'b0), 54 | .CLKOUT(clk_pixel_x5), 55 | .LOCK(hdmi_pll_lock), 56 | .CLKOUTP(), 57 | .CLKOUTD(), 58 | .CLKOUTD3() 59 | ); 60 | 61 | CLKDIV #( 62 | .DIV_MODE(5), 63 | .GSREN("false") 64 | ) div_5 ( 65 | .CLKOUT(clk_pixel), 66 | .HCLKIN(clk_pixel_x5), 67 | .RESETN(hdmi_pll_lock), 68 | .CALIB(1'b0) 69 | ); 70 | 71 | // 40.5 MHz (1/2/16) is maximum that works with 'open source' fifo 72 | // 51 MHz (8/16/8) data clock (with proprietary, encrypted FIFO) 73 | localparam DATA_PLL_IDIV = 8; 74 | localparam DATA_PLL_FBDIV = 16; 75 | localparam DATA_PLL_ODIV = 8; 76 | 77 | // PLL for data clock 78 | rPLL #( 79 | .FCLKIN (27), 80 | .IDIV_SEL (DATA_PLL_IDIV), 81 | .FBDIV_SEL (DATA_PLL_FBDIV), 82 | .ODIV_SEL (DATA_PLL_ODIV), 83 | .DEVICE ("GW1NR-9C") 84 | ) data_pll ( 85 | .CLKIN (sys_clk), 86 | .CLKFB (1'b0), 87 | .RESET (rst), 88 | .RESET_P (1'b0), 89 | .FBDSEL (6'b0), 90 | .IDSEL (6'b0), 91 | .ODSEL (6'b0), 92 | .DUTYDA (4'b0), 93 | .PSDA (4'b0), 94 | .FDLY (4'b0), 95 | .CLKOUT (clk_data), 96 | .LOCK (data_pll_lock), 97 | .CLKOUTP (), 98 | .CLKOUTD (), 99 | .CLKOUTD3 () 100 | ); 101 | 102 | reg [15:0] counter = 16'h0000; 103 | 104 | reg [15:0] fifo_in; 105 | 106 | wire write_enable; 107 | 108 | wire [15:0] fifo_out; 109 | wire fifo_empty; 110 | wire fifo_aempty; 111 | wire Full_o; 112 | 113 | wire FifoHalfFull; 114 | wire FifoFull; 115 | 116 | wire fifo_rd_en_i; 117 | /* 118 | async_fifo #( 119 | .DSIZE(16), 120 | .ASIZE($clog2(8192*2)), // 3 + (1982 * 4) = 7931 => at least 8K entries to buffer 4 lines during VSYNC 121 | .FALLTHROUGH("FALSE") 122 | ) fifo ( 123 | .wclk(clk_data), 124 | .wrst_n(hdmi_pll_lock), 125 | .winc(write_enable), 126 | .wdata(fifo_in), 127 | .wfull(FifoFull), 128 | .awfull(FifoHalfFull), //fixme 129 | .rclk(clk_pixel), 130 | .rrst_n(hdmi_pll_lock), 131 | .rinc(fifo_rd_en_i), 132 | .rdata(fifo_out), 133 | .rempty(fifo_empty), 134 | .arempty(fifo_aempty) 135 | ); 136 | */ 137 | 138 | FIFO_HS_Top fifo( 139 | .Data(fifo_in), //input [0:0] Data 140 | .WrClk(clk_data), //input WrClk 141 | .RdClk(clk_pixel), //input RdClk 142 | .WrEn(write_enable), //input WrEn 143 | .RdEn(fifo_rd_en_i), //input RdEn 144 | .Almost_Empty(fifo_aempty), //output Almost_Empty 145 | .Q(fifo_out), //output [0:0] Q 146 | .Empty(fifo_empty), //output Empty 147 | .Full(FifoFull) //output Full 148 | ); 149 | 150 | 151 | hsdaoh_core hsdaoh ( 152 | .rstn(hdmi_pll_lock), 153 | .tmds_clk_n(tmds_clk_n), 154 | .tmds_clk_p(tmds_clk_p), 155 | .tmds_d_n(tmds_d_n), 156 | .tmds_d_p(tmds_d_p), 157 | .clk_pixel_x5(clk_pixel_x5), 158 | .clk_pixel(clk_pixel), 159 | .fifo_empty(fifo_empty), 160 | .fifo_aempty(fifo_aempty), 161 | .fifo_read_en(fifo_rd_en_i), 162 | .data_in(fifo_out) 163 | ); 164 | 165 | assign write_enable = 1'b1; 166 | 167 | always @(posedge clk_data) begin 168 | fifo_in <= counter[15:0]; 169 | counter <= counter + 1'b1; 170 | end 171 | 172 | endmodule 173 | -------------------------------------------------------------------------------- /hsdaoh_primer20k_test.gprj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 5 6 | gw2a18c-011 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /hsdaoh_primer20k_test/hsdaoh_primer20k_test.cst: -------------------------------------------------------------------------------- 1 | IO_LOC "sys_resetn" T10; 2 | IO_PORT "sys_resetn" IO_TYPE=LVCMOS33 PULL_MODE=UP; 3 | IO_LOC "sys_clk" H11; 4 | //IO_PORT "sys_clk" IO_TYPE=LVCMOS33 PULL_MODE=UP; 5 | IO_PORT "sys_clk" PULL_MODE=UP; 6 | IO_LOC "tmds_d_p[0]" H14,H16; 7 | IO_PORT "tmds_d_p[0]" PULL_MODE=NONE DRIVE=8; 8 | IO_LOC "tmds_d_p[1]" J15,K16; 9 | IO_PORT "tmds_d_p[1]" PULL_MODE=NONE DRIVE=8; 10 | IO_LOC "tmds_d_p[2]" K14,K15; 11 | IO_PORT "tmds_d_p[2]" PULL_MODE=NONE DRIVE=8; 12 | IO_LOC "tmds_clk_p" G16,H15; 13 | IO_PORT "tmds_clk_p" PULL_MODE=NONE DRIVE=8; 14 | -------------------------------------------------------------------------------- /hsdaoh_primer20k_test/hsdaoh_primer20k_test.sdc: -------------------------------------------------------------------------------- 1 | create_clock -name sys_clk -period 37.04 [get_ports {sys_clk}] -add 2 | //create_clock -name adc_clkout -period 12.3 [get_ports {adc_clkout}] -add -------------------------------------------------------------------------------- /hsdaoh_primer20k_test/top.v: -------------------------------------------------------------------------------- 1 | // hsdaoh - High Speed Data Acquisition over HDMI 2 | // Test top design for Tang Primer 20K 3 | // Copyright (C) 2024 by Steve Markgraf 4 | // License: MIT 5 | 6 | module top ( 7 | sys_clk, 8 | sys_resetn, 9 | enable, 10 | tmds_clk_n, 11 | tmds_clk_p, 12 | tmds_d_n, 13 | tmds_d_p 14 | ); 15 | input sys_clk; 16 | input sys_resetn; 17 | input wire enable; 18 | output wire tmds_clk_n; 19 | output wire tmds_clk_p; 20 | output wire [2:0] tmds_d_n; 21 | output wire [2:0] tmds_d_p; 22 | 23 | wire [2:0] tmds; 24 | wire clk_pixel; 25 | wire clk_pixel_x5; 26 | wire hdmi_pll_lock; 27 | 28 | wire clk_data; 29 | wire data_pll_lock; 30 | 31 | // 477 MHz, maximum that works with the primer 20K 32 | // 477/5 = 95.4 MHz 33 | localparam HDMI_PLL_IDIV = 2; 34 | localparam HDMI_PLL_FBDIV = 52; 35 | localparam HDMI_PLL_ODIV = 2; 36 | 37 | // PLL for HDMI clock 38 | rPLL #( 39 | .FCLKIN (27), 40 | .IDIV_SEL (HDMI_PLL_IDIV), 41 | .FBDIV_SEL (HDMI_PLL_FBDIV), 42 | .ODIV_SEL (HDMI_PLL_ODIV), 43 | .DEVICE ("GW2A-18C") 44 | ) hdmi_pll ( 45 | .CLKIN(sys_clk), 46 | .CLKFB(1'b0), 47 | .RESET(1'b0), 48 | .RESET_P(1'b0), 49 | .FBDSEL(6'b0), 50 | .IDSEL(6'b0), 51 | .ODSEL(6'b0), 52 | .DUTYDA(4'b0), 53 | .PSDA(4'b0), 54 | .FDLY(4'b0), 55 | .CLKOUT(clk_pixel_x5), 56 | .LOCK(hdmi_pll_lock), 57 | .CLKOUTP(), 58 | .CLKOUTD(), 59 | .CLKOUTD3() 60 | ); 61 | 62 | CLKDIV #( 63 | .DIV_MODE(5), 64 | .GSREN("false") 65 | ) div_5 ( 66 | .CLKOUT(clk_pixel), 67 | .HCLKIN(clk_pixel_x5), 68 | .RESETN(hdmi_pll_lock), 69 | .CALIB(1'b0) 70 | ); 71 | 72 | // 91.8 MHz clock for data 73 | localparam DATA_PLL_IDIV = 4; 74 | localparam DATA_PLL_FBDIV = 16; 75 | localparam DATA_PLL_ODIV = 8; 76 | 77 | // PLL for data clock 78 | rPLL #( 79 | .FCLKIN (27), 80 | .IDIV_SEL (DATA_PLL_IDIV), 81 | .FBDIV_SEL (DATA_PLL_FBDIV), 82 | .ODIV_SEL (DATA_PLL_ODIV), 83 | .DEVICE ("GW2A-18C") 84 | ) data_pll ( 85 | .CLKIN (sys_clk), 86 | .CLKFB (1'b0), 87 | .RESET (rst), 88 | .RESET_P (1'b0), 89 | .FBDSEL (6'b0), 90 | .IDSEL (6'b0), 91 | .ODSEL (6'b0), 92 | .DUTYDA (4'b0), 93 | .PSDA (4'b0), 94 | .FDLY (4'b0), 95 | .CLKOUT (clk_data), 96 | .LOCK (data_pll_lock), 97 | .CLKOUTP (), 98 | .CLKOUTD (), 99 | .CLKOUTD3 () 100 | ); 101 | 102 | reg [15:0] counter = 16'h0000; 103 | 104 | reg [15:0] fifo_in; 105 | 106 | wire write_enable; 107 | 108 | wire [15:0] fifo_out; 109 | wire fifo_empty; 110 | wire fifo_aempty; 111 | wire Full_o; 112 | 113 | wire FifoHalfFull; 114 | wire FifoFull; 115 | 116 | wire fifo_rd_en_i; 117 | async_fifo #( 118 | .DSIZE(16), 119 | .ASIZE($clog2(16384)), // 3 + (1982 * 4) = 7931 => at least 8K entries to buffer 4 lines during VSYNC 120 | .FALLTHROUGH("FALSE") 121 | ) fifo ( 122 | .wclk(clk_data), 123 | .wrst_n(hdmi_pll_lock), 124 | .winc(write_enable), 125 | .wdata(fifo_in), 126 | .wfull(FifoFull), 127 | .awfull(FifoHalfFull), //fixme 128 | .rclk(clk_pixel), 129 | .rrst_n(hdmi_pll_lock), 130 | .rinc(fifo_rd_en_i), 131 | .rdata(fifo_out), 132 | .rempty(fifo_empty), 133 | .arempty(fifo_aempty) 134 | ); 135 | 136 | hsdaoh_core hsdaoh ( 137 | .rstn(hdmi_pll_lock), 138 | .tmds_clk_n(tmds_clk_n), 139 | .tmds_clk_p(tmds_clk_p), 140 | .tmds_d_n(tmds_d_n), 141 | .tmds_d_p(tmds_d_p), 142 | .clk_pixel_x5(clk_pixel_x5), 143 | .clk_pixel(clk_pixel), 144 | .fifo_empty(fifo_empty), 145 | .fifo_aempty(fifo_aempty), 146 | .fifo_read_en(fifo_rd_en_i), 147 | .data_in(fifo_out) 148 | ); 149 | 150 | assign write_enable = 1'b1; 151 | 152 | always @(posedge clk_data) begin 153 | fifo_in <= counter[15:0]; 154 | counter <= counter + 1'b1; 155 | end 156 | 157 | endmodule 158 | -------------------------------------------------------------------------------- /hsdaoh_primer25k_test.gprj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 5 6 | gw5a25a-002 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /hsdaoh_primer25k_test/hsdaoh_primer25k_test.cst: -------------------------------------------------------------------------------- 1 | IO_LOC "sys_resetn" H11; 2 | IO_PORT "sys_resetn" IO_TYPE=LVCMOS33 PULL_MODE=DOWN DRIVE=OFF BANK_VCCIO=3.3; 3 | 4 | // middle PMOD connector for HDMI 5 | IO_LOC "tmds_clk_p" L5,K5; 6 | IO_PORT "tmds_clk_p" IO_TYPE=LVCMOS33D PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3; 7 | IO_LOC "tmds_d_p[0]" K11,L11; 8 | IO_PORT "tmds_d_p[0]" IO_TYPE=LVCMOS33D PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3; 9 | IO_LOC "tmds_d_p[1]" E11,E10; 10 | IO_PORT "tmds_d_p[1]" IO_TYPE=LVCMOS33D PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3; 11 | IO_LOC "tmds_d_p[2]" A11,A10; 12 | IO_PORT "tmds_d_p[2]" IO_TYPE=LVCMOS33D PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3; 13 | 14 | IO_LOC "sys_clk" E2; 15 | IO_PORT "sys_clk" IO_TYPE=LVCMOS33 PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3; 16 | -------------------------------------------------------------------------------- /hsdaoh_primer25k_test/hsdaoh_primer25k_test.sdc: -------------------------------------------------------------------------------- 1 | create_clock -name sys_clk -period 20 [get_ports {sys_clk}] -add -------------------------------------------------------------------------------- /hsdaoh_primer25k_test/top.v: -------------------------------------------------------------------------------- 1 | // hsdaoh - High Speed Data Acquisition over HDMI 2 | // Test top design for Tang Primer 25K 3 | // Copyright (C) 2024 by Steve Markgraf 4 | // License: MIT 5 | 6 | module top ( 7 | sys_clk, 8 | sys_resetn, 9 | tmds_clk_n, 10 | tmds_clk_p, 11 | tmds_d_n, 12 | tmds_d_p 13 | ); 14 | input sys_clk; 15 | input sys_resetn; 16 | output wire tmds_clk_n; 17 | output wire tmds_clk_p; 18 | output wire [2:0] tmds_d_n; 19 | output wire [2:0] tmds_d_p; 20 | 21 | wire [2:0] tmds; 22 | wire clk_pixel; 23 | wire clk_pixel_x5; 24 | wire pll_lock; 25 | 26 | wire clk_data; 27 | 28 | // 475 MHz, maximum that works with the primer 25K 29 | // 475/5 = 95 MHz 30 | // Data PLL output is 89.0625 MHz 31 | 32 | PLLA #( 33 | .FCLKIN ("50"), 34 | .IDIV_SEL (2), 35 | .FBDIV_SEL (1), 36 | .CLKFB_SEL ("INTERNAL"), 37 | .ODIV0_SEL (3), 38 | .ODIV0_FRAC_SEL (0), 39 | .ODIV1_SEL (16), 40 | .ODIV2_SEL (8), 41 | .ODIV3_SEL (8), 42 | .ODIV4_SEL (8), 43 | .ODIV5_SEL (8), 44 | .ODIV6_SEL (8), 45 | .MDIV_SEL (57), 46 | .MDIV_FRAC_SEL (0), 47 | .CLKOUT0_EN ("TRUE"), 48 | .CLKOUT1_EN ("TRUE"), 49 | .CLKOUT2_EN ("FALSE"), 50 | .CLKOUT3_EN ("FALSE"), 51 | .CLKOUT4_EN ("FALSE"), 52 | .CLKOUT5_EN ("FALSE"), 53 | .CLKOUT6_EN ("FALSE"), 54 | .CLKOUT0_DT_DIR (1'b1), 55 | .CLKOUT0_DT_DIR (1'b1), 56 | .CLKOUT1_DT_DIR (1'b1), 57 | .CLKOUT2_DT_DIR (1'b1), 58 | .CLKOUT3_DT_DIR (1'b1), 59 | .CLK0_IN_SEL (1'b0), 60 | .CLK0_OUT_SEL (1'b0), 61 | .CLK1_IN_SEL (1'b0), 62 | .CLK1_OUT_SEL (1'b0), 63 | .CLK2_IN_SEL (1'b0), 64 | .CLK2_OUT_SEL (1'b0), 65 | .CLK3_IN_SEL (1'b0), 66 | .CLK3_OUT_SEL (1'b0), 67 | .CLK4_IN_SEL (2'b00), 68 | .CLK4_OUT_SEL (1'b0), 69 | .CLK5_IN_SEL (1'b0), 70 | .CLK5_OUT_SEL (1'b0), 71 | .CLK6_IN_SEL (1'b0), 72 | .CLK6_OUT_SEL (1'b0), 73 | .CLKOUT0_PE_COARSE (0), 74 | .CLKOUT0_PE_FINE (0), 75 | .CLKOUT1_PE_COARSE (0), 76 | .CLKOUT1_PE_FINE (0), 77 | .CLKOUT2_PE_COARSE (0), 78 | .CLKOUT2_PE_FINE (0), 79 | .CLKOUT3_PE_COARSE (0), 80 | .CLKOUT3_PE_FINE (0), 81 | .CLKOUT4_PE_COARSE (0), 82 | .CLKOUT4_PE_FINE (0), 83 | .CLKOUT5_PE_COARSE (0), 84 | .CLKOUT5_PE_FINE (0), 85 | .CLKOUT6_PE_COARSE (0), 86 | .CLKOUT6_PE_FINE (0), 87 | .DE0_EN ("FALSE"), 88 | .DE1_EN ("FALSE"), 89 | .DE2_EN ("FALSE"), 90 | .DE3_EN ("FALSE"), 91 | .DE4_EN ("FALSE"), 92 | .DE5_EN ("FALSE"), 93 | .DE6_EN ("FALSE"), 94 | .DYN_DPA_EN ("FALSE"), 95 | .DYN_PE0_SEL ("FALSE"), 96 | .DYN_PE1_SEL ("FALSE"), 97 | .DYN_PE2_SEL ("FALSE"), 98 | .DYN_PE3_SEL ("FALSE"), 99 | .DYN_PE4_SEL ("FALSE"), 100 | .DYN_PE5_SEL ("FALSE"), 101 | .DYN_PE6_SEL ("FALSE"), 102 | .RESET_I_EN ("FALSE"), 103 | .RESET_O_EN ("FALSE"), 104 | .ICP_SEL (6'bXXXXXX), 105 | .LPF_RES (3'bXXX), 106 | .LPF_CAP (2'b00), 107 | .SSC_EN ("FALSE"), 108 | .CLKOUT0_DT_STEP (0), 109 | .CLKOUT1_DT_STEP (0), 110 | .CLKOUT2_DT_STEP (0), 111 | .CLKOUT3_DT_STEP (0) 112 | ) pll ( 113 | .LOCK(pll_lock), 114 | .CLKOUT0(clk_pixel_x5), 115 | .CLKOUT1(clk_data), 116 | .CLKIN(sys_clk), 117 | .CLKFB(1'b0), 118 | .RESET(1'b0), 119 | .PLLPWD(1'b0), 120 | .RESET_I(1'b0), 121 | .RESET_O(1'b0), 122 | .PSSEL(3'b0), 123 | .PSDIR(1'b0), 124 | .PSPULSE(1'b0), 125 | .SSCPOL(1'b0), 126 | .SSCON(1'b0), 127 | .SSCMDSEL(7'b0), 128 | .SSCMDSEL_FRAC(3'b0), 129 | .MDCLK(1'b0), 130 | .MDOPC(2'b0), 131 | .MDAINC(1'b0), 132 | .MDWDI(8'b0) 133 | ); 134 | 135 | CLKDIV #( 136 | .DIV_MODE(5) 137 | ) div_5 ( 138 | .CLKOUT(clk_pixel), 139 | .HCLKIN(clk_pixel_x5), 140 | .RESETN(1'b1), 141 | .CALIB(1'b0) 142 | ); 143 | 144 | reg [15:0] counter = 16'h0000; 145 | reg [15:0] fifo_in; 146 | wire write_enable; 147 | wire [15:0] fifo_out; 148 | wire fifo_empty; 149 | wire fifo_aempty; 150 | wire Full_o; 151 | 152 | wire FifoHalfFull; 153 | wire FifoFull; 154 | 155 | wire fifo_rd_en_i; 156 | async_fifo #( 157 | .DSIZE(16), 158 | .ASIZE($clog2(16384)), // 3 + (1982 * 4) = 7931 => at least 8K entries to buffer 4 lines during VSYNC 159 | .FALLTHROUGH("FALSE") 160 | ) fifo ( 161 | .wclk(clk_data), 162 | .wrst_n(pll_lock), 163 | .winc(write_enable), 164 | .wdata(fifo_in), 165 | .wfull(FifoFull), 166 | .awfull(FifoHalfFull), 167 | .rclk(clk_pixel), 168 | .rrst_n(pll_lock), 169 | .rinc(fifo_rd_en_i), 170 | .rdata(fifo_out), 171 | .rempty(fifo_empty), 172 | .arempty(fifo_aempty) 173 | ); 174 | 175 | hsdaoh_core hsdaoh ( 176 | .rstn(pll_lock), 177 | .tmds_clk_n(tmds_clk_n), 178 | .tmds_clk_p(tmds_clk_p), 179 | .tmds_d_n(tmds_d_n), 180 | .tmds_d_p(tmds_d_p), 181 | .clk_pixel_x5(clk_pixel_x5), 182 | .clk_pixel(clk_pixel), 183 | .fifo_empty(fifo_empty), 184 | .fifo_aempty(fifo_aempty), 185 | .fifo_read_en(fifo_rd_en_i), 186 | .data_in(fifo_out) 187 | ); 188 | 189 | assign write_enable = 1'b1; 190 | 191 | always @(posedge clk_data) begin 192 | fifo_in <= counter[15:0]; 193 | counter <= counter + 1'b1; 194 | end 195 | endmodule 196 | --------------------------------------------------------------------------------