| /* |
| * Copyright (C) 2017-2020 The Project X-Ray Authors. |
| * |
| * Use of this source code is governed by a ISC-style |
| * license that can be found in the LICENSE file or at |
| * https://opensource.org/licenses/ISC |
| * |
| * SPDX-License-Identifier: ISC |
| */ |
| #include <fstream> |
| #include <iomanip> |
| #include <iostream> |
| |
| #include <prjxray/xilinx/xc7series/frame_address.h> |
| |
| namespace xc7series = prjxray::xilinx::xc7series; |
| |
| void frame_address_decode(std::istream* input_stream) { |
| for (uint32_t frame_address_raw; |
| (*input_stream) >> std::setbase(0) >> frame_address_raw;) { |
| xc7series::FrameAddress frame_address(frame_address_raw); |
| std::cout << "[" << std::hex << std::showbase << std::setw(10) |
| << frame_address_raw << "] " |
| << (frame_address.is_bottom_half_rows() ? "BOTTOM" |
| : "TOP") |
| << " Row=" << std::setw(2) << std::dec |
| << static_cast<unsigned int>(frame_address.row()) |
| << " Column=" << std::setw(2) << std::dec |
| << frame_address.column() << " Minor=" << std::setw(2) |
| << std::dec |
| << static_cast<unsigned int>(frame_address.minor()) |
| << " Type=" << frame_address.block_type() |
| << std::endl; |
| } |
| } |
| |
| int main(int argc, char* argv[]) { |
| if (argc > 1) { |
| std::ifstream file_stream(argv[1]); |
| if (file_stream) { |
| frame_address_decode(&file_stream); |
| return 0; |
| } |
| } |
| |
| frame_address_decode(&std::cin); |
| |
| return 0; |
| } |