{"id":15906229,"url":"https://github.com/mshr-h/motion_estimation_processor_breakingoff","last_synced_at":"2026-02-14T21:31:36.060Z","repository":{"id":108874006,"uuid":"81549247","full_name":"mshr-h/motion_estimation_processor_breakingoff","owner":"mshr-h","description":"Breakingoff based Motion Estimation Processor written in Verilog-HDL","archived":false,"fork":false,"pushed_at":"2017-02-19T14:09:12.000Z","size":1807,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-10T12:04:38.343Z","etag":null,"topics":["motion-estimation","verilog-hdl","video-codec","video-processing"],"latest_commit_sha":null,"homepage":null,"language":"Verilog","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mshr-h.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-02-10T09:28:45.000Z","updated_at":"2020-11-20T15:20:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"c377ef72-431f-4943-83c0-fe2b3e96dfe1","html_url":"https://github.com/mshr-h/motion_estimation_processor_breakingoff","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mshr-h/motion_estimation_processor_breakingoff","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mshr-h%2Fmotion_estimation_processor_breakingoff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mshr-h%2Fmotion_estimation_processor_breakingoff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mshr-h%2Fmotion_estimation_processor_breakingoff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mshr-h%2Fmotion_estimation_processor_breakingoff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mshr-h","download_url":"https://codeload.github.com/mshr-h/motion_estimation_processor_breakingoff/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mshr-h%2Fmotion_estimation_processor_breakingoff/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29456224,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T21:29:27.764Z","status":"ssl_error","status_checked_at":"2026-02-14T21:28:11.111Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["motion-estimation","verilog-hdl","video-codec","video-processing"],"created_at":"2024-10-06T13:21:54.874Z","updated_at":"2026-02-14T21:31:36.039Z","avatar_url":"https://github.com/mshr-h.png","language":"Verilog","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Motion Estimation Processor\n\nHardware implementation of [Motion Estimation](https://en.wikipedia.org/wiki/Motion_estimation) algorithm written in Verilog-HDL.\nIt's currently under development.\n\n## About Motion Estimation\n\nMotion Estimation is a process of finding motion vectors from a reference frame to the current frame.\nWe apply the following process for each of the macro blocks in the current frame.\nWe first find a block which has the lowest matching error in the search window of the reference frame.\nWe use sum of absolute errors between corresponding pixels.\nThen, the displacement between the current macro block to the best matching macro block is motion vector.\n\n![Figure of Motion Estimation](docs/motion_estimation.png)\n\n## Description\n\n- Breakingoff based motion estimation\n- Only integer pixel motion estimation\n- Template Block: 16x16 pixels\n- Search Range  : ±24 pixels\n- Supported devices\n  - MU500-RX FPGA board \\\u0026 MU500-7SEG 7seg LED board\n  - DE1-SoC\n\n## Required Tools\n\n- [Icarus Verilog(\u003e=10.0)](http://iverilog.wikia.com/wiki/Installation_Guide)\n- [Altera Quartus Prime(\u003e=15.0)](https://www.altera.co.jp/downloads/download-center.html)\n- Excel 2013\n- [Python 2.7](https://www.python.org/downloads/)\n\n## How to run Simulation\n\n1. Open `memory/memory.xlsx`\n1. Click 'Create Memory' button to create `memory/memory_sw.txt` for search range memory and `memory_tb.txt` for template block memory\n1. Run `make_tb.sh`\n1. You will find the wave file `testbench/***.vcd`\n\n## How to synthesis Motion Estimation Processor\n\n1. Open `memory/memory.xlsx`\n1. Click 'Create Memory' button to create `memory/memory_sw.txt` for search range memory and `memory_tb.txt` for template block memory\n1. Run `make_mif.sh` to generate mif files\n1. Open `fpga/fpga_top.qpf` in Altera Quartus Prime\n1. Compile it\n\n## Source Code Organization\n\nThe Motion Estimation Processor source code is organized as follows:\n\n```text\ndocs/       documentation\nfpga/       fpga related files\nmemory/     memory dependencies\nrtl/        RTL files for Motion Estimation Processor\ntestbench/  test suites\ntools/      tool for creating mif file\n```\n\n## Timing chart\n\n![](docs/timing-chart.png)\n\n## Block diagram\n\n![](docs/block_diagram.png)\n\n## Parameters\n\n### TB\\_LENGTH\n\nSize of the template block.\nThe default value is `16` pixel.\n\n### SW\\_LENGTH\n\nSize of the search window.\nThe default value is `64` pixel.\n\n### PE\\_OUT\\_WIDTH\n\nBit width of the Processor Element's output.\nThe default value is `8` bit.\n\n### MEMORY\\_SW\\_CONTENT\n\nPath to the search window memory file which contains pixel values.\nIf you run on iverilog, you should specify text file. If you compile it with Quartus, you should specify mif file.\nThe default value is `\"../memory/memory_sw.txt\"`.\n\n### MEMORY\\_\\TB\\_CONTENT\n\nPath to the template block memory file which contains pixel values.\nIf you run on iverilog, you should specify text file. If you compile it with Quartus, you should specify mif file.\nThe default value is `\"../memory/memory_tb.txt\"`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmshr-h%2Fmotion_estimation_processor_breakingoff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmshr-h%2Fmotion_estimation_processor_breakingoff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmshr-h%2Fmotion_estimation_processor_breakingoff/lists"}