Code Monkey home page Code Monkey logo

litevideo's People

Contributors

bunnie avatar enjoy-digital avatar felixheld avatar frank-buss avatar gregdavill avatar mazdermind avatar mithro avatar rohitk-singh avatar ssk1328 avatar stefanor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

litevideo's Issues

Video targets currently failing in the HDMI2USB firmware

- make firmware check (atlys video lm32 firmware)
---------------------------------------------
mkdir -p build/atlys_video_lm32/
time python -u ./make.py --platform=atlys --target=video --cpu-type=lm32 --iprange=192.168.100 -Ob toolchain_path /home/travis/build/timvideos/HDMI2USB-litex-firmware/build/Xilinx/opt/Xilinx/    --no-compile-gateware \
		2>&1 | tee -a build/atlys_video_lm32//output.20180204-121057.log; (exit ${PIPESTATUS[0]})
Traceback (most recent call last):
  File "./make.py", line 143, in <module>
    main()
  File "./make.py", line 108, in main
    soc = SoC(platform, ident=SoC.__name__, **soc_sdram_argdict(args), **dict(args.target_option))
  File "/home/travis/build/timvideos/HDMI2USB-litex-firmware/targets/atlys/video.py", line 31, in __init__
    fifo_depth=512)
  File "/home/travis/build/timvideos/HDMI2USB-litex-firmware/third_party/litevideo/litevideo/input/__init__.py", line 32, in __init__
    self.submodules.clocking = clocking_cls[device](pads, clkin_freq)
  File "/home/travis/build/timvideos/HDMI2USB-litex-firmware/third_party/litevideo/litevideo/input/clocking.py", line 10, in __init__
    assert clk_polarity == 0
NameError: name 'clk_polarity' is not defined
real	0m1.619s
user	0m1.161s
sys	0m0.083s
make: *** [firmware-cmd] Error 1

None of the test benches work

$ for DIR in $(find -name test -type d); do (cd $DIR; make); done
PYTHONPATH=../../../ python3 rgb2ycbcr_tb.py
Traceback (most recent call last):
  File "rgb2ycbcr_tb.py", line 52, in <module>
    tb = TB()
  File "rgb2ycbcr_tb.py", line 18, in __init__
    self.streamer.source.connect(self.rgb2ycbcr.sink, leave_out=["data"]),
TypeError: connect() got an unexpected keyword argument 'leave_out'
make: *** [rgb2ycbcr_tb] Error 1
PYTHONPATH=../../../ python3 core_tb.py
Traceback (most recent call last):
  File "core_tb.py", line 4, in <module>
    from litex.soc.interconnect import lasmi_bus
ImportError: cannot import name lasmi_bus
make: *** [core_tb] Error 1
The command "for DIR in $(find -name test -type d); do (cd $DIR; make); done" exited with 2.

Got this working on de10nano with MiSTer I/O board via vga

Had to change the initiator slightly...

` # VGA terminal
self.mem_map["terminal"] = 0x30000000
self.submodules.terminal = terminal = Terminal()
self.add_wb_slave(self.mem_map["terminal"], self.terminal.bus, 8896)
self.add_memory_region("terminal", self.mem_map["terminal"], 8896, type="cached+linker")

    # Connect VGA pins
    vga = platform.request("vga", 0)
    self.comb += [
        vga.vsync.eq(terminal.vsync),
        vga.hsync.eq(terminal.hsync),
        vga.red.eq(terminal.red[2:8]),
        vga.green.eq(terminal.green[2:8]),
        vga.blue.eq(terminal.blue[2:8])
    ]
    vga.en.eq(1)

`

IMG_20200607_142946

Relevent pins from the de10nano platform file...

("vga", 0, Subsignal("red", Pins("AE17 AE20 AF20 AH18 AH19 AF21")), Subsignal("green", Pins("AE19 AG15 AF18 AG18 AG19 AG20")), Subsignal("blue", Pins("AG21 AA20 AE22 AF22 AH23 AH21")), Subsignal("hsync", Pins("AH22")), Subsignal("vsync", Pins("AG24")), Subsignal("en", Pins("AH27")), IOStandard("3.3-V LVTTL") ),

csc.ycbcr2rgb: Signed multiplication

I've started using the YCbCr2RGB along with YCbCr422_444 on a project converting FLIR Boson thermal camera to HDMI.

Hit some small issues I wanted to write down before I forget.

I'd like to look into these issue in a bit more detail, but don't have the cycles right now, I suspect these might be result of using a different verilog frontend during synthesis, vivado/yosys.

These are the changes I had to make:

diff --git a/litevideo/csc/ycbcr2rgb.py b/litevideo/csc/ycbcr2rgb.py
index 50b2789..360090d 100644
--- a/litevideo/csc/ycbcr2rgb.py
+++ b/litevideo/csc/ycbcr2rgb.py
@@ -70,17 +71,17 @@ class YCbCr2RGBDatapath(Module):
         # (cb - coffset)*bcoef
         # (cr - coffset)*ccoef
         # (cb - coffset)*dcoef
-        y_minus_yoffset = Signal((ycbcr_w + 1, True))
+        y_minus_yoffset = Signal((ycbcr_w + 4, True))
         cr_minus_coffset_mult_acoef = Signal((ycbcr_w + coef_w + 4, True))
         cb_minus_coffset_mult_bcoef = Signal((ycbcr_w + coef_w + 4, True))
         cr_minus_coffset_mult_ccoef = Signal((ycbcr_w + coef_w + 4, True))
         cb_minus_coffset_mult_dcoef = Signal((ycbcr_w + coef_w + 4, True))
         self.sync += [
             y_minus_yoffset.eq(ycbcr_delayed[1].y - coefs["yoffset"]),
-            cr_minus_coffset_mult_acoef.eq(cr_minus_coffset * coefs["acoef"]),
-            cb_minus_coffset_mult_bcoef.eq(cb_minus_coffset * coefs["bcoef"]),
-            cr_minus_coffset_mult_ccoef.eq(cr_minus_coffset * coefs["ccoef"]),
-            cb_minus_coffset_mult_dcoef.eq(cb_minus_coffset * coefs["dcoef"])
+            cr_minus_coffset_mult_acoef.eq(cr_minus_coffset * Signal((ycbcr_w, True), reset=coefs["acoef"]  )),
+            cb_minus_coffset_mult_bcoef.eq(cb_minus_coffset * Signal((ycbcr_w, True), reset=coefs["bcoef"]  )),
+            cr_minus_coffset_mult_ccoef.eq(cr_minus_coffset * Signal((ycbcr_w, True), reset=coefs["ccoef"]  )),
+            cb_minus_coffset_mult_dcoef.eq(cb_minus_coffset * Signal((ycbcr_w, True), reset=coefs["dcoef"]  ))
         ]
 
         # stage 3

Without y_minus_yoffset's width increased I was getting white pixels when Y saturated, instead of the correct colour.
Without wrapping the coefs in Signed signals the signed multiplication was not being inferred correctly.

about hdmi video signal output

Dear Sir:

after some try and error. there is still no video signal output from QMTech Wukong board. here is my project setting.

  1. using MMCM as system clock generator.
  2. using Sipeed 10 inch hdmi monitor for hdmi display.
    product url : https://www.seeedstudio.com/10-1-inch-1200x1920-HDMI-IPS-LCD-Display-p-2863.html
  3. add monitor setting into soc_linux.py of "linux on litex vexriscv" project.
  4. make bitstream with sipeed monitor support enabled.
  5. load bitstream into fpga.
  6. linux boot up and login with root account.
  7. check the monitor display and the result is the same as attachment image file.
  8. only flicking gray zone on display. no readable image appears.
  9. cat some binary data into /dev/fb0, the content of flicking gray zone will change. it seems the simplefb is working. but I'm not sure the result is correct or not.
  10. the timing of the used 10 inch monitor is verified by using hdmi output sample project which come from qmtech. the project url is as the following url.
    https://github.com/ChinaQMTECH/QM_XC7A100T_WUKONG_BOARD/blob/master/Software/Test06_HDMI_OUT.zip

13682235563246

If I got the data clock, h-sync, v-sync of the panel, I'll upload the data.

BR, Sanada

"python3 setup.py install" fails

The installation of the module in the virtualenv fails and generates this warning:
warning: install_lib: 'build/lib' does not exist -- no Python modules to install

Running "python3 setup.py develop" works though.

litevideo on CycloneV

Is there a project for porting litevideo on CycloneV ?
Is it a big job or just a matter of trying it?

PEP8 issues

Here is the list of current pep8 issues in this code

./litevideo/spi.py:42:80: E501 line too long (94 > 79 characters)
./litevideo/spi.py:44:80: E501 line too long (80 > 79 characters)
./litevideo/spi.py:50:21: E128 continuation line under-indented for visual indent
./litevideo/spi.py:64:80: E501 line too long (85 > 79 characters)
./litevideo/spi.py:65:21: E128 continuation line under-indented for visual indent
./litevideo/spi.py:68:21: E128 continuation line under-indented for visual indent
./litevideo/spi.py:101:13: E124 closing bracket does not match visual indentation
./litevideo/spi.py:102:17: E128 continuation line under-indented for visual indent
./litevideo/spi.py:104:17: E124 closing bracket does not match visual indentation
./litevideo/spi.py:116:13: E128 continuation line under-indented for visual indent
./litevideo/spi.py:117:13: E128 continuation line under-indented for visual indent
./litevideo/spi.py:118:13: E128 continuation line under-indented for visual indent
./litevideo/spi.py:120:13: E124 closing bracket does not match visual indentation
./litevideo/spi.py:123:13: E128 continuation line under-indented for visual indent
./litevideo/spi.py:124:13: E128 continuation line under-indented for visual indent
./litevideo/spi.py:128:17: E124 closing bracket does not match visual indentation
./litevideo/spi.py:129:13: E124 closing bracket does not match visual indentation
./litevideo/spi.py:134:80: E501 line too long (89 > 79 characters)
./litevideo/spi.py:137:80: E501 line too long (88 > 79 characters)
./litevideo/spi.py:138:80: E501 line too long (83 > 79 characters)
./litevideo/spi.py:156:80: E501 line too long (84 > 79 characters)
./litevideo/spi.py:174:22: E261 at least two spaces before inline comment
./litevideo/csc/common.py:10:9: E124 closing bracket does not match visual indentation
./litevideo/csc/common.py:11:13: E128 continuation line under-indented for visual indent
./litevideo/csc/common.py:12:9: E124 closing bracket does not match visual indentation
./litevideo/csc/common.py:29:1: E302 expected 2 blank lines, found 1
./litevideo/csc/rgb2ycbcr.py:9:80: E501 line too long (101 > 79 characters)
./litevideo/csc/rgb2ycbcr.py:11:1: E302 expected 2 blank lines, found 1
./litevideo/csc/rgb2ycbcr.py:13:13: E203 whitespace before ':'
./litevideo/csc/rgb2ycbcr.py:14:13: E203 whitespace before ':'
./litevideo/csc/rgb2ycbcr.py:15:13: E203 whitespace before ':'
./litevideo/csc/rgb2ycbcr.py:16:13: E203 whitespace before ':'
./litevideo/csc/rgb2ycbcr.py:17:18: E203 whitespace before ':'
./litevideo/csc/rgb2ycbcr.py:18:18: E203 whitespace before ':'
./litevideo/csc/rgb2ycbcr.py:19:15: E203 whitespace before ':'
./litevideo/csc/rgb2ycbcr.py:20:15: E203 whitespace before ':'
./litevideo/csc/rgb2ycbcr.py:21:15: E203 whitespace before ':'
./litevideo/csc/rgb2ycbcr.py:22:15: E203 whitespace before ':'
./litevideo/csc/rgb2ycbcr.py:43:80: E501 line too long (84 > 79 characters)
./litevideo/csc/rgb2ycbcr.py:72:60: E261 at least two spaces before inline comment
./litevideo/csc/rgb2ycbcr.py:132:80: E501 line too long (82 > 79 characters)
./litevideo/csc/rgb2ycbcr.py:133:80: E501 line too long (93 > 79 characters)
./litevideo/csc/rgb2ycbcr.py:141:80: E501 line too long (82 > 79 characters)
./litevideo/csc/rgb2ycbcr.py:143:80: E501 line too long (86 > 79 characters)
./litevideo/csc/ycbcr2rgb.py:8:1: E302 expected 2 blank lines, found 1
./litevideo/csc/ycbcr2rgb.py:15:13: E203 whitespace before ':'
./litevideo/csc/ycbcr2rgb.py:16:13: E203 whitespace before ':'
./litevideo/csc/ycbcr2rgb.py:17:13: E203 whitespace before ':'
./litevideo/csc/ycbcr2rgb.py:18:13: E203 whitespace before ':'
./litevideo/csc/ycbcr2rgb.py:19:18: E203 whitespace before ':'
./litevideo/csc/ycbcr2rgb.py:20:18: E203 whitespace before ':'
./litevideo/csc/ycbcr2rgb.py:21:15: E203 whitespace before ':'
./litevideo/csc/ycbcr2rgb.py:22:15: E203 whitespace before ':'
./litevideo/csc/ycbcr2rgb.py:23:15: E203 whitespace before ':'
./litevideo/csc/ycbcr2rgb.py:24:15: E203 whitespace before ':'
./litevideo/csc/ycbcr2rgb.py:31:1: E302 expected 2 blank lines, found 1
./litevideo/csc/ycbcr2rgb.py:48:80: E501 line too long (88 > 79 characters)
./litevideo/csc/ycbcr2rgb.py:92:80: E501 line too long (116 > 79 characters)
./litevideo/csc/ycbcr2rgb.py:107:80: E501 line too long (89 > 79 characters)
./litevideo/csc/ycbcr2rgb.py:108:80: E501 line too long (86 > 79 characters)
./litevideo/csc/ycbcr2rgb.py:116:80: E501 line too long (82 > 79 characters)
./litevideo/csc/ycbcr2rgb.py:118:80: E501 line too long (86 > 79 characters)
./litevideo/csc/ycbcr422to444.py:10:1: E302 expected 2 blank lines, found 1
./litevideo/csc/ycbcr422to444.py:33:80: E501 line too long (88 > 79 characters)
./litevideo/csc/ycbcr422to444.py:46:13: E124 closing bracket does not match visual indentation
./litevideo/csc/ycbcr422to444.py:53:1: E302 expected 2 blank lines, found 1
./litevideo/csc/ycbcr422to444.py:55:80: E501 line too long (84 > 79 characters)
./litevideo/csc/ycbcr422to444.py:56:80: E501 line too long (88 > 79 characters)
./litevideo/csc/ycbcr422to444.py:67:80: E501 line too long (82 > 79 characters)
./litevideo/csc/ycbcr422to444.py:69:80: E501 line too long (86 > 79 characters)
./litevideo/csc/ycbcr444to422.py:10:1: E302 expected 2 blank lines, found 1
./litevideo/csc/ycbcr444to422.py:33:80: E501 line too long (88 > 79 characters)
./litevideo/csc/ycbcr444to422.py:55:13: E124 closing bracket does not match visual indentation
./litevideo/csc/ycbcr444to422.py:63:13: E124 closing bracket does not match visual indentation
./litevideo/csc/ycbcr444to422.py:72:80: E501 line too long (84 > 79 characters)
./litevideo/csc/ycbcr444to422.py:73:80: E501 line too long (88 > 79 characters)
./litevideo/csc/ycbcr444to422.py:84:80: E501 line too long (82 > 79 characters)
./litevideo/csc/ycbcr444to422.py:86:80: E501 line too long (86 > 79 characters)
./litevideo/csc/test/common.py:9:1: E302 expected 2 blank lines, found 1
./litevideo/csc/test/common.py:29:5: E303 too many blank lines (2)
./litevideo/csc/test/common.py:37:5: E303 too many blank lines (2)
./litevideo/csc/test/common.py:38:30: E203 whitespace before ','
./litevideo/csc/test/common.py:38:31: E231 missing whitespace after ','
./litevideo/csc/test/common.py:43:5: E303 too many blank lines (2)
./litevideo/csc/test/common.py:50:5: E303 too many blank lines (2)
./litevideo/csc/test/common.py:57:5: E303 too many blank lines (2)
./litevideo/csc/test/common.py:61:5: E303 too many blank lines (2)
./litevideo/csc/test/common.py:71:5: E303 too many blank lines (2)
./litevideo/csc/test/common.py:81:5: E303 too many blank lines (2)
./litevideo/csc/test/common.py:92:5: E303 too many blank lines (2)
./litevideo/csc/test/common.py:103:5: E303 too many blank lines (2)
./litevideo/csc/test/common.py:105:15: E221 multiple spaces before operator
./litevideo/csc/test/common.py:111:80: E501 line too long (82 > 79 characters)
./litevideo/csc/test/common.py:112:80: E501 line too long (82 > 79 characters)
./litevideo/csc/test/common.py:116:5: E303 too many blank lines (2)
./litevideo/csc/test/common.py:128:5: E303 too many blank lines (2)
./litevideo/csc/test/common.py:134:80: E501 line too long (108 > 79 characters)
./litevideo/csc/test/common.py:135:80: E501 line too long (159 > 79 characters)
./litevideo/csc/test/common.py:136:80: E501 line too long (108 > 79 characters)
./litevideo/csc/test/common.py:140:5: E303 too many blank lines (2)
./litevideo/csc/test/common.py:146:47: E222 multiple spaces after operator
./litevideo/csc/test/common.py:147:80: E501 line too long (81 > 79 characters)
./litevideo/csc/test/common.py:148:47: E222 multiple spaces after operator
./litevideo/csc/test/rgb2ycbcr_tb.py:13:80: E501 line too long (86 > 79 characters)
./litevideo/csc/test/rgb2ycbcr_tb.py:15:80: E501 line too long (82 > 79 characters)
./litevideo/csc/test/rgb2ycbcr_tb.py:18:9: E101 indentation contains mixed spaces and tabs
./litevideo/csc/test/rgb2ycbcr_tb.py:18:9: W191 indentation contains tabs
./litevideo/csc/test/rgb2ycbcr_tb.py:19:13: E131 continuation line unaligned for hanging indent
./litevideo/csc/test/rgb2ycbcr_tb.py:20:13: E131 continuation line unaligned for hanging indent
./litevideo/csc/test/rgb2ycbcr_tb.py:21:13: E131 continuation line unaligned for hanging indent
./litevideo/csc/test/rgb2ycbcr_tb.py:23:13: E131 continuation line unaligned for hanging indent
./litevideo/csc/test/rgb2ycbcr_tb.py:23:80: E501 line too long (89 > 79 characters)
./litevideo/csc/test/rgb2ycbcr_tb.py:24:13: E131 continuation line unaligned for hanging indent
./litevideo/csc/test/rgb2ycbcr_tb.py:25:13: E131 continuation line unaligned for hanging indent
./litevideo/csc/test/rgb2ycbcr_tb.py:26:13: E131 continuation line unaligned for hanging indent
./litevideo/csc/test/rgb2ycbcr_tb.py:53:24: E203 whitespace before ':'
./litevideo/csc/test/rgb2ycbcr_tb.py:55:14: E203 whitespace before ':'
./litevideo/csc/test/ycbcr2rgb_tb.py:10:1: E302 expected 2 blank lines, found 1
./litevideo/csc/test/ycbcr2rgb_tb.py:12:80: E501 line too long (86 > 79 characters)
./litevideo/csc/test/ycbcr2rgb_tb.py:14:80: E501 line too long (82 > 79 characters)
./litevideo/csc/test/ycbcr2rgb_tb.py:17:80: E501 line too long (82 > 79 characters)
./litevideo/csc/test/ycbcr2rgb_tb.py:22:80: E501 line too long (87 > 79 characters)
./litevideo/csc/test/ycbcr2rgb_tb.py:53:24: E203 whitespace before ':'
./litevideo/csc/test/ycbcr2rgb_tb.py:55:14: E203 whitespace before ':'
./litevideo/csc/test/ycbcr_resampling_tb.py:14:80: E501 line too long (86 > 79 characters)
./litevideo/csc/test/ycbcr_resampling_tb.py:17:80: E501 line too long (82 > 79 characters)
./litevideo/csc/test/ycbcr_resampling_tb.py:20:80: E501 line too long (86 > 79 characters)
./litevideo/csc/test/ycbcr_resampling_tb.py:21:80: E501 line too long (83 > 79 characters)
./litevideo/csc/test/ycbcr_resampling_tb.py:22:80: E501 line too long (83 > 79 characters)
./litevideo/csc/test/ycbcr_resampling_tb.py:23:80: E501 line too long (82 > 79 characters)
./litevideo/csc/test/ycbcr_resampling_tb.py:27:80: E501 line too long (93 > 79 characters)
./litevideo/csc/test/ycbcr_resampling_tb.py:52:24: E203 whitespace before ':'
./litevideo/csc/test/ycbcr_resampling_tb.py:54:14: E203 whitespace before ':'
./litevideo/input/analysis.py:51:13: E124 closing bracket does not match visual indentation
./litevideo/input/analysis.py:79:13: E124 closing bracket does not match visual indentation
./litevideo/input/analysis.py:87:13: E124 closing bracket does not match visual indentation
./litevideo/input/analysis.py:102:13: E124 closing bracket does not match visual indentation
./litevideo/input/analysis.py:103:17: E128 continuation line under-indented for visual indent
./litevideo/input/analysis.py:104:13: E124 closing bracket does not match visual indentation
./litevideo/input/analysis.py:110:13: E124 closing bracket does not match visual indentation
./litevideo/input/analysis.py:176:80: E501 line too long (80 > 79 characters)
./litevideo/input/analysis.py:183:13: E124 closing bracket does not match visual indentation
./litevideo/input/analysis.py:184:17: E128 continuation line under-indented for visual indent
./litevideo/input/analysis.py:185:80: E501 line too long (92 > 79 characters)
./litevideo/input/analysis.py:202:13: E124 closing bracket does not match visual indentation
./litevideo/input/analysis.py:203:17: E128 continuation line under-indented for visual indent
./litevideo/input/analysis.py:204:13: E124 closing bracket does not match visual indentation
./litevideo/input/analysis.py:217:13: E124 closing bracket does not match visual indentation
./litevideo/input/analysis.py:218:17: E128 continuation line under-indented for visual indent
./litevideo/input/analysis.py:219:13: E124 closing bracket does not match visual indentation
./litevideo/input/analysis.py:239:13: E124 closing bracket does not match visual indentation
./litevideo/input/analysis.py:240:17: E128 continuation line under-indented for visual indent
./litevideo/input/analysis.py:241:13: E124 closing bracket does not match visual indentation
./litevideo/input/chansync.py:86:13: E124 closing bracket does not match visual indentation
./litevideo/input/chansync.py:90:21: E124 closing bracket does not match visual indentation
./litevideo/input/chansync.py:93:17: E124 closing bracket does not match visual indentation
./litevideo/input/chansync.py:95:80: E501 line too long (81 > 79 characters)
./litevideo/input/charsync.py:32:80: E501 line too long (88 > 79 characters)
./litevideo/input/charsync.py:33:19: E128 continuation line under-indented for visual indent
./litevideo/input/charsync.py:34:19: E128 continuation line under-indented for visual indent
./litevideo/input/charsync.py:35:13: E124 closing bracket does not match visual indentation
./litevideo/input/charsync.py:46:17: E124 closing bracket does not match visual indentation
./litevideo/input/charsync.py:49:13: E124 closing bracket does not match visual indentation
./litevideo/input/clocking.py:39:13: E128 continuation line under-indented for visual indent
./litevideo/input/clocking.py:40:9: E124 closing bracket does not match visual indentation
./litevideo/input/clocking.py:41:13: E128 continuation line under-indented for visual indent
./litevideo/input/clocking.py:42:9: E124 closing bracket does not match visual indentation
./litevideo/input/clocking.py:52:80: E501 line too long (93 > 79 characters)
./litevideo/input/clocking.py:54:80: E501 line too long (85 > 79 characters)
./litevideo/input/clocking.py:67:80: E501 line too long (88 > 79 characters)
./litevideo/input/clocking.py:68:80: E501 line too long (105 > 79 characters)
./litevideo/input/clocking.py:79:80: E501 line too long (92 > 79 characters)
./litevideo/input/clocking.py:80:17: E128 continuation line under-indented for visual indent
./litevideo/input/clocking.py:82:80: E501 line too long (87 > 79 characters)
./litevideo/input/common.py:6:20: E262 inline comment should start with '# '
./litevideo/input/common.py:7:20: E262 inline comment should start with '# '
./litevideo/input/common.py:8:20: E262 inline comment should start with '# '
./litevideo/input/common.py:9:20: E262 inline comment should start with '# '
./litevideo/input/datacapture.py:36:80: E501 line too long (93 > 79 characters)
./litevideo/input/datacapture.py:37:80: E501 line too long (90 > 79 characters)
./litevideo/input/datacapture.py:39:80: E501 line too long (81 > 79 characters)
./litevideo/input/datacapture.py:40:80: E501 line too long (93 > 79 characters)
./litevideo/input/datacapture.py:43:80: E501 line too long (107 > 79 characters)
./litevideo/input/datacapture.py:47:80: E501 line too long (93 > 79 characters)
./litevideo/input/datacapture.py:48:80: E501 line too long (87 > 79 characters)
./litevideo/input/datacapture.py:50:80: E501 line too long (80 > 79 characters)
./litevideo/input/datacapture.py:51:80: E501 line too long (93 > 79 characters)
./litevideo/input/datacapture.py:54:80: E501 line too long (104 > 79 characters)
./litevideo/input/datacapture.py:64:80: E501 line too long (94 > 79 characters)
./litevideo/input/datacapture.py:68:80: E501 line too long (89 > 79 characters)
./litevideo/input/datacapture.py:71:80: E501 line too long (94 > 79 characters)
./litevideo/input/datacapture.py:78:80: E501 line too long (94 > 79 characters)
./litevideo/input/datacapture.py:85:80: E501 line too long (94 > 79 characters)
./litevideo/input/datacapture.py:102:13: E124 closing bracket does not match visual indentation
./litevideo/input/datacapture.py:102:80: E501 line too long (83 > 79 characters)
./litevideo/input/datacapture.py:103:17: E128 continuation line under-indented for visual indent
./litevideo/input/datacapture.py:104:17: E128 continuation line under-indented for visual indent
./litevideo/input/datacapture.py:105:13: E124 closing bracket does not match visual indentation
./litevideo/input/datacapture.py:115:13: E124 closing bracket does not match visual indentation
./litevideo/input/datacapture.py:119:17: E124 closing bracket does not match visual indentation
./litevideo/input/datacapture.py:128:13: E124 closing bracket does not match visual indentation
./litevideo/input/datacapture.py:132:17: E124 closing bracket does not match visual indentation
./litevideo/input/datacapture.py:157:13: E124 closing bracket does not match visual indentation
./litevideo/input/datacapture.py:158:17: E128 continuation line under-indented for visual indent
./litevideo/input/datacapture.py:159:13: E124 closing bracket does not match visual indentation
./litevideo/input/datacapture.py:167:13: E124 closing bracket does not match visual indentation
./litevideo/input/datacapture.py:168:17: E128 continuation line under-indented for visual indent
./litevideo/input/datacapture.py:169:13: E124 closing bracket does not match visual indentation
./litevideo/input/datacapture.py:173:80: E501 line too long (81 > 79 characters)
./litevideo/input/datacapture.py:174:80: E501 line too long (81 > 79 characters)
./litevideo/input/datacapture.py:175:80: E501 line too long (80 > 79 characters)
./litevideo/input/datacapture.py:176:80: E501 line too long (80 > 79 characters)
./litevideo/input/decoding.py:18:17: E128 continuation line under-indented for visual indent
./litevideo/input/decoding.py:19:17: E128 continuation line under-indented for visual indent
./litevideo/input/decoding.py:20:13: E124 closing bracket does not match visual indentation
./litevideo/input/decoding.py:25:50: W503 line break before binary operator
./litevideo/input/dma.py:10:1: E302 expected 2 blank lines, found 1
./litevideo/input/dma.py:54:80: E501 line too long (80 > 79 characters)
./litevideo/input/dma.py:55:26: E128 continuation line under-indented for visual indent
./litevideo/input/dma.py:59:80: E501 line too long (81 > 79 characters)
./litevideo/input/dma.py:60:80: E501 line too long (92 > 79 characters)
./litevideo/input/dma.py:62:80: E501 line too long (86 > 79 characters)
./litevideo/input/dma.py:63:80: E501 line too long (83 > 79 characters)
./litevideo/input/dma.py:64:27: E127 continuation line over-indented for visual indent
./litevideo/input/dma.py:77:80: E501 line too long (80 > 79 characters)
./litevideo/input/dma.py:97:13: E124 closing bracket does not match visual indentation
./litevideo/input/dma.py:98:17: E128 continuation line under-indented for visual indent
./litevideo/input/dma.py:99:17: E128 continuation line under-indented for visual indent
./litevideo/input/dma.py:100:13: E124 closing bracket does not match visual indentation
./litevideo/input/dma.py:121:13: E128 continuation line under-indented for visual indent
./litevideo/input/dma.py:122:13: E128 continuation line under-indented for visual indent
./litevideo/input/dma.py:123:33: W503 line break before binary operator
./litevideo/input/dma.py:124:13: E128 continuation line under-indented for visual indent
./litevideo/input/dma.py:128:13: E124 closing bracket does not match visual indentation
./litevideo/input/dma.py:131:13: E128 continuation line under-indented for visual indent
./litevideo/input/dma.py:132:13: E128 continuation line under-indented for visual indent
./litevideo/input/dma.py:138:21: E124 closing bracket does not match visual indentation
./litevideo/input/dma.py:139:17: E124 closing bracket does not match visual indentation
./litevideo/input/dma.py:140:13: E124 closing bracket does not match visual indentation
./litevideo/input/dma.py:143:13: E128 continuation line under-indented for visual indent
./litevideo/input/dma.py:146:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:74:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:102:17: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:106:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:122:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:123:17: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:124:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:136:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:137:17: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:138:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:145:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:146:17: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:147:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:151:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:157:13: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:161:17: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:164:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:167:13: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:170:13: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:171:13: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:174:13: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:175:13: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:178:17: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:181:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:185:13: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:188:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:191:13: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:193:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:196:13: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:197:13: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:199:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:202:13: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:203:13: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:205:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:209:13: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:213:17: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:216:13: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:219:13: E128 continuation line under-indented for visual indent
./litevideo/input/edid.py:223:17: E124 closing bracket does not match visual indentation
./litevideo/input/edid.py:226:13: E124 closing bracket does not match visual indentation
./litevideo/input/wer.py:34:80: E501 line too long (83 > 79 characters)
./litevideo/input/wer.py:36:80: E501 line too long (93 > 79 characters)
./litevideo/input/wer.py:42:80: E501 line too long (92 > 79 characters)
./litevideo/input/wer.py:53:80: E501 line too long (80 > 79 characters)
./litevideo/input/wer.py:63:13: E124 closing bracket does not match visual indentation
./litevideo/input/wer.py:64:17: E128 continuation line under-indented for visual indent
./litevideo/input/wer.py:65:13: E124 closing bracket does not match visual indentation
./litevideo/input/wer.py:75:80: E501 line too long (80 > 79 characters)
./litevideo/output/common.py:15:1: E302 expected 2 blank lines, found 1
./litevideo/output/common.py:20:1: E302 expected 2 blank lines, found 1
./litevideo/output/common.py:24:1: E302 expected 2 blank lines, found 0
./litevideo/output/core.py:44:80: E501 line too long (86 > 79 characters)
./litevideo/output/core.py:45:13: E128 continuation line under-indented for visual indent
./litevideo/output/core.py:79:13: E124 closing bracket does not match visual indentation
./litevideo/output/core.py:103:21: E124 closing bracket does not match visual indentation
./litevideo/output/core.py:106:17: E124 closing bracket does not match visual indentation
./litevideo/output/core.py:112:13: E124 closing bracket does not match visual indentation
./litevideo/output/core.py:117:13: E128 continuation line under-indented for visual indent
./litevideo/output/core.py:118:13: E128 continuation line under-indented for visual indent
./litevideo/output/core.py:119:13: E128 continuation line under-indented for visual indent
./litevideo/output/core.py:121:13: E124 closing bracket does not match visual indentation
./litevideo/output/core.py:124:13: E128 continuation line under-indented for visual indent
./litevideo/output/core.py:127:13: E124 closing bracket does not match visual indentation
./litevideo/output/core.py:130:13: E124 closing bracket does not match visual indentation
./litevideo/output/core.py:135:10: E203 whitespace before ':'
./litevideo/output/core.py:139:10: E203 whitespace before ':'
./litevideo/output/core.py:142:1: E302 expected 2 blank lines, found 1
./litevideo/output/core.py:154:80: E501 line too long (80 > 79 characters)
./litevideo/output/core.py:204:80: E501 line too long (84 > 79 characters)
./litevideo/output/core.py:230:80: E501 line too long (81 > 79 characters)
./litevideo/output/hdmi/encoder.py:68:21: E124 closing bracket does not match visual indentation
./litevideo/output/hdmi/encoder.py:72:17: E124 closing bracket does not match visual indentation
./litevideo/output/hdmi/encoder.py:73:80: E501 line too long (80 > 79 characters)
./litevideo/output/hdmi/encoder.py:78:21: E124 closing bracket does not match visual indentation
./litevideo/output/hdmi/encoder.py:85:13: E124 closing bracket does not match visual indentation
./litevideo/output/hdmi/s6.py:40:80: E501 line too long (115 > 79 characters)
./litevideo/output/hdmi/s6.py:41:80: E501 line too long (108 > 79 characters)
./litevideo/output/hdmi/s6.py:43:80: E501 line too long (96 > 79 characters)
./litevideo/output/hdmi/s6.py:44:80: E501 line too long (108 > 79 characters)
./litevideo/output/hdmi/s6.py:45:80: E501 line too long (83 > 79 characters)
./litevideo/output/hdmi/s6.py:56:17: E124 closing bracket does not match visual indentation
./litevideo/output/hdmi/s6.py:57:21: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s6.py:58:21: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s6.py:59:17: E124 closing bracket does not match visual indentation
./litevideo/output/hdmi/s6.py:71:21: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s6.py:72:17: E124 closing bracket does not match visual indentation
./litevideo/output/hdmi/s6.py:73:21: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s6.py:74:17: E124 closing bracket does not match visual indentation
./litevideo/output/hdmi/s6.py:77:80: E501 line too long (97 > 79 characters)
./litevideo/output/hdmi/s6.py:90:17: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s6.py:91:13: E124 closing bracket does not match visual indentation
./litevideo/output/hdmi/s6.py:92:17: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s6.py:93:13: E124 closing bracket does not match visual indentation
./litevideo/output/hdmi/s6.py:104:80: E501 line too long (84 > 79 characters)
./litevideo/output/hdmi/s6.py:117:80: E501 line too long (92 > 79 characters)
./litevideo/output/hdmi/s6.py:118:80: E501 line too long (108 > 79 characters)
./litevideo/output/hdmi/s6.py:120:80: E501 line too long (94 > 79 characters)
./litevideo/output/hdmi/s6.py:131:29: E222 multiple spaces after operator
./litevideo/output/hdmi/s6.py:131:80: E501 line too long (125 > 79 characters)
./litevideo/output/hdmi/s6.py:136:80: E501 line too long (88 > 79 characters)
./litevideo/output/hdmi/s6.py:138:80: E501 line too long (125 > 79 characters)
./litevideo/output/hdmi/s6.py:139:80: E501 line too long (87 > 79 characters)
./litevideo/output/hdmi/s6.py:145:80: E501 line too long (84 > 79 characters)
./litevideo/output/hdmi/s6.py:158:80: E501 line too long (81 > 79 characters)
./litevideo/output/hdmi/s6.py:164:80: E501 line too long (104 > 79 characters)
./litevideo/output/hdmi/s6.py:174:80: E501 line too long (80 > 79 characters)
./litevideo/output/hdmi/s6.py:179:80: E501 line too long (91 > 79 characters)
./litevideo/output/hdmi/s6.py:187:80: E501 line too long (80 > 79 characters)
./litevideo/output/hdmi/s6.py:191:80: E501 line too long (91 > 79 characters)
./litevideo/output/hdmi/s6.py:192:80: E501 line too long (80 > 79 characters)
./litevideo/output/hdmi/s6.py:213:80: E501 line too long (99 > 79 characters)
./litevideo/output/hdmi/s6.py:214:80: E501 line too long (99 > 79 characters)
./litevideo/output/hdmi/s6.py:215:80: E501 line too long (99 > 79 characters)
./litevideo/output/hdmi/s7.py:10:80: E501 line too long (85 > 79 characters)
./litevideo/output/hdmi/s7.py:26:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:27:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:28:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:29:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:30:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:31:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:32:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:33:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:34:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:35:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:36:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:38:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:39:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:64:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:65:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:66:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:67:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:68:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:69:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:70:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:71:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:72:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:73:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:74:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:76:13: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:104:17: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:105:17: E128 continuation line under-indented for visual indent
./litevideo/output/hdmi/s7.py:106:9: E124 closing bracket does not match visual indentation
./litevideo/output/hdmi/s7.py:120:80: E501 line too long (84 > 79 characters)
./litevideo/output/hdmi/s7.py:121:80: E501 line too long (84 > 79 characters)
./litevideo/output/hdmi/s7.py:122:80: E501 line too long (84 > 79 characters)
./litevideo/output/hdmi/s7.py:133:10: W292 no newline at end of file
./litevideo/output/test/core_tb.py:40:55: E228 missing whitespace around modulo operator
./litevideo/output/test/core_tb.py:75:14: E203 whitespace before ':'

KeyError: 'Unresolved clock domain: "pix5x_o"'

When trying to build the HDMI2USB-litex-video video targets on the Nexys Video we get the following error;

 CC       boot-helper-lm32.o
 LD       firmware.elf
chmod -x firmware.elf
 OBJCOPY  firmware.bin
chmod -x firmware.bin
python -m litex.soc.tools.mkmscimg -f firmware.bin -o firmware.fbi
make[1]: Leaving directory `/home/travis/build/timvideos/HDMI2USB-litex-firmware/build/nexys_video_video_lm32/software/firmware'
ERROR:root:Available clock domains:
- clk100
- clk200
- data0_cap_read
- data0_cap_write
- data1_cap_read
- data1_cap_write
- data2_cap_read
- data2_cap_write
- eth_rx
- eth_tx
- eth_tx90
- fmeter
- hdmi_in0_pix
- hdmi_in0_pix5x
- hdmi_out0_pix
- hdmi_out0_pix5x
- pix1p25x
- pix5x_o
- pix_o
- sys
- sys4x
- sys4x_dqs
Traceback (most recent call last):
  File "/home/travis/build/timvideos/HDMI2USB-litex-firmware/third_party/migen/migen/fhdl/verilog.py", line 327, in convert
    f.clock_domains[cd_name]
  File "/home/travis/build/timvideos/HDMI2USB-litex-firmware/third_party/migen/migen/fhdl/structure.py", line 707, in __getitem__
    raise KeyError(key)
KeyError: 'pix5x_o'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "./make.py", line 143, in <module>
    main()
  File "./make.py", line 127, in main
    vns = builder.build(**dict(args.build_option))
  File "/home/travis/build/timvideos/HDMI2USB-litex-firmware/third_party/litex/litex/soc/integration/builder.py", line 168, in build
    toolchain_path=toolchain_path, **kwargs)
  File "/home/travis/build/timvideos/HDMI2USB-litex-firmware/third_party/litex/litex/soc/integration/soc_core.py", line 300, in build
    return self.platform.build(self, *args, **kwargs)
  File "/home/travis/build/timvideos/HDMI2USB-litex-firmware/third_party/litex/litex/build/xilinx/platform.py", line 39, in build
    return self.toolchain.build(self, *args, **kwargs)
  File "/home/travis/build/timvideos/HDMI2USB-litex-firmware/third_party/litex/litex/build/xilinx/vivado.py", line 212, in build
    v_output = platform.get_verilog(fragment, name=build_name, **kwargs)
  File "/home/travis/build/timvideos/HDMI2USB-litex-firmware/third_party/litex/litex/build/xilinx/platform.py", line 33, in get_verilog
    special_overrides=so, attr_translate=self.toolchain.attr_translate, **kwargs)
  File "/home/travis/build/timvideos/HDMI2USB-litex-firmware/third_party/litex/litex/build/generic_platform.py", line 367, in get_verilog
    create_clock_domains=False, **kwargs)
  File "/home/travis/build/timvideos/HDMI2USB-litex-firmware/third_party/migen/migen/fhdl/verilog.py", line 338, in convert
    raise KeyError("Unresolved clock domain: \""+cd_name+"\"")
KeyError: 'Unresolved clock domain: "pix5x_o"'
---------------------------------------------

See https://travis-ci.org/timvideos/HDMI2USB-litex-firmware/jobs/352035545

I'm guessing this has something to do with the split_mmcm stuff?

clock_cls?

it seems that the following line limits the use of the litevideo for only XC6 XC7 FPGA's?

self.submodules.clocking = clocking_cls[family](pads, external_clocking)

Failing in dma.py with "ValueError: CSRField "ev_source" name is already used in CSR register" when using multiple slots

This seems to be caused by SlotArray not assigning unique names to the slots.
Changing:

        slots = [_Slot(addr_bits, alignment_bits) for i in range(nslots)]
        for n, slot in enumerate(slots):
            setattr(self.submodules, "slot"+str(n), slot)
            setattr(self.ev, "slot"+str(n), slot.ev_source)
        self.ev.finalize()

to:

        slots = [_Slot(addr_bits, alignment_bits) for i in range(nslots)]
        for n, slot in enumerate(slots):
            setattr(slot.ev_source, "name", "slot"+str(n)) # To get unique name for each slot ev_source
            setattr(self.submodules, "slot"+str(n), slot)
            setattr(self.ev, "slot"+str(n), slot.ev_source)
        self.ev.finalize()

Seems to fix the issue.

RGB data nonzero on sync (analog output)

During horizontal/vertical blanking periods, the color signals should be at ground in order for the VGA monitor to know the baseline value.
Currently, during the blanking period, the video generator leaves prepared the next data (color) from next line, so if leftmost pixel is not zero, color bands apear while the VGA monitor adapts to the value, and thus if the screen has solid colors, they tend to black after some lines (the time constant is about 1ms):

image

The following trace shows the horizontal sync period (positive) and how the color data doesn't go to ground:

image

The correction is simply to make zero all color outputs during blanking. That was tested making the leftmost pixel always zero where solid colors appear as expected.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.