hardware.config

Copyright (C) Microsoft Corporation. All rights reserved.

Device configuration for the “mock” device. This is a dummy device that is used in simulation only. It does not correspond to any real hardware.


const auto version = 1 §source

Version of device configuration schema

const string vendor = "Microsoft" §source

Name of the vendor that manufactures the target device, for example ‘Intel’ or ‘Xilinx’

const string device_family = "mock" §source

Device family that is passed to some vendor modules in their simulation libraries

const string hal_device_family = "mock" §source

Name of the device family that is significant to the Vendor RTL (or simulation libraries). This value is passed into HAL modules as a parameter, and in some cases passed down into the Vendor modules or used to enable or disable some conditional behavior.

const string device_name = "mock" §source

Unambiguous name of the target device

const auto integer_mul_src_width = 27 §source

Width of source operands for an unsigned integer multiplication using a device DSP

const string unsigned_integer_mul_name = "umul27" §source

Name of the intrinsic operation for 1 unsigned integer multiplication using a device DSP

const string signed_integer_mul_name = "imul27" §source

Name of the intrinsic operation for 1 signed integer multiplication using a device DSP

const auto min_fifo_depth = 32 §source

Minimum depth for a single clock fifo

const auto min_dual_clock_fifo_depth = 32 §source

Minimum depth for a dual clock fifo

const auto min_almost_full_depth = 4 §source

Minimum almost_full value for a fifo. This is the minimum value needed to overcome fifo read->almost_full latency

const auto almost_empty_depth = 0 §source

Minimum value for the almost empty threshold for a single-clock FIFO

const auto fifo_width_alignment = 8 §source

Minimum width of LUTram based FIFO structures below which there are no area savings. Used in calculations for the local data propagation optimization

const auto fifo_depth_alignment = 32 §source

Minimum depth of LUTram based FIFO structures below which there are no area savings. Used in calculations for the local data propagation optimization

const auto fifo_fixed_cost = 128 §source

Fixed cost of a FIFO used in calculations for the local data propagation optimization Used in calculations for the local data propagation optimization

const auto fifo_bits_per_register = 16 §source

The number of bits in an implicit fifo that has the same area cost as 1 pipeline register. Used in calculations for the local data propagation optimization

const bool use_internal_buffer_fifo_optimization = false §source

true if it makes sense to use KanagawaInternalBufferFifo for basic blockswith start conditions as an Fmax optimization

const bool use_thread_rate_in_fifo_sizing = true §source

true if basic block thread rates should be used when computing fifo depths. When set to false, a thread rate of 1 is assumed for sizing. This feature is used to work around an EDA tool bug for certain Intel devices.

const string verilog_dont_merge_pragma_name = "dont_touch" §source

The Verilog pragma used to tell the synthesis tool not to merge a register with others

const auto small_lut_size = 4 §source

//| Multiple LUTs of this size can fit into 1 resource (ALM, CLB)

const bool lut_based_shift_register_available = false §source

true if the platform supports a RAM-based shift register. Used in calculations for the local data propagation optimization

const bool registers_require_power_on_initial_value = true §source

true if control signals should have power-on value specified

const bool block_ram_supports_hardened_bypass = false §source

If the block RAMs in the device support pipeline bypass (aka memory forwarding) for at least 2 stages

const bool block_ram_supports_ecc = true §source

true if the device supports ECC for block RAMs

const bool block_ram_supports_true_dual_port = true §source

true if the device supports block RAMs in a true dual-port configuration (i.e. two independent read/write ports).

const bool block_ram_supports_quad_port = true §source

true if the device supports block RAMs in a simple quad-port configuration

const auto global_data_propagation_ram_alignment = 40 §source

For data propagation memories, the minimum width of 1 memory

const MemoryInitFileType memory_init_file_type = MemoryInitFileType::Mem §source

The format to use for memory initialization files

const MemoryConfiguration[2] memory_configurations = {{.type_id = MemoryType::LUT
                                                      ,.cost = 10.0
                                                      ,.width = 20
                                                      ,.depth = 32}
                                                     ,{.type_id = MemoryType::Block
                                                      ,.cost = 320.0
                                                      ,.width = 40
                                                      ,.depth = 512}} §source

Valid memory configurations | Valid memory configurations

const MemoryResource[2] memory_resources = {{.type_id = MemoryType::LUT
                                            ,.num_available = (20774 / 5)}
                                           ,{.type_id = MemoryType::Block
                                            ,.num_available = 2713}} §source

Specifies the number of each type of memory resource that is available on the device.

const float32 array_mux_cost_factor = 0.5 §source

This value is multiplied by the number of muxes necessary to implement an array when estimating. the relative cost of synthesizing a memory structure as an array (logic) versus using a RAM primitive.

const float32 array_register_cost_factor = 0.0 §source

This value is multiplied by the number of registers necessary to implement an array when estimating. the relative cost of synthesizing a memory structure as an array (logic) versus using a RAM primitive.

const float32 array_write_port_cost_factor = 0.25 §source

This value is multiplied by the number of write ports necessary to implement an array when estimating. the relative cost of synthesizing a memory structure as an array (logic) versus using a RAM primitive.