массив параметров systemverilog в модуле, как установить отдельный элемент массива параметров при создании экземпляра модуля

По крайней мере, по моему опыту, я нашел два ответа здесь проницательными, но не работал сам по себе: из Thierry Templier (с первым комментарием), а из cal .

Я собрал части обоих, и придумал эту версию, которая теперь работает с Angular 4.1.1 в реактивной форме:

import { Directive, Renderer, ElementRef, forwardRef } from '@angular/core';
import { NG_VALUE_ACCESSOR, DefaultValueAccessor } from '@angular/forms';

const LOWERCASE_INPUT_CONTROL_VALUE_ACCESSOR = {
  provide: NG_VALUE_ACCESSOR,
  useExisting: forwardRef(() => LowerCaseInputDirective),
  multi: true,
};

@Directive({
  selector: 'input[lowercase]',
  host: {
    // When the user updates the input
    '(input)': 'onInput($event.target.value)',
    '(blur)': 'onTouched()',
  },
  providers: [
    LOWERCASE_INPUT_CONTROL_VALUE_ACCESSOR,
  ],
})
export class LowerCaseInputDirective extends DefaultValueAccessor {

  constructor(renderer: Renderer, elementRef: ElementRef) {
    super(renderer, elementRef, false);
  }

  writeValue(value: any): void {
    const transformed = this.transformValue(value);

    super.writeValue(transformed);
  }

  onInput(value: any): void {
    const transformed = this.transformValue(value);

    super.writeValue(transformed);
    this.onChange(transformed);
  }

  private transformValue(value: any): any {
    const result = value && typeof value === 'string'
      ? value.toLowerCase()
      : value;

    return result;
  }
}

Это для нижнего регистра, но все верно и для верхнего строчка, просто переименуйте директиву, замените внутри selector и transformValue.

Edit: простой пример использования из HTML-кода с использованием такой директивы:


0
задан Unn 15 January 2019 в 18:29
поделиться

1 ответ

SystemVerilog не допускает частичный массив параметров (т. Е. Просто присваивает один индекс массиву параметров). Вы можете назначить только весь массив сразу:

MEM_MODEL_WRAPPER #(.MEM_AT_CS('{NONE, NONE, SSRAM_X16, NONE, NONE, NONE, NONE, NONE})) mem_dut(mem_intf , mc_clk);
0
ответ дан Unn 15 January 2019 в 18:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: