Giter Site home page Giter Site logo

litevideo's Introduction

                          __   _ __     _   ___    __
                         / /  (_) /____| | / (_)__/ /__ ___
                        / /__/ / __/ -_) |/ / / _  / -_) _ \
                       /____/_/\__/\__/|___/_/\_,_/\__/\___/

                         Copyright 2016-2020 / EnjoyDigital
                         Copyright 2016-2020 / TimVideos.us

                     Small footprint and configurable video cores
                                powered by LiteX

License

[> Intro

LiteVideo provides small footprint and configurable video cores.

LiteVideo is part of LiteX libraries whose aims are to lower entry level of complex FPGA cores by providing simple, elegant and efficient implementations of components used in today's SoC such as Ethernet, SATA, PCIe, SDRAM Controller...

Using Migen to describe the HDL allows the core to be highly and easily configurable.

LiteVideo can be used as LiteX library or can be integrated with your standard design flow by generating the verilog rtl that you will use as a standard core.

[> Features

PHY:

  • HDMI input (Spartan6, 7-Series)
  • HDMI output (Spartan6, 7-Series)

Core:

  • DMA (input/output)
  • Triple buffering (output)
  • Color space conversion (RGB <--> YCbCr)
  • Chroma resampling
  • Floating point arithmetic (WIP)

[> FPGA Proven

LiteVideo is already used in commercial and open-source designs:

[> Possible improvements

  • add standardized interfaces (AXI, Avalon-ST)
  • add Display Port support
  • add more documentation
  • ... See below Support and consulting :)

If you want to support these features, please contact us at florent [AT] enjoy-digital.fr.

[> Getting started

  1. Install Python 3.6+ and FPGA vendor's development tools.
  2. Install Migen/LiteX and the LiteX's cores:
$ wget https://raw.githubusercontent.com/enjoy-digital/litex/master/litex_setup.py
$ chmod +x litex_setup.py
$ ./litex_setup.py init install --user (--user to install to user directory)

Later, if you need to update all repositories:

$ ./litex_setup.py update
  1. TODO: add/describe examples

[> Tests

Unit tests are available in ./test/. To run all the unit tests:

$ ./setup.py test

Tests can also be run individually:

$ python3 -m unittest test.test_name

[> License

LiteVideo is released under the very permissive two-clause BSD license. Under the terms of this license, you are authorized to use LiteVideo for closed-source proprietary designs. Even though we do not require you to do so, those things are awesome, so please do them if possible:

  • tell us that you are using LiteVideo
  • cite LiteVideo in publications related to research it has helped
  • send us feedback and suggestions for improvements
  • send us bug reports when something goes wrong
  • send us the modifications and improvements you have done to LiteVideo.

[> Support and consulting

We love open-source hardware and like sharing our designs with others.

LiteVideo is developed and maintained by EnjoyDigital.

If you would like to know more about LiteVideo or if you are already a happy user and would like to extend it for your needs, EnjoyDigital can provide standard commercial support as well as consulting services.

So feel free to contact us, we'd love to work with you! (and eventually shorten the list of the possible improvements :)

[> Contact

E-mail: florent [AT] enjoy-digital.fr

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

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") ),

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.

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

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)

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 ':'

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.

"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.

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?

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.

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.

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

litevideo on CycloneV

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

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.