Skip to content

Instantly share code, notes, and snippets.

@Martoni
Created March 4, 2022 07:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Martoni/2b0c1cea81e7cbd81fb2feec6c12a5ed to your computer and use it in GitHub Desktop.
Save Martoni/2b0c1cea81e7cbd81fb2feec6c12a5ed to your computer and use it in GitHub Desktop.
GbHDMI project generated by Chisel GbHdmi module. With Gowin synthesis error
//
//Written by GowinSynthesis
//Product Version "GowinSynthesis V1.9.7.02Beta"
//Tue Jun 01 10:14:01 2021
//Source file index table:
//file0 "\D:/Gowin/Gowin_V1.9.7.02Beta/IDE/ipcore/DVI_TX/data/dvi_tx_top.v"
//file1 "\D:/Gowin/Gowin_V1.9.7.02Beta/IDE/ipcore/DVI_TX/data/rgb2dvi.vp"
`timescale 100 ps/100 ps
`pragma protect begin_protected
`pragma protect version=1
`pragma protect author="default"
`pragma protect author_info="default"
`pragma protect encrypt_agent="Synplify encryptP1735.pl"
`pragma protect encrypt_agent_info="Synplify encryptP1735.pl Version 1.1"
`pragma protect encoding=(enctype="base64", line_length=76, bytes=256)
`pragma protect key_keyowner="Synplicity",key_keyname="SYNP05_001",key_method="rsa"
`pragma protect key_block
vCzPjN0rWCxZX0lx0f6TqMe/+RARRhmqR6MxeSP6S5yYqiXXuid43DQQo5VVRJp2QFGcKNKyQ9JY
98Nvth83eWjAN+FjzX99mNuSryqyOzWvQ5Nxgbd7MwXstaBIJrjBsEvhy49tU5DMoOn9G1NNKOE7
tqjFGjPV/3tr7+07xBcpCTc/Z8c0eHzRcHB7coF+GngSG58fbnPtvkrh0LbeseBpfiRyaHJaEc12
H+HtY6chZZPyShxowxEE8Mepn446D3AT0WKuMVBeeV6GBKOIncho2/dNR7iri4xV3wxuoYSxX17t
zM9WMmJEKWpI3cjwdbsG15nmf9h9diSQEDQEgQ==
`pragma protect encoding=(enctype="base64", line_length=76, bytes=256)
`pragma protect key_keyowner="GoWin",key_keyname="GoWin001",key_method="rsa"
`pragma protect key_block
ZEsvWrOiLBL+b4ys/Kh1O73FDkDlfWuIgjifGeuBDiO882x9yQWAVMbnNKVR8mN+1KgxwaoJj/3R
K2wCww/3Ot2nPhSUEEZM0lveqERO74NC+H69fy3hCXVI4hsJe7wRYySLUSEcoNPBe/zN6FT8bKvb
cR8r0JwANSb+mLfa2jIzmxhzanWDumt5UUAvFRBA46JlwKawQBX+FzJhfTxMrpOgmjqWdJRfHezE
Khe2F7E2VXCPISyNZSPWgqrf7wnWUabmUghgQe6q9nq09vgto54ol1jqXF2grglwODKr+Udo0fi4
ojqXpxhy19b4qRG+dq3KfyKD47NABlMfe6YYzA==
`pragma protect encoding=(enctype="base64", line_length=76, bytes=57376)
`pragma protect data_keyowner="default-ip-vendor"
`pragma protect data_keyname="default-ip-key"
`pragma protect data_method="aes128-cbc"
`pragma protect data_block
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
`pragma protect end_protected
module DVI_TX_Top (
I_rst_n,
I_serial_clk,
I_rgb_clk,
I_rgb_vs,
I_rgb_hs,
I_rgb_de,
I_rgb_r,
I_rgb_g,
I_rgb_b,
O_tmds_clk_p,
O_tmds_clk_n,
O_tmds_data_p,
O_tmds_data_n
)
;
input I_rst_n;
input I_serial_clk;
input I_rgb_clk;
input I_rgb_vs;
input I_rgb_hs;
input I_rgb_de;
input [7:0] I_rgb_r;
input [7:0] I_rgb_g;
input [7:0] I_rgb_b;
output O_tmds_clk_p;
output O_tmds_clk_n;
output [2:0] O_tmds_data_p;
output [2:0] O_tmds_data_n;
wire VCC;
wire GND;
\~rgb2dvi.DVI_TX_Top rgb2dvi_inst (
.I_rgb_clk(I_rgb_clk),
.I_serial_clk(I_serial_clk),
.I_rst_n(I_rst_n),
.I_rgb_de(I_rgb_de),
.I_rgb_vs(I_rgb_vs),
.I_rgb_hs(I_rgb_hs),
.I_rgb_r(I_rgb_r[7:0]),
.I_rgb_g(I_rgb_g[7:0]),
.I_rgb_b(I_rgb_b[7:0]),
.O_tmds_clk_p(O_tmds_clk_p),
.O_tmds_clk_n(O_tmds_clk_n),
.O_tmds_data_p(O_tmds_data_p[2:0]),
.O_tmds_data_n(O_tmds_data_n[2:0])
);
VCC VCC_cZ (
.V(VCC)
);
GND GND_cZ (
.G(GND)
);
GSR GSR (
.GSRI(VCC)
);
endmodule /* DVI_TX_Top */
//Copyright (C)2014-2020 Gowin Semiconductor Corporation.
//All rights reserved.
//File Title: Physical Constraints file
//GOWIN Version: 1.9.7.01Beta
//Part Number: GW1NSR-LV4CQN48PC7/I6
//Device: GW1NSR-4C
//Created Time: Fri 06 11 14:54:37 2021
IO_LOC "O_tmds_clk_p" 28,27;
IO_PORT "O_tmds_clk_p" PULL_MODE=NONE DRIVE=3.5;
IO_LOC "O_tmds_data_0_p" 30,29;
IO_PORT "O_tmds_data_0_p" PULL_MODE=NONE DRIVE=3.5;
IO_LOC "O_tmds_data_1_p" 32,31;
IO_PORT "O_tmds_data_1_p" PULL_MODE=NONE DRIVE=3.5;
IO_LOC "O_tmds_data_2_p" 35,34;
IO_PORT "O_tmds_data_2_p" PULL_MODE=NONE DRIVE=3.5;
IO_LOC "O_led[0]" 10;
IO_PORT "O_led[0]" IO_TYPE=LVCMOS33 PULL_MODE=NONE DRIVE=8;
IO_LOC "I_reset_n" 14;
IO_PORT "I_reset_n" PULL_MODE=UP;
IO_LOC "I_clk" 45;
IO_PORT "I_clk" IO_TYPE=LVCMOS33 PULL_MODE=UP;
// Gameboy video pinout
IO_PORT "gb_hsync" PULL_MODE=DOWN;
IO_LOC "gb_hsync" 43;
IO_PORT "gb_vsync" PULL_MODE=DOWN;
IO_LOC "gb_vsync" 39;
IO_PORT "gb_clk" PULL_MODE=DOWN;
IO_LOC "gb_clk" 40;
IO_PORT "gb_data[0]" PULL_MODE=DOWN;
IO_LOC "gb_data[0]" 41;
IO_PORT "gb_data[1]" PULL_MODE=DOWN;
IO_LOC "gb_data[1]" 42;
// Gameboy pad pinout
IO_PORT "gbpad_a" PULL_MODE=DOWN;
IO_PORT "gbpad_b" PULL_MODE=DOWN;
IO_PORT "gbpad_select" PULL_MODE=DOWN;
IO_PORT "gbpad_start" PULL_MODE=DOWN;
IO_PORT "gbpad_right" PULL_MODE=DOWN;
IO_PORT "gbpad_left" PULL_MODE=DOWN;
IO_PORT "gbpad_up" PULL_MODE=DOWN;
IO_PORT "gbpad_down" PULL_MODE=DOWN;
IO_LOC "gbpad_a" 16;
IO_LOC "gbpad_b" 13;
IO_LOC "gbpad_select" 17;
IO_LOC "gbpad_start" 18;
IO_LOC "gbpad_right" 19;
IO_LOC "gbpad_left" 20;
IO_LOC "gbpad_up" 21;
IO_LOC "gbpad_down" 22;
// SNES keypad pinout
IO_PORT "snes_dclock" PULL_MODE=DOWN;
IO_PORT "snes_dlatch" PULL_MODE=DOWN;
IO_PORT "snes_sdata" PULL_MODE=DOWN;
IO_LOC "snes_dclock" 47;
IO_LOC "snes_dlatch" 48;
IO_LOC "snes_sdata" 1;
//Copyright (C)2014-2021 GOWIN Semiconductor Corporation.
//All rights reserved.
//File Title: Timing Constraints file
//GOWIN Version: 1.9.7.02 Beta
//Created Time: 2021-06-01 10:34:02
create_clock -name I_clk -period 37.037 -waveform {0 18.518} [get_ports {I_clk}] -add
create_clock -name serial_clk -period 2.694 -waveform {0 1.347} [get_nets {tmdsPllvr_clkout}] -add
create_clock -name pix_clk -period 13.468 -waveform {0 6.734} [get_nets {clkDiv_CLKOUT}] -add
//Copyright (C)2014-2020 Gowin Semiconductor Corporation.
//All rights reserved.
//File Title: IP file
//GOWIN Version: V1.9.7.01Beta
//Part Number: GW1NSR-LV4CQN48PC7/I6
//Device: GW1NSR-4C
//Created Time: Tue Nov 03 14:39:26 2020
module TMDS_PLLVR (clkout, lock, clkoutd, clkin);
output clkout;
output lock;
output clkoutd;
input clkin;
wire clkoutp_o;
wire clkoutd3_o;
wire gw_vcc;
wire gw_gnd;
assign gw_vcc = 1'b1;
assign gw_gnd = 1'b0;
PLLVR pllvr_inst (
.CLKOUT(clkout),
.LOCK(lock),
.CLKOUTP(clkoutp_o),
.CLKOUTD(clkoutd),
.CLKOUTD3(clkoutd3_o),
.RESET(gw_gnd),
.RESET_P(gw_gnd),
.CLKIN(clkin),
.CLKFB(gw_gnd),
.FBDSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
.IDSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
.ODSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
.PSDA({gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
.DUTYDA({gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
.FDLY({gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
.VREN(gw_vcc)
);
defparam pllvr_inst.FCLKIN = "27";
defparam pllvr_inst.DYN_IDIV_SEL = "false";
defparam pllvr_inst.IDIV_SEL = 3;
defparam pllvr_inst.DYN_FBDIV_SEL = "false";
defparam pllvr_inst.FBDIV_SEL = 54;
defparam pllvr_inst.DYN_ODIV_SEL = "false";
defparam pllvr_inst.ODIV_SEL = 2;
defparam pllvr_inst.PSDA_SEL = "0000";
defparam pllvr_inst.DYN_DA_EN = "false";
defparam pllvr_inst.DUTYDA_SEL = "1000";
defparam pllvr_inst.CLKOUT_FT_DIR = 1'b1;
defparam pllvr_inst.CLKOUTP_FT_DIR = 1'b1;
defparam pllvr_inst.CLKOUT_DLY_STEP = 0;
defparam pllvr_inst.CLKOUTP_DLY_STEP = 0;
defparam pllvr_inst.CLKFB_SEL = "internal";
defparam pllvr_inst.CLKOUT_BYPASS = "false";
defparam pllvr_inst.CLKOUTP_BYPASS = "false";
defparam pllvr_inst.CLKOUTD_BYPASS = "false";
defparam pllvr_inst.DYN_SDIV_SEL = 30;
defparam pllvr_inst.CLKOUTD_SRC = "CLKOUT";
defparam pllvr_inst.CLKOUTD3_SRC = "CLKOUT";
defparam pllvr_inst.DEVICE = "GW1NSR-4C";
endmodule //TMDS_PLLVR
module ChisNesPad(
input clock,
input reset,
output io_dclock,
output io_dlatch,
input io_sdata,
output io_data_valid,
output [15:0] io_data_bits
);
`ifdef RANDOMIZE_REG_INIT
reg [31:0] _RAND_0;
reg [31:0] _RAND_1;
reg [31:0] _RAND_2;
reg [31:0] _RAND_3;
reg [31:0] _RAND_4;
reg [31:0] _RAND_5;
reg [31:0] _RAND_6;
reg [31:0] _RAND_7;
reg [31:0] _RAND_8;
`endif // RANDOMIZE_REG_INIT
reg [14:0] countReg; // @[chisnespad.scala 23:25]
reg fallReg; // @[chisnespad.scala 24:24]
reg riseReg; // @[chisnespad.scala 25:24]
reg [4:0] regCount; // @[chisnespad.scala 28:25]
reg [15:0] padReg; // @[chisnespad.scala 29:23]
reg [2:0] stateReg; // @[chisnespad.scala 34:25]
reg validReg; // @[chisnespad.scala 35:25]
wire _T_5 = countReg >= 15'h6978; // @[chisnespad.scala 41:19]
wire _T_6 = countReg == 15'h34bc; // @[chisnespad.scala 44:25]
wire [14:0] _countReg_T_1 = countReg + 15'h1; // @[chisnespad.scala 46:28]
wire [14:0] _GEN_1 = countReg == 15'h34bc ? _countReg_T_1 : _countReg_T_1; // @[chisnespad.scala 44:44 46:16 48:16]
wire [14:0] _GEN_2 = countReg >= 15'h6978 ? 15'h0 : _GEN_1; // @[chisnespad.scala 41:33 42:16]
wire _GEN_4 = countReg >= 15'h6978 ? 1'h0 : _T_6; // @[chisnespad.scala 39:11 41:33]
wire [14:0] _GEN_5 = stateReg == 3'h2 | stateReg == 3'h1 | stateReg == 3'h4 ? _GEN_2 : countReg; // @[chisnespad.scala 23:25 40:73]
wire _GEN_6 = (stateReg == 3'h2 | stateReg == 3'h1 | stateReg == 3'h4) & _T_5; // @[chisnespad.scala 38:11 40:73]
wire _GEN_7 = (stateReg == 3'h2 | stateReg == 3'h1 | stateReg == 3'h4) & _GEN_4; // @[chisnespad.scala 39:11 40:73]
wire [4:0] _regCount_T_1 = regCount - 5'h1; // @[chisnespad.scala 54:28]
wire [15:0] _padReg_T_1 = {padReg[14:0],io_sdata}; // @[chisnespad.scala 55:39]
wire [2:0] _GEN_13 = riseReg ? 3'h1 : stateReg; // @[chisnespad.scala 75:20 76:18 34:25]
wire [2:0] _GEN_14 = regCount != 5'h0 ? 3'h2 : 3'h3; // @[chisnespad.scala 82:31 83:20 85:20]
wire [2:0] _GEN_15 = fallReg ? _GEN_14 : stateReg; // @[chisnespad.scala 81:20 34:25]
wire [2:0] _GEN_16 = 3'h3 == stateReg ? 3'h0 : stateReg; // @[chisnespad.scala 61:19 90:16 34:25]
wire [2:0] _GEN_18 = 3'h1 == stateReg ? _GEN_15 : _GEN_16; // @[chisnespad.scala 61:19]
wire _GEN_19 = 3'h1 == stateReg ? 1'h0 : 3'h3 == stateReg; // @[chisnespad.scala 60:12 61:19]
reg io_dclock_REG; // @[chisnespad.scala 95:23]
reg io_dlatch_REG; // @[chisnespad.scala 96:23]
assign io_dclock = io_dclock_REG; // @[chisnespad.scala 95:13]
assign io_dlatch = io_dlatch_REG; // @[chisnespad.scala 96:13]
assign io_data_valid = validReg; // @[chisnespad.scala 98:17]
assign io_data_bits = padReg; // @[chisnespad.scala 97:16]
always @(posedge clock) begin
if (reset) begin // @[chisnespad.scala 23:25]
countReg <= 15'h0; // @[chisnespad.scala 23:25]
end else if (3'h0 == stateReg) begin // @[chisnespad.scala 61:19]
if (~io_data_valid) begin // @[chisnespad.scala 64:44]
countReg <= 15'h0; // @[chisnespad.scala 66:18]
end else begin
countReg <= _GEN_5;
end
end else begin
countReg <= _GEN_5;
end
if (reset) begin // @[chisnespad.scala 24:24]
fallReg <= 1'h0; // @[chisnespad.scala 24:24]
end else begin
fallReg <= _GEN_7;
end
if (reset) begin // @[chisnespad.scala 25:24]
riseReg <= 1'h0; // @[chisnespad.scala 25:24]
end else begin
riseReg <= _GEN_6;
end
if (reset) begin // @[chisnespad.scala 28:25]
regCount <= 5'h11; // @[chisnespad.scala 28:25]
end else if (3'h0 == stateReg) begin // @[chisnespad.scala 61:19]
regCount <= 5'h11; // @[chisnespad.scala 63:16]
end else if (riseReg) begin // @[chisnespad.scala 53:17]
regCount <= _regCount_T_1; // @[chisnespad.scala 54:16]
end
if (reset) begin // @[chisnespad.scala 29:23]
padReg <= 16'h0; // @[chisnespad.scala 29:23]
end else if (riseReg) begin // @[chisnespad.scala 53:17]
padReg <= _padReg_T_1; // @[chisnespad.scala 55:14]
end
if (reset) begin // @[chisnespad.scala 34:25]
stateReg <= 3'h0; // @[chisnespad.scala 34:25]
end else if (3'h0 == stateReg) begin // @[chisnespad.scala 61:19]
if (~io_data_valid) begin // @[chisnespad.scala 64:44]
stateReg <= 3'h4; // @[chisnespad.scala 65:18]
end
end else if (3'h4 == stateReg) begin // @[chisnespad.scala 61:19]
if (riseReg) begin // @[chisnespad.scala 70:20]
stateReg <= 3'h2; // @[chisnespad.scala 71:18]
end
end else if (3'h2 == stateReg) begin // @[chisnespad.scala 61:19]
stateReg <= _GEN_13;
end else begin
stateReg <= _GEN_18;
end
if (reset) begin // @[chisnespad.scala 35:25]
validReg <= 1'h0; // @[chisnespad.scala 35:25]
end else if (3'h0 == stateReg) begin // @[chisnespad.scala 61:19]
validReg <= 1'h0; // @[chisnespad.scala 60:12]
end else if (3'h4 == stateReg) begin // @[chisnespad.scala 61:19]
validReg <= 1'h0; // @[chisnespad.scala 60:12]
end else if (3'h2 == stateReg) begin // @[chisnespad.scala 61:19]
validReg <= 1'h0; // @[chisnespad.scala 60:12]
end else begin
validReg <= _GEN_19;
end
io_dclock_REG <= stateReg == 3'h1; // @[chisnespad.scala 95:33]
io_dlatch_REG <= stateReg == 3'h4; // @[chisnespad.scala 96:33]
end
// Register and memory initialization
`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE_MEM_INIT
integer initvar;
`endif
`ifndef SYNTHESIS
`ifdef FIRRTL_BEFORE_INITIAL
`FIRRTL_BEFORE_INITIAL
`endif
initial begin
`ifdef RANDOMIZE
`ifdef INIT_RANDOM
`INIT_RANDOM
`endif
`ifndef VERILATOR
`ifdef RANDOMIZE_DELAY
#`RANDOMIZE_DELAY begin end
`else
#0.002 begin end
`endif
`endif
`ifdef RANDOMIZE_REG_INIT
_RAND_0 = {1{`RANDOM}};
countReg = _RAND_0[14:0];
_RAND_1 = {1{`RANDOM}};
fallReg = _RAND_1[0:0];
_RAND_2 = {1{`RANDOM}};
riseReg = _RAND_2[0:0];
_RAND_3 = {1{`RANDOM}};
regCount = _RAND_3[4:0];
_RAND_4 = {1{`RANDOM}};
padReg = _RAND_4[15:0];
_RAND_5 = {1{`RANDOM}};
stateReg = _RAND_5[2:0];
_RAND_6 = {1{`RANDOM}};
validReg = _RAND_6[0:0];
_RAND_7 = {1{`RANDOM}};
io_dclock_REG = _RAND_7[0:0];
_RAND_8 = {1{`RANDOM}};
io_dlatch_REG = _RAND_8[0:0];
`endif // RANDOMIZE_REG_INIT
`endif // RANDOMIZE
end // initial
`ifdef FIRRTL_AFTER_INITIAL
`FIRRTL_AFTER_INITIAL
`endif
`endif // SYNTHESIS
endmodule
module GbWrite(
input clock,
input reset,
input io_gb_vsync,
input io_gb_clk,
input [1:0] io_gb_data,
output [14:0] io_Maddr,
output [1:0] io_Mdata,
output io_Mwrite
);
`ifdef RANDOMIZE_REG_INIT
reg [31:0] _RAND_0;
reg [31:0] _RAND_1;
reg [31:0] _RAND_2;
reg [31:0] _RAND_3;
`endif // RANDOMIZE_REG_INIT
reg [14:0] pixelCount; // @[gbwrite.scala 27:27]
reg [1:0] pixel; // @[gbwrite.scala 31:22]
reg REG; // @[gbinclude.scala 24:42]
wire _T_1 = io_gb_vsync & ~REG; // @[gbinclude.scala 24:31]
reg REG_2; // @[gbinclude.scala 25:43]
wire _T_5 = ~io_gb_clk & REG_2; // @[gbinclude.scala 25:33]
wire [14:0] _pixelCount_T_1 = pixelCount + 15'h1; // @[gbwrite.scala 49:30]
assign io_Maddr = pixelCount; // @[gbwrite.scala 53:12]
assign io_Mdata = pixel; // @[gbwrite.scala 55:12]
assign io_Mwrite = ~io_gb_clk & REG_2; // @[gbinclude.scala 25:33]
always @(posedge clock) begin
if (reset) begin // @[gbwrite.scala 27:27]
pixelCount <= 15'h5a00; // @[gbwrite.scala 27:27]
end else if (_T_5) begin // @[gbwrite.scala 48:27]
pixelCount <= _pixelCount_T_1; // @[gbwrite.scala 49:16]
end else if (_T_1) begin // @[gbwrite.scala 34:28]
pixelCount <= 15'h0; // @[gbwrite.scala 37:16]
end
if (reset) begin // @[gbwrite.scala 31:22]
pixel <= 2'h0; // @[gbwrite.scala 31:22]
end else begin
pixel <= io_gb_data; // @[gbwrite.scala 54:9]
end
REG <= io_gb_vsync; // @[gbinclude.scala 24:42]
REG_2 <= io_gb_clk; // @[gbinclude.scala 25:43]
end
// Register and memory initialization
`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE_MEM_INIT
integer initvar;
`endif
`ifndef SYNTHESIS
`ifdef FIRRTL_BEFORE_INITIAL
`FIRRTL_BEFORE_INITIAL
`endif
initial begin
`ifdef RANDOMIZE
`ifdef INIT_RANDOM
`INIT_RANDOM
`endif
`ifndef VERILATOR
`ifdef RANDOMIZE_DELAY
#`RANDOMIZE_DELAY begin end
`else
#0.002 begin end
`endif
`endif
`ifdef RANDOMIZE_REG_INIT
_RAND_0 = {1{`RANDOM}};
pixelCount = _RAND_0[14:0];
_RAND_1 = {1{`RANDOM}};
pixel = _RAND_1[1:0];
_RAND_2 = {1{`RANDOM}};
REG = _RAND_2[0:0];
_RAND_3 = {1{`RANDOM}};
REG_2 = _RAND_3[0:0];
`endif // RANDOMIZE_REG_INIT
`endif // RANDOMIZE
end // initial
`ifdef FIRRTL_AFTER_INITIAL
`FIRRTL_AFTER_INITIAL
`endif
`endif // SYNTHESIS
endmodule
module HVSync(
input clock,
input reset,
output io_hsync,
output io_vsync,
output io_display_on,
output [10:0] io_hpos,
output [9:0] io_vpos
);
`ifdef RANDOMIZE_REG_INIT
reg [31:0] _RAND_0;
reg [31:0] _RAND_1;
`endif // RANDOMIZE_REG_INIT
wire [10:0] H_SYNC_END = 11'h596 - 11'h1; // @[hvsync.scala 51:51]
wire [10:0] H_MAX = 11'h672 - 11'h1; // @[hvsync.scala 52:60]
wire [9:0] V_SYNC_END = 10'h2e9 - 10'h1; // @[hvsync.scala 54:52]
wire [9:0] V_MAX = 10'h2ee - 10'h1; // @[hvsync.scala 55:60]
reg [10:0] hpos_count; // @[hvsync.scala 62:27]
reg [9:0] vpos_count; // @[hvsync.scala 63:27]
wire _io_hsync_T_1 = hpos_count <= H_SYNC_END; // @[hvsync.scala 71:29]
wire hpos_max = hpos_count == H_MAX; // @[hvsync.scala 73:29]
wire vpos_max = vpos_count == V_MAX; // @[hvsync.scala 74:29]
wire [10:0] _hpos_count_T_1 = hpos_count + 11'h1; // @[hvsync.scala 76:28]
wire _io_vsync_T_1 = vpos_count <= V_SYNC_END; // @[hvsync.scala 83:27]
wire [9:0] _vpos_count_T_1 = vpos_count + 10'h1; // @[hvsync.scala 85:30]
assign io_hsync = ~(hpos_count >= 11'h56e & _io_hsync_T_1); // @[hvsync.scala 70:15]
assign io_vsync = ~(vpos_count >= 10'h2e4 & _io_vsync_T_1); // @[hvsync.scala 82:15]
assign io_display_on = hpos_count < 11'h500 & vpos_count < 10'h2d0; // @[hvsync.scala 67:45]
assign io_hpos = hpos_count; // @[hvsync.scala 65:11]
assign io_vpos = vpos_count; // @[hvsync.scala 64:11]
always @(posedge clock) begin
if (reset) begin // @[hvsync.scala 62:27]
hpos_count <= 11'h0; // @[hvsync.scala 62:27]
end else if (hpos_max) begin // @[hvsync.scala 77:17]
hpos_count <= 11'h0; // @[hvsync.scala 78:16]
end else begin
hpos_count <= _hpos_count_T_1; // @[hvsync.scala 76:14]
end
if (reset) begin // @[hvsync.scala 63:27]
vpos_count <= 10'h0; // @[hvsync.scala 63:27]
end else if (hpos_max) begin // @[hvsync.scala 84:18]
if (vpos_max) begin // @[hvsync.scala 86:20]
vpos_count <= 10'h0; // @[hvsync.scala 87:18]
end else begin
vpos_count <= _vpos_count_T_1; // @[hvsync.scala 85:16]
end
end
end
// Register and memory initialization
`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE_MEM_INIT
integer initvar;
`endif
`ifndef SYNTHESIS
`ifdef FIRRTL_BEFORE_INITIAL
`FIRRTL_BEFORE_INITIAL
`endif
initial begin
`ifdef RANDOMIZE
`ifdef INIT_RANDOM
`INIT_RANDOM
`endif
`ifndef VERILATOR
`ifdef RANDOMIZE_DELAY
#`RANDOMIZE_DELAY begin end
`else
#0.002 begin end
`endif
`endif
`ifdef RANDOMIZE_REG_INIT
_RAND_0 = {1{`RANDOM}};
hpos_count = _RAND_0[10:0];
_RAND_1 = {1{`RANDOM}};
vpos_count = _RAND_1[9:0];
`endif // RANDOMIZE_REG_INIT
`endif // RANDOMIZE
end // initial
`ifdef FIRRTL_AFTER_INITIAL
`FIRRTL_AFTER_INITIAL
`endif
`endif // SYNTHESIS
endmodule
module MemHdmi(
input clock,
input reset,
output [14:0] io_mem_addr,
input [1:0] io_mem_data,
output io_video_hsync,
output io_video_vsync,
output [7:0] io_video_color_red,
output [7:0] io_video_color_green,
output [7:0] io_video_color_blue,
output io_video_de,
input [1:0] io_pattern_num
);
`ifdef RANDOMIZE_REG_INIT
reg [31:0] _RAND_0;
reg [31:0] _RAND_1;
reg [31:0] _RAND_2;
reg [31:0] _RAND_3;
`endif // RANDOMIZE_REG_INIT
wire hv_sync_clock; // @[memhdmi.scala 32:25]
wire hv_sync_reset; // @[memhdmi.scala 32:25]
wire hv_sync_io_hsync; // @[memhdmi.scala 32:25]
wire hv_sync_io_vsync; // @[memhdmi.scala 32:25]
wire hv_sync_io_display_on; // @[memhdmi.scala 32:25]
wire [10:0] hv_sync_io_hpos; // @[memhdmi.scala 32:25]
wire [9:0] hv_sync_io_vpos; // @[memhdmi.scala 32:25]
wire [10:0] _xpos_T_1 = 11'h500 - 11'h280; // @[memhdmi.scala 40:35]
wire [10:0] xpos = _xpos_T_1 / 2'h2; // @[memhdmi.scala 40:54]
wire [9:0] _ypos_T_1 = 10'h2d0 - 10'h240; // @[memhdmi.scala 41:35]
wire [9:0] ypos = _ypos_T_1 / 2'h2; // @[memhdmi.scala 41:55]
wire gb_display = hv_sync_io_display_on & hv_sync_io_vpos > ypos & hv_sync_io_hpos > xpos; // @[memhdmi.scala 43:71]
reg [7:0] gblines; // @[memhdmi.scala 45:26]
reg [7:0] gbcols; // @[memhdmi.scala 46:25]
reg [14:0] gbpix; // @[memhdmi.scala 47:24]
reg [1:0] state; // @[memhdmi.scala 51:24]
wire _T_3 = gblines <= 8'h8f; // @[memhdmi.scala 61:22]
wire _T_4 = gbcols >= 8'h9f & _T_3; // @[memhdmi.scala 60:40]
wire [1:0] _GEN_1 = _T_4 ? 2'h2 : state; // @[memhdmi.scala 61:41 62:17 51:24]
wire [1:0] _GEN_3 = gblines < 8'h90 ? 2'h1 : state; // @[memhdmi.scala 73:38 74:19 51:24]
wire [1:0] _GEN_4 = ~hv_sync_io_hsync ? _GEN_3 : state; // @[memhdmi.scala 51:24 72:32]
wire [1:0] _GEN_5 = ~hv_sync_io_vsync ? 2'h0 : _GEN_4; // @[memhdmi.scala 77:32 78:17]
wire [1:0] _GEN_6 = 2'h3 == state ? _GEN_5 : state; // @[memhdmi.scala 53:19 51:24]
wire [10:0] _GEN_0 = hv_sync_io_hpos % 11'h4; // @[memhdmi.scala 84:39]
wire [2:0] _newgbline_T = _GEN_0[2:0]; // @[memhdmi.scala 84:39]
wire newgbline = _newgbline_T == 3'h3; // @[memhdmi.scala 84:49]
wire [9:0] _GEN_2 = hv_sync_io_vpos % 10'h4; // @[memhdmi.scala 85:38]
wire [2:0] _newgbcol_T = _GEN_2[2:0]; // @[memhdmi.scala 85:38]
wire newgbcol = _newgbcol_T == 3'h3; // @[memhdmi.scala 85:48]
wire [14:0] _gbpix_T_1 = gbpix + 15'h1; // @[memhdmi.scala 89:24]
wire [7:0] _gbcols_T_1 = gbcols + 8'h1; // @[memhdmi.scala 90:26]
wire [14:0] _GEN_10 = state == 2'h1 & newgbline ? _gbpix_T_1 : gbpix; // @[memhdmi.scala 88:44 89:15 47:24]
wire [7:0] _GEN_11 = state == 2'h1 & newgbline ? _gbcols_T_1 : gbcols; // @[memhdmi.scala 88:44 90:16 46:25]
wire [7:0] _gblines_T_1 = gblines + 8'h1; // @[memhdmi.scala 94:32]
wire [14:0] _gbpix_T_5 = gbpix - 15'ha0; // @[memhdmi.scala 97:28]
wire [14:0] _gbpix_T_7 = _gbpix_T_5 + 15'h1; // @[memhdmi.scala 97:40]
wire [7:0] _GEN_12 = newgbcol ? _gblines_T_1 : gblines; // @[memhdmi.scala 93:23 94:21 45:26]
wire [14:0] _GEN_13 = newgbcol ? _gbpix_T_1 : _gbpix_T_7; // @[memhdmi.scala 93:23 95:19 97:19]
wire _GEN_74 = 2'h0 == io_pattern_num; // @[gbhdmi.scala 23:{34,34}]
wire _GEN_75 = 2'h1 == io_mem_data; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_24 = 2'h0 == io_pattern_num & 2'h1 == io_mem_data ? 6'hc : 6'h26; // @[gbhdmi.scala 23:{34,34}]
wire _GEN_77 = 2'h2 == io_mem_data; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_25 = 2'h0 == io_pattern_num & 2'h2 == io_mem_data ? 6'h1e : _GEN_24; // @[gbhdmi.scala 23:{34,34}]
wire _GEN_79 = 2'h3 == io_mem_data; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_26 = 2'h0 == io_pattern_num & 2'h3 == io_mem_data ? 6'h3 : _GEN_25; // @[gbhdmi.scala 23:{34,34}]
wire _GEN_80 = 2'h1 == io_pattern_num; // @[gbhdmi.scala 23:{34,34}]
wire _GEN_81 = 2'h0 == io_mem_data; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_27 = 2'h1 == io_pattern_num & 2'h0 == io_mem_data ? 6'h3f : _GEN_26; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_28 = 2'h1 == io_pattern_num & 2'h1 == io_mem_data ? 6'h2a : _GEN_27; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_29 = 2'h1 == io_pattern_num & 2'h2 == io_mem_data ? 6'h15 : _GEN_28; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_30 = 2'h1 == io_pattern_num & 2'h3 == io_mem_data ? 6'h0 : _GEN_29; // @[gbhdmi.scala 23:{34,34}]
wire _GEN_88 = 2'h2 == io_pattern_num; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_31 = 2'h2 == io_pattern_num & 2'h0 == io_mem_data ? 6'h3d : _GEN_30; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_32 = 2'h2 == io_pattern_num & 2'h1 == io_mem_data ? 6'h3e : _GEN_31; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_33 = 2'h2 == io_pattern_num & 2'h2 == io_mem_data ? 6'h31 : _GEN_32; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_34 = 2'h2 == io_pattern_num & 2'h3 == io_mem_data ? 6'h1b : _GEN_33; // @[gbhdmi.scala 23:{34,34}]
wire _GEN_96 = 2'h3 == io_pattern_num; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_35 = 2'h3 == io_pattern_num & 2'h0 == io_mem_data ? 6'h3f : _GEN_34; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_36 = 2'h3 == io_pattern_num & 2'h1 == io_mem_data ? 6'h0 : _GEN_35; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_37 = 2'h3 == io_pattern_num & 2'h2 == io_mem_data ? 6'h0 : _GEN_36; // @[gbhdmi.scala 23:{34,34}]
wire [5:0] _GEN_38 = 2'h3 == io_pattern_num & 2'h3 == io_mem_data ? 6'h0 : _GEN_37; // @[gbhdmi.scala 23:{34,34}]
wire [7:0] io_video_color_retColors_1_red = {_GEN_38,2'h0}; // @[gbhdmi.scala 23:34]
wire [5:0] _GEN_40 = _GEN_74 & _GEN_75 ? 6'h18 : 6'h2f; // @[gbhdmi.scala 24:{36,36}]
wire [5:0] _GEN_41 = _GEN_74 & _GEN_77 ? 6'h27 : _GEN_40; // @[gbhdmi.scala 24:{36,36}]
wire [5:0] _GEN_42 = _GEN_74 & _GEN_79 ? 6'he : _GEN_41; // @[gbhdmi.scala 24:{36,36}]
wire [5:0] _GEN_43 = _GEN_80 & _GEN_81 ? 6'h3f : _GEN_42; // @[gbhdmi.scala 24:{36,36}]
wire [5:0] _GEN_44 = _GEN_80 & _GEN_75 ? 6'h2a : _GEN_43; // @[gbhdmi.scala 24:{36,36}]
wire [5:0] _GEN_45 = _GEN_80 & _GEN_77 ? 6'h15 : _GEN_44; // @[gbhdmi.scala 24:{36,36}]
wire [5:0] _GEN_46 = _GEN_80 & _GEN_79 ? 6'h0 : _GEN_45; // @[gbhdmi.scala 24:{36,36}]
wire [5:0] _GEN_47 = _GEN_88 & _GEN_81 ? 6'h29 : _GEN_46; // @[gbhdmi.scala 24:{36,36}]
wire [5:0] _GEN_48 = _GEN_88 & _GEN_75 ? 6'h13 : _GEN_47; // @[gbhdmi.scala 24:{36,36}]
wire [5:0] _GEN_49 = _GEN_88 & _GEN_77 ? 6'h1 : _GEN_48; // @[gbhdmi.scala 24:{36,36}]
wire [5:0] _GEN_50 = _GEN_88 & _GEN_79 ? 6'h1 : _GEN_49; // @[gbhdmi.scala 24:{36,36}]
wire [5:0] _GEN_51 = _GEN_96 & _GEN_81 ? 6'h3f : _GEN_50; // @[gbhdmi.scala 24:{36,36}]
wire [5:0] _GEN_52 = _GEN_96 & _GEN_75 ? 6'h3f : _GEN_51; // @[gbhdmi.scala 24:{36,36}]
wire [5:0] _GEN_53 = _GEN_96 & _GEN_77 ? 6'h0 : _GEN_52; // @[gbhdmi.scala 24:{36,36}]
wire [5:0] _GEN_54 = _GEN_96 & _GEN_79 ? 6'h0 : _GEN_53; // @[gbhdmi.scala 24:{36,36}]
wire [7:0] io_video_color_retColors_1_green = {_GEN_54,2'h0}; // @[gbhdmi.scala 24:36]
wire [5:0] _GEN_56 = _GEN_74 & _GEN_75 ? 6'hc : 6'h3; // @[gbhdmi.scala 25:{35,35}]
wire [5:0] _GEN_57 = _GEN_74 & _GEN_77 ? 6'h3 : _GEN_56; // @[gbhdmi.scala 25:{35,35}]
wire [5:0] _GEN_58 = _GEN_74 & _GEN_79 ? 6'h3 : _GEN_57; // @[gbhdmi.scala 25:{35,35}]
wire [5:0] _GEN_59 = _GEN_80 & _GEN_81 ? 6'h3f : _GEN_58; // @[gbhdmi.scala 25:{35,35}]
wire [5:0] _GEN_60 = _GEN_80 & _GEN_75 ? 6'h2a : _GEN_59; // @[gbhdmi.scala 25:{35,35}]
wire [5:0] _GEN_61 = _GEN_80 & _GEN_77 ? 6'h15 : _GEN_60; // @[gbhdmi.scala 25:{35,35}]
wire [5:0] _GEN_62 = _GEN_80 & _GEN_79 ? 6'h0 : _GEN_61; // @[gbhdmi.scala 25:{35,35}]
wire [5:0] _GEN_63 = _GEN_88 & _GEN_81 ? 6'h38 : _GEN_62; // @[gbhdmi.scala 25:{35,35}]
wire [5:0] _GEN_64 = _GEN_88 & _GEN_75 ? 6'h33 : _GEN_63; // @[gbhdmi.scala 25:{35,35}]
wire [5:0] _GEN_65 = _GEN_88 & _GEN_77 ? 6'h25 : _GEN_64; // @[gbhdmi.scala 25:{35,35}]
wire [5:0] _GEN_66 = _GEN_88 & _GEN_79 ? 6'h15 : _GEN_65; // @[gbhdmi.scala 25:{35,35}]
wire [5:0] _GEN_67 = _GEN_96 & _GEN_81 ? 6'h3f : _GEN_66; // @[gbhdmi.scala 25:{35,35}]
wire [5:0] _GEN_68 = _GEN_96 & _GEN_75 ? 6'h3f : _GEN_67; // @[gbhdmi.scala 25:{35,35}]
wire [5:0] _GEN_69 = _GEN_96 & _GEN_77 ? 6'h3f : _GEN_68; // @[gbhdmi.scala 25:{35,35}]
wire [5:0] _GEN_70 = _GEN_96 & _GEN_79 ? 6'h0 : _GEN_69; // @[gbhdmi.scala 25:{35,35}]
wire [7:0] io_video_color_retColors_1_blue = {_GEN_70,2'h0}; // @[gbhdmi.scala 25:35]
HVSync hv_sync ( // @[memhdmi.scala 32:25]
.clock(hv_sync_clock),
.reset(hv_sync_reset),
.io_hsync(hv_sync_io_hsync),
.io_vsync(hv_sync_io_vsync),
.io_display_on(hv_sync_io_display_on),
.io_hpos(hv_sync_io_hpos),
.io_vpos(hv_sync_io_vpos)
);
assign io_mem_addr = gbpix; // @[memhdmi.scala 117:18]
assign io_video_hsync = hv_sync_io_hsync; // @[memhdmi.scala 33:20]
assign io_video_vsync = hv_sync_io_vsync; // @[memhdmi.scala 34:20]
assign io_video_color_red = gb_display & state != 2'h3 ? io_video_color_retColors_1_red : 8'h0; // @[memhdmi.scala 111:20 112:42 113:22]
assign io_video_color_green = gb_display & state != 2'h3 ? io_video_color_retColors_1_green : 8'h0; // @[memhdmi.scala 111:20 112:42 113:22]
assign io_video_color_blue = gb_display & state != 2'h3 ? io_video_color_retColors_1_blue : 8'h0; // @[memhdmi.scala 111:20 112:42 113:22]
assign io_video_de = hv_sync_io_display_on; // @[memhdmi.scala 35:20]
assign hv_sync_clock = clock;
assign hv_sync_reset = reset;
always @(posedge clock) begin
if (reset) begin // @[memhdmi.scala 45:26]
gblines <= 8'h0; // @[memhdmi.scala 45:26]
end else if (state == 2'h0) begin // @[memhdmi.scala 102:25]
gblines <= 8'h0; // @[memhdmi.scala 105:15]
end else if (gb_display) begin // @[memhdmi.scala 87:21]
if (state == 2'h2) begin // @[memhdmi.scala 92:30]
gblines <= _GEN_12;
end
end
if (reset) begin // @[memhdmi.scala 46:25]
gbcols <= 8'h0; // @[memhdmi.scala 46:25]
end else if (state == 2'h0) begin // @[memhdmi.scala 102:25]
gbcols <= 8'h0; // @[memhdmi.scala 104:14]
end else if (gb_display) begin // @[memhdmi.scala 87:21]
if (state == 2'h2) begin // @[memhdmi.scala 92:30]
gbcols <= 8'h0; // @[memhdmi.scala 99:16]
end else begin
gbcols <= _GEN_11;
end
end
if (reset) begin // @[memhdmi.scala 47:24]
gbpix <= 15'h0; // @[memhdmi.scala 47:24]
end else if (state == 2'h0) begin // @[memhdmi.scala 102:25]
gbpix <= 15'h0; // @[memhdmi.scala 103:13]
end else if (gb_display) begin // @[memhdmi.scala 87:21]
if (state == 2'h2) begin // @[memhdmi.scala 92:30]
gbpix <= _GEN_13;
end else begin
gbpix <= _GEN_10;
end
end
if (reset) begin // @[memhdmi.scala 51:24]
state <= 2'h0; // @[memhdmi.scala 51:24]
end else if (2'h0 == state) begin // @[memhdmi.scala 53:19]
if (gb_display) begin // @[memhdmi.scala 55:25]
state <= 2'h1; // @[memhdmi.scala 56:17]
end
end else if (2'h1 == state) begin // @[memhdmi.scala 53:19]
if (gblines > 8'h8f) begin // @[memhdmi.scala 64:41]
state <= 2'h3; // @[memhdmi.scala 65:17]
end else begin
state <= _GEN_1;
end
end else if (2'h2 == state) begin // @[memhdmi.scala 53:19]
state <= 2'h3; // @[memhdmi.scala 69:19]
end else begin
state <= _GEN_6;
end
end
// Register and memory initialization
`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE_MEM_INIT
integer initvar;
`endif
`ifndef SYNTHESIS
`ifdef FIRRTL_BEFORE_INITIAL
`FIRRTL_BEFORE_INITIAL
`endif
initial begin
`ifdef RANDOMIZE
`ifdef INIT_RANDOM
`INIT_RANDOM
`endif
`ifndef VERILATOR
`ifdef RANDOMIZE_DELAY
#`RANDOMIZE_DELAY begin end
`else
#0.002 begin end
`endif
`endif
`ifdef RANDOMIZE_REG_INIT
_RAND_0 = {1{`RANDOM}};
gblines = _RAND_0[7:0];
_RAND_1 = {1{`RANDOM}};
gbcols = _RAND_1[7:0];
_RAND_2 = {1{`RANDOM}};
gbpix = _RAND_2[14:0];
_RAND_3 = {1{`RANDOM}};
state = _RAND_3[1:0];
`endif // RANDOMIZE_REG_INIT
`endif // RANDOMIZE
end // initial
`ifdef FIRRTL_AFTER_INITIAL
`FIRRTL_AFTER_INITIAL
`endif
`endif // SYNTHESIS
endmodule
module TMDSEncoder(
input clock,
input reset,
input io_en,
input [1:0] io_ctrl,
input [7:0] io_din,
output [9:0] io_dout
);
`ifdef RANDOMIZE_REG_INIT
reg [31:0] _RAND_0;
reg [31:0] _RAND_1;
`endif // RANDOMIZE_REG_INIT
wire [1:0] _n_one_din_T_8 = io_din[0] + io_din[1]; // @[Bitwise.scala 48:55]
wire [1:0] _n_one_din_T_10 = io_din[2] + io_din[3]; // @[Bitwise.scala 48:55]
wire [2:0] _n_one_din_T_12 = _n_one_din_T_8 + _n_one_din_T_10; // @[Bitwise.scala 48:55]
wire [1:0] _n_one_din_T_14 = io_din[4] + io_din[5]; // @[Bitwise.scala 48:55]
wire [1:0] _n_one_din_T_16 = io_din[6] + io_din[7]; // @[Bitwise.scala 48:55]
wire [2:0] _n_one_din_T_18 = _n_one_din_T_14 + _n_one_din_T_16; // @[Bitwise.scala 48:55]
wire [3:0] n_one_din = _n_one_din_T_12 + _n_one_din_T_18; // @[Bitwise.scala 48:55]
wire [6:0] _xored_res_T_8 = {io_din[7],io_din[6],io_din[5],io_din[4],io_din[3],io_din[2],io_din[1]}; // @[TmdsEncoder.scala 21:65]
wire [5:0] _xored_res_res_T_7 = {_xored_res_T_8[6],_xored_res_T_8[5],_xored_res_T_8[4],_xored_res_T_8[3],
_xored_res_T_8[2],_xored_res_T_8[1]}; // @[TmdsEncoder.scala 21:65]
wire [4:0] _xored_res_res_res_T_6 = {_xored_res_res_T_7[5],_xored_res_res_T_7[4],_xored_res_res_T_7[3],
_xored_res_res_T_7[2],_xored_res_res_T_7[1]}; // @[TmdsEncoder.scala 21:65]
wire [3:0] _xored_res_res_res_res_T_5 = {_xored_res_res_res_T_6[4],_xored_res_res_res_T_6[3],_xored_res_res_res_T_6[2]
,_xored_res_res_res_T_6[1]}; // @[TmdsEncoder.scala 21:65]
wire [2:0] _xored_res_res_res_res_res_T_4 = {_xored_res_res_res_res_T_5[3],_xored_res_res_res_res_T_5[2],
_xored_res_res_res_res_T_5[1]}; // @[TmdsEncoder.scala 21:65]
wire [1:0] _xored_res_res_res_res_res_res_T_3 = {_xored_res_res_res_res_res_T_4[2],_xored_res_res_res_res_res_T_4[1]}; // @[TmdsEncoder.scala 21:65]
wire xored_res_res_res_res_res_res_res = _xored_res_res_res_res_res_res_T_3[1]; // @[TmdsEncoder.scala 21:48]
wire [1:0] _xored_res_res_res_res_res_res_T_7 = {xored_res_res_res_res_res_res_res,xored_res_res_res_res_res_res_res}; // @[TmdsEncoder.scala 22:49]
wire [1:0] _GEN_13 = {{1'd0}, _xored_res_res_res_res_res_res_T_3[0]}; // @[TmdsEncoder.scala 22:30]
wire [1:0] xored_res_res_res_res_res_res = _GEN_13 ^ _xored_res_res_res_res_res_res_T_7; // @[TmdsEncoder.scala 22:30]
wire [2:0] _xored_res_res_res_res_res_T_10 = {xored_res_res_res_res_res_res[0],xored_res_res_res_res_res_res}; // @[TmdsEncoder.scala 22:49]
wire [2:0] _GEN_14 = {{2'd0}, _xored_res_res_res_res_res_T_4[0]}; // @[TmdsEncoder.scala 22:30]
wire [2:0] xored_res_res_res_res_res = _GEN_14 ^ _xored_res_res_res_res_res_T_10; // @[TmdsEncoder.scala 22:30]
wire [3:0] _xored_res_res_res_res_T_13 = {xored_res_res_res_res_res[0],xored_res_res_res_res_res}; // @[TmdsEncoder.scala 22:49]
wire [3:0] _GEN_15 = {{3'd0}, _xored_res_res_res_res_T_5[0]}; // @[TmdsEncoder.scala 22:30]
wire [3:0] xored_res_res_res_res = _GEN_15 ^ _xored_res_res_res_res_T_13; // @[TmdsEncoder.scala 22:30]
wire [4:0] _xored_res_res_res_T_16 = {xored_res_res_res_res[0],xored_res_res_res_res}; // @[TmdsEncoder.scala 22:49]
wire [4:0] _GEN_16 = {{4'd0}, _xored_res_res_res_T_6[0]}; // @[TmdsEncoder.scala 22:30]
wire [4:0] xored_res_res_res = _GEN_16 ^ _xored_res_res_res_T_16; // @[TmdsEncoder.scala 22:30]
wire [5:0] _xored_res_res_T_19 = {xored_res_res_res[0],xored_res_res_res}; // @[TmdsEncoder.scala 22:49]
wire [5:0] _GEN_17 = {{5'd0}, _xored_res_res_T_7[0]}; // @[TmdsEncoder.scala 22:30]
wire [5:0] xored_res_res = _GEN_17 ^ _xored_res_res_T_19; // @[TmdsEncoder.scala 22:30]
wire [6:0] _xored_res_T_22 = {xored_res_res[0],xored_res_res}; // @[TmdsEncoder.scala 22:49]
wire [6:0] _GEN_18 = {{6'd0}, _xored_res_T_8[0]}; // @[TmdsEncoder.scala 22:30]
wire [6:0] xored_res = _GEN_18 ^ _xored_res_T_22; // @[TmdsEncoder.scala 22:30]
wire [7:0] _xored_T_15 = {xored_res[0],xored_res}; // @[TmdsEncoder.scala 22:49]
wire [7:0] _GEN_19 = {{7'd0}, io_din[0]}; // @[TmdsEncoder.scala 22:30]
wire [7:0] _xored_T_16 = _GEN_19 ^ _xored_T_15; // @[TmdsEncoder.scala 22:30]
wire [8:0] xored = {1'h1,_xored_T_16}; // @[TmdsEncoder.scala 25:24]
wire _xnored_res_res_res_res_res_res_T_8 = ~(_xored_res_res_res_res_res_res_T_3[0] ^
xored_res_res_res_res_res_res_res); // @[TmdsEncoder.scala 32:11]
wire [1:0] xnored_res_res_res_res_res_res = {_xnored_res_res_res_res_res_res_T_8,xored_res_res_res_res_res_res_res}; // @[TmdsEncoder.scala 32:52]
wire _xnored_res_res_res_res_res_T_11 = ~(_xored_res_res_res_res_res_T_4[0] ^ xnored_res_res_res_res_res_res[0]); // @[TmdsEncoder.scala 32:11]
wire [2:0] xnored_res_res_res_res_res = {_xnored_res_res_res_res_res_T_11,_xnored_res_res_res_res_res_res_T_8,
xored_res_res_res_res_res_res_res}; // @[TmdsEncoder.scala 32:52]
wire _xnored_res_res_res_res_T_14 = ~(_xored_res_res_res_res_T_5[0] ^ xnored_res_res_res_res_res[0]); // @[TmdsEncoder.scala 32:11]
wire [3:0] xnored_res_res_res_res = {_xnored_res_res_res_res_T_14,_xnored_res_res_res_res_res_T_11,
_xnored_res_res_res_res_res_res_T_8,xored_res_res_res_res_res_res_res}; // @[TmdsEncoder.scala 32:52]
wire _xnored_res_res_res_T_17 = ~(_xored_res_res_res_T_6[0] ^ xnored_res_res_res_res[0]); // @[TmdsEncoder.scala 32:11]
wire [4:0] xnored_res_res_res = {_xnored_res_res_res_T_17,_xnored_res_res_res_res_T_14,
_xnored_res_res_res_res_res_T_11,_xnored_res_res_res_res_res_res_T_8,xored_res_res_res_res_res_res_res}; // @[TmdsEncoder.scala 32:52]
wire _xnored_res_res_T_20 = ~(_xored_res_res_T_7[0] ^ xnored_res_res_res[0]); // @[TmdsEncoder.scala 32:11]
wire [5:0] xnored_res_res = {_xnored_res_res_T_20,_xnored_res_res_res_T_17,_xnored_res_res_res_res_T_14,
_xnored_res_res_res_res_res_T_11,_xnored_res_res_res_res_res_res_T_8,xored_res_res_res_res_res_res_res}; // @[TmdsEncoder.scala 32:52]
wire _xnored_res_T_23 = ~(_xored_res_T_8[0] ^ xnored_res_res[0]); // @[TmdsEncoder.scala 32:11]
wire [6:0] xnored_res = {_xnored_res_T_23,_xnored_res_res_T_20,_xnored_res_res_res_T_17,_xnored_res_res_res_res_T_14,
_xnored_res_res_res_res_res_T_11,_xnored_res_res_res_res_res_res_T_8,xored_res_res_res_res_res_res_res}; // @[TmdsEncoder.scala 32:52]
wire _xnored_T_16 = ~(io_din[0] ^ xnored_res[0]); // @[TmdsEncoder.scala 32:11]
wire [8:0] xnored = {1'h0,_xnored_T_16,_xnored_res_T_23,_xnored_res_res_T_20,_xnored_res_res_res_T_17,
_xnored_res_res_res_res_T_14,_xnored_res_res_res_res_res_T_11,_xnored_res_res_res_res_res_res_T_8,
xored_res_res_res_res_res_res_res}; // @[TmdsEncoder.scala 35:25]
wire _q_m_T_5 = n_one_din > 4'h4 | n_one_din == 4'h4 & ~io_din[0]; // @[TmdsEncoder.scala 39:23]
wire [8:0] q_m = _q_m_T_5 ? xnored : xored; // @[TmdsEncoder.scala 38:16]
wire [1:0] _diff_T_9 = q_m[0] + q_m[1]; // @[Bitwise.scala 48:55]
wire [1:0] _diff_T_11 = q_m[2] + q_m[3]; // @[Bitwise.scala 48:55]
wire [2:0] _diff_T_13 = _diff_T_9 + _diff_T_11; // @[Bitwise.scala 48:55]
wire [1:0] _diff_T_15 = q_m[4] + q_m[5]; // @[Bitwise.scala 48:55]
wire [1:0] _diff_T_17 = q_m[7] + q_m[8]; // @[Bitwise.scala 48:55]
wire [1:0] _GEN_20 = {{1'd0}, q_m[6]}; // @[Bitwise.scala 48:55]
wire [2:0] _diff_T_19 = _GEN_20 + _diff_T_17; // @[Bitwise.scala 48:55]
wire [2:0] _diff_T_21 = _diff_T_15 + _diff_T_19[1:0]; // @[Bitwise.scala 48:55]
wire [3:0] _diff_T_25 = _diff_T_13 + _diff_T_21; // @[TmdsEncoder.scala 43:28]
wire [3:0] diff = $signed(_diff_T_25) - 4'sh4; // @[TmdsEncoder.scala 43:35]
reg [3:0] disparityReg; // @[TmdsEncoder.scala 47:29]
reg [9:0] doutReg; // @[TmdsEncoder.scala 48:24]
wire [9:0] _GEN_0 = 2'h2 == io_ctrl ? 10'h154 : 10'h2ab; // @[TmdsEncoder.scala 51:13 52:20 55:34]
wire [9:0] _doutReg_T_1 = {2'h2,q_m[7:0]}; // @[TmdsEncoder.scala 61:33]
wire [3:0] _disparityReg_T_2 = $signed(disparityReg) - $signed(diff); // @[TmdsEncoder.scala 62:38]
wire [9:0] _doutReg_T_3 = {2'h1,q_m[7:0]}; // @[TmdsEncoder.scala 64:33]
wire [3:0] _disparityReg_T_5 = $signed(disparityReg) + $signed(diff); // @[TmdsEncoder.scala 65:38]
wire _T_13 = ~diff[3] & ~disparityReg[3]; // @[TmdsEncoder.scala 67:36]
wire [7:0] _doutReg_T_7 = ~q_m[7:0]; // @[TmdsEncoder.scala 69:40]
wire [9:0] _doutReg_T_8 = {1'h1,q_m[8],_doutReg_T_7}; // @[TmdsEncoder.scala 69:37]
wire [3:0] _disparityReg_T_8 = $signed(disparityReg) + 4'sh1; // @[TmdsEncoder.scala 71:38]
wire [3:0] _disparityReg_T_11 = $signed(_disparityReg_T_8) - $signed(diff); // @[TmdsEncoder.scala 71:44]
wire [3:0] _GEN_5 = q_m[8] ? $signed(_disparityReg_T_11) : $signed(_disparityReg_T_2); // @[TmdsEncoder.scala 70:19 71:22 73:22]
wire [9:0] _doutReg_T_9 = {1'h0,q_m}; // @[TmdsEncoder.scala 76:27]
wire [3:0] _disparityReg_T_20 = $signed(disparityReg) - 4'sh1; // @[TmdsEncoder.scala 80:38]
wire [3:0] _disparityReg_T_23 = $signed(_disparityReg_T_20) + $signed(diff); // @[TmdsEncoder.scala 80:44]
wire [3:0] _GEN_6 = q_m[8] ? $signed(_disparityReg_T_5) : $signed(_disparityReg_T_23); // @[TmdsEncoder.scala 77:19 78:22 80:22]
assign io_dout = doutReg; // @[TmdsEncoder.scala 84:11]
always @(posedge clock) begin
if (reset) begin // @[TmdsEncoder.scala 47:29]
disparityReg <= 4'sh0; // @[TmdsEncoder.scala 47:29]
end else if (~io_en) begin // @[TmdsEncoder.scala 49:26]
disparityReg <= 4'sh0; // @[TmdsEncoder.scala 50:18]
end else if ($signed(disparityReg) == 4'sh0 | $signed(diff) == 4'sh0) begin // @[TmdsEncoder.scala 58:47]
if (~q_m[8]) begin // @[TmdsEncoder.scala 60:31]
disparityReg <= _disparityReg_T_2; // @[TmdsEncoder.scala 62:22]
end else begin
disparityReg <= _disparityReg_T_5; // @[TmdsEncoder.scala 65:22]
end
end else if (_T_13 | diff[3] & disparityReg[3]) begin // @[TmdsEncoder.scala 68:72]
disparityReg <= _GEN_5;
end else begin
disparityReg <= _GEN_6;
end
if (reset) begin // @[TmdsEncoder.scala 48:24]
doutReg <= 10'h2ab; // @[TmdsEncoder.scala 48:24]
end else if (~io_en) begin // @[TmdsEncoder.scala 49:26]
if (2'h0 == io_ctrl) begin // @[TmdsEncoder.scala 52:20]
doutReg <= 10'h354; // @[TmdsEncoder.scala 53:34]
end else if (2'h1 == io_ctrl) begin // @[TmdsEncoder.scala 52:20]
doutReg <= 10'hab; // @[TmdsEncoder.scala 54:34]
end else begin
doutReg <= _GEN_0;
end
end else if ($signed(disparityReg) == 4'sh0 | $signed(diff) == 4'sh0) begin // @[TmdsEncoder.scala 58:47]
if (~q_m[8]) begin // @[TmdsEncoder.scala 60:31]
doutReg <= _doutReg_T_1; // @[TmdsEncoder.scala 61:17]
end else begin
doutReg <= _doutReg_T_3; // @[TmdsEncoder.scala 64:17]
end
end else if (_T_13 | diff[3] & disparityReg[3]) begin // @[TmdsEncoder.scala 68:72]
doutReg <= _doutReg_T_8; // @[TmdsEncoder.scala 69:15]
end else begin
doutReg <= _doutReg_T_9; // @[TmdsEncoder.scala 76:15]
end
end
// Register and memory initialization
`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE_MEM_INIT
integer initvar;
`endif
`ifndef SYNTHESIS
`ifdef FIRRTL_BEFORE_INITIAL
`FIRRTL_BEFORE_INITIAL
`endif
initial begin
`ifdef RANDOMIZE
`ifdef INIT_RANDOM
`INIT_RANDOM
`endif
`ifndef VERILATOR
`ifdef RANDOMIZE_DELAY
#`RANDOMIZE_DELAY begin end
`else
#0.002 begin end
`endif
`endif
`ifdef RANDOMIZE_REG_INIT
_RAND_0 = {1{`RANDOM}};
disparityReg = _RAND_0[3:0];
_RAND_1 = {1{`RANDOM}};
doutReg = _RAND_1[9:0];
`endif // RANDOMIZE_REG_INIT
`endif // RANDOMIZE
end // initial
`ifdef FIRRTL_AFTER_INITIAL
`FIRRTL_AFTER_INITIAL
`endif
`endif // SYNTHESIS
endmodule
module Rgb2Tmds(
input clock,
input reset,
input [7:0] io_videoSig_pixel_red,
input [7:0] io_videoSig_pixel_green,
input [7:0] io_videoSig_pixel_blue,
input io_videoSig_de,
input io_videoSig_hsync,
input io_videoSig_vsync,
output [9:0] io_tmds_blue,
output [9:0] io_tmds_red,
output [9:0] io_tmds_green
);
wire tbM_clock; // @[Rgb2Tmds.scala 16:19]
wire tbM_reset; // @[Rgb2Tmds.scala 16:19]
wire tbM_io_en; // @[Rgb2Tmds.scala 16:19]
wire [1:0] tbM_io_ctrl; // @[Rgb2Tmds.scala 16:19]
wire [7:0] tbM_io_din; // @[Rgb2Tmds.scala 16:19]
wire [9:0] tbM_io_dout; // @[Rgb2Tmds.scala 16:19]
wire trM_clock; // @[Rgb2Tmds.scala 23:19]
wire trM_reset; // @[Rgb2Tmds.scala 23:19]
wire trM_io_en; // @[Rgb2Tmds.scala 23:19]
wire [1:0] trM_io_ctrl; // @[Rgb2Tmds.scala 23:19]
wire [7:0] trM_io_din; // @[Rgb2Tmds.scala 23:19]
wire [9:0] trM_io_dout; // @[Rgb2Tmds.scala 23:19]
wire tgM_clock; // @[Rgb2Tmds.scala 30:19]
wire tgM_reset; // @[Rgb2Tmds.scala 30:19]
wire tgM_io_en; // @[Rgb2Tmds.scala 30:19]
wire [1:0] tgM_io_ctrl; // @[Rgb2Tmds.scala 30:19]
wire [7:0] tgM_io_din; // @[Rgb2Tmds.scala 30:19]
wire [9:0] tgM_io_dout; // @[Rgb2Tmds.scala 30:19]
TMDSEncoder tbM ( // @[Rgb2Tmds.scala 16:19]
.clock(tbM_clock),
.reset(tbM_reset),
.io_en(tbM_io_en),
.io_ctrl(tbM_io_ctrl),
.io_din(tbM_io_din),
.io_dout(tbM_io_dout)
);
TMDSEncoder trM ( // @[Rgb2Tmds.scala 23:19]
.clock(trM_clock),
.reset(trM_reset),
.io_en(trM_io_en),
.io_ctrl(trM_io_ctrl),
.io_din(trM_io_din),
.io_dout(trM_io_dout)
);
TMDSEncoder tgM ( // @[Rgb2Tmds.scala 30:19]
.clock(tgM_clock),
.reset(tgM_reset),
.io_en(tgM_io_en),
.io_ctrl(tgM_io_ctrl),
.io_din(tgM_io_din),
.io_dout(tgM_io_dout)
);
assign io_tmds_blue = tbM_io_dout; // @[Rgb2Tmds.scala 20:16]
assign io_tmds_red = trM_io_dout; // @[Rgb2Tmds.scala 27:15]
assign io_tmds_green = tgM_io_dout; // @[Rgb2Tmds.scala 34:17]
assign tbM_clock = clock;
assign tbM_reset = reset;
assign tbM_io_en = io_videoSig_de; // @[Rgb2Tmds.scala 17:13]
assign tbM_io_ctrl = {io_videoSig_vsync,io_videoSig_hsync}; // @[Rgb2Tmds.scala 18:36]
assign tbM_io_din = io_videoSig_pixel_blue; // @[Rgb2Tmds.scala 19:14]
assign trM_clock = clock;
assign trM_reset = reset;
assign trM_io_en = io_videoSig_de; // @[Rgb2Tmds.scala 24:13]
assign trM_io_ctrl = 2'h0; // @[Rgb2Tmds.scala 25:15]
assign trM_io_din = io_videoSig_pixel_red; // @[Rgb2Tmds.scala 26:14]
assign tgM_clock = clock;
assign tgM_reset = reset;
assign tgM_io_en = io_videoSig_de; // @[Rgb2Tmds.scala 31:13]
assign tgM_io_ctrl = 2'h0; // @[Rgb2Tmds.scala 32:15]
assign tgM_io_din = io_videoSig_pixel_green; // @[Rgb2Tmds.scala 33:14]
endmodule
module Oser10Module(
input clock,
input reset,
output io_q,
input [9:0] io_data,
input io_fclk
);
wire osr10_Q; // @[littlebee.scala 57:21]
wire osr10_D0; // @[littlebee.scala 57:21]
wire osr10_D1; // @[littlebee.scala 57:21]
wire osr10_D2; // @[littlebee.scala 57:21]
wire osr10_D3; // @[littlebee.scala 57:21]
wire osr10_D4; // @[littlebee.scala 57:21]
wire osr10_D5; // @[littlebee.scala 57:21]
wire osr10_D6; // @[littlebee.scala 57:21]
wire osr10_D7; // @[littlebee.scala 57:21]
wire osr10_D8; // @[littlebee.scala 57:21]
wire osr10_D9; // @[littlebee.scala 57:21]
wire osr10_PCLK; // @[littlebee.scala 57:21]
wire osr10_FCLK; // @[littlebee.scala 57:21]
wire osr10_RESET; // @[littlebee.scala 57:21]
OSER10 #(.GSREN("false"), .LSREN("true")) osr10 ( // @[littlebee.scala 57:21]
.Q(osr10_Q),
.D0(osr10_D0),
.D1(osr10_D1),
.D2(osr10_D2),
.D3(osr10_D3),
.D4(osr10_D4),
.D5(osr10_D5),
.D6(osr10_D6),
.D7(osr10_D7),
.D8(osr10_D8),
.D9(osr10_D9),
.PCLK(osr10_PCLK),
.FCLK(osr10_FCLK),
.RESET(osr10_RESET)
);
assign io_q = osr10_Q; // @[littlebee.scala 58:8]
assign osr10_D0 = io_data[0]; // @[littlebee.scala 59:25]
assign osr10_D1 = io_data[1]; // @[littlebee.scala 60:25]
assign osr10_D2 = io_data[2]; // @[littlebee.scala 61:25]
assign osr10_D3 = io_data[3]; // @[littlebee.scala 62:25]
assign osr10_D4 = io_data[4]; // @[littlebee.scala 63:25]
assign osr10_D5 = io_data[5]; // @[littlebee.scala 64:25]
assign osr10_D6 = io_data[6]; // @[littlebee.scala 65:25]
assign osr10_D7 = io_data[7]; // @[littlebee.scala 66:25]
assign osr10_D8 = io_data[8]; // @[littlebee.scala 67:25]
assign osr10_D9 = io_data[9]; // @[littlebee.scala 68:25]
assign osr10_PCLK = clock; // @[littlebee.scala 69:17]
assign osr10_FCLK = io_fclk; // @[littlebee.scala 70:17]
assign osr10_RESET = reset; // @[littlebee.scala 71:17]
endmodule
module GbHdmi(
input clock,
input reset,
input io_gb_vsync,
input io_gb_clk,
input [1:0] io_gb_data,
input io_serClk,
output io_tmds_clk_p,
output io_tmds_clk_n,
output io_tmds_data_0_p,
output io_tmds_data_0_n,
output io_tmds_data_1_p,
output io_tmds_data_1_n,
output io_tmds_data_2_p,
output io_tmds_data_2_n,
input io_pattern_trig
);
`ifdef RANDOMIZE_GARBAGE_ASSIGN
reg [31:0] _RAND_1;
`endif // RANDOMIZE_GARBAGE_ASSIGN
`ifdef RANDOMIZE_MEM_INIT
reg [31:0] _RAND_0;
`endif // RANDOMIZE_MEM_INIT
`ifdef RANDOMIZE_REG_INIT
reg [31:0] _RAND_2;
reg [31:0] _RAND_3;
reg [31:0] _RAND_4;
`endif // RANDOMIZE_REG_INIT
wire gbwt_clock; // @[gbhdmi.scala 45:20]
wire gbwt_reset; // @[gbhdmi.scala 45:20]
wire gbwt_io_gb_vsync; // @[gbhdmi.scala 45:20]
wire gbwt_io_gb_clk; // @[gbhdmi.scala 45:20]
wire [1:0] gbwt_io_gb_data; // @[gbhdmi.scala 45:20]
wire [14:0] gbwt_io_Maddr; // @[gbhdmi.scala 45:20]
wire [1:0] gbwt_io_Mdata; // @[gbhdmi.scala 45:20]
wire gbwt_io_Mwrite; // @[gbhdmi.scala 45:20]
wire mhdmi_clock; // @[gbhdmi.scala 49:21]
wire mhdmi_reset; // @[gbhdmi.scala 49:21]
wire [14:0] mhdmi_io_mem_addr; // @[gbhdmi.scala 49:21]
wire [1:0] mhdmi_io_mem_data; // @[gbhdmi.scala 49:21]
wire mhdmi_io_video_hsync; // @[gbhdmi.scala 49:21]
wire mhdmi_io_video_vsync; // @[gbhdmi.scala 49:21]
wire [7:0] mhdmi_io_video_color_red; // @[gbhdmi.scala 49:21]
wire [7:0] mhdmi_io_video_color_green; // @[gbhdmi.scala 49:21]
wire [7:0] mhdmi_io_video_color_blue; // @[gbhdmi.scala 49:21]
wire mhdmi_io_video_de; // @[gbhdmi.scala 49:21]
wire [1:0] mhdmi_io_pattern_num; // @[gbhdmi.scala 49:21]
wire rgb2tmds_clock; // @[gbhdmi.scala 82:26]
wire rgb2tmds_reset; // @[gbhdmi.scala 82:26]
wire [7:0] rgb2tmds_io_videoSig_pixel_red; // @[gbhdmi.scala 82:26]
wire [7:0] rgb2tmds_io_videoSig_pixel_green; // @[gbhdmi.scala 82:26]
wire [7:0] rgb2tmds_io_videoSig_pixel_blue; // @[gbhdmi.scala 82:26]
wire rgb2tmds_io_videoSig_de; // @[gbhdmi.scala 82:26]
wire rgb2tmds_io_videoSig_hsync; // @[gbhdmi.scala 82:26]
wire rgb2tmds_io_videoSig_vsync; // @[gbhdmi.scala 82:26]
wire [9:0] rgb2tmds_io_tmds_blue; // @[gbhdmi.scala 82:26]
wire [9:0] rgb2tmds_io_tmds_red; // @[gbhdmi.scala 82:26]
wire [9:0] rgb2tmds_io_tmds_green; // @[gbhdmi.scala 82:26]
wire serdesRed_clock; // @[gbhdmi.scala 92:27]
wire serdesRed_reset; // @[gbhdmi.scala 92:27]
wire serdesRed_io_q; // @[gbhdmi.scala 92:27]
wire [9:0] serdesRed_io_data; // @[gbhdmi.scala 92:27]
wire serdesRed_io_fclk; // @[gbhdmi.scala 92:27]
wire buffDiffRed_O; // @[gbhdmi.scala 95:29]
wire buffDiffRed_OB; // @[gbhdmi.scala 95:29]
wire buffDiffRed_I; // @[gbhdmi.scala 95:29]
wire serdesGreen_clock; // @[gbhdmi.scala 101:29]
wire serdesGreen_reset; // @[gbhdmi.scala 101:29]
wire serdesGreen_io_q; // @[gbhdmi.scala 101:29]
wire [9:0] serdesGreen_io_data; // @[gbhdmi.scala 101:29]
wire serdesGreen_io_fclk; // @[gbhdmi.scala 101:29]
wire buffDiffGreen_O; // @[gbhdmi.scala 104:31]
wire buffDiffGreen_OB; // @[gbhdmi.scala 104:31]
wire buffDiffGreen_I; // @[gbhdmi.scala 104:31]
wire serdesBlue_clock; // @[gbhdmi.scala 110:28]
wire serdesBlue_reset; // @[gbhdmi.scala 110:28]
wire serdesBlue_io_q; // @[gbhdmi.scala 110:28]
wire [9:0] serdesBlue_io_data; // @[gbhdmi.scala 110:28]
wire serdesBlue_io_fclk; // @[gbhdmi.scala 110:28]
wire buffDiffBlue_O; // @[gbhdmi.scala 113:30]
wire buffDiffBlue_OB; // @[gbhdmi.scala 113:30]
wire buffDiffBlue_I; // @[gbhdmi.scala 113:30]
wire serdesClk_clock; // @[gbhdmi.scala 119:27]
wire serdesClk_reset; // @[gbhdmi.scala 119:27]
wire serdesClk_io_q; // @[gbhdmi.scala 119:27]
wire [9:0] serdesClk_io_data; // @[gbhdmi.scala 119:27]
wire serdesClk_io_fclk; // @[gbhdmi.scala 119:27]
wire buffDiffClk_O; // @[gbhdmi.scala 122:29]
wire buffDiffClk_OB; // @[gbhdmi.scala 122:29]
wire buffDiffClk_I; // @[gbhdmi.scala 122:29]
reg [1:0] mem [0:23039]; // @[gbhdmi.scala 129:16]
wire mem_mhdmi_io_mem_data_MPORT_en; // @[gbhdmi.scala 129:16]
wire [14:0] mem_mhdmi_io_mem_data_MPORT_addr; // @[gbhdmi.scala 129:16]
wire [1:0] mem_mhdmi_io_mem_data_MPORT_data; // @[gbhdmi.scala 129:16]
wire [1:0] mem_MPORT_data; // @[gbhdmi.scala 129:16]
wire [14:0] mem_MPORT_addr; // @[gbhdmi.scala 129:16]
wire mem_MPORT_mask; // @[gbhdmi.scala 129:16]
wire mem_MPORT_en; // @[gbhdmi.scala 129:16]
reg [1:0] patternNum; // @[gbhdmi.scala 52:27]
reg REG; // @[gbhdmi.scala 53:16]
wire [1:0] _patternNum_T_1 = patternNum + 2'h1; // @[gbhdmi.scala 54:30]
reg [1:0] mhdmi_io_mem_data_REG; // @[gbhdmi.scala 135:33]
GbWrite gbwt ( // @[gbhdmi.scala 45:20]
.clock(gbwt_clock),
.reset(gbwt_reset),
.io_gb_vsync(gbwt_io_gb_vsync),
.io_gb_clk(gbwt_io_gb_clk),
.io_gb_data(gbwt_io_gb_data),
.io_Maddr(gbwt_io_Maddr),
.io_Mdata(gbwt_io_Mdata),
.io_Mwrite(gbwt_io_Mwrite)
);
MemHdmi mhdmi ( // @[gbhdmi.scala 49:21]
.clock(mhdmi_clock),
.reset(mhdmi_reset),
.io_mem_addr(mhdmi_io_mem_addr),
.io_mem_data(mhdmi_io_mem_data),
.io_video_hsync(mhdmi_io_video_hsync),
.io_video_vsync(mhdmi_io_video_vsync),
.io_video_color_red(mhdmi_io_video_color_red),
.io_video_color_green(mhdmi_io_video_color_green),
.io_video_color_blue(mhdmi_io_video_color_blue),
.io_video_de(mhdmi_io_video_de),
.io_pattern_num(mhdmi_io_pattern_num)
);
Rgb2Tmds rgb2tmds ( // @[gbhdmi.scala 82:26]
.clock(rgb2tmds_clock),
.reset(rgb2tmds_reset),
.io_videoSig_pixel_red(rgb2tmds_io_videoSig_pixel_red),
.io_videoSig_pixel_green(rgb2tmds_io_videoSig_pixel_green),
.io_videoSig_pixel_blue(rgb2tmds_io_videoSig_pixel_blue),
.io_videoSig_de(rgb2tmds_io_videoSig_de),
.io_videoSig_hsync(rgb2tmds_io_videoSig_hsync),
.io_videoSig_vsync(rgb2tmds_io_videoSig_vsync),
.io_tmds_blue(rgb2tmds_io_tmds_blue),
.io_tmds_red(rgb2tmds_io_tmds_red),
.io_tmds_green(rgb2tmds_io_tmds_green)
);
Oser10Module serdesRed ( // @[gbhdmi.scala 92:27]
.clock(serdesRed_clock),
.reset(serdesRed_reset),
.io_q(serdesRed_io_q),
.io_data(serdesRed_io_data),
.io_fclk(serdesRed_io_fclk)
);
TLVDS_OBUF buffDiffRed ( // @[gbhdmi.scala 95:29]
.O(buffDiffRed_O),
.OB(buffDiffRed_OB),
.I(buffDiffRed_I)
);
Oser10Module serdesGreen ( // @[gbhdmi.scala 101:29]
.clock(serdesGreen_clock),
.reset(serdesGreen_reset),
.io_q(serdesGreen_io_q),
.io_data(serdesGreen_io_data),
.io_fclk(serdesGreen_io_fclk)
);
TLVDS_OBUF buffDiffGreen ( // @[gbhdmi.scala 104:31]
.O(buffDiffGreen_O),
.OB(buffDiffGreen_OB),
.I(buffDiffGreen_I)
);
Oser10Module serdesBlue ( // @[gbhdmi.scala 110:28]
.clock(serdesBlue_clock),
.reset(serdesBlue_reset),
.io_q(serdesBlue_io_q),
.io_data(serdesBlue_io_data),
.io_fclk(serdesBlue_io_fclk)
);
TLVDS_OBUF buffDiffBlue ( // @[gbhdmi.scala 113:30]
.O(buffDiffBlue_O),
.OB(buffDiffBlue_OB),
.I(buffDiffBlue_I)
);
Oser10Module serdesClk ( // @[gbhdmi.scala 119:27]
.clock(serdesClk_clock),
.reset(serdesClk_reset),
.io_q(serdesClk_io_q),
.io_data(serdesClk_io_data),
.io_fclk(serdesClk_io_fclk)
);
TLVDS_OBUF buffDiffClk ( // @[gbhdmi.scala 122:29]
.O(buffDiffClk_O),
.OB(buffDiffClk_OB),
.I(buffDiffClk_I)
);
assign mem_mhdmi_io_mem_data_MPORT_en = 1'h1;
assign mem_mhdmi_io_mem_data_MPORT_addr = mhdmi_io_mem_addr;
`ifndef RANDOMIZE_GARBAGE_ASSIGN
assign mem_mhdmi_io_mem_data_MPORT_data = mem[mem_mhdmi_io_mem_data_MPORT_addr]; // @[gbhdmi.scala 129:16]
`else
assign mem_mhdmi_io_mem_data_MPORT_data = mem_mhdmi_io_mem_data_MPORT_addr >= 15'h5a00 ? _RAND_1[1:0] :
mem[mem_mhdmi_io_mem_data_MPORT_addr]; // @[gbhdmi.scala 129:16]
`endif // RANDOMIZE_GARBAGE_ASSIGN
assign mem_MPORT_data = gbwt_io_Mdata;
assign mem_MPORT_addr = gbwt_io_Maddr;
assign mem_MPORT_mask = 1'h1;
assign mem_MPORT_en = gbwt_io_Mwrite;
assign io_tmds_clk_p = buffDiffClk_O; // @[gbhdmi.scala 124:19]
assign io_tmds_clk_n = buffDiffClk_OB; // @[gbhdmi.scala 125:19]
assign io_tmds_data_0_p = buffDiffBlue_O; // @[gbhdmi.scala 115:23]
assign io_tmds_data_0_n = buffDiffBlue_OB; // @[gbhdmi.scala 116:23]
assign io_tmds_data_1_p = buffDiffGreen_O; // @[gbhdmi.scala 106:23]
assign io_tmds_data_1_n = buffDiffGreen_OB; // @[gbhdmi.scala 107:23]
assign io_tmds_data_2_p = buffDiffRed_O; // @[gbhdmi.scala 97:23]
assign io_tmds_data_2_n = buffDiffRed_OB; // @[gbhdmi.scala 98:23]
assign gbwt_clock = clock;
assign gbwt_reset = reset;
assign gbwt_io_gb_vsync = io_gb_vsync; // @[gbhdmi.scala 46:14]
assign gbwt_io_gb_clk = io_gb_clk; // @[gbhdmi.scala 46:14]
assign gbwt_io_gb_data = io_gb_data; // @[gbhdmi.scala 46:14]
assign mhdmi_clock = clock;
assign mhdmi_reset = reset;
assign mhdmi_io_mem_data = mhdmi_io_mem_data_REG; // @[gbhdmi.scala 134:27 135:23 138:23]
assign mhdmi_io_pattern_num = patternNum; // @[gbhdmi.scala 56:24]
assign rgb2tmds_clock = clock;
assign rgb2tmds_reset = reset;
assign rgb2tmds_io_videoSig_pixel_red = mhdmi_io_video_color_red; // @[gbhdmi.scala 86:38]
assign rgb2tmds_io_videoSig_pixel_green = mhdmi_io_video_color_green; // @[gbhdmi.scala 87:38]
assign rgb2tmds_io_videoSig_pixel_blue = mhdmi_io_video_color_blue; // @[gbhdmi.scala 88:38]
assign rgb2tmds_io_videoSig_de = mhdmi_io_video_de; // @[gbhdmi.scala 83:29]
assign rgb2tmds_io_videoSig_hsync = mhdmi_io_video_hsync; // @[gbhdmi.scala 84:32]
assign rgb2tmds_io_videoSig_vsync = mhdmi_io_video_vsync; // @[gbhdmi.scala 85:32]
assign serdesRed_clock = clock;
assign serdesRed_reset = reset;
assign serdesRed_io_data = rgb2tmds_io_tmds_red; // @[gbhdmi.scala 93:23]
assign serdesRed_io_fclk = io_serClk; // @[gbhdmi.scala 94:23]
assign buffDiffRed_I = serdesRed_io_q; // @[gbhdmi.scala 96:22]
assign serdesGreen_clock = clock;
assign serdesGreen_reset = reset;
assign serdesGreen_io_data = rgb2tmds_io_tmds_green; // @[gbhdmi.scala 102:25]
assign serdesGreen_io_fclk = io_serClk; // @[gbhdmi.scala 103:25]
assign buffDiffGreen_I = serdesGreen_io_q; // @[gbhdmi.scala 105:24]
assign serdesBlue_clock = clock;
assign serdesBlue_reset = reset;
assign serdesBlue_io_data = rgb2tmds_io_tmds_blue; // @[gbhdmi.scala 111:24]
assign serdesBlue_io_fclk = io_serClk; // @[gbhdmi.scala 112:24]
assign buffDiffBlue_I = serdesBlue_io_q; // @[gbhdmi.scala 114:23]
assign serdesClk_clock = clock;
assign serdesClk_reset = reset;
assign serdesClk_io_data = 10'h3e0; // @[gbhdmi.scala 120:23]
assign serdesClk_io_fclk = io_serClk; // @[gbhdmi.scala 121:23]
assign buffDiffClk_I = serdesClk_io_q; // @[gbhdmi.scala 123:22]
always @(posedge clock) begin
if (mem_MPORT_en & mem_MPORT_mask) begin
mem[mem_MPORT_addr] <= mem_MPORT_data; // @[gbhdmi.scala 129:16]
end
if (reset) begin // @[gbhdmi.scala 52:27]
patternNum <= 2'h0; // @[gbhdmi.scala 52:27]
end else if (~REG & io_pattern_trig) begin // @[gbhdmi.scala 53:52]
patternNum <= _patternNum_T_1; // @[gbhdmi.scala 54:16]
end
REG <= io_pattern_trig; // @[gbhdmi.scala 53:16]
mhdmi_io_mem_data_REG <= mem_mhdmi_io_mem_data_MPORT_data; // @[gbhdmi.scala 135:33]
end
// Register and memory initialization
`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE_MEM_INIT
integer initvar;
`endif
`ifndef SYNTHESIS
`ifdef FIRRTL_BEFORE_INITIAL
`FIRRTL_BEFORE_INITIAL
`endif
initial begin
`ifdef RANDOMIZE
`ifdef INIT_RANDOM
`INIT_RANDOM
`endif
`ifndef VERILATOR
`ifdef RANDOMIZE_DELAY
#`RANDOMIZE_DELAY begin end
`else
#0.002 begin end
`endif
`endif
`ifdef RANDOMIZE_GARBAGE_ASSIGN
_RAND_1 = {1{`RANDOM}};
`endif // RANDOMIZE_GARBAGE_ASSIGN
`ifdef RANDOMIZE_MEM_INIT
_RAND_0 = {1{`RANDOM}};
for (initvar = 0; initvar < 23040; initvar = initvar+1)
mem[initvar] = _RAND_0[1:0];
`endif // RANDOMIZE_MEM_INIT
`ifdef RANDOMIZE_REG_INIT
_RAND_2 = {1{`RANDOM}};
patternNum = _RAND_2[1:0];
_RAND_3 = {1{`RANDOM}};
REG = _RAND_3[0:0];
_RAND_4 = {1{`RANDOM}};
mhdmi_io_mem_data_REG = _RAND_4[1:0];
`endif // RANDOMIZE_REG_INIT
`endif // RANDOMIZE
end // initial
`ifdef FIRRTL_AFTER_INITIAL
`FIRRTL_AFTER_INITIAL
`endif
`endif // SYNTHESIS
endmodule
module TopGbHdmi(
input I_clk,
input I_reset_n,
output [1:0] O_led,
input gb_hsync,
input gb_vsync,
input gb_clk,
input [1:0] gb_data,
output O_tmds_clk_p,
output O_tmds_clk_n,
output O_tmds_data_0_p,
output O_tmds_data_0_n,
output O_tmds_data_1_p,
output O_tmds_data_1_n,
output O_tmds_data_2_p,
output O_tmds_data_2_n,
output snes_dclock,
output snes_dlatch,
input snes_sdata,
output gbpad_a,
output gbpad_b,
output gbpad_select,
output gbpad_start,
output gbpad_right,
output gbpad_left,
output gbpad_up,
output gbpad_down
);
`ifdef RANDOMIZE_REG_INIT
reg [31:0] _RAND_0;
reg [31:0] _RAND_1;
reg [31:0] _RAND_2;
reg [31:0] _RAND_3;
reg [31:0] _RAND_4;
reg [31:0] _RAND_5;
reg [31:0] _RAND_6;
`endif // RANDOMIZE_REG_INIT
wire clkDiv_RESETN; // @[topgbhdmi.scala 58:24]
wire clkDiv_HCLKIN; // @[topgbhdmi.scala 58:24]
wire clkDiv_CLKOUT; // @[topgbhdmi.scala 58:24]
wire clkDiv_CALIB; // @[topgbhdmi.scala 58:24]
wire tmdsPllvr_clkin; // @[topgbhdmi.scala 65:27]
wire tmdsPllvr_clkout; // @[topgbhdmi.scala 65:27]
wire tmdsPllvr_clkoutd; // @[topgbhdmi.scala 65:27]
wire tmdsPllvr_lock; // @[topgbhdmi.scala 65:27]
wire cnpd_clock; // @[topgbhdmi.scala 73:24]
wire cnpd_reset; // @[topgbhdmi.scala 73:24]
wire cnpd_io_dclock; // @[topgbhdmi.scala 73:24]
wire cnpd_io_dlatch; // @[topgbhdmi.scala 73:24]
wire cnpd_io_sdata; // @[topgbhdmi.scala 73:24]
wire cnpd_io_data_valid; // @[topgbhdmi.scala 73:24]
wire [15:0] cnpd_io_data_bits; // @[topgbhdmi.scala 73:24]
wire gbHdmi_clock; // @[topgbhdmi.scala 105:26]
wire gbHdmi_reset; // @[topgbhdmi.scala 105:26]
wire gbHdmi_io_gb_vsync; // @[topgbhdmi.scala 105:26]
wire gbHdmi_io_gb_clk; // @[topgbhdmi.scala 105:26]
wire [1:0] gbHdmi_io_gb_data; // @[topgbhdmi.scala 105:26]
wire gbHdmi_io_serClk; // @[topgbhdmi.scala 105:26]
wire gbHdmi_io_tmds_clk_p; // @[topgbhdmi.scala 105:26]
wire gbHdmi_io_tmds_clk_n; // @[topgbhdmi.scala 105:26]
wire gbHdmi_io_tmds_data_0_p; // @[topgbhdmi.scala 105:26]
wire gbHdmi_io_tmds_data_0_n; // @[topgbhdmi.scala 105:26]
wire gbHdmi_io_tmds_data_1_p; // @[topgbhdmi.scala 105:26]
wire gbHdmi_io_tmds_data_1_n; // @[topgbhdmi.scala 105:26]
wire gbHdmi_io_tmds_data_2_p; // @[topgbhdmi.scala 105:26]
wire gbHdmi_io_tmds_data_2_n; // @[topgbhdmi.scala 105:26]
wire gbHdmi_io_pattern_trig; // @[topgbhdmi.scala 105:26]
wire pll_lock = tmdsPllvr_lock; // @[topgbhdmi.scala 51:25 68:14]
wire glb_rst = ~(pll_lock & I_reset_n); // @[topgbhdmi.scala 55:19]
wire pix_clk = clkDiv_CLKOUT; // @[topgbhdmi.scala 53:23 61:13]
reg [15:0] sNesPadReg; // @[topgbhdmi.scala 74:31]
wire [15:0] _sNesPadReg_T = ~cnpd_io_data_bits; // @[topgbhdmi.scala 82:23]
reg svsync_r; // @[Reg.scala 16:16]
reg svsync; // @[Reg.scala 16:16]
reg sclk_r; // @[Reg.scala 16:16]
reg sclk; // @[Reg.scala 16:16]
reg [1:0] sdata_r; // @[Reg.scala 16:16]
reg [1:0] sdata; // @[Reg.scala 16:16]
CLKDIV #(.DIV_MODE("5")) clkDiv ( // @[topgbhdmi.scala 58:24]
.RESETN(clkDiv_RESETN),
.HCLKIN(clkDiv_HCLKIN),
.CLKOUT(clkDiv_CLKOUT),
.CALIB(clkDiv_CALIB)
);
TMDS_PLLVR tmdsPllvr ( // @[topgbhdmi.scala 65:27]
.clkin(tmdsPllvr_clkin),
.clkout(tmdsPllvr_clkout),
.clkoutd(tmdsPllvr_clkoutd),
.lock(tmdsPllvr_lock)
);
ChisNesPad cnpd ( // @[topgbhdmi.scala 73:24]
.clock(cnpd_clock),
.reset(cnpd_reset),
.io_dclock(cnpd_io_dclock),
.io_dlatch(cnpd_io_dlatch),
.io_sdata(cnpd_io_sdata),
.io_data_valid(cnpd_io_data_valid),
.io_data_bits(cnpd_io_data_bits)
);
GbHdmi gbHdmi ( // @[topgbhdmi.scala 105:26]
.clock(gbHdmi_clock),
.reset(gbHdmi_reset),
.io_gb_vsync(gbHdmi_io_gb_vsync),
.io_gb_clk(gbHdmi_io_gb_clk),
.io_gb_data(gbHdmi_io_gb_data),
.io_serClk(gbHdmi_io_serClk),
.io_tmds_clk_p(gbHdmi_io_tmds_clk_p),
.io_tmds_clk_n(gbHdmi_io_tmds_clk_n),
.io_tmds_data_0_p(gbHdmi_io_tmds_data_0_p),
.io_tmds_data_0_n(gbHdmi_io_tmds_data_0_n),
.io_tmds_data_1_p(gbHdmi_io_tmds_data_1_p),
.io_tmds_data_1_n(gbHdmi_io_tmds_data_1_n),
.io_tmds_data_2_p(gbHdmi_io_tmds_data_2_p),
.io_tmds_data_2_n(gbHdmi_io_tmds_data_2_n),
.io_pattern_trig(gbHdmi_io_pattern_trig)
);
assign O_led = {sNesPadReg[11],sNesPadReg[10]}; // @[topgbhdmi.scala 96:31]
assign O_tmds_clk_p = gbHdmi_io_tmds_clk_p; // @[topgbhdmi.scala 116:20]
assign O_tmds_clk_n = gbHdmi_io_tmds_clk_n; // @[topgbhdmi.scala 117:21]
assign O_tmds_data_0_p = gbHdmi_io_tmds_data_0_p; // @[topgbhdmi.scala 118:24]
assign O_tmds_data_0_n = gbHdmi_io_tmds_data_0_n; // @[topgbhdmi.scala 119:24]
assign O_tmds_data_1_p = gbHdmi_io_tmds_data_1_p; // @[topgbhdmi.scala 120:24]
assign O_tmds_data_1_n = gbHdmi_io_tmds_data_1_n; // @[topgbhdmi.scala 121:24]
assign O_tmds_data_2_p = gbHdmi_io_tmds_data_2_p; // @[topgbhdmi.scala 122:24]
assign O_tmds_data_2_n = gbHdmi_io_tmds_data_2_n; // @[topgbhdmi.scala 123:24]
assign snes_dclock = cnpd_io_dclock; // @[topgbhdmi.scala 76:19]
assign snes_dlatch = cnpd_io_dlatch; // @[topgbhdmi.scala 77:19]
assign gbpad_a = sNesPadReg[7]; // @[topgbhdmi.scala 92:33]
assign gbpad_b = sNesPadReg[15]; // @[topgbhdmi.scala 84:33]
assign gbpad_select = sNesPadReg[13]; // @[topgbhdmi.scala 86:33]
assign gbpad_start = sNesPadReg[12]; // @[topgbhdmi.scala 87:33]
assign gbpad_right = sNesPadReg[8]; // @[topgbhdmi.scala 91:33]
assign gbpad_left = sNesPadReg[9]; // @[topgbhdmi.scala 90:33]
assign gbpad_up = sNesPadReg[11]; // @[topgbhdmi.scala 88:33]
assign gbpad_down = sNesPadReg[10]; // @[topgbhdmi.scala 89:33]
assign clkDiv_RESETN = ~glb_rst; // @[topgbhdmi.scala 59:25]
assign clkDiv_HCLKIN = tmdsPllvr_clkout; // @[topgbhdmi.scala 52:26 67:16]
assign clkDiv_CALIB = 1'h1; // @[topgbhdmi.scala 62:21]
assign tmdsPllvr_clkin = I_clk; // @[topgbhdmi.scala 66:24]
assign cnpd_clock = clkDiv_CLKOUT; // @[topgbhdmi.scala 53:23 61:13]
assign cnpd_reset = ~(pll_lock & I_reset_n); // @[topgbhdmi.scala 55:19]
assign cnpd_io_sdata = snes_sdata; // @[topgbhdmi.scala 78:21]
assign gbHdmi_clock = clkDiv_CLKOUT; // @[topgbhdmi.scala 53:23 61:13]
assign gbHdmi_reset = ~(pll_lock & I_reset_n); // @[topgbhdmi.scala 55:19]
assign gbHdmi_io_gb_vsync = svsync; // @[topgbhdmi.scala 110:26]
assign gbHdmi_io_gb_clk = sclk; // @[topgbhdmi.scala 111:26]
assign gbHdmi_io_gb_data = sdata; // @[topgbhdmi.scala 112:26]
assign gbHdmi_io_serClk = tmdsPllvr_clkout; // @[topgbhdmi.scala 52:26 67:16]
assign gbHdmi_io_pattern_trig = sNesPadReg[4] | sNesPadReg[5]; // @[topgbhdmi.scala 107:47]
always @(posedge pix_clk) begin
if (glb_rst) begin // @[topgbhdmi.scala 74:31]
sNesPadReg <= 16'h0; // @[topgbhdmi.scala 74:31]
end else if (cnpd_io_data_valid) begin // @[topgbhdmi.scala 81:31]
sNesPadReg <= _sNesPadReg_T; // @[topgbhdmi.scala 82:20]
end
svsync_r <= gb_vsync; // @[Reg.scala 16:16 17:{18,22}]
svsync <= svsync_r; // @[Reg.scala 16:16 17:{18,22}]
sclk_r <= gb_clk; // @[Reg.scala 16:16 17:{18,22}]
sclk <= sclk_r; // @[Reg.scala 16:16 17:{18,22}]
sdata_r <= gb_data; // @[Reg.scala 16:16 17:{18,22}]
sdata <= sdata_r; // @[Reg.scala 16:16 17:{18,22}]
end
// Register and memory initialization
`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE_MEM_INIT
integer initvar;
`endif
`ifndef SYNTHESIS
`ifdef FIRRTL_BEFORE_INITIAL
`FIRRTL_BEFORE_INITIAL
`endif
initial begin
`ifdef RANDOMIZE
`ifdef INIT_RANDOM
`INIT_RANDOM
`endif
`ifndef VERILATOR
`ifdef RANDOMIZE_DELAY
#`RANDOMIZE_DELAY begin end
`else
#0.002 begin end
`endif
`endif
`ifdef RANDOMIZE_REG_INIT
_RAND_0 = {1{`RANDOM}};
sNesPadReg = _RAND_0[15:0];
_RAND_1 = {1{`RANDOM}};
svsync_r = _RAND_1[0:0];
_RAND_2 = {1{`RANDOM}};
svsync = _RAND_2[0:0];
_RAND_3 = {1{`RANDOM}};
sclk_r = _RAND_3[0:0];
_RAND_4 = {1{`RANDOM}};
sclk = _RAND_4[0:0];
_RAND_5 = {1{`RANDOM}};
sdata_r = _RAND_5[1:0];
_RAND_6 = {1{`RANDOM}};
sdata = _RAND_6[1:0];
`endif // RANDOMIZE_REG_INIT
`endif // RANDOMIZE
end // initial
`ifdef FIRRTL_AFTER_INITIAL
`FIRRTL_AFTER_INITIAL
`endif
`endif // SYNTHESIS
endmodule
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment